微机原理:编写完整程序,要求从键盘输入 3 个 16 进制数,并根据 3 个数的比较显示以下信息: 1.如果 3 个数都不相等则显示 1 2.如果 3 个数中有 2 个数相等则显示 2 3.如果 3 个数都相等则显示 3
时间: 2024-03-09 22:48:29 浏览: 73
好的,这是一道比较基础的微机原理题目,我来帮你解答。
首先,我们需要了解一下如何在汇编语言中实现从键盘输入 16 进制数。一般来说,我们可以使用 INT 21H 中断来实现。具体的代码实现如下:
```
DATA SEGMENT
INPUT_MSG DB 'Please input a hex number: $'
INPUT_BUFF DB 6 DUP('$')
HEX_NUM DW ?
DATA ENDS
CODE SEGMENT
START:
MOV AX, @DATA
MOV DS, AX
; 从键盘输入第一个数
LEA DX, INPUT_MSG
MOV AH, 09H
INT 21H
MOV AH, 0AH
MOV DX, OFFSET INPUT_BUFF
INT 21H
MOV BX, OFFSET INPUT_BUFF+2
MOV CX, 2
MOV DX, 0
HEX2DEC:
MOV AX, 0
LODSB
SUB AL, '0'
CMP AL, 9
JBE NUM2DEC
SUB AL, 'A' - 10
JMP NUM2DEC_DONE
NUM2DEC:
MOV AH, 0
MUL CX
ADD DX, AX
JMP HEX2DEC
NUM2DEC_DONE:
MOV AX, DX
SHR CX, 1
JNC HEX2DEC
ADD AX, CX
MOV HEX_NUM, AX
; 从键盘输入第二个数,代码类似
...
; 从键盘输入第三个数,代码类似
...
; 比较三个数字
MOV AX, HEX_NUM
CMP AX, HEX_NUM_2
JZ HEX1_EQ_HEX2
CMP AX, HEX_NUM_3
JZ HEX1_EQ_HEX3
CMP HEX_NUM_2, HEX_NUM_3
JZ HEX2_EQ_HEX3
MOV AH, 09H
LEA DX, MSG_1
INT 21H
JMP EXIT
HEX1_EQ_HEX2:
MOV AX, HEX_NUM
CMP AX, HEX_NUM_3
JZ HEX1_EQ_HEX3
MOV AH, 09H
LEA DX, MSG_2
INT 21H
JMP EXIT
HEX1_EQ_HEX3:
MOV AH, 09H
LEA DX, MSG_2
INT 21H
JMP EXIT
HEX2_EQ_HEX3:
MOV AH, 09H
LEA DX, MSG_2
INT 21H
JMP EXIT
EXIT:
MOV AH, 4CH
INT 21H
CODE ENDS
```
上面的代码中,我们定义了三个变量 `HEX_NUM`、`HEX_NUM_2` 和 `HEX_NUM_3`,分别用于存储从键盘输入的三个 16 进制数。然后,我们使用 INT 21H 中断从键盘输入每一个数,并将其转换为十进制数进行比较,最后根据题目要求输出相应的信息。
希望这个例子能够帮助你更好地理解如何在汇编语言中实现从键盘输入和比较操作。如果你还有其他问题,请随时提出。
阅读全文