Assembly 汇编程序不工作导致错误结果

Assembly 汇编程序不工作导致错误结果,assembly,Assembly,我对汇编程序还不熟悉,我不确定我做的这个小程序到底出了什么问题。它所做的只是a+b*c。该程序可与tasm、tlink和所有工具配合使用。它甚至显示我给a,b,c赋值,但结果就像50行符号…我不明白 dosseg .model small .stack .data mesaj_a db 13,10,' Introduceti numarul a:$' mesaj_b db 13,10

我对汇编程序还不熟悉,我不确定我做的这个小程序到底出了什么问题。它所做的只是a+b*c。该程序可与tasm、tlink和所有工具配合使用。它甚至显示我给a,b,c赋值,但结果就像50行符号…我不明白

dosseg              
.model small            
.stack          
.data               
mesaj_a  db 13,10,' Introduceti numarul a:$'    
mesaj_b  db 13,10,' Introduceti numarul b:$'   
mesaj_c  db 13,10,' Introduceti numarul c:$'   
afis_rez  db 13,10,' Rezultat:$'   
.code                   
pstart:
    mov ax,@data        
    mov ds,ax  
;--------------        
    mov dx, offset mesaj_a     
    mov ah,09          
    int 21h        
    mov ah, 0ah        
    int 21h        
    mov  bx,ax         
;----------------
    mov dx, offset mesaj_b    
    mov ah,09         
    int 21h        
    mov ah, 0ah        
    int 21h        
    mov  cx,ax      

;----------------
    mov dx, offset mesaj_c     
    mov ah,09            
    int 21h          
    mov ah, 0ah        
    int 21h        
;---------------
    mul cx               
    add  ax,bx         
    mov  bx,ax    

;---------------
    mov dx, offset afis_rez   
    mov ah,09             
    int 21h          
    mov dx,bx         
    int 21h       
;---------------
    mov ax, 4ch        
    int 21h  
end  pstart   
打印数字时没有DOS中断。您必须自己将数值转换为字符串,然后使用
INT 21H/AH=9
打印字符串


此外,这一行:

mov ax, 4ch        
应该是:

mov ax,4c00h

(函数号需要进入
AH
,它是
AX
的上半部分)

您不能通过设置
dx
来打印数字。您需要将其转换为字符串
dx
包含要打印的消息的偏移量,如
mov dx,offset afis_rez
。因此,底部附近的一对
mov-dx、bx
int-21h
将在您计算的
bx
的偏移量处打印内存中的任何字符。读取数字也是如此-请参阅
0ah
期望作为输入和作为输出的函数。您需要在读取后将缓冲区中返回的字符串转换为数字。您的意思是我应该将每0ah更改为01?mov dx、bx呢?我应该写什么来代替dx?
mov ax,4c00h