. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  sp在什么时候+2  [待解决] 回复[ 12次 ]   点击[ 500次 ]  
okbb
[帖 主]   [ 发表时间:2010-01-28 14:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-23 17:53
好像push时,数据先进去然后sp+2

pop时,先+2,然后数据再进去?

是不是这样啊?
regex
[第1楼]   [ 回复时间:2010-01-29 00:17 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
注意观察SP的变化
D:\ASM>debug
-a
146D:0100 mov ax,1234
146D:0103 push ax
146D:0104 pop bx
146D:0105
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=146D  IP=0100   NV UP EI PL NZ NA PO NC
146D:0100 B83412        MOV     AX,1234
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=146D  IP=0100   NV UP EI PL NZ NA PO NC
146D:0100 B83412        MOV     AX,1234
-t

AX=1234  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=146D  IP=0103   NV UP EI PL NZ NA PO NC
146D:0103 50            PUSH    AX
-t

AX=1234  BX=0000  CX=0000  DX=0000  SP=FFEC  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=146D  IP=0104   NV UP EI PL NZ NA PO NC
146D:0104 5B            POP     BX
-t

AX=1234  BX=1234  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=146D  ES=146D  SS=146D  CS=146D  IP=0105   NV UP EI PL NZ NA PO NC
146D:0105 8BC5          MOV     AX,BP
-
自己动手观察一下啊, push动作, sp-2,pop动作与push相反, 当然是+2啦~
cwandqd
[第2楼]   [ 回复时间:2010-03-14 10:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-08-02 13:24
push时 SP-2 然后在进数据
POP时  先进数据 然后SP+2

把栈想成 吃的糖葫芦,最上面的一个编号最小,最下面的一个编号最大。
itx
[第3楼]   [ 回复时间:2010-04-03 12:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-25 23:56
回复:[第1楼]
------------------
想问下你的代码是怎么弄上去的,复制粘贴,还是完全手敲上去的?
wxb2422
[第4楼]   [ 回复时间:2010-08-25 16:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-19 19:51
debug后,输入Q回车,然后在DOS窗口上任意处点右健,然后全选,再回车.这时候代码就可以粘贴了
xshz
[第5楼]   [ 回复时间:2010-09-02 19:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-24 22:41
debug后,输入Q回车,然后在DOS窗口上任意处点右健,然后全选,再回车.这时候代码就可以粘贴了
------------------
回复:谢谢楼上的。
还有:多次练习后,发现不用输Q回车,不管是否debug,直接在DOS窗框上任意处点右健,就可以了。只是不晓得有没有后遗症。
1071522910
[第6楼]   [ 回复时间:2010-09-21 22:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-09-04 21:42
我试过,没用,直接在窗框上点右键->编辑->粘贴,就行了,那有那么麻烦啊
baker
[第7楼]   [ 回复时间:2010-09-30 16:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-09-13 17:14
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AE3  ES=0AE3  SS=0AE3  CS=0AE3  IP=0100   NV UP EI PL NZ NA PO NC
0AE3:0100 803ED19600    CMP     BYTE PTR [96D1],00                 DS:96D1=00
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AE3  ES=0AE3  SS=0AE3  CS=0AE3  IP=0100   NV UP EI PL NZ NA PO NC
0AE3:0100 803ED19600    CMP     BYTE PTR [96D1],00                 DS:96D1=00
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AE3  ES=0AE3  SS=0AE3  CS=0AE3  IP=0100   NV UP EI PL NZ NA PO NC
0AE3:0100 803ED19600    CMP     BYTE PTR [96D1],00                 DS:96D1=00
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AE3  ES=0AE3  SS=0AE3  CS=0AE3  IP=0100   NV UP EI PL NZ NA PO NC
0AE3:0100 803ED19600    CMP     BYTE PTR [96D1],00                 DS:96D1=00
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AE3  ES=0AE3  SS=0AE3  CS=0AE3  IP=0100   NV UP EI PL NZ NA PO NC
0AE3:0100 803ED19600    CMP     BYTE PTR [96D1],00                 DS:96D1=00
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0AE3  ES=0AE3  SS=0AE3  CS=0AE3  IP=0100   NV UP EI PL NZ NA PO NC
0AE3:0100 803ED19600    CMP     BYTE PTR [96D1],00                 DS:96D1=00
-

直接在窗框上点右键->编辑->全选->回车->粘贴
84404037
[第8楼]   [ 回复时间:2010-10-05 18:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-25 21:54
push时,数值先-2比如 栈的一个数值的是000E那么空值就是000E+2就是0010H,那么进栈的时候就是先把SP的值减2也就是数值-2然后输入数据

pop时, 出栈的时候是先出后+2。比如说000E那他是16位,就是000E和000F这两个数。数值要先出去再加上2。不然的话。先+2的话,就会出去别的数值,会出错
sgso
[第9楼]   [ 回复时间:2010-10-06 10:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-05 09:26
push时 SP-2 然后在进数据
POP时  先进数据 然后SP+2

把栈想成 吃的糖葫芦,最上面的一个编号最小,最下面的一个编号最大。
------------------
回复:太强悍了 糖葫芦这个比喻非常恰当
lvzhengxu
[第10楼]   [ 回复时间:2010-10-22 17:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-22 12:21
修改窗口的“属性” 在弹出的对话框中选上快速编辑模式,然后点击修改确定,这时候又会弹出一个小的对话框,选中“修改启动该窗口的快捷方式”,然后一路确定,完成

然后就可以随意拷贝窗口里面的代码了,具体操作是:在窗口中按住鼠标左键,拖动,选取你要拷贝的代码
然后松开左键,然后右键单击一次,成了
hc312117511
[第11楼]   [ 回复时间:2010-10-28 09:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-13 17:21
可以这样理解,push了,空间不就变小了吗?变小了不得-2吗!
yuprxk
[第12楼]   [ 回复时间:2010-11-02 22:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-10-25 16:06
push ax ;将ax中的数据 入栈
可理解成为:
sp=sp+2
mov sp,ax

pop ax;将栈中的数据,送入ax
mov ax,sp
sp=sp+2
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved