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

六、思考题

如果不考虑在数码管上显示,不限制数据范围,程序应如何编写。


本文标签: 字节 显示 数据 实验 输入