Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编8086中两个数字(每个2个字符)的总和_Assembly_X86 16_Emu8086 - Fatal编程技术网

Assembly 汇编8086中两个数字(每个2个字符)的总和

Assembly 汇编8086中两个数字(每个2个字符)的总和,assembly,x86-16,emu8086,Assembly,X86 16,Emu8086,事实上,我是使用emu8086进行汇编代码的初学者。我想计算两个数字的和,每个数字有2个字符,然后生成n个字符的和。我可以用一个角色,但不能用两个角色 data segment mess1 db "saisir le premier nombre : $" mess2 db 0Ah,0Dh, "saisir le second nombre : $" ;0ah, 0dh

事实上,我是使用emu8086进行汇编代码的初学者。我想计算两个数字的和,每个数字有2个字符,然后生成n个字符的和。我可以用一个角色,但不能用两个角色

data segment                                     
    mess1 db "saisir le premier nombre : $"               
    mess2 db 0Ah,0Dh, "saisir le second nombre : $"    ;0ah, 0dh pour faire le saut de ligne
    mess3 db 0Ah,0Dh, "le resultat est : $"
    a db ?         ; contient le nombre apres conversion 
    b db ?         
    res db ?            
    buffer db 2 dup ('$')   
    dix db 10        
data ends

code segment

    assume cs:code, ds: data

debut:        
    mov ax,data
    mov ds,ax
     ;affichage du 1er message  
     mov DX, offset mess1 ; lea DX,mess1
     call AffichageMess 

     ;saisie du premier nombre   
     call SaisiNb

     ;convertion du premier nombre   
     call ConvertNb 


     mov a,al


      ;affichage du 2eme message 
     mov DX, offset mess2 ; lea DX,mess2 
     call AffichageMess 

     ;saisie du deuxieme nombre   
     call SaisiNb

     ;convertion du deuxieme nombre   
     call ConvertNb   

     mov b,al



     call Somme 


     mov DX, offset mess3 ;lea DX,mess3
     call AffichageMesRes     



fin: mov ah,4ch
     int 21h


     ;DECLARATION DES PROC

     affichageMess Proc 
         mov ah,09h
         int 21h   
         Ret
     affichageMess endp





     SaisiNb Proc 
         xor si,si
         xor cx,cx
         mov cx,2   ;saisie de chaine numerique de 2caracteres  

         Repeat: 
         mov ah,01h                      
         int 21h  
         mov buffer[si],al        ;Mode d'adressage INDEXE RELATIF
         inc si
         loop Repeat   

         Ret 
     SaisiNb endp




     ConvertNb Proc   
         xor ax,ax
         mov al,buffer[0] 
         sub al,'0'
         mul dix
         mov bl,buffer[1]  
         sub bl,'0'
         add al,bl


         Ret
     ConvertNb endp   



     Somme Proc
         mov al,a
         add al,b
         mov res,al
         Ret

     Somme endp

     AffichageMesRes Proc
          mov ah,09h
         int 21h  

         call Somme
         mov ah,02h
         int 21h            
         Ret 
     AffichageMesRes endp  
code ends
end debut

您的
AffichageMesRes
过程错误。首先,它再次调用
Somme
,尽管这两个数字都已添加到主线程
处女秀:
。 第二,使用DOS函数AH=2将字符写入标准输出时,需要将字符加载到DL中,而不是

res
中的计算结果是一个8位无符号二进制数。例如,如果您输入12作为le premier nombre,输入34作为le second nombre,则结果为12+34=46,存储在
res
中作为0x2E。在控制台上写入二进制0x2E之前,需要将其转换为两个十进制字符“4”和“6”。
提示:将0x2E除以dix,并使用divident(4)作为第一位数字,剩余部分(6)作为第二位数字。

请重命名标识符并翻译注释。