實驗2 用機器指令和匯編指令編程
阿新 • • 發佈:2018-10-27
命令 分享 默認 clas 導致 高級 class pop mage
(註:本文默認數字為16進制數)
實驗2.1
首先:使用 e 命令修改 0021:0~0021:f 數據,及修改後查看是否正確寫入。
輸入代碼前的預判:
mov ax,0021 mov ds,ax mov ax,2200 mov ss,ax mov ss,ax mov sp,0100 mov ax,[0] ;ax=3130; add ax,[2] ;ax=3130+3332=6462; mov bx,[4] ;bx=3534; add bx,[6] ;ba=3534+3736=6C6A;push ax ;sp=00FE;修改的內存單元的地址是2200:00FE,內容為6462 push bx ;sp=00FC;修改的內存單元的地址是2200:00FC,內容為6C6A pop ax ;sp=00FE;ax=6C6A;彈出棧頂6C6A的值賦給AX pop bx ;sp=0100;bx=6462;彈出棧底6462的值賦給BX push [4] ;sp=00FE;修改的內存單元的地址是2200:00FE,內容是3534 push [6] ;sp=00FC;修改的內存單元的地址是2200:00FC,內容是3736
用a命令輸入代碼。
使用t/p命令單步執行命令
實驗結果與預期一樣,證明書上知識的準確與真實性。達到實驗效果。
實驗2.2
實驗代碼
1 mov ax,2000 ;將2000賦給AX 2 mov ss,ax ;將AX的值賦給SS,由於物理原因,不能直接賦值。 3 mov sp,10 ;將10賦給sp,棧頂是20010, 4 mov ax,3123 ;將3123賦給AX 5 push ax ; AX進棧 6 mov ax,3366 ;將3366值賦給AX7 push ax ;AX出棧
在debug的狀態下,輸入上述代碼,並使用 e 命令修改 2000:0~2000:f 的值,及修改後查看的部分 。
使用t命令單步調試每一行匯編指令,並使用 d 命令查看 2000:0~2000:f 的值。
猜測:由於某種機制,導致單步運行,中斷時將無關元素不停地壓入棧內。
實驗總結與體會:
匯編語言是門靠近底層的語言,學習這門語言可以了解到計算機底層工作機制。這些機制繁瑣、復雜、易錯,學習過程讓我深刻地體會到了初代計算機人的心酸。但同時能夠幫助我們更好地理解計算機的運行,與學習高級語言。這反而激起我對匯編這門語言的興趣。
實驗2 用機器指令和匯編指令編程