彙編實驗3 程式設計 編譯 鏈結 跟蹤

2022-06-03 23:00:15 字數 1899 閱讀 2614

練習1

1 assume cs:

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

(1)源**經彙編鏈結後輸出結果為

(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:

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

(1)彙編連線後輸出結果為

(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暫存器中,如下:

3

mov ah,2

4mov dl,3

5add

dl,30h 6

int 21h

3,5,6行的**內容應該是實現輸出的固定語句,暫不考慮

而實驗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 ...