设计完整的8086汇编源程序,其功能是通过键盘把多位的十进制转换为二进制数,并通过显示器显示出来。
题目分析:
本汇编源程序包括以下模块:
⑴利用计算机系统调用功能实现数据输入,并把输入的ASCⅡ码转换为扩展的BCD码;
⑵设计一个算法,把多位的BCD码转换为多位的二进制数;
⑶利用计算机系统调用功能实现数据输出,把二进制数转换为ASCⅡ码显示出来。
程序设计如下变量:
ASCⅡ码数组X_ASCⅡ码,用于存放输入的ASCⅡ码串;
BCD码数组X_BCD,用于存放转换的BCD码串;
二进制数数组Y_HEX,用于存放多位二进制数,变量定义如下:
DATA SEGMENT
BUFFER DB 32 ;允许输入字符数目为32
CHAR_L DB 0 ;实际输入字符串的长度
X_ASC DB 32 DUP(0) ;定义ASCⅡ码串
X_BCD DB 32 DUP(0) ;定义BCD码串
Y_HEX DB 16 DUP(0) ;定义二进制数数组
TMP DB 16 DUP(0) ;工作单元
DATA ENDS
源程序主程序部分流程图如图1所示。
Ⅱ码可以直接采用10号系统调用实现,将其转换为BCD数,只需将数字高4位清“0”即可。
模块二:将BCD数转换为二进制是本程序的难点,转换原理可根据以下公式:
yhex=i=0N-1di×10i
(1)
其中,di是十进制数码,下标i表示第i位,N表示十进制长度,如果计算用二进制法则进行,则完成十进制到二进制的转换。
本程序可以处理的十进制数位数最多可达32位,所以采用迭代的方法显示转换,将公式(1)进行变换,得:
yhex=yhex×10+di
该部分流程图如图2所示。
开始 |
通过键盘输入ASCⅡ码数字 |
把ASCⅡ码转换为BCD数 |
把BCD数转换为二进制数 |
把二进制数转换为ASCⅡ码显示 |
结束 |
图1 主程序流程图 |
图2 BCD转换为二进制数程序流程图 |
Y |
开始 |
Y_HEX=0,i=十进制数长度 |
取Xi |
计算Y_HEX=10 Y_HEX+di |
i=i-1 |
返回 |
i=0 |
本代码尽可以将0-255的十进制数转成二进制数,老师题目是32位十进制数,能力有限,决定摆烂。
DATA SEGMENT
BUFFER DB 32 ;允许输入字符数目为32
CHAR_L DB 0 ;实际输入字符串的长度
X_ASC DB 32 DUP(0) ;定义ASCⅡ码串
X_BCD DB 32 DUP(0) ;定义BCD码串
Y_HEX DB 16 DUP(0) ;定义二进制数数组
TMP DB 16 DUP(0) ;工作单元
DATA ENDS
assume cs:code,ds:data
code segment
start: mov ax,data
mov ds,ax
MOV DX,OFFSET BUFFER ;把偏移地址给DX,也可以用 LEA DX,BUF 二者皆可
MOV AH,0AH ;键盘输入的时候,给AH 10
INT 21H ;然后INT 21H调用,默认输入到BUF中
mov bx,0
lea si,BUFFER
add si,2
com: mov al,[si]
sub al,30h
cmp [si+1],0dh
ja l1
add bh,al
mov bl,bh
mov cx,8
LP1: rol bl,1
mov dl,0
adc dl,30h
mov ah,02h
int 21h
loop LP1
mov ah,4ch
int 21h
l1: add al,bh
mov bl,0AH
MUL bl
mov bh,al
inc si
call com
code ends
end start