1. 程式人生 > >匯編語言實驗 3 編程、編譯、連接、跟蹤

匯編語言實驗 3 編程、編譯、連接、跟蹤

圖片 nds ascii asm code 個數 遇到 完整 -s

實驗內容

(1)第1步,編寫匯編源程序t1.asm, 源程序代碼如下:

  assume cs:code

  code segment

        mov ah,2

        mov dl,3

        add dl,30h

        int 21h

        mov ah,2

        mov dl,6

        add dl,30h

        int 21h

        mov ah,4ch

        int 21h

code ends

end

技術分享圖片

因為對匯編語言的一系列還不熟練,所以花了點時間,終於進去了。

技術分享圖片

技術分享圖片

技術分享圖片

對源程序 t1.asm 進行匯編、連接、運行、調試

(1) 運行程序,觀察程序輸出結果是什麽?

輸出結果為36

(2) 將 line4和line9種寄存器dl 的值分別修改為 0~9 中任何一個數字,重新匯編→ 連接→運行,觀察結果的變化。

我將line4中的值改為1,line9中的值改為4,

技術分享圖片

(3) 用debug對生成的可執行文件 t1.exe 進行調試。

① 使用 r 命令查看。觀察寄存器 cx 的值是 多少;觀察寄存器 ds 和 cs 的值是多 少,它們之間是否滿足關系(cs)=(ds)+10H?

技術分享圖片

cx為0016H,cs為076A,ds為075A,符合關系(cs)=(ds)+10H。

② PSP(程序段前綴)的頭兩個字節是CD 20, 用debug查看PSP的內容,驗證是否 如此。

技術分享圖片

的確如此

③ 使用 u 命令對 t1.exe 進行反匯編,觀察反匯編得到的源代碼。

技術分享圖片

反匯編得到的如圖所示

④ 使用 t 命令和 p 命令(遇到 int 命令時,用 p 命令)單步調試,觀察結果。

技術分享圖片

出現了3

技術分享圖片

出現了6

組成了最後t1.exe的36。

(2)第1步,編寫匯編源程序t2.asm,源程序代碼如下

assume cs:code

code segment

    mov ax,0b800h

    mov ds,ax

    mov bx,0

    mov [bx],0433h

    add bx,2

    mov [bx],0436h

    mov ax,4c00h

    int 21h

code ends

end

技術分享圖片

第2步,對源程序 t2.asm 進行匯編、連接、運行、調試

(1) 對t2.asm進行匯編、連接後,得到可執行文件t2.exe。運行t2.exe,觀察程序運行 結果,驗證是否在屏幕左上方出現紅色的數值36

技術分享圖片

經過cls之後,重新輸入t2,出現了目標結果

(2) 如果(1)結果得到驗證,重新打開t2.asm,嘗試將源代碼中line7的0433h→0432h, line10 的 0436h→0439h, 然後重新匯編、連接,得到可執行文件 t2.exe。使用 cls 命令清 屏後,再次觀察程序運行結果。

技術分享圖片

修改成功

技術分享圖片

出現了紅色的29

(3) 如果(1)結果得到驗證,重新打開t2.asm,嘗試將源代碼中line7的0433h→0333h, line10 的 0436h→0336h, 然後重新匯編、連接,得到可執行文件 t2.exe。使用 cls 命令清 屏後,再次觀察程序運行結果。

技術分享圖片

修改成功

技術分享圖片

出現了藍色的36

這個發現和之前的實驗一最後一部分類似。

實驗一向內存從B8100H開始的單元中填寫數據,每一次填寫的數據不一樣會出現不同的表情符號,而這次編寫代碼0433h舉例來說,mov這個操作,043三個字節決定了顏色的不同,最後一個字節決定了輸出的內容。而【】符號似乎就是顏色的填充工具。

分析這次兩個練習輸出的不同

    mov ax,0b800h mov ah,2

    mov ds,ax mov dl,3

    mov bx,0 add dl,30h

    mov [bx],0433h mov ah,2

    add bx,2 mov dl,6

    mov [bx],0436h add dl,30h

第一次有一項add dl,30h即將數字轉換為相對應的ASCII碼打印出來,這個實驗通過8位寄存器實現,而第二次是通過16位寄存器,直接輸出。

實驗總結

通過這次實驗,我知道了一個完整匯編程序的輸入輸出的流程,學會了對於數字顏色的把控,以及兩種輸出的格式。

     

匯編語言實驗 3 編程、編譯、連接、跟蹤