编程实现从键盘输入两个 4位十进制数,将它们的和存 SUM 单元,并输出对应的十六进制数 。要求用子程序结构完成程序设计。我的程序哪出错了,刚学这个有点不明白

下面是一个示例程序,可以实现输入两个4位十进制数,将它们的和存储在SUM单元中,并输出相应的十六进制数。

ORG 0x1000

; 定义变量
NUM1    DS 1    ; 存储第一个数
NUM2    DS 1    ; 存储第二个数
SUM     DS 1    ; 存储和

; 主程序开始
START:
    ; 输入第一个数
    CALL INPUT_NUM1
    ; 输入第二个数
    CALL INPUT_NUM2
    ; 计算和
    MOV A, [NUM1]
    ADD A, [NUM2]
    MOV [SUM], A
    ; 输出结果
    CALL OUTPUT_SUM
    ; 程序结束
    HLT

; 输入第一个数
INPUT_NUM1:
    ; 显示提示信息
    MOV AH, 02H
    MOV DL, 'Enter the first number: '
    INT 21H
    ; 获取用户输入
    MOV AH, 01H
    INT 21H
    ; 将输入转换为数字
    SUB AL, 30H
    MOV [NUM1], AL
    RET

; 输入第二个数
INPUT_NUM2:
    ; 显示提示信息
    MOV AH, 02H
    MOV DL, 'Enter the second number: '
    INT 21H
    ; 获取用户输入
    MOV AH, 01H
    INT 21H
    ; 将输入转换为数字
    SUB AL, 30H
    MOV [NUM2], AL
    RET

; 输出结果
OUTPUT_SUM:
    ; 显示提示信息
    MOV AH, 02H
    MOV DL, 'The sum is: '
    INT 21H
    ; 将和转换为十六进制数并输出
    MOV AH, 00H
    MOV AL, [SUM]
    CALL HEX_OUT
    ; 输出换行符
    MOV AH, 02H
    MOV DL, 0DH
    INT 21H
    MOV DL, 0AH
    INT 21H
    RET

; 将一个字节转换为两个十六进制字符并输出
HEX_OUT:
    PUSH AX
    AND AL, 0F0H
    SHR AL, 4
    CALL HEX_CHAR_OUT
    POP AX
    AND AL, 0FH
    CALL HEX_CHAR_OUT
    RET

; 输出一个十六进制字符
HEX_CHAR_OUT:
    CMP AL, 9
    JLE HEX_CHAR_0_9
    ADD AL, 7
HEX_CHAR_0_9:
    ADD AL, 30H
    MOV AH, 02H
    INT 21H
    RET

END

在这个程序中,我们定义了三个变量:NUM1,NUM2和SUM,分别用于存储输入的两个数和它们的和。程序首先调用INPUT_NUM1子程序获取第一个数,然后调用INPUT_NUM2子程序获取第二个数,然后将它们相加并将结果存储在SUM单元中。最后,程序调用OUTPUT_SUM子程序将和转换为十六进制数并输出。

img

img