0

我正在使用 EMU8086。如何添加 4 位数字并使用一个变量在 Assembly 中显示总和?

DATA SEGMENT
     MSG1 DB "ENTER NUMBER WITH FOUR DIGITS : $"
     MSG2 DB 10,13,"RESULT : $"
     D1 DB ? 
     D2 DB ?
     D3 DB ?
     D4 DB ?
     SUM DB ?
     RES  DB 10 DUP ('$')
DATA ENDS
CODE SEGMENT 
    ASSUME DS:DATA CS:CODE
START:
      MOV AX,DATA
      MOV DS,AX

      LEA DX,MSG1         
      MOV AH,9
      INT 21H     

      MOV AH,1
      INT 21H
      SUB AL,30H
      MOV AH,0
      MUL AL
      MOV D1,AL

      MOV AH,1
      INT 21H
      SUB AL,30H
      MOV AH,0
      MUL AL
      MOV D2,AL

      MOV AH,1
      INT 21H
      SUB AL,30H
      MOV AH,0
      MUL AL
      MOV D3,AL

      MOV AH,1
      INT 21H
      SUB AL,30H
      MOV AH,0
      MUL AL
      MOV D4,AL

      ADD AL,D3
      ADD AL,D2
      ADD AL,D1      
      MOV SUM,AL 

      LEA SI,RES
      CALL HEX2DEC

      LEA DX,MSG2
      MOV AH,9
      INT 21H

      LEA DX,RES
      MOV AH,9
      INT 21H 

      MOV AH,4CH
      INT 21H     
CODE ENDS
HEX2DEC PROC NEAR
    MOV CX,0
    MOV BX,10

LOOP1: MOV DX,0
       DIV BX
       ADD DL,30H
       PUSH DX
       INC CX
       CMP AX,9
       JG LOOP1

       ADD AL,30H
       MOV [SI],AL

LOOP2: POP AX
       INC SI
       MOV [SI],AL
       LOOP LOOP2
       RET
HEX2DEC ENDP
END START
4

1 回答 1

0

您提出的问题与您编写的代码并不完全对应。如果您要添加几个 4 位数字,那么您当然必须输入多个这样的数字!请参阅额外部分。
因此,我得出的结论是,您可能只是对问题的措辞不当,我将对您显示的代码发表评论:


您的程序将单个 4 位数字的 4 位相加。这意味着最大结果可以是 9+9+9+9,即 36。这一事实对于程序的其余部分很重要,因为它会影响指令的选择。

当您实际输入单个数字时,您会立即通过使用mul al指令对它们进行平方来销毁它们!

MOV AH,1
INT 21H
SUB AL,30H    ; From "0".."9" to 0..9
MOV AH,0      <-- Don't do this
MUL AL        <-- Don't do this
MOV D1,AL

将 sum 移动到sum变量没有任何意义,因为它以后不会被这样使用。但是您确实需要将 AL 寄存器扩展到 AX 的大小,因为转换例程需要 AX 作为输入:

ADD AL,D3
ADD AL,D2
ADD AL,D1      
MOV SUM,AL    <-- Maybe not needed?
CBW           <-- This clears AH (the high byte of AX) because AL is a very small number (less than 128)

LEA SI,RES
CALL HEX2DEC

我看到您选择让转换例程HEX2DEC始终显示 2 个十进制数字。这可以。


额外的

为了让您开始添加几个 4 位数字,我将添加代码以检索这些数字中的第一个。确保在DATA段中定义字大小的变量。

计算基于以下公式:Number= D1*1000+D2*100+D3*10+D4

将两个数字相加并显示它们应该是轻而易举的事!

NUM1 DW ?
NUM2 DW ?
SUM  DW ?

...

MOV AH,1
INT 21H
SUB AL,30H
CBW
MOV DX,1000
MUL DX
MOV NUM1,AX

MOV AH,1
INT 21H
SUB AL,30H
CBW
MOV DX,100
MUL DX
ADD NUM1,AX

MOV AH,1
INT 21H
SUB AL,30H
MOV AH,10
MUL AH
ADD NUM1,AX

MOV AH,1
INT 21H
SUB AL,30H
CBW
ADD NUM1,AX
于 2016-08-18T10:56:28.387 回答