问题 问答题

请编制程序,其功能是:内存中连续存放着20个十六位二进制数,对每个数逻辑右移,使其最低位为"1"(值为零的字不变)。
例如:
内存中有A704H(1010011100000100B),0000H,9A58H…
结果为 29C1H(0010100111000001B),0000H,134BH…
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并白行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
试题程序:

答案

参考答案:(1)0
(2)TEST
(3)NZ
(4)SHR
(5)LOOP NEXT

解析:
此程序要求对内存中的20个十六位二进制数的每一个数逻辑右移,直到最低位为1为止。考查了SHR,TEST,LOOP等指令的用法。
程序的堆栈段定义了一个128字节的堆栈区。堆栈段下面是数据段。数据段中定义了两个字型变量:原始数据区SOURCE、结果数据区RESULT;两个字节型变量:原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。
先将原始数据偏移地址装入到SI中,结果数据偏移地址装入到DI中,CX赋初值为N,用于控制循环处理的次数。
NEXT段,将SI中内容送AX中,再将AX与0做比较,如果AL等于0,转向SKIP段。所以第(1)空填写"0"。
LOOP1段的开始要填写第(2)空,这里是要判断AX的最低位是否为1,判断的方法是将AX和0001H做TEST指令。注意:这里千万不能用指令"AND AX,0001H",否则会改变AX的初值.而TEST指令不改变AX的值,它的结果只显示在几个状态标志位上。所以第(2)空填写"TEST"。当TEST的结果ZF=0,说明AX的最低位为1,AL不需要再逻辑右移了,转向SKIP段;否则,ZF=1,说明AX的最低位为0,还需要将AX继续逻辑右移1位,无条件转向LOOP1段,AX再逻辑右移1位,再判断,若仍不满足最低位为1,继续右移1位,直到AX最低位变为1为止。所以第(3)、(4)空分别填写"NZ"和 "SHR"。
再来看SKIP段,当AX的最低位为1,或者AX等于0000H时,直接将AX存入到DI中,SI和DI地址都加2,因为原始数据和结果数据都是字型的,它们在内存中都占两个地址。接着从NEXT处循环,处理下一个十六位二进制数。所以第(5)空填写"LOOP NEXT"。

完形填空
Cloze test. 完形填空。
        Adam was 11 years old, and he was a    1    bad boy, but his mother   2    asked that he would behave 
(行为) better.    3    one day,  after he had come home from school, Adam's teacher called his mother on the 
phone and said, "Hello, Mrs. Black, Adam saved another boy    4    he fell    5    the river  while we were 
   6    for a walk this morning."      
        Mrs. Btack was very happy when she heard this. She thought, "Adam is becoming a good boy. "Then 
she turned to him and said, "That was your teacher,    7    were you so brave (勇敢的) to save one of your 
friends when he fell into (掉进) the river this morning? "       
        But Adam did not look very happy when he heard this. His face turned very red, and said, " Well, I
   8     had to pull (拉) him    9    because I pushed (推) him   10   .

( ) 1. A. quite 
(     ) 2. A. always
(     ) 3. A. Them  
(     ) 4. A. where 
(     ) 5. A. on    
(     ) 6. A. out   
(     ) 7. A. when 
(      )8. A. really
(     ) 9. A. side 
( ) l0. A. away

B. many 
B. ways 
B. Then 
B. what 
B. under
B. in   
B. why  
B. real 
B. out    
B. out 

C. much
C. all 
C. then
C. when
C. into
C. up  
C. where
C. true
C. in     
C. in

D. any         
D. some     
D. Than      
D. how       
D. to        
D. down      
D. who       
D. right     
D. on             
D. of 
填空题