匯編語言實驗三


實驗內容:

  • 練習1:編寫第一個源程序,學會編程,編譯,連接,跟蹤

(1)首先在文本文檔里面編寫源程序:

(2)然后在dosbox下進行編譯,連接,執行

可以看到輸出結果為36

(3)將源程序的line4和line9的值進行修改,源程序修改如下:

(我將line4的3改為了6,將line9的6改為了7)

(4)編譯,連接,執行以上修改后的源程序:

可以看到輸出結果為67

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

  • 先用r命令查看:

可以觀察到:

  1. cx寄存器的值為0016h,即源程序的長度為28個字節;
  2. 寄存器ds的值為075Ah,cs的值為076Ah,滿足關系(cs)=(ds)+10h,即076Ah=075Ah+10h,這10h的區域則是PSP(程序段前綴)。
  • 用d命令查看PSP的內容:

可以觀察到PSP的頭兩個字節確實是CD

  • 用u命令對t1.exe進行反匯編,可以觀察到源代碼:

  • 使用t命令和p命令進行單步調試:

一個小結:

    可以觀察到單步執行下兩次的輸出結果分別為3和6;

    每次遇上int的時候都用p命令,實際上是調用了子程序的結果。

  •  練習2:編寫第二個源程序,進行編譯,連接,執行

 (1)進行源程序的編寫:

(2)對程序進行編譯,連接

(然后清屏再執行一下)

可以觀察到左上方輸出了紅色的36

(3)修改源程序,將line7的0433h修改為0432h,將line10的0436h修改為0439h

(4)再執行修改后的程序

可以觀察到左上方出現紅色的29

(5)再次修改源程序,將line7的0433h→0333h,將line10 的 0436h→0336h

(6)再執行以上源程序

可以觀察到左上方出現了藍綠色的36

延伸思考和分析:

  • 練習2與實驗一任務4的聯系:都是向b800后的內存單元寫入數據,即將數據輸入了顯存,所以會在顯示屏上出現不同色彩的圖案。
  • 我對源程序的理解:
assume cs:code
code segment
    mov ax,0b800h
    mov ds,ax       ;將顯存內存單元的段地址傳給ds
 
    mov bx,0
    mov [bx],0433h  ;向以ds為段地址,0為偏移地址的內存單元存入0433h,
                              ;其代表了紅色的3
    add bx,2
    mov [bx],0436h  ;向以ds為段地址,2為偏移地址的內存單元存入0436h,
                             ;其代表了紅色的6
    mov ax,4c00h
    int 21h
code ends
end
  • 練習1在顯示數據時通過執行程序段本身來達到顯示的效果,而練習2是通過將數據寫入顯存而達到顯示的效果

總結與體會:

  • 我對練習1程序段的顯示方法很感興趣,於是上網搜查了一下,mov ah,2 ... int 21h有顯示字符的功能,輸出的是dl的值,但由於顯示的時候要轉換ASCII碼值,所以要注意dl中的值;而在練習1中的程序段,3的ASCII碼值為33h,6的ASCII碼值為36h,所以最后通過該程序段能將“3”和“6”分別輸出;由於輸出的是dl的值,所以要顯示“36”,就只能分為兩次輸出。
  • 通過本次實驗,我熟悉了用dosbox來實現對匯編程序的編譯,連接與跟蹤執行的過程,熟悉了匯編程序的結構,對下一個實驗進行的程序編寫有很大的幫助。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM