2015-11-06 66 views
1

我在我的组装问题code.I希望交换的数字,但是当我添加这些数字加功能没有工作well.Thanks大会,添加功能

后两个数字添加用户输入的这代码

.model small 
.stack 100h 
.data 
     msg1 db 'Enter the number1:$' 
     msg2 db 'Enter the number2:$' 
     msg3 db 'After swap numbers are:$' 
     msg4 db 'Sum is:$' 
     num1 db ? 
     num2 db ? 
     sum db ? 
     diff db ? 
.code 
MAIN PROC 
     mov ax,@data 
     mov ds,ax 

     mov ah,09h   ;display first msg 
     mov dx,offset msg1 
     mov ah,01h   ;taking input 
     int 21h 
     mov num1,al 


     mov ah,09h   ;display second msg 
     mov dx,offset msg2 
     int 21h 
     mov ah,01h   ;taking input 
     int 21h 
     mov num2,al 

     mov bl,num1 
     mov cl,num2 
     mov num1,cl 
     mov num2,bl 

     mov ah,09h   ;display third msg 
     mov dx,offset msg3 
     int 21h 
     mov ah,02h 
     mov dl,num1 
     int 21h 
     mov ah,02h 
     mov dl,num2 
     int 21h 

     mov bl,num1 
     add bl,num2 
     mov sum,bl 

     mov ah,09h  ;display fourth msg 
     mov dx,offset msg4 
     int 21h 
     mov ah,02h 
     mov dl,sum 
     int 21h 

     mov ah,4ch 
     int 21h 
MAIN ENDP 

END MAIN 
+0

一些代码在代码块外部结束,多条线连接在一起。刷新页面,你会看到。我会重新发布,因为它可能有助于一个答案 –

+1

请定义*“工作不好”*,是从计算机冒出来的烟? – Leeor

+1

你的程序的问题是,当你执行'mov bl,num1'' add bl,num2'和'mov sum,bl'时,你正在添加你输入的字符的ASCII值。 ASCII'0'是48位十进制,'1'是49位十进制等。在添加这些数字之前,您需要从每个值中减去48位小数,然后添加它们。要打印出总和,您需要将ASCII 48添加到结果中以将其转换回可打印字符。你也会发现,如果num1和num2的总和大于9,那么你会遇到另一个问题。总和需要在打印前转换为ASCII字符串。 –

回答

1

你的程序输入两个1位数字,因此有可能为总和高达18您的代码没有这种可能性的交易,但它可能是这是故意的。

当你输入你希望接收到的范围为48到57的ASCII字符(它们代表数字0到9)。您变量NUM1NUM2你应该减去48

mov ah, 09h   ;display first msg 
mov dx, offset msg1 
mov ah, 01h   ;taking input 
int 21h 
sub al, 48 
mov num1, al 
mov ah, 09h   ;display second msg 
mov dx, offset msg2 
int 21h 
mov ah, 01h   ;taking input 
int 21h 
sub al, 48 
mov num2, al 

这样你总和已经摆脱了这些值的特征性质分配这些值之前以后将是真正的总和这两个数字。

当准备输出任何结果时,您必须将值转换为其文本表示形式。只需添加48.

mov ah, 09h   ;display third msg 
mov dx, offset msg3 
int 21h 
mov ah, 02h 
mov dl, num1 
add dl, 48 
int 21h 
mov ah, 02h 
mov dl, num2 
add dl, 48 
int 21h 

mov ah, 09h   ;display fourth msg 
mov dx, offset msg4 
int 21h 
mov ah, 02h 
mov dl, sum 
add dl, 48 
int 21h 
+0

@hamxarajput如果这个答案让你感到高兴,那么你可以接受它。 –