实验任务(1)
用e命令修改0021:0-0021:f的数据,并用d命令检查是否正确
用a命令输入指令
逐步进行单步调试
下图是我课本上理论的结果
-------------------------------------------------------------------------------
实验任务(2)
用a命令输入下图7行命令,并使用e命令修改2000:0-2000:f的值,查看修改后结果
进行单步调试并且用d命令查看元素值的变化
-------------------------------------------------------------------------------
实验总结与注意点
- 实验1
8086的CPU不支持将数据直接送入段寄存器的操作,必须经过一个寄存器来中转。即将1000H送入一个一般的寄存器,然后将内容再送入ds。
常规的16位寄存器高8位存放高位字节,低8位存放低位字节。
栈是后进先出的结构。push ax将寄存器ax的数据送入栈中,sp的值减2;
pop ax将栈内元素给ax,然后sp的值加2。
- 实验2
mov ax,2000 即ax=2000
mov ss,ax 即ss=ax=2000
mov sp,10 即初始化sp的值为10
mov ax,3123 即ax=3123
push ax 即把3123送入栈
mov ax,3366 即ax=3366
push ax 即把ax=3366送入栈
初始时栈顶地址为2000:10;
第一次输入3123后栈顶地址为2000:8;
第二次输入3366后,栈顶地址为2000:6.
另外 MOV [SP],AX不是一条正确的汇编指令。作为存储器指针和的寄存器,80x86只有4个:[BX]、[BP]、[SI]、[DI]。
栈指针不能用。你是想说明将AX持有的值复制到包含在SP中的内存区域,但是不能这么用。
-------------------------------------------------------------------------------
疑问
在mov ax,3123后,push ax前,在2000:7的位置ax的值就已经被存入了,同理第二次mov ax,3366也是。