admin 管理员组文章数量: 1086019
2024年12月23日发(作者:mongodb数据集和分片的区别)
实验四四字节十六进制数转十进制数
一、实验目的
进一步熟悉8086汇编指令,了解十六进制数转十进制数的方法。
二、实验内容
从键盘上输入8位十六进制数,实现四字节十六进制数转8位十进制数,并在数码管上
显示。注意输入数据必须在00000000H~05F00000H范围,否则,结果超出8位十进制数,
无法正确显示。
三、程序框图
开始
设定"先清LED再接收键
输入"标志
通过键盘获得四字节十
六进制数
设定"接收到第一个键
后才清除LED"标志
4字节16进制数-->DI,SI
调用四字节十六进制转
十进制子程序
显示结果
主程序
N
开始
0-->BX,AX(存放结果用)
32-->CX(循环次数)
DI,SI(32位)循环右移一
位-->CY
BH,BL,AH,AL x 2 +进位
CY,同时进行十进制调整
CX=CX-1CX=0 ?
Y
结束
四字节十六转十进制子程序
四、实验步骤
1、连线说明:
D3区 :CLK
D3区 :CS
D3区 :A0
—— B2区:2M
—— A3区:CS5
—— A3区:A0
2、在F4区的键盘上输入8位十六进制数
3、结果显示在F4区的数码管上
五、程序清单
EXTRN
EXTRN
.MODEL TINY
Display8:NEAR, GetKey:NEAR
F1:BYTE
.STACK
.DATA
100
BUFFER
START:
START1:
DB
.CODE
MOV
MOV
MOV
NOP
MOV
LEA
MOV
CALL
MOV
MOV
MOV
CALL
LEA
CALL
MOV
CALL
MOV
CALL
MOV
CALL
LEA
MOV
CALL
LEA
CALL
8 DUP(?)
AX,@DATA
DS,AX
ES,AX
F1,0
;先清除显示,再接收键输入
;按键次数
;得到4字节十六进制数
;接收到第一个键,才清除显示
DI,BUFFER
CX,8
GetKey
F1,1
SI,WORD PTR BUFFER
DI,WORD PTR BUFFER + 2
B4toD4 ;转换成十进制数
DI,BUFFER
B1toB2
AL,AH
B1toB2
AL,BL
B1toB2
AL,BH
B1toB2
SI,BUFFER+7
CX,7
BlackDisplay
SI,BUFFER
Display8
;存放显示结果
;低位
;将高位0消隐
;将高位0消隐
JMP START1
;将一个字节压缩BCD码转换成二个字节非压缩BCD码
B1toB2 PROC NEAR
B1toB2
BlackDisplay
BlackDisplay1:
PUSH
AND
STOSB
POP
AND
ROR
STOSB
RET
ENDP
PROC
STD
MOV
LODSB
CMP
AX
AL,0FH
AX
AL,0F0H
AL,4
NEAR
DI,SI
AL,0
Exit:
BlackDisplay
JNZ
MOV
STOSB
LOOP
CLD
RET
ENDP
Exit
AL,10H
BlackDisplay1
;四字节十六进制数转十进制数:DISI为十六进制,BXAX为压缩BCD码
B4toD4 PROC NEAR
B4toD4_1:
B4toD4
XOR
XOR
MOV
RCL
RCL
ADC
DAA
XCHG
ADC
DAA
XCHG
ADC
DAA
XCHG
ADC
DAA
XCHG
XCHG
XCHG
LOOP
RET
ENDP
END
AX,AX
BX,BX
CX,32
SI,1
DI,1
AL,AL
AL,AH
AL,AL
AL,BL
AL,AL
AL,BH
AL,AL
AL,BH
AL,BL
AL,AH
B4toD4_1
START
六、思考题
如果不考虑在数码管上显示,不限制数据范围,程序应如何编写。
版权声明:本文标题:四字节十六进制数转十进制数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1734980829a1617810.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论