|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 汝不知者花也 于 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 [0],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 |
|