1 / 31
文档名称:

第4章汇编语言程序设计3.ppt

格式:ppt   页数:31页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第4章汇编语言程序设计3.ppt

上传人:中国课件站 2011/10/11 文件大小:0 KB

下载得到文件列表

第4章汇编语言程序设计3.ppt

文档介绍

文档介绍:
十、二进制数、ASCII码之间的互相转换。
①BCD数→2进制数
算法:Dn-1*10n-1+……+D0*100
= (…(Dn-1*10+ Dn-2)*10+…)*10+ D0
= (…((0*10+Dn-1)*10+ Dn-2)*10+…)*10+ D0
即: 新的中间结果= 中间结果*10+本位数字
(中间结果初值为0)
常见程序设计举例
1
程序1:将≤65535的非压缩BCD数转换成2进制数。程序如下。

;数据段定义
mydata SEGMENT
um DB 5, 3, 0, 1, 9 ;BCD数 53019
binnum DW ?
mydata ENDS
2
prog SEGMENT
ASSUME CS:prog,DS:mydata
begin: MOV AX, mydata
MOV DS, AX
MOV SI, OFFSET um
MOV CX, 5 ;5位BCD数
MOV BX, 10
XOR AX, AX ;中间结果初始值为0
Next: MUL BX ;中间结果*10+本位数字
ADD AL, [SI]
ADC AH, 0
INC SI ;指向下位BCD数
LOOP next
MOV binnum, AX ;保存结果
MOV AH, 4CH
INT 21H
prog ENDS
END begin
3
程序2:把≤255的非压缩BCD数转换成2进制数
um DB 1,5,9 ;BCD数159
binnum DB ?
……
MOV AX,um
XCHG AH, AL ;百位在AH, 十位在AL
AAD ;百位数*10 + 十位数
MOV AH, AL ;中间结果送AH
MOV AL, um+2
AAD ;中间结果*10 + 个位数
MOV binnum, AL
……
4
例:从键盘输入两个整数,并求其和。
因键入为整数,故要进行如下转换:
ASCII→BCD→二进制数
ASCII→BCD码很简单,高4位清零即可得到非压缩的BCD码。
BCD→二进制数在本例中采用用以下方法:
((((0+千位数)*10+百位数)*10)+十位数)*10+个位数
②ASCII码→二进制数(用于输入)
第一次中间结果
第二次中间结果
第三次中间结果
最终结果
5
开始
两个数分别转换
成二进制数
键入两个数
相加
结束
返回DOS
如有溢出则提示
开始
取第一个ASCII码
是负号吗?
数字符个数-1,指针+1
指针定位
字符个数-1
= 0?
取数字,与中间结果
相加,再乘以10
指向下一个数字字符
加个位数
是负数
则求补
存结果
结束
N
Y
Y
N
转换子程序
6
程序如下:
DATA SEGMENT
STR1 DB 10,?,10 DUP(?) ;第1个数的输入缓冲区
STR2 DB 10,?,10 DUP(?) ;第2个数的输入缓冲区
NUM DW ?,? ;存转换后的二进制数
SUM DW 0 ;存和
OVER DB ‘Overflow!’,13,10,’$’
DATA ENDS
;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
7
START: MOV AX,DATA
MOV DS,AX
MOV AH,0AH
LEA DX,STR1
INT 21H ;输入第一个数字串(设为26)
MOV AH,0AH
LEA DX,STR2
INT 21H ;输入第二个数字串(设为33)
LEA BX,STR1 ;串1的首地址送BX
LEA DI,NUM ;存二进制首地址送DI
CALL CHANGE ;将串1 ASCII码→二进制
LEA BX,STR2 ;串2的首地址送BX
8
LEA DI,NUM+2 ;指向
CALL CHANGE ;将串2 ASCII码→二进制
MOV AX,NUM ;(AX)=[NUM]=001AH
ADD AX,NUM+2 ;两数相加,(AX)=003BH
MOV SUM,AX ;存和
JNO NEXT ;无溢出,转NEXT
LEA DX,OVER
MOV AH,9
INT 21H ;显示’Overflow!’
NEXT: MOV AH,4CH
INT 21H ;返回DOS
MAIN ENDP
9
CHANGE PROC
MOV CL,[BX+1] ;实际字符数送CL
MOV AL,[BX+2] ;第一个字符送AL
MOV CH,AL ;暂存在CH
CMP AL,’-’;第一个字符是负号吗?