实验2 用机器指令和汇编指令编程

(注:本文默认数字为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,栈底是20000,栈段是20000~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 的值。

  猜测:由于某种机制,导致单步运行,中断时将无关元素不停地压入栈内。

 实验总结与体会:

    汇编语言是门靠近底层的语言,学习这门语言可以了解到计算机底层工作机制。这些机制繁琐、复杂、易错,学习过程让我深刻地体会到了初代计算机人的心酸。但同时能够帮助我们更好地理解计算机的运行,与学习高级语言。这反而激起我对汇编这门语言的兴趣。 

原文地址:https://www.cnblogs.com/auspice/p/9858918.html