1. 程式人生 > >組合語言 實驗3

組合語言 實驗3

 

實驗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 [暫存器],資料 這種方式來將資料存入以暫存器的內容為偏移地址的記憶體單元中。

 

問題:怎麼用匯編語言編寫一個從鍵盤輸入字元,從螢幕輸出字元的程式呢?