欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

请编制程序PROG1.ASM,其功能是:将连续20个字节的ASCII码(30~39之间)顺序转换成10个压缩BCD码 例

时间:2017-09-02

请编制程序PROG1.ASM,其功能是:将连续20个字节的ASCII码(30~39之间)顺序转换成10个压缩BCD码。


例如:原始数据 31H,33H,35H,38H……(后面依次有16个ASCII码)


转换后为 13H,58H,……(后面依次有8个压缩BCD码)


部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果(要求从RESULT开始存入)由SAVE过程保存到OUTPUT. DAT中。请在BEGIN和END之间补充一段源程序,完成要求的功能。


原有数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由SAVE保存到OUTPUT1.DAT文件


对程序必须进行汇编,并与IO.OBJ连接产生PROG1.EXE执行文件,最终产生运行结果(无结果或结果不正确均不得分)。


部分程序如下:


EXTRN LOAD:FAR,SAVE:FAR


N EQU 20


STAC SEGMENT STACK


DB 128 DUP(?)


STAC ENDS


DATA SEGMENT


SOURCE DB 31H,32H,33H,34H,35H,36H,37H,38H


RESULT DB N DUP(0)


NAME0 DB 'INPUT1.DAT', 0


NAME1 DB 'OUTPUT1.DAT', 0


DATA ENDS


CODE SEGMENT


ASSUME CS:CODE,DS:DATA,SS:STAC


START PROC FAR


PUSH DS


XOR AX,AX


PUSH AX


MOV AX,DATA


MOV DS,AX


LEA DX,SOURCE ; 数据区起始地址


LEA SI,NAME0 ; 原始数据文件名


MOV CX,N ; 字节数


CALL LOAD ; 从 "INPUT1. DAT"中读取数据


**** BEGIN ****


**** END ****


LEA DX,RESULT ; 结果数据区首地址


LEA SI, NAME1 ; 结果文件名


MOV CX,N ; 结果字节数


CALL SAVE ; 保存结果到文件


RET


START ENDP


CODE ENDS


END START


相关知识:


●BCD码和压缩BCD码


BCD码就是以二进制数表示十进制数,以4位二进制数表示1位十进制数,0000~1001表示0~9,1010~1111六个状态无意义。非压缩BCD码以一个字节表示一位BCD码,压缩BCD码一个字节表示两位BCD码。


●ASCII码与压缩BCD码之间的转换


0~9的ASCH码为30H~39H,从数字的ASCII码求数字本身,只要用他的ASCII码减去30H即可。由两位非压缩BCD码构成一个字节的压缩BCD码可将高位的BCD码移到高四位,然后与低位的BCD码进行逻辑或(OR)操作即可完成。


编程思路:


第一步:分析本程序要求完成的功能。


本程序要求完成以下功能:


(1)从数据文件INPUT1.DAT中读取20个字节的ASCII码存放在SOURCE开始的内存单元中。


(2)将SOURCE开始的20个ASCII码求出其对应的数值,然后转换成压缩的BCD码,依次放在RESULT开始的内存单元中。


(3)将处理之后的字符串存入到OUTPUT1.DAT。


第二步:用相应汇编程序来实现其功能。


(1)数据的读取和存入题目中已经给出,只要完成20个ASCII码到压缩BCD的转换即可。


(2)由ASCII码到压缩BCD码的转换过程如下:


由于20位ASCII码正好转换成10个字节压缩BCD码,不存在某个字节的BCD码只有一位。因此依次从SOURCE开始的内存单元取两个ASCII码,前一个转换成压缩BCD码的高位,后一个转换成压缩BCD码的低位来构成压缩BCD码;每两个ASCII码转换成一个字节的压缩BCD码,直至转换完毕。



答案说明:本题目答案来自网络整理或转载,最终答案请以官网为准。


答 案:LEA SISOURCE LEA DIRESULT MOV CXN/2LO: MOV AL[SI] SUB AL30H ;将ASCII码转换成10进制数 INC SI MOV AH[SI] SUB AH30H ;将第二个数转换成10进制数 SHL AH1 SHL AH SHL AH1 SHL AH1 ;将第二个数移到高4位中 OR ALAH ;将两个BCD码压缩到一个字节中成为压缩 BCD码 MOV [DI]AL INC SI INC DILOOP LO
LEA SI,SOURCE LEA DI,RESULT MOV CX,N/2LO: MOV AL,[SI] SUB AL,30H ;将ASCII码转换成10进制数 INC SI MOV AH,[SI] SUB AH,30H ;将第二个数转换成10进制数 SHL AH,1 SHL AH, SHL AH,1 SHL AH,1 ;将第二个数移到高4位中 OR AL,AH ;将两个BCD码,压缩到一个字节中,成为压缩 BCD码 MOV [DI],AL INC SI INC DILOOP LO
相关推荐

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。