|
主题 : : sp在什么时候+2 [待解决] |
回复[ 12次 ]
点击[ 500次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-01-28 14:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-23 17:53 |
好像push时,数据先进去然后sp+2
pop时,先+2,然后数据再进去?
是不是这样啊? | | |
|
|
|
|
[第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啦~ | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-03-14 10:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-08-02 13:24 |
push时 SP-2 然后在进数据
POP时 先进数据 然后SP+2
把栈想成 吃的糖葫芦,最上面的一个编号最小,最下面的一个编号最大。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-04-03 12:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-11-25 23:56 |
回复:[第1楼]
------------------
想问下你的代码是怎么弄上去的,复制粘贴,还是完全手敲上去的? | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-08-25 16:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-19 19:51 |
debug后,输入Q回车,然后在DOS窗口上任意处点右健,然后全选,再回车.这时候代码就可以粘贴了 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-09-02 19:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-24 22:41 |
debug后,输入Q回车,然后在DOS窗口上任意处点右健,然后全选,再回车.这时候代码就可以粘贴了
------------------
回复:谢谢楼上的。
还有:多次练习后,发现不用输Q回车,不管是否debug,直接在DOS窗框上任意处点右健,就可以了。只是不晓得有没有后遗症。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-09-21 22:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-04 21:42 |
我试过,没用,直接在窗框上点右键->编辑->粘贴,就行了,那有那么麻烦啊 | | |
|
|
|
|
[第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
-
直接在窗框上点右键->编辑->全选->回车->粘贴 | | |
|
|
|
|
[第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的话,就会出去别的数值,会出错 | | |
|
|
|
|
[第9楼]
[ 回复时间:2010-10-06 10:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-05 09:26 |
push时 SP-2 然后在进数据
POP时 先进数据 然后SP+2
把栈想成 吃的糖葫芦,最上面的一个编号最小,最下面的一个编号最大。
------------------
回复:太强悍了 糖葫芦这个比喻非常恰当 | | |
|
|
|
|
[第10楼]
[ 回复时间:2010-10-22 17:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-22 12:21 |
修改窗口的“属性” 在弹出的对话框中选上快速编辑模式,然后点击修改确定,这时候又会弹出一个小的对话框,选中“修改启动该窗口的快捷方式”,然后一路确定,完成
然后就可以随意拷贝窗口里面的代码了,具体操作是:在窗口中按住鼠标左键,拖动,选取你要拷贝的代码
然后松开左键,然后右键单击一次,成了 | | |
|
|
|
|
[第11楼]
[ 回复时间:2010-10-28 09:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-13 17:21 |
可以这样理解,push了,空间不就变小了吗?变小了不得-2吗! | | |
|
|
|
|
[第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 | | |