2004年自学考试汇编语言模拟试题(四) | |
---|---|
http://www.sina.com.cn 2004/10/21 13:57 华夏大地教育网 | |
四,程序填空题(注意:下列各小题中,每空只能填一条指令!每小题6分,共12分) 1.在表TABLE处存放着N个无符号字节数,求表中前10个字节数的总和并保存在AX寄存器中。如果总和值超过AX寄存器的容量,则置AX寄存器内容不变。请在程序中的空格处填入适当指令使其完整。 LEA BX,TABLE (2) MOV CX,10 JC END0 MOV SUM,AX DON:INC BX MEXT:(1) (3) ADC AH,0 ENDO:HLT JNC DON 答:(1) ADD AL, [BX] (2) MOV AX, SUM (3) LOOP NEXT [解析]1)程序的前三条指令的功能分别是: 将表TABLE的首址传送给BX; 将循环次数传送给计数器CX; 将AX的原值保存在SUM单元中; 以上指令实现了设置循环初始参数的功能。 2)标号NEXT所对应的第一个空白处就是循环体的第一条指令。根据题目的要求——求表中前10个字节数的总和,可知循环每次应实现将表TABLE中的数据按字节加法的方式进行累加到AL中,并且将字节加法产生的进位加到AH中。所以第一个空白处应填入指令: ADD AL, [BX] 3)程序的第五条指令实现的是判断求得的和是否超过AX寄存器的容量。 4)如果有进位(即已超过AX寄存器的容量),则执行第二个空白处的指令,根据题目当出现此种情况时,使AX内容不变,即恢复其原值,因此第二个空白处应填入指令:MOV AX, SUM。 5)如果没有进位(即未超过AX寄存器的容量),则转DON。程序将使BX的内容加1,即使其指向下一个表中的字节数据。接下来就应该将计数器CX减1,并判断是否继续下一次循环。因此,第三个空白处应填入指令: LOOP NEXT。 2.BEG为起始地址的存储区域中存放有100个字节数据,现将其首、尾颠倒过来,重新排放这100个字节数据。请在程序中的空格处填入适当的指令使其完整。 MOV CX,32H LEA SI,BEG MOV DI,SI (1) DON:MOV AL,[SI] (2) MOV [SI],AL (3) DEC DI LOOP DON HLT 答:(1) ADD DI, 99 (2) XCHG AL, [DI] (3) INC SI [解析]1) 题目要求:将以BEG为起始地址的区域中的100个字节数据首尾颠倒存放。例如,如果原先为X1,X2, X3,…, X98, X99, X100,则首尾颠倒后将变为X100, X99, X98,…,X3, X2,X1。 2) 颠倒的方法是:将X1与X100对调、X2与X99对调、X3与X98对调、……,即将前一半的数据与后一半相应位置的数据对调。这个过程每次处理两个数据,所以共有(100/2=)50对数据对调。 3) 根据以上分析可知,这个循环将进行50(32H)次,每次将相应的两个数据对调,这两个数据可分别由两个寄存器来指向。 4) 阅读程序可知,SI寄存器指向前一半中的某个数据,DI寄存器指向后一半中对应的数据。在循环的初始化部分,使应计数器CX的值为50(或32H),SI指向第一个数,DI指向最后一个数,所以第一个空白处应填入指令:ADD DI, 99。 5) 在循环体中,应首先交换SI和DI所指向单元的内容,然后使指针SI加1、DI减1,所以第二、三个空白处应填入指令: ① XCHG AL, [DI] ② INC SI |