2014-01-16 20 views
0

我是新来的汇编程序,我不确定这个小程序出了什么问题。它所做的只是一个+ 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 
+1

您只需将'dx'设置为打印值即可打印数字。您需要将其转换为字符串。 'dx'包含要打印的消息的* offset *,如'mov dx,offset afis_rez'。因此,底部附近的'mov dx,bx'和'int 21h'对将打印您计算'bx'的偏移处的内存中的任何字符。 –

+0

对于**阅读**数量也是如此 - 请参阅http://spike.scu.edu.au/~barry/interrupts.html#ah0a'0ah'作为输入的期望函数并作为输出提供。读取数据后,您需要将缓冲区中返回的字符串转换为数字。 –

+0

你的意思是我应该改变每一个0ah到01?那么mov dx,bx ...我应该写什么而不是dx? – user3202029

回答

0
mov dx,bx   
int 21h 

有没有DOS中断打印数量。您必须自己将数字值转换为字符串,然后使用INT 21H/AH=9打印字符串。


而且,这条线:

mov ax, 4ch   

应该是:

mov ax,4c00h 

(功能编号需要进入AH,这是AX的上半部分)