Assembly 在汇编语言中得到错误的结果

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

您将两个程序模型错误地混合在一起。对于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,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