assembly - 在汇编语言中得到错误的结果
问题描述
org 100h
.model small
.data
var db ?
msg db 10,13,'$'
.code
; add your code here
main proc
mov ax,@data
mov ds,ax
mov ah,1 ;input 1st number
int 21h
sub al,48
mov var,al
mov ah,1 ;input 2nd number
int 21h
sub al,48
MUL var ; multiplying two numbers
sub al,48 ; going to ASCII value
mov dl,al
mov ah,2 ; printing result
int 21h
mov ah,4ch
int 21h
main endp
end main
ret
解决方案
您错误地将两个程序模型混合在一起。对于MZ 可执行DOS 程序,省略第一个org 100h
和最后一个ret
. 或者使用更简单的COM 可执行文件,它不使用段切换指令.data
,. code
,并且您不必为段寄存器而烦恼。它的骨架看起来像
.model TINY
org 100h
main proc
; Program code must start here at offset 100h
; The first machine instruction.
; Put your code here.
ret ; A simple ret terminates the COM program.
var db ? ; Data variables follow the code section.
msg db 10,13,'$'
end main
当您将两个数字与 相乘时mul var
,乘积在寄存器中AX
,它可能在 0..65535 范围内。仅在特殊情况下,例如 2 乘 3 的结果,您将得到结果 AX=6,可以通过将 48 加到它(不是通过减法)转换为一位数的结果。
有关如何将无符号 16 位整数转换为十进制数字的方法,请搜索此站点,这里有很多示例。
推荐阅读
- python - AttributeError:“浮动”对象没有属性“翻译”Python
- python - 从 MongoDB 中的字典数组中提取和更新字典
- javascript - 将参数从指令发送到AngularJS中的控制器
- multithreading - 3 threads per request
- c++ - std::atomic 到什么程度?
- c - 如果输入具有特定的大小和格式,为什么会忽略 fgets 调用?
- django - Django - “NoneType”对象没有属性“年份”
- outlook - Windows 10 上的 IBM Notes(又名 Lotus Notes) - 自动化对象错误
- cmake - cmake -> libpthread.so.0:添加符号时出错:命令行中缺少 DSO
- express - 将嵌套数组快速转换为字符串