Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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 在汇编语言中添加两个数字作为输入_Assembly_Masm_X86 16_Dos - Fatal编程技术网

Assembly 在汇编语言中添加两个数字作为输入

Assembly 在汇编语言中添加两个数字作为输入,assembly,masm,x86-16,dos,Assembly,Masm,X86 16,Dos,我必须编写一个汇编程序,将两个作为输入接收的数字相加,然后打印总和。我对它还是很陌生,花了大约15个小时试图弄明白这一点,这让我发疯。我的问题是我相信乘法中的某个地方。当我运行程序时,我会得到奇怪的字符作为输出。我知道程序正在正确地接收输入的数字,减法也能工作。然而,当涉及到倍增时,一切都是一团糟。这也是用汇编语言8086编写的。如果能帮上点忙,我们将不胜感激 这是我的密码 ;-----------------------------------------------------

我必须编写一个汇编程序,将两个作为输入接收的数字相加,然后打印总和。我对它还是很陌生,花了大约15个小时试图弄明白这一点,这让我发疯。我的问题是我相信乘法中的某个地方。当我运行程序时,我会得到奇怪的字符作为输出。我知道程序正在正确地接收输入的数字,减法也能工作。然而,当涉及到倍增时,一切都是一团糟。这也是用汇编语言8086编写的。如果能帮上点忙,我们将不胜感激

这是我的密码

;-----------------------------------------------------
        .model small
;-----------------------------------------------------
        .stack  64
;-----------------------------------------------------  
        .data
PR      DB      'ENTER: ','$'
Num1    Label   Byte
Max1    DB      3 ; need to hit atmost 3 keys when entering- 2 digits and the enter key
Act1    DB      ?
N1      DB      4 DUP ('$')
Num2    Label   Byte
Max2    DB      3 ; need to hit atmost 3 keys when entering- 2 digits and the enter key
Act2    DB      ?
N2      DB      4 DUP ('$')
Res     DB      3 DUP ('$')
;-----------------------------------------------------
        .code
MAIN    proc    FAR
        mov     AX,@data        ; Initialize segment
        mov     DS,AX           ; registers

        call    CLEAR
        call    SET_CURSOR
        call    REQUEST_INPUT
        call    GET_INPUT1
        call    REQUEST_INPUT
        call    GET_INPUT2
        call    SET_CURSOR
        call        Convert1


        mov     AX,4C00h        ; Exit to DOS
        int     21h
MAIN    endp
;-----------------------------------------------------
CLEAR   proc    NEAR
        mov     AX, 0600H
        mov     BH, 71H
        mov     CX, 0000H
        mov     DX, 184FH
        int     10H
        ret
CLEAR   endp

;-----------------------------------------------------
SET_CURSOR      proc    NEAR
        mov     AH, 02H
        mov     BH, 0           ;sets color of backround 
        mov     DH, 12
        mov     DL, 40
        int     10H
        ret
SET_CURSOR      endp
;-----------------------------------------------------
REQUEST_INPUT   proc    NEAR
        mov     AH, 09H
        lea     DX, PR
        int     21H 
        ret
REQUEST_INPUT   endp

;-----------------------------------------------------
GET_INPUT1       proc    NEAR
        mov     AH, 0AH
        lea     DX,Num1
        int     21H
        mov     BH, 00
        mov     BL, Max1
        mov     N1[BX],'$'
        ret
GET_INPUT1       endp
;-----------------------------------------------------
GET_INPUT2      proc    NEAR
        mov     AH, 0AH
        lea     DX,Num2
        int     21H
        mov     BH, 00
        mov     BL, Max2
        mov     N2[BX],'$'
        ret
GET_INPUT2       endp
;-----------------------------------------------------          
Convert1        proc    NEAR
                  mov     BX, 0
                    mov     AH, 00h
                mov     AL, N1[BX]   ; Get a character
                Mov Ax, 10
                Mul AL
                 mov     BX, 1
                    mov     BH, 00h
                mov     BL, N1[BX]   ; Get a character
                Add AL, BL
                mov     BX, 0
                    mov     CH, 00h
                mov     CL, N2[BX]   ; Get a character
                Mov Ax, 10
                Mul CL
                 mov     BX, 1
                    mov     BH, 00h
                mov     DL, N2[BX]   ; Get a character
                Add CL, DL
                Add AL, CL
                Mov Ax, 10
                Div Al
                Mov Res[0], AL
                Add AH, 48
                call SET_CURSOR2 
                Mov Res[1], AH              
                mov     AH,09h
                lea     DX, Res
                int     21H
                ret

Convert1   endp                                 
;-----------------------------------------------------          






            ;formula ()N1[0]-48)*10 + (N1[1]-48)
            ;same for N2
            ;before printing need to divide result of N1+N2 by 10. the quation is the frist character remainder is the second character- quaotiant will be in AL, Remainder in AH
            ;then need to add 48 before putting them into the array Res
            ;To go back Add Al,48-Mov Res[0], AL


;------------------------------------------------------------
                end     MAIN 

欢迎来到StackOverflow!你目前得到了什么?你期望得到什么?你到底有什么问题?你说你有问题,但不是什么问题。那将帮助我们帮助你。另外,您使用的是哪种汇编语言?为了充分利用你在stackoverflow的经历,我的问题是我相信乘法运算中的某个地方。当我运行程序时,我会得到奇怪的字符作为输出。我知道程序正在正确地接收输入的数字,减法也能工作。然而,当涉及到倍增时,一切都是一团糟。这也是在汇编语言8086中,
mov AL,…
然后
mov Ax,10
后面跟着
Mul AL
肯定是一种代码味道
mul al
al
乘以
al
。这些指令的结果总是ax=100,我同意玛格丽特·布鲁姆的观点。看起来您正在将一个字符放入寄存器ax,然后立即用10覆盖该字符。寄存器al只是ax的低位字节。所以如果我需要将输入al的值乘以10,我应该将10移到另一个寄存器中,然后再相乘?