Windows/DOS 汇编 - 简单数学
我目前正在学习 Windows/DOS 汇编。我只是编写一个小程序,将两个以 10 为基数的整数相加,并将解输出到标准输出。这是我当前的代码:
org 100h
MOV al,5
ADD al,3
mov dx,al
mov ah,9
int 21h
ret
我很困惑为什么编译时会出现错误:
错误:操作码和操作数的无效组合
因为理论上,我所做的就是将 5 放入 AL 寄存器,将 3 添加到将AL寄存器的内容放入DX寄存器输出,然后显示。
任何帮助将不胜感激,谢谢!
I'm currently learning Windows/DOS assembly. I'm just making a small program that adds two base 10 integers, and outputs the solution to standard output. Here is my current code:
org 100h
MOV al,5
ADD al,3
mov dx,al
mov ah,9
int 21h
ret
I'm confused as to why when that is compiled, I get the error:
error: invalid combination of opcode and operands
Because theoretically, all I'm doing is putting 5 into the AL register, adding three to it, taking the content of the AL register and putting it into the DX register for output, and then displaying it.
Any help would be appreciated, thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
DX
是 16 位寄存器,而AL
是 8 位寄存器。将
AL
加载到DL
中,并将DH
设置为 0。但这不会达到您想要的效果;函数 9 [显示以 null 结尾的字符串]。您告诉它显示一个从数据段偏移量 9 开始的字符串,这可能是垃圾。
您需要首先将答案转换为一系列数字,然后调用函数 9。
有一些示例代码 将寄存器的内容转换为可用的字符串。复制于此供参考,由别名为 Bitdog 的用户编写。
DX
is a 16-bit register, butAL
is an 8-bit.Load
AL
intoDL
, and setDH
to 0.But that won't do what you want; function 9 [displays a null-terminated string]. You're telling it to display a string that starts at offset 9 of the data segment, which is probably going to be garbage.
You'll need to convert your answer into a series of digits first, and then call function 9.
There is some example code for converting the contents of a register to a string available. Copied here for reference, written by a user with the alias Bitdog.