Assembly 在汇编语言中得到错误的结果
您将两个程序模型错误地混合在一起。对于MZ可执行文件DOS程序,省略第一个Assembly 在汇编语言中得到错误的结果,assembly,x86-16,emu8086,Assembly,X86 16,Emu8086,您将两个程序模型错误地混合在一起。对于MZ可执行文件DOS程序,省略第一个org100h和最后一个ret。 或者使用更简单的COM可执行文件,它不使用段切换指令。数据,.代码,您不需要;不必费心处理段寄存器。它的骨架看起来像 org 100h .model small .data var db ? msg db 10,13,'$' .code ; add your code here main proc mov ax,@data mov ds,a
org100h
和最后一个ret
。
或者使用更简单的COM可执行文件,它不使用段切换指令。数据
,.代码
,您不需要;不必费心处理段寄存器。它的骨架看起来像
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
将两个数字与mul var
相乘时,乘积在寄存器AX
中,可能在0..65535范围内。只有在特殊情况下,例如将2乘以3,您将得到结果AX=6,可以通过向其添加48(而不是减去)将其转换为一位数的结果
有关如何将无符号16位整数转换为十进制数字的方法,请在本网站搜索,这里有很多示例。如果我们将3和4相乘,将显示ASCII值12。如何在汇编语言8086 emulator中获得正确的12位数字
.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