8086汇编语言 以子程序调用的形式,实现从键盘输入一个四位的十六进制数(字母为大写),将其转化为十进制数输出显示。
时间: 2024-06-09 07:06:02 浏览: 238
zxc.rar_ZXC大写_ZXC小写怎么写_sub
下面是一个简单的8086汇编程序,可以从键盘输入一个四位的十六进制数,将其转换为十进制数并输出到屏幕上。
```
.MODEL SMALL
.STACK 100H
.DATA
HEX DB 4 DUP('$') ; 存储输入的十六进制数
DEC DW 0 ; 存储十进制数
MSG DB 'Enter a 4-digit hexadecimal number: $'
.CODE
MAIN PROC
MOV AX, @DATA ; 初始化数据段寄存器
MOV DS, AX
LEA DX, MSG ; 输出提示信息
MOV AH, 09H
INT 21H
MOV CX, 4 ; 循环四次
LEA SI, HEX ; 存储输入的十六进制数
MOV AH, 01H
@@:
INT 21H ; 从键盘读取一个字符
CMP AL, '0'
JB @F ; 不是数字字符,跳过
CMP AL, '9'
JA @F
SUB AL, '0' ; 数字字符转换为数字值
JMP @G
@@:
CMP AL, 'A'
JB @F ; 不是大写字母字符,跳过
CMP AL, 'F'
JA @F
SUB AL, 'A'
ADD AL, 10 ; 大写字母字符转换为数字值
JMP @G
@@:
CMP AL, 'a'
JB @F ; 不是小写字母字符,跳过
CMP AL, 'f'
JA @F
SUB AL, 'a'
ADD AL, 10 ; 小写字母字符转换为数字值
@@:
MOV [SI], AL ; 存储十六进制数
INC SI
LOOP @B
; 转换为十进制数
MOV AX, 0 ; AX存储十进制数
MOV BX, 1 ; BX存储位权值
LEA SI, HEX ; SI指向存储输入的十六进制数的数组
MOV CX, 4 ; 循环四次
@@:
DEC SI
MOV AL, [SI] ; 取出一个十六进制位的值
MOV DX, 0
MOV BL, 1 ; BL存储乘数
@@:
MUL BL ; AX = AL * BL
INC BL ; BL = BL + 1
LOOP @B
ADD AX, DX ; AX = AX + DX
MOV DX, BX ; DX存储下一个位权值
MUL DX ; AX = AX * DX
ADD BX, BX ; BX = BX * 2
LOOP @B
; 输出十进制数
MOV DEC, AX
MOV AH, 09H
LEA DX, DECMSG
INT 21H
MOV AH, 4CH ; 退出程序
INT 21H
MAIN ENDP
DECMSG DB 13, 10, 'The decimal number is: $'
END MAIN
```
这个程序首先输出提示信息,然后从键盘读取一个四位的十六进制数,将其存储在一个数组中。接下来,它将数组中的十六进制数转换为十进制数,并将其存储在一个变量中。最后,它输出十进制数到屏幕上。
阅读全文