1. 程式人生 > >匯編語言 實驗3

匯編語言 實驗3

代碼 不同 str 一個數 進行 編譯鏈接 兩個 偏移 修改

實驗3

實驗內容1:運行exe文件輸出數據,並觀察每一步的調試情況

步驟1:在記事本中編寫t1.asm文件

技術分享圖片

步驟2:在dosbox環境下匯編、連接、運行文件,得到數據36

技術分享圖片

技術分享圖片

步驟3:修改dl寄存器中的值為0-9中任意一個數,重新編譯鏈接運行,查看結果

技術分享圖片

技術分享圖片

步驟4:進入debug環境進行調試——

-r查看各寄存器的值;

-d查看PSP程序段前綴中前兩個字節的值;(CS和DS寄存器相差10h:存放程序段前綴的內容,使程序返回時能記住返回的地址)

-u進行反匯編

技術分享圖片

步驟5:用-t(查看普通步驟)、-p(查看int 21h步驟)逐步調試,觀察結果

技術分享圖片

技術分享圖片

技術分享圖片

tips:

1.在win7系統下可以用notepad打開一個文本文檔,而win10Dosbox環境下不行;

2.用‘x’在寄存器中輸入相應數據也可以輸出同樣結果)

個人理解:把0200h放入ax寄存器中,在dx中存入003xh(x為任意0-f的16進制數字),後面再加入int 21h的語句,運行後就會顯示1Byte的x數據(其中a-f只會輸出1)

實驗內容2:運行exe程序在屏幕左上角輸出帶顏色的數字,逐步調試並觀察其過程

步驟1:在記事本中編寫t2.asm文件

技術分享圖片

步驟2:在dosbox環境下匯編、連接、運行文件,清屏後運行屏幕左上角顯示紅色的36

技術分享圖片

技術分享圖片

步驟3:修改原t2.asm中像內存單元傳送的數據,運行後發現在屏幕上出現不同顏色的不同數字

技術分享圖片

技術分享圖片

技術分享圖片

tips:運用mov [偏移地址],數據 時,有的平臺會顯示向寄存器中存入了占多少存儲單元的數據,有的不會)

技術分享圖片

技術分享圖片

個人理解:實驗1中,我發現向從0b800開始的內存單元中寫入數據,能在屏幕的不同位置輸出不同顏色的各種符號。而通過本次實驗,我還發現向0b800內存中寫入數據兩個字節數據xy3z,則會在屏幕左上角頂格出現數字z,而xy控制了輸出數據z的顏色

實驗3——總結

收獲:通過本次實驗,我初步了解了一個完整的匯編小程序的形成過程(匯編、連接、運行),並且通過debug環境逐步觀察了各個寄存器的變化。學到了匯編程序中CS寄存器的值總是比DS多10h,原因是需要10h的空間存放PSP(程序段前綴)以標識代碼運行完畢之後程序返回的位置。明白了-p命令是用來查看 int 21h 這條指令的執行過程的。還學到了可以用mov [寄存器],數據 這種方式來將數據存入以寄存器的內容為偏移地址的內存單元中。

問題:怎麽用匯編語言編寫一個從鍵盤輸入字符,從屏幕輸出字符的程序呢?

匯編語言 實驗3