下面是一个示例程序,可以实现输入两个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子程序将和转换为十六进制数并输出。