組合語言實驗3 多個段的彙編源程式編寫與除錯
阿新 • • 發佈:2020-11-21
四、實驗結論
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, 017 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)代表前景顏色為黃色。與實際結果相符。