N1 DB ××,××,××,?? N2 DB ××,××,××,?? N3 DB 10H DUP(0) DATA ENDS
5、加密移动字符串,设缓冲区SBUFF中有20个小写字母a,将每个a加上它相对于缓冲区的位移量后传送到缓冲区DBUFF。 6、在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的和,并将和数存入以SUM为首址的数据区中。 DATA SEGMENT
BUF1 DW -56,24,54,-1,89,-8,?? BUF2 DW 45,-23,124,345,-265,?? SUM DW 10 DUP(0) DATA ENDS
7、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
8、设在内存单元SQTAB首址开始存放了0~15的平方数表。要求用直接查表法编一程序,求出A单元中给定数(<=15 =的平方值送B单元保存。
9、已知存储器中有一个首地址为ARRAY的100个字数组,现要求把数组中的每个数加1(不考虑溢出的可能性),试编制完成此功能的程序段。
10、.编写一段程序,如果字节变量TESTONE和TESTTWO相等,则调用子程序,显示?#?;否则调用NOTSAME子程序,显示?!?。
11、已定义了两个整数变量A和B,试编写程序完成下列功能: A.若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中。 B.若两个数均为奇数,则将两数均加1后存回原变量。 C.若两个数均为偶数,则两个变量均不改变。 (要求各段定义完整,并画出程序流程图) 12、假设DATAX和DATAX+2单元存放双字P,DATAY和DATAY+2单元中存放双字Q,编程计算2P-Q,差在DX,AX中。若OF=1,程序转OVERFLOW,否则转NOOVER。(只写与试题要求有关的指令语句)
13、已知在数据区BUF1和BUF2分别存放20个字节数据。编程检查两数据区中的数据是否相同。若完全一致,则将标志单元FLAG置FFH,否则置0,并将第一次出现的不同数据的地址分别存放在ADDR1和ADDR2单元中。 要求:源程序格式完整。
14、设 X、Y、Z、W为十六位有符号数编程计算: W ←(X + Y * Z)/8 -Y 除法余数丢弃 若ZF=1 ,程序转EQ;否则转NOT_EQ。
15、已知在以ARRAY为首地址的数据区中存放10个带符号字数据: ARRAY DW 1,2,-1,3,4,-2,-3,4,5,-6
编程将ARRAY分成两个数组:正数数组P_ARY和负数数组N_ARY,并分别显示正数项个数和负数项个数。 要求:源程序格式完整。
16、X,Y,Z三个字节存储单元中各有一个无符号数,其中有两个数据相等,找出不相等的哪个数,并存入W单元中,试编写完成上述功能的程序段(只编写有关代码部分,勿需书写源程序格式)。
17、在数据段偏移量为100H开始的存储空间内连续存放着10个字节型无符号二进制数,
37
编写一段程序,求出该10个数之和,并将结果存放在寄存器AX中。
18、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
2.已知有256个字节整数A1、A2、A3、??、A256 存放在以NUMBER为首址的数据区中,编写一完整源程序将其中的负数去除后剩下的正数重新排序存放在以PLUS开始的数据区中。
19、在数据段中有一个首地址为array的未排序的50D字节的正整数数组,请编写一程序,找出其中的最大数和最小数及最大数和最小数的个数。
20、A1单元开始定义了一长度为N的字符串,找出其中所有的小写字母并存放到以A2单元开始的存储区中。统计出小写字母的个数,存放到SL单元中。请编一完整的源程序。数据段如下:
DATA SEGMENT
A1 DB ???? N EQU $ -A1
A2 DB N DUP(?) SL DB ? DATA ENDS
38
《汇编语言程序设计》模拟试题答案
一、单选题: 1 C 16 B 31 B 46 A 61 D 76 B 91 B A C C C D D 2 A 17 C 32 D 47 A 62 A 77 C 92 B A A B B B A 3 D 18 B 33 D 48 D 63 B 78 C 93 A D B D B C C 4 A 19 C 34 A 49 A 64 D 79 A 94 A A B C C A 5 B 20 A 35 B 50 C 65 D 80 C 95 D C B B B C 6 A 21 D 36 B 51 C 66 C 81 A 96 A 111 B A C C B 7 A 22 C 37 B 52 A 67 D 82 B 97 C A D A C B 8 D 23 B 38 D 53 A 68 C 83 C 98 D D A C B D 9 C 24 C 39 D 54 D 69 B 84 A 99 D B D D C C 10 A 25 D 40 D 55 C 70 B 85 D B B B B B C 11 D 26 A 41 A 56 D 71 C 86 D D A A A B B 12 D 27 D 42 D 57 A 72 B 87 D A A D D C C 13 A 28 D 43 C 58 D 73 C 88 D C D A A C D 14 D 29 D 44 B 59 A 74 A 89 D C D B D A A 15 A 30 D 45 B 60 A 75 B 90 B C C B D D C 100 101 102 103 104 105 106 107 108 109 110 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 176 177 178 179 180 181 182 二、填空题:
1. 20H 2.立即数 3. 55 4. DS*10H+SI+20H 5. AX 6. 64K 7. 23456H 8. 指令性、指示性、宏指令 9. 相对基址变址 10. IP、CS 11. 6DH、9BH 12. 0、10H 13. 2000H、120H 三、简答题:
1.(1) (IP)←((SP),(SP)+1) (2) (IP)←((SP),(SP)+1) (CS) ←((SP)+2,(SP)+3) 2.(1) MOV CX ,LENGTH DAT1 (2) MOV CX,DAT2-DAT1 3. 12488H 232D7H 31040H 4. A. CX不能做间址寄存器
B. 源操作数和目的操作数不能同时为存储器操作数 C. 标号没有BYTE 属性
D. 循环次数大于1时应先至于CL中
39
E. 没有指定移位次数
5. AX=5030H AX=0503H
6. 9,计算分配给以上变量的存储单元的个数 7. A =5678H B =1234H
8.(1) 20H (2) 0AH (3) ?U? 9. 把DAT1中的后十个元素放到DAT2中 10.(1)为VAR3分配4个字节单元; (2)为VAR4 分配10个字节单元。 11.(1) IP=_1256H_ (2) IP=3280H_
12. AND AL,0FEH;OR AL,4H;XOR AL,0FAH 13. POP DX
POP CX POP BX POP AX
14.(1)SBB AX,0520H
(2)MOV AX,SEG TABL 15. ① LEA SI,D1
② MOV SI,OFFSET D1 ③ MOV SI,D2
16. (1)21500H (2)22500H-21500H=1000H (3)64K 因为分段要求最大为64K 17. BX=100H CX=22H 18.(1)相同点:都是做减法
不同点:SUB指令将结果回送给目的操作数,CMP指令不回送给目的操作数 (2)相同点:都是做与操作
不同点:AND 指令将结果回送给目的操作数,TEST指令不将结果回送给目的操作数 19.A. 没有区别
B. 第一条指令是短跳转,第二条指令是近跳转;
C. 第一条指令BX的内容作为偏移地址,而第二条指令是把BX的内容送给AX; D. 第一条指令是DX和CX相减结果送给DX,第二条指令也是把DX和CX相减,但
不影响每个寄存器的内容,只影响标志位;
E. 第一条指令目的操作数在堆栈段,第二条指令目的操作数在数据段。 20.(1)将调用参数装入指定的寄存器。 (2)如需功能调用号,把它装入AH。 (3)如需子功能调用号,把它装入AL。 (4)按中断号调用DOS或BIOS。 (5)检查返回参数是否正确。 例如:MOV AH,2
INT 21H
21. A. NOT CL
B. OR BX,0FH
C. AND AX,0FFF0H D. XOR CX,0FFF0H E. TEST DL,01001000B
40