控制所要插入数的个数,插入完一个数后, BX 减 1。
程序的堆栈段定义了一个 128 字节的堆栈区, 堆栈段下面是数据段。 数据段中定义了五
个字节型变量:原始数据区 SOURCE、变量 INDA TA( 包括四个将要插入的数 )、结果数据区
RESULT 、原始数据文件名 NAME0 、结果数据文件名 NAME1 。数据段下面是代码段,在
代码段的开始告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器 CS、DS、SS。
接下来是对返回地址的保存和数据段寄存器的初始化, 这是每一个汇编程序所必须具有
的操作步骤。 然后调用外部过程 LOAD ,从 ,'INPUT1.DA T”中读取数据。 准备工作完成以后,
程序进入主体部分。需说明的是,程序中所有分号 “;”后边的部分均为注释说明性内容。
将原始数据的偏移地址 SI 赋初值为 0,所以第 (1)空填写 “MOV SI,0”。将结果数据韵偏
移地址 DI 也赋初值为 0,CX 和 BX 的初值都为 4。由于需先将 SOURCE[SI] 中的内容传送
给 AH ,所以第 (2) 空填写 “MOV AH,SOURCE[SI]”,再将 AH 存储到 RESULT[DI] 中。 CX
减 1,若 CX 为 0,表示已经搜索到了第四个字符,则转向 INSERl 段,开始插入第一个数:
否则 CX 不为 0,继续搜索下一个字符,即无条件转向 CHAN 段。第 (3)空 SI 地址加 1,继
续取下一个数据。
INSER1 段是将 INDA TA 中的数据插入到 RESULT[DI] 中。先给 AH 赋值为 INDA TA[S1
-1] ,再将 AH 存入到 RESULT[DI] 中,所以第 (4)空填写 “AH”。INDA TA[SI-1] 表示每次取完 I
NDA TA 中的一个数后,偏移地址 SI 减 1,取下一个数 (INDATA 中一共四个数 )。插入一个
数后, BX 减 I,若 BX 减为 0,表示四个数全部都已经插入到数组的四个位置中,则转向 E
XIT 段,所以第 (5)空填写 “EXIT”。
另外,在 INSER1 程序段中,先执行指令 “PUSH SI”,然后给 Sl 赋值,有压入就必有弹
出,所以第 (6)空填写 “POP SI”,与前面的 “PUSH SI”指令相对应。当插入操作未完时,继续
搜索下一组四个数,然后再插入新的数,无条件转向 CHAN 段,所以第 (7) 空填写 “CHAN”。
来源 :考试大 -计算机等级考试
2009 年全国计算机等级三级考试 PC 技术上
机试练习习题 (3)
来源:考试大 2009/1/1 【考试大:中国教育考试第一门户 】 模拟考场 视频课程 字号 :T
T
第 3 套上机试题及答案详解
请编制程序,其功能是:以 SOURCE 开始的内存区域存放着 N 个字节的压缩 BCD 码,
将每个压缩 BCD 码转换成两个 ASCIl 值,并在每个 ASCII 值的最高位增加偶校验位,结果
存放在 RESULT 指示的内存区域。
例如:
原压缩 BCD 码: 26H,75H,91H, 33H…
结果为: 82H,36H, B7H…
部分程序已经给出, 其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE
开始的内存单元中,转换结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTP
UT1.DAT 中。