+ -
当前位置:首页 → 问答吧 → 关于push指令

关于push指令

时间:2010-11-15

来源:互联网

在debug下push指令不接受立即数
而在masm下push指令居然可以接受立即数,这着实有点不可思议
那么masm是如何将push指令翻译的呢?

我试着在汇编代码中添加了这个代码
push 5000h
结果发现装入debug中后,反汇编指令居然是这样
68 DB 68
00500F ADD [BX+SI+0F],DL
也就是说push 5000h的二进制指令是68 00 50
怎么会这样?原本想着给堆栈段里装东西怎么就装到数据段里去了呢?

作者: p569354158   发布时间: 2010-11-15

8086cpu不允许push压入立即数。debug是16位调试器,用debug32试一试。

作者: masmaster   发布时间: 2010-11-15

栈段是一种特殊的数据段。

作者: masmaster   发布时间: 2010-11-15

大哥你简直是来救我的

作者: p569354158   发布时间: 2010-11-15

你用哪个版本的汇编工具啊?我用masm5和masm6.15编译都不行呀,都提示不能用立即数的。在tasm 4.1下编译通过了,但它是婉转实现的。
例如
push 100H
编译为
push bp
mov bp,sp
mov word ptr [bp+2],100h
pop bp
我不知道它最后为什么不修改sp。

作者: shzhfu   发布时间: 2010-11-15

Microsoft (R) MASM Compatibility Driver Version 6.11
Copyright (C) Microsoft Corp 1993. All rights reserved.

usage: MASM [option...] source(.asm),[out(.obj)],[list(.lst)],[cref(.crf)][;]
Run "MASM /H" for more info
奇怪啊,我就用6.11汇编工具啊

作者: p569354158   发布时间: 2010-11-15