汇编南开100题 题6答案(答案有错?)

来源:百度知道 编辑:UC知道 时间:2024/05/08 14:15:16
答案有错吧?第7空 应该是转到第6空的下一条指令吧 L1:DEC CX 如果转CHAN循环控制量不减1,新存入RESULT的已转换的24H会出错吧?

第六题

一、请编制程序,其功能是:将内存中存放着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(?)

这个第六题,题意明确,叙述清晰。但试题程序编制得太蠢、太笨,且有遗漏。

按题意,第7空应该转到第6空的下一条指令 L1:DEC CX,转到CHAN,循环控制量不减1,新存入RESULT的已转换的24H不会出错。因为24H($)已经存到正确位置,且SI、DI已经分别增1。但因为CX没有减1,导致多执行一次循环体,继而导致前面已经处理好的RESULT的结果遭到破坏,SOURCE中多一个20H,RESULT的结果就会被遭到破坏一个。若SOURCE中没有20H,则没有任何影响。