
文章插圖
大家好,小跳來為大家解答以上的問題 。include,inc這個很多人還不知道,現在讓我們一起來看看吧!
1、DATA SEGMENT 數據段開始 DA1 DB 2,-3,-4,-5,34,-4,0,3,4,24 第一個變量da1 為字節類型dbCOUNT EQU $-DA1count是一個常量因為用了equ 其值為$-da1,后面會解釋NUM DB ?num是變量名類型是db也就是字節 其內容未知所以用了問號DATA ENDS 代表數據段結束以上是數據段定義代碼段開始COSEG SEGMENTASSUME CS:COSEG,DS:DATA 將各個段的首址放入對應的段寄存器 ST: MOV AX,DATAst代表一個標號,也就是這一段程序的開始意思為start 這個標號可以隨意在匯編語言中如果出現冒號 。
2、則冒號前的字符串就是程序的標號mov ax,data 意思是將數據段的首地址放入ax中MOV DS,AX mov ds,ax 就是將ax的內容放入數據段寄存器ds中由于段寄存只能進行16位的讀寫 。
3、因此需要用ax來倒一下MOV SI,OFFSET DA1將變量da1的偏移地址放入寄存器si中MOV CX,COUNT-1count=$-da1 其中$為 以da1為首址的數據段結束之后的下一個地址而da1是這個數據段的首地址也就是2的地址,count-1就計算了da1這段數據的字節數 , 由于每個數據都是字節類型 。
4、它實際代表的是以從2開始的數據個數XOR BL,BL xor代表異或運算,bl內的值和bl自身做異或一定是等于一的EXCHG: MOV AL,[SI] exchg是一個標號,這一句是將si中的內容所指向的單元的數據放入al 。
5、也就是將2放入al中XOR AL,[SI+1] si中的內容所指向的單元的下一個單元中的數據與al做異或 實際就是相鄰兩個數作異或了在第一次循環時是2與-3異或00000010和11111101結果是0xff,放入alTEST AL,80H test的功能是將兩個數相與,但不進行賦值操作 。
6、這里是將al中的數與0x80相與,結果不為零JE NEXTje代表為零跳轉 , 上一步操作不為零 。
7、因此不跳到next而去執行inc blINC BLinc代表自增,將bl的內容自增,bl內容從0增到1NEXT: INC SI si的內容自增 。
8、在下一次循環中[si]的內容將會是-3而不是2,因為si的內容增了1,相當于指針的自增操作 。
9、指向下一個單元LOOP EXCHG loop的意思是如果cx中的內容不為零則跳轉到標號處,標號是exchg則跳入exchgMOV NUM,BL 當cx變為零的時候 , 也就是當遍歷了da1為首址的數據段后 終止循環 。
10、將bl的值送入num中,num 是前面數據段定義的一個變量例行公事,終止這段匯編指令 。
11、通過21h號中斷實現MOV AX,4C00H INT 21HCOSEG ENDS 代碼段結束 END ST st標號結束 。
【inc include】本文到此分享完畢 , 希望對大家有所幫助 。
- 建行atm機可以存多少錢
- 狄仁杰是如何死的 狄仁杰怎么死
- 計算機專業包括哪些專業
- 盈余公積解釋 盈余公積的用途
- 科娜藍保濕修復面霜好用嗎知乎
- 移動卡套餐介紹 移動卡套餐可以降嗎
- 法無情人有情的名言
- 屈氏韌帶 屈氏韌帶名詞解釋
- 波士頓龍蝦清蒸怎么做 波士頓龍蝦清蒸做法
- 犬夜叉神樂經典語錄
