使用汇编语言实现以下程序:从键盘输入一个4位十六进制数,编写程序分别将该数用二进制和八进制形式显示出来
时间: 2024-02-15 10:04:26 浏览: 143
好的,以下是 x86 汇编语言实现的代码:
```assembly
.MODEL SMALL
.STACK 100h
.DATA
HEX_NUM DB 5 ; 存储输入的十六进制数
DEC_NUM DW ? ; 存储转换后的十进制数
BIN_NUM DB 17 DUP(0) ; 存储转换后的二进制数
OCT_NUM DB 7 DUP(0) ; 存储转换后的八进制数
.CODE
MAIN PROC
MOV AX, @DATA ; 初始化数据段寄存器
MOV DS, AX
; 读取输入的十六进制数
LEA DX, HEX_NUM
MOV AH, 0Ah
INT 21h
; 将十六进制数转换为十进制数
MOV AX, 0
MOV CX, 4
MOV SI, 0
HEX_TO_DEC_LOOP:
MOV BL, HEX_NUM[SI]
CMP BL, '0'
JB HEX_TO_DEC_ERROR
CMP BL, '9'
JA HEX_TO_DEC_LETTER
SUB BL, '0'
JMP HEX_TO_DEC_CONTINUE
HEX_TO_DEC_LETTER:
CMP BL, 'A'
JB HEX_TO_DEC_ERROR
CMP BL, 'F'
JA HEX_TO_DEC_ERROR
SUB BL, 'A'
ADD BL, 10
HEX_TO_DEC_CONTINUE:
MOV DL, BL
MOV AH, 0
MUL CX
ADD AX, DX
INC SI
LOOP HEX_TO_DEC_LOOP
JMP HEX_TO_DEC_DONE
HEX_TO_DEC_ERROR:
MOV AX, -1
HEX_TO_DEC_DONE:
MOV DEC_NUM, AX
; 将十进制数转换为二进制数
MOV BL, 8
MOV SI, 0
DEC_TO_BIN_LOOP:
MOV DL, 0
MOV AH, 0
DIV BL
ADD DL, '0'
MOV BIN_NUM[SI], DL
INC SI
CMP AX, 0
JNZ DEC_TO_BIN_LOOP
; 将二进制数翻转
MOV CX, SI
MOV SI, 0
DEC CX
BIN_REVERSE_LOOP:
CMP SI, CX
JGE BIN_REVERSE_DONE
MOV AL, BIN_NUM[SI]
MOV DL, BIN_NUM[CX]
MOV BIN_NUM[SI], DL
MOV BIN_NUM[CX], AL
INC SI
DEC CX
JMP BIN_REVERSE_LOOP
BIN_REVERSE_DONE:
; 将十进制数转换为八进制数
MOV BL, 8
MOV SI, 0
DEC_TO_OCT_LOOP:
MOV DL, 0
MOV AH, 0
DIV BL
ADD DL, '0'
MOV OCT_NUM[SI], DL
INC SI
CMP AX, 0
JNZ DEC_TO_OCT_LOOP
; 将八进制数翻转
MOV CX, SI
MOV SI, 0
DEC CX
OCT_REVERSE_LOOP:
CMP SI, CX
JGE OCT_REVERSE_DONE
MOV AL, OCT_NUM[SI]
MOV DL, OCT_NUM[CX]
MOV OCT_NUM[SI], DL
MOV OCT_NUM[CX], AL
INC SI
DEC CX
JMP OCT_REVERSE_LOOP
OCT_REVERSE_DONE:
; 输出转换后的结果
LEA DX, BIN_NUM
MOV AH, 09h
INT 21h
LEA DX, OCT_NUM
MOV AH, 09h
INT 21h
MOV AH, 4Ch
INT 21h
MAIN ENDP
END MAIN
```
这段代码使用 BIOS 中断 21h 来进行键盘输入和屏幕输出操作。运行程序后,输入一个 4 位十六进制数,程序会将其转换为二进制和八进制数并输出。
阅读全文