1. 程式人生 > 實用技巧 >組合語言實驗3 多個段的彙編源程式編寫與除錯

組合語言實驗3 多個段的彙編源程式編寫與除錯

四、實驗結論

1.實驗任務1

附上原始碼檔案task1.asm

 1 assume cs:code, ds:data
 2 data segment
 3         db 'Nuist'
 4         db 5 dup(2)
 5 data ends
 6 
 7 code segment
 8 start:
 9         mov ax, data
10         mov ds, ax
11 
12         mov ax, 0b800H
13         mov es, ax
14 
15         mov cx, 5
16         mov si, 0
17 mov di, 0f00h 18 s: mov al, [si] 19 and al, 0dfh 20 mov es:[di], al 21 mov al, [5+si] 22 mov es:[di+1], al 23 inc si 24 add di, 2 25 loop s 26 27 mov ah, 4ch 28 int 21h 29 code ends 30 end start

附上執行結果截圖

可以看到在視窗左下角出現了綠色的字串“NUIST”。

附上在debug裡除錯到程式返回前的截圖

首先反彙編,檢視指令地址

可以看出程式退出前的指令地址為27。使用g命令執行至程式退出前。

修改line4裡5個位元組單元的值,重新彙編、連結、執行,觀察結果。

db 5 dup(2)
--> 改成:
db 2,3,4,5,6

執行結果為

可以看出字元顏色改變。

分析原始碼中data段line4的位元組資料的用途

上一次實驗的實驗任務3中,我已經查閱了相關資料並得到了結論。這裡再次對結論進行簡要的陳述。

Line4中的5個位元組資料為Line3中5個字元的顯示屬性(videoattribute),用於控制對應的字元的顯示效果。顯示屬性的8個位元位的含義如下圖所示。

所以2(10B)代表前景顏色為綠色;3(11B)代表前景顏色為藍綠色;4(100B)代表前景顏色為紅色;5(101B)代表前景顏色為紫色;6(110B)代表前景顏色為黃色。與實際結果相符。