(注:本文默认数字为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 的值。
猜测:由于某种机制,导致单步运行,中断时将无关元素不停地压入栈内。
实验总结与体会:
汇编语言是门靠近底层的语言,学习这门语言可以了解到计算机底层工作机制。这些机制繁琐、复杂、易错,学习过程让我深刻地体会到了初代计算机人的心酸。但同时能够帮助我们更好地理解计算机的运行,与学习高级语言。这反而激起我对汇编这门语言的兴趣。