请教各位,关于push imm16的问题。

bingking68 2008-02-20 12:04:12
如标题所讲,我希望通过堆栈,用push imm16实现将A000代入ES里。
代码如下:
PUSH A000H
POP ES
但是,DEBUG显示:error A2006: undefined symbol : A000
请问,我这样写是否有问题,该如何写呢?
开发平台:RadASM -> MASM..
...全文
132 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingking68 2008-03-04
  • 打赏
  • 举报
回复
非常感谢各位的帮助,特别是cnzdgs,回了5个帖..

1.本来,我可以好像BAYNPU所说的:
mov ax,a000h
push ax
pop es
但是,觉得多了一句“mov ax,a000h”,对于代码来说,不够优化。

2.另外,像zara所说在,可以在开头加上.586。
这样写也可以解决这个问题。
但是这样只能在简化段运用,若在完整段里,可以这样写吗?

3.还有,如cnzdgs所说的,
把 PUSH 0A000H
改为 DB 068H
DW 0A000H
这里,我有个想法,如果不改为OP码,不知道还是否会有些更优化的写法。。

在此,我们一起交流一下啊!
感谢不尽!
BAYNPU 2008-02-20
  • 打赏
  • 举报
回复
no
mov ax,a000
push ax
pop es
cnzdgs 2008-02-20
  • 打赏
  • 举报
回复
原来是这问题,加.386就可以了。
zara 2008-02-20
  • 打赏
  • 举报
回复
是 dos16 类程序吧? 要使用 push 立即数 这样的指令, 需要在程序的开头加上:
.model small ; 或者是 tiny 等其它自己程序适意的模式
.586
cnzdgs 2008-02-20
  • 打赏
  • 举报
回复
error A2001: immediate operand not allowed。
这问题与编译器有关,如果上面这两种方法也不行,你就直接写目标码。
DB 68H
DW 0A000H
cnzdgs 2008-02-20
  • 打赏
  • 举报
回复
push word ptr 0a000h
cnzdgs 2008-02-20
  • 打赏
  • 举报
回复
push word 0a000h
bingking68 2008-02-20
  • 打赏
  • 举报
回复
cnzdgs
如果我把A000H改为0A000H,调试器会显示error A2001: immediate operand not allowed。
这样还是不行啊!
cnzdgs 2008-02-20
  • 打赏
  • 举报
回复
常数不能以字母开头,A000H改为0A000H。

21,445

社区成员

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

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