|
主题 : : 请问push能操纵立即数吗? [待解决] |
回复[ 7次 ]
点击[ 317次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-07-13 10:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-11 16:57 |
在第三章看到以下的内容:
mov ax,3123
push ax
mov ax,3366
push ax
看后于是我就有以下的疑问;
push能直接操纵立即数吗?
比如:
push 3123
push 3366
直接绕过ax做中间者。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-07-13 10:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第2楼]
[ 回复时间:2010-07-13 11:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
push 3123
push 3366
直接绕过ax做中间者。
-------------
有了想法,debug试试,计算机会告诉你答案。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-07-13 16:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-06-01 10:03 |
|
|
|
|
|
[第4楼]
[ 回复时间:2010-07-13 16:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-06-01 10:03 |
可以的, 但是pop不能是立即做和CS
------------------
回复:我曾经想偷懒,但debug不允许 push 立即数! | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-07-13 17:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
我查了一下资料, 80186以上的cpu可以将立即数入栈。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-07-14 18:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-11 16:57 |
我试过了,不行,不知道五楼的说法是不是正确的。。。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-07-14 21:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
我验证如下:
d:\MASM>cat a.asm
.186 ;需要指明用186指令集
assume cs:code
code segment
start:
push 1234H ;直接入栈
pop ax ;弹出至AX
mov ah,4ch
int 21h
code ends
end start
d:\MASM>debug a.exe ;测试一下
-r
AX=0000 BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14C9 IP=0000 NV UP EI PL NZ NA PO NC
14C9:0000 68 DB 68
-t
AX=0000 BX=0000 CX=0008 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14C9 IP=0003 NV UP EI PL NZ NA PO NC
14C9:0003 58 POP AX
-t
AX=1234 BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14C9 IP=0004 NV UP EI PL NZ NA PO NC
14C9:0004 B44C MOV AH,4C
-t
AX=4C34 BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14C9 IP=0006 NV UP EI PL NZ NA PO NC
14C9:0006 CD21 INT 21
-p
Program terminated normally
- | | |