汝不知者花也 发表于 2020-6-16 10:53:19

3.7 3.8 3.9 3.10的作业

本帖最后由 汝不知者花也 于 2020-9-19 09:48 编辑

问题3.7
将10000H~1000FH 这段空间当作栈,初始状态是空的,将 AX、BX、DS中的数据入栈。
解:
mov ax,1000H                //将1000H送入ax中,得到ax=1000H
mov ss,ax                //由于不能直接把数据传输到段寄存器,所以要用通用寄存器作为过渡 得到ss=1000H
mov sp,0010H                //sp=000EH+2=0010H
push ax                        //将ax中的数据进栈,sp=0010H-2=000EH
push bx                        //将bx中的数据进栈,sp=000EH-2=000CH
push ds                        //将DS中的数据进栈,sp=000CH-2=000AH

问题3.8
(1)将10000H~1000FH 这段空间当作栈,初始状态是空的;
(2)设置AX=001AH,BX=001BH;
(3)将AX、BX中的数据入栈;
(4)然后将AX、BX清零;
(5)从栈中恢复AX、BX原来的内容。
解:
mov ax,1000H                //将1000H送入ax中,得到ax=1000H
mov ss,ax                //由于不能直接把数据传输到段寄存器,所以要用通用寄存器作为过渡 得到ss=1000H                     
mov sp,0010H                //因为栈为空,所以sp=000FH+1=0010H
mov ax,001AH                //将001aH的值送入AX中,得到AX=001AH
mov bx,001BH                //将001bH的值送入bX中,得到bX=001bH
push ax                        //将AX的数据入栈,sp=0010H-2=000EH,0F=00 0E=1A
push bx                        //将BX中的数据入栈,sp=000EH-2=000CH,0F=00 0E=1a 0D=00 0C=1B
mov ax,0                //然后将AX、BX清零;
mov bx,0
pop bx                        //从栈中恢复AX、BX原来的内容。pop的顺序要注意,因为前面讲过“先进后出”
pop ax                        //得到BX=001B,sp=000CH+2=000EH,ax=001A,sp=000EH+2=0010H

问题3.9
(1)将10000H~1000FH 这段空间当作栈,初始状态是空的;
(2)设置AX=002AH,BX=002BH;
(3)利用栈 ,交换 AX 和 BX 中的数据。
mov ax,1000H                //将1000H送入ax中,得到ax=1000H
mov ss,ax                //由于不能直接把数据传输到段寄存器,所以要用通用寄存器作为过渡 得到ss=1000H
mov sp,0010H                //因为栈为空,所以sp=000FH+1=0010H
mov ax,002AH                //将002aH的值送入AX中,得到AX=002AH
mov bx,002BH                //将002bH的值送入bX中,得到bX=002bH
push ax                        //将AX的数据入栈,sp=0010H-2=000EH,0F=00 0E=2A
push bx                        //将BX中的数据入栈,sp=000EH-2=000CH,0F=00 0E=2a 0D=00 0C=2B
mov ax,0                //然后将AX、BX清零;
mov bx,0
pop ax                  //从栈中恢复AX、BX原来的内容。pop的顺序要注意,因为前面讲过“先进后出”
pop bx                  //现在我们先pop出ax,其实正在意义上是pop出了前面的bx,所以实现了交换 AX 和 BX 中的数据,得到AX=002B,sp=000CH+2=000EH,ax=002A,sp=000EH+2=0010H

问题3.10
我们如果要在10000H处写入字型数据2266H,可以用以下的代码完成:
       mov ax,1000H
       mov ds,ax
       mov ,ax,2266H
       mov ,ax
看题目:
补在10000H处写入字型数据2266H。
      __________
      __________
      __________
      mov ax,2266H
      push ax
要求:不能使用“mov 内存单元,寄存器”这类指令
解:
mov ax,1000H                //将1000H送入ax中,得到ax=1000H
mov ss,ax                //由于不能直接把数据传输到段寄存器,所以要用通用寄存器作为过渡 得到ss=1000H
mov sp,2                //因为要指向栈的最底部单元下面的单元,故SP=SP+2(即指向10002H这个地方,运行时sp要-2,所以会写入10000H中)
mov ax,2266H                //将2266H送入ax中,得到ax=2266H
push ax                        //将ax入栈,得到sp=1000H-2=0FFFH
页: [1]
查看完整版本: 3.7 3.8 3.9 3.10的作业