1. 程式人生 > >實驗2 用機器指令和匯編指令編程

實驗2 用機器指令和匯編指令編程

命令 分享 默認 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值賦給AX    
7 push ax ;AX出棧

  在debug的狀態下,輸入上述代碼,並使用 e 命令修改 2000:0~2000:f 的值,及修改後查看的部分 。

技術分享圖片

  使用t命令單步調試每一行匯編指令,並使用 d 命令查看 2000:0~2000:f 的值。

技術分享圖片

  猜測:由於某種機制,導致單步運行,中斷時將無關元素不停地壓入棧內。

 實驗總結與體會:

    匯編語言是門靠近底層的語言,學習這門語言可以了解到計算機底層工作機制。這些機制繁瑣、復雜、易錯,學習過程讓我深刻地體會到了初代計算機人的心酸。但同時能夠幫助我們更好地理解計算機的運行,與學習高級語言。這反而激起我對匯編這門語言的興趣。

實驗2 用機器指令和匯編指令編程