实验二

实验任务(1)

用e命令修改0021:0-0021:f的数据,并用d命令检查是否正确 

 

 

 

用a命令输入指令

 

 

 

逐步进行单步调试

 

 

 

 

 

 

下图是我课本上理论的结果

 

 

 

 

-------------------------------------------------------------------------------

实验任务(2)

用a命令输入下图7行命令,并使用e命令修改2000:0-2000:f的值,查看修改后结果

 

进行单步调试并且用d命令查看元素值的变化

 

 

 

 

 

 

 

 

-------------------------------------------------------------------------------

 

 

实验总结与注意点

  1. 实验1

8086的CPU不支持将数据直接送入段寄存器的操作,必须经过一个寄存器来中转。即将1000H送入一个一般的寄存器,然后将内容再送入ds。

 

常规的16位寄存器高8位存放高位字节,低8位存放低位字节。

 

栈是后进先出的结构。push ax将寄存器ax的数据送入栈中,sp的值减2;

pop ax将栈内元素给ax,然后sp的值加2。

 

 

  1. 实验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也是。

 

 

 

 

posted @ 2018-10-23 22:27  Nebulas  阅读(230)  评论(1)    收藏  举报