关于push指令

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

我试着在汇编代码中添加了这个代码
push 5000h
结果发现装入debug中后,反汇编指令居然是这样
68 DB 68
00500F ADD [BX+SI+0F],DL
也就是说push 5000h的二进制指令是68 00 50
怎么会这样?原本想着给堆栈段里装东西怎么就装到数据段里去了呢?
...全文
501 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucky-lucky 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汇编工具啊
shzhfu 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。
lucky-lucky 2010-11-15
  • 打赏
  • 举报
回复
大哥你简直是来救我的
masmaster 2010-11-15
  • 打赏
  • 举报
回复
栈段是一种特殊的数据段。
masmaster 2010-11-15
  • 打赏
  • 举报
回复
8086cpu不允许push压入立即数。debug是16位调试器,用debug32试一试。
masmaster 2010-11-15
  • 打赏
  • 举报
回复
楼主源代码中是不是使用了.386之类的伪指令,否则的话,编译那就会出错的。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧