sc3297 发表于 2012-4-10 18:57:36

汇编寄存器(内存访问) 遇到的问题,请大神们帮解释下

本帖最后由 sc3297 于 2012-4-10 22:51 编辑

问题3.10
补全代码,在10000H处写入字形数据2266H
要求:不能使用mov 内存单元,寄存器;

______________
______________
______________
mov ax,2266h
push ax         
答案是:
mov ax,1000
mov ss,ax
mov sp,2                           这里就不明白了,单独看这里能理解,是栈顶要先-2再将字形数据入栈
mov ax,2266
push ax      
======================================
问题3.8
1,将10000~1000f这段空间当做栈,初始状态是空的
2,设置AX=001A,BX=001B;
3,将AX,BX中的数据入栈
4将AX,BX清零
5从栈中恢复AX,BX原来内容
答案是:
mov ax,1000
mov ss,ax
mov sp,10
mov ax,001a
mov bx,001b
push ax                     //为什么这里栈顶没有先-2再入栈
push bx
mov ax,0
mov bx,0
pop bx
pop ax

sc3297 发表于 2012-4-10 21:53:45

........没人理啊 ,   求解释啊~~~~~~~~~~~~~~

大信通讯 发表于 2012-4-10 22:25:07

入栈应该是SP-2,问题3.10是要求在10000H写入数据,所以SP应该是2
问题3,8的前提条件是栈初始化状态为空,根据8086CP的特性SP应该定位在栈底的下一个地址,所以应该 是10

憔悴心只为你 发表于 2012-4-11 12:17:38

本帖最后由 憔悴心只为你 于 2012-4-11 12:21 编辑

push ax 的执行,由以下两步完成:

      (1) sp = sp - 2 , SS:SP 指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶;

      (2) 将ax中的内容送入SS:SP执行的内存单元,SS:SP此时指向新栈顶。

憔悴心只为你 发表于 2012-4-11 12:32:09

任意时刻,SS:SP指向栈顶元素,当栈为空时,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的便宜地址+2,所以栈空时,SP=0010H

sc3297 发表于 2012-4-12 03:22:16

憔悴心只为你 发表于 2012-4-11 12:17 static/image/common/back.gif
push ax 的执行,由以下两步完成:

      (1) sp = sp - 2 , SS:SP 指向当前栈顶前面的单元,以当前栈 ...

对啊为什么这里没有写出来 sp-2呢?我是想知道哪个写法正确 ,这个sp-2 或则sp +2 不写出来可以不?

℡.xiao敏 发表于 2012-4-12 10:29:01

好帖,跟我问题一样

℡.xiao敏 发表于 2012-4-12 11:00:21

本来push命令就包括了-2了……

℡.xiao敏 发表于 2012-4-12 11:02:16

sc3297 发表于 2012-4-12 03:22 static/image/common/back.gif
对啊为什么这里没有写出来 sp-2呢?我是想知道哪个写法正确 ,这个sp-2 或则sp +2 不写出来可以不?

不需要写……你可以理解push这个命令是一个子程序……里面包括了-2或者+2的sp了~反正你只要入栈,他就会-2,出栈就+2,还有先后次序,你可以再看一遍小甲鱼教程。

℡.xiao敏 发表于 2012-4-12 11:04:01

入栈,是先sp-2再把数据放到ss:sp……出栈,相反,先把数据拿出来,再把sp+2,但是数据不是抹去,数据依然还在栈里面,理论上你sp-2,再pop,依然能复制出一模一样的数据。

℡.xiao敏 发表于 2012-4-14 12:09:24

愿意给回答者加分,确实促进交流,那是一种鼓励,不在乎多小,呵呵
页: [1]
查看完整版本: 汇编寄存器(内存访问) 遇到的问题,请大神们帮解释下