練習1
1 assume cs:(1)源**經彙編鏈結後輸出結果為code
2code segment
3mov ah,2
4mov dl,3
5add
dl,30h
6int
21h7
8mov ah,2
9mov dl,6
10add
dl,30h
11int
21h12
13mov
ah,4ch
14int
21h15
code ends
16 end
(2)將line 4 改為 mov dl,5; 將line 9 改為 mov dl,8
再進行彙編鏈結後輸出為
(3)用debug進行除錯
可見:cx的值為0016h,ds的值為075ah, cs的值為076ah, 可得出ds和cs間滿足(cs) = (ds) + 10h
頭兩個位元組確實為cd
最後執行p命令,程式終止
練習2
1 assume cs:(1)彙編連線後輸出結果為code
2code segment
3mov
ax, 0b800h
4mov
ds,ax56
mov bx,0
7mov
[bx],0433h89
add bx,2
10mov
[bx],0436h
1112
movax,4c00h
13int
21h14
code ends
15 end
(2)將line 7 中的0433h改為0432h; 將line 10 中的0436h改為0439h
重新彙編連線後輸出後可得
(3)將 line 7中的0433h改為0333h;將line 10 中的0436h改為0336h
重新彙編連線後輸出可得
再來看此次實驗,同樣的可以發現同樣是在b8000h相關記憶體單元進行操作,進而更改了輸出到螢幕數字的內容及顏色,
並且同樣的,每個輸出也都是靠四個位元組來控制,高位的兩個位元組控制內容,低位的兩個位元組控制顏色;
由此可以猜測,記憶體單元b8000h能夠控制螢幕的輸出
2.再將實驗2與實驗1作比較,可發現,同樣是輸出到螢幕,輸出的位置卻不同,**的實現也有較大差異:
實驗1是通過將數值送入dl暫存器中,如下:
33,5,6行的**內容應該是實現輸出的固定語句,暫不考慮mov ah,2
4mov dl,3
5add
dl,30h 6
int 21h
而實驗2則是直接賦值給指定(b800h)記憶體段的位址,並無額外的語句;
另外,個人感覺,實驗1的輸出像是**的運算結果,而實驗2則像是改變了計算機內某處的數值,從而改變的螢幕上的顯示內容
that ' s all !
實驗3 程式設計 編譯 鏈結 跟蹤
本章的核心知識點在4.9節,王爽老師講的特別清楚明白,多讀幾遍,跟著多做幾遍,增加對底層的感覺 本實驗的目的是明白4.9節所講的東西,具體點如下 1,command,debug,t1.exe之間是什麼關係?command呼叫debug,debug呼叫t1 t1結束時返回到debug,debug結束時...
實驗3 程式設計 編譯 連線 跟蹤
練習1 1.編寫彙編源程式t1.asm 2.對源程式t1.asm進行彙編 連線 執行 編譯 連線執行我們得到了程式輸出結果為36 現將line4和line9中暫存器dl分別修改為5和7,重新彙編 連線 執行 得到執行結果為57 3.用debug對生成的可執行檔案t1.exe進行除錯 1 用r命令檢視...
預編譯,編譯,彙編,鏈結
2.編譯的工作內容 3.彙編的工作內容 4.鏈結器的工作內容 參考 include int main 使用gcc編譯器 gcc hello.c a.out a.out 含義是 assembler output 即 彙編輸出 上述過程可以分解為四個步驟 1.預處理 prepressing gcc e ...