三级PC 南开第六题

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:51:33
一、请编制程序,其功能是:将内存中存放着20个数字0~9之间的ASCII字符(包括数字0和9的ASCII字符)或SP字符(20H),请将数字0~9之间的ASCII字符(包括数字0和9的ASCII字符)转换为相应的八位二进制数,并将SP字符转换为 $ 字符(24H)。将按上述方法处理后得到的20个字节存入内存中。
例如:
内存中有 20H(’SP’),30H(’0’),31H(’1’),31H(’1’),20H(’SP’),32H(’2’),…,39H(’9’)(共20个ASCII字符)
结果为 24H(’$’),00H,01H,01H,01H,24H(’$’),02H(’2’),…,09H(’9’)(共20个字节)
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。

试题程序:

EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTP

答案是正确的.你错了.第四空前面有两条语句:SUB AL,20H和JZ CHANGE,第一条是当前取到要处理的字符减去20H,因为题目已经申明原始数据就是0-9的ASCII码和空格,可以认为这条语句就是在预先处理;第二条语句非常明确,就是在判断,刚刚减去20H的这个字符,是不是空格(20H-20H=0),是的话就转去指定标号,加入'$'字符,完成本次一个数字字符到二进制的转换,准备下一个转换过程.
这样,第四空里填10H就合理了,如果不是空格字符,那就是0-9的ASCII码减去20H后的剩余值,0-9的ASCII原本是30H-39H,减去20H,可不就是10H-19H嘛,再继续减10H,就是真正的数字0-9的真值.后续的处理就和这个思考是合拍的