汇编练习及答案
更新时间:2024-04-03 04:02:01 阅读量: 综合文库 文档下载
4.2 习 题
1. 写出完成下列要求的变量定义语句:
(1)在变量var1中保存6个字变量:4512H,4512,-1,100/3,10H,65530; (2)在变量var2中保存字符串:’BYTE’, ’word’, ’WORD’; (3)在缓冲区buf1中留出100个字节的存储空间;
(4)在缓冲区buf2中,保存5个字节的55H,再保存10个字节的240,并将这一过程重复7次;
(5)在变量var3中保存缓冲区buf1的长度;
(6)在变量pointer中保存变量var1和缓冲区buf1的偏移地址。
2. 设变量var1的逻辑地址为0100:0000,画出下列语句定义的变量的存储分配图: var1 DB 12,-12,20/6,4 DUP(0,55H) var2 DB ‘Assemble’
var3 DW ‘AB’, ‘cd’, ‘E’ var4 DW var2 var5 DD var2
3. 指令正误判断,对正确指令写出源和目的操作数的寻址方式,对错误指令指出原因(设VAR1, VAR2为字变量, L1为标号):
(1)MOV SI,100 (2)MOV BX,VAR1[SI] (3)MOV AX, [BX] (4)MOV AL, [DX] (5)MOV BP, AL (6)MOV VAR1, VAR2 (7)MOV CS, AX (8)MOV DS, 0100H
(9)MOV [BX][SI], 1 (10)MOV AX, VAR1+VAR2 (11)ADD AX, LENGTH VAR1 (12)OR BL, TYPE VAR2 (13)SUB [DI], 78H (14)MOVS VAR1, VAR2 (15)PUSH 100H (16)POP CS (17)XCHG AX, ES (18)MOV DS, CS (19)JMP L1+5 (20)DIV AX, 10 (21)SHL BL, 2 (22)MOV AL, 15+23 (23)MUL CX (24)XCHG CL, [SI] (25)ADC CS:[0100], AH (26)SBB VAR1-5,154
4. 说明下列指令对的区别:
(1) MOV AX,VAR1 与 MOV AX,OFFSET VAR1 (2) MOV AX,VAR2 与 LEA AX,VAR2
(3) MOV AL,LENGTH VAR1 与 MOV AL,SIZE VAR1 (4) MOV AL,ES: [DI] CMP AL, [SI]与 CMPSB (5) SHR AL,1 与 SAR AL,1 (6) SHR AL,1 与 ROR AL,1 (7) ROL BX,1 与 RCL BX,1
5. 写出下列转移指令的寻址方式(设L1为标号,VAR1为字型变量,DVAR1为双字型变量):
(1)JMP L1 (2)JMP NEAR L1
(3)JNZ L1 (4)JMP BX
(5)JG L1 (6)JMP VAR1[SI] (7)JMP FAR PTR L1 (8)JMP DVAR1
6. 设(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=3412H,(20102)=7856H,(21200)=4C2AH,(21202)=65B7H,求下列指令执行后AX寄存器的内容: (1)MOV AX,1200H; (2)MOV AX,BX; (3)MOV AX, [1200H]; (4)MOV AX, [BX]; (5)MOV AX,1100[BX];(6)MOV AX, [BX][SI]; (7)MOV AX,1100[BX][SI]
7. 执行下列指令后,DX寄存器中的内容是多少?
TABLE DW 25,36,-1,-16,10000,13 PYL DW 7 ??
MOV BX,OFFSET TABLE ADD BX,PYL MOV DX,[BX]
8.如果堆栈的起始地址为2200:0000,栈底为0100H,(SP)=00A8H,求 (1)栈顶地址; (2)SS的内容;
(3)再存入数据5678H,3AF2H后,SP的内容。
9. 设已用伪指令EQU定义了4个标识符:
N1 EQU 2100 N2 EQU 10 N3 EQU 20000 N4 EQU 25000
下列指令是否正确?并说明原因。
(1)ADD AL,N1-N2; (2)MOV AX,N3+N4; (3)SUB BX,N4-N3; (4)SUB AH,N4-N3-N1; (5)ADD AL,N2; (6)MOV AH,N2*N2
10. 按下列要求写出指令:
(1)将AX寄存器的低4位清零,其余位不变; (2)将BX寄存器的低4位置1,其余位不变; (3)将AL寄存器的低4位保持不变,高4位取反;
(4)测试BX中的位1和位2,当这两位同时为0时将AL置0FFH,否则AL清零; (5)测试BX中的位1和位2,当这两位有一位为0时将AL置0FFH,否则AL清零; (6)将AL中保存的字母ASCII码变换成相应的大写字母的ASCII码; (7)将AL中保存的字母ASCII码变换成相应的小写字母的ASCII码; (8)将AX中的各位取反;
(9)将DX中的低7位取反,高9位不变; (10)将CX中的低8位与高8位互换。
11. 写出完成下述功能的程序段: (1)传送40H到AL寄存器;
(2)将AL的内容乘以2; (3)传送16H到AH寄存器; (4)AL的内容加上AH的内容。
计算最后结果(AL)=?
12. 写出完成下述功能的程序段:
(1)从缓冲区BUF的0004偏移地址处传送一个字到AX寄存器; (2)将AX寄存器的内容右移2位;
(3)将AX内容与BUF的0006偏移地址处的一个字相乘; (4)相乘结果存入BUF的0020H偏移地址处(低位在前)。
13. 设(BX)=11001011B,变量VAR的内容为00110010B,求下列指令单独执行后BX的内容:
(1)XOR BX,VAR; (2)AND BX,VAR; (3)OR BX,VAR; (4)XOR BX,11110000B; (5)AND BX,00001111B; (6)TEST BX,1。
14. 设(DX)=10111011B,(CL)=3,(CF)=1,求下列指令单独执行后DX的内容:
(1)SHR DX,1; (2)SAR DX,CL; (3)SHL DX,CL; (4)SHL DX,1; (5)ROR DX,CL; (6)ROL DL,CL; (7)SAL DH,1; (8)RCL DX,CL; (9)RCR DL,1 15. 选择题(各小题只有一个正确答案)
(1)执行下列三条指令后: MOV SP,1000H PUSH AX CALL BX
a. (SP)=1000H; b. (SP)=0FFEH; c. (SP)=1004H; d. (SP)=0FFCH;
(2)要检查寄存器AL中的内容是否与AH相同,应使用的指令为: a. AND AL, AH b. OR AL, AH c. XOR AL, AH d. SBB AL, AH
(3)指令JMP NEAR PTR L1与CALL L1(L1为标号)的区别在于: a. 寻址方式不同; b. 是否保存IP的内容; c. 目的地址不同; d. 对标志位的影响不同。 16. 寄存器DX:AX组成32位数,DX为高位,编写程序段实现: (1)DX:AX右移3位,并将移出的低3位保存在CL中; (2)DX:AX左移3位,并将移出的高3位保存在CL中;
17. 已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。 18. 利用移位、传送和相加指令实现AX的内容扩大10倍。
19. 在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。
20. 编写程序段实现将BL中的每一位重复4次,构成32位的双字DX:AX,例如当BL=01011101B时,得到的(DX)=0F0FH,(AX)=0FF0FH。
21. 编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。 22. 在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:
(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2; (2)当两数均为奇数时,两个变量的内容不变; (3)当两数均为偶数时,两数缩小一倍后存入原处。
23. 已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写程序段找出这个错码,并将它送AX,其地址送SI;如果3个代码都相同,则在AX中置-1标志。
24. 分析下列程序段的功能: MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL
25. 下列程序段执行后,求BX寄存器的内容: MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL
26. 下列程序段执行后,求BX寄存器的内容: MOV CL,5 MOV BX,7D5CH SHR BX,CL
27. 设数组ARRAY的第1个字节存放数组的长度(<256),从第2个字节开始存放无符号8位数,求数组元素之和(结果放在AX中)。如果计算的和超出16位数的范围,则给出溢出标志DX=-1。
28. 设BUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值(存入AX)和最大值(存入DX)。
29. 设BUFFER中存放有N个无符号(第1个字节存放缓冲区的长度),编程实现将其中的0元素抹去,并更新其长度。
30. 编写程序实现N个字乘以或除以1个字,设BUFN存放N个字,BUF1存放乘数或除数,PRODUCT存放乘积,QUOTIENT存放商,REMAINDER存放余数。
31. 编写一个子程序实现统计AL中1的个数,然后检测出字节型缓冲区BUF中0和1个数相等的元素个数。
32. 设有n(设为17)个人围坐在圆桌周围,按顺时针给他们编号(1,2,?,n),从第1个人开始按顺时针方向加1报数,当报数到m(设为11)时,该人出列,余下的人继续进行,直到所有人出列为止。编写程序模拟这一过程,求出出列人的编号顺序。 33. 编写子程序实现以十六进制数在屏幕上显示AL的内容。
34. 从键盘上读入一个正整数N(0≤N≤65535),转换成十六进制数存入AX,并在屏幕上显示出来。
35. 在缓冲区BUFFER中,第1个字节存放数组的长度(<256),从第2个字节开始存放字符的ASCII码,编写子程序完成在最高位给字符加上偶校验。 36. 编写程序完成求多位数(N个字)的绝对值。 37. 已知斐波那契数列的定义为:求该数列前n项的子程序。
38. 编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1~INFORM10。 39. 编写程序实现将包含20个数据的数组ARRAY分成两个数组:正数数组ARRAYP和负数数组ARRAYN,并分别将这两个数组中数据的个数显示出来。
40. 编写程序实现求缓冲区BUFFER100个字中的最小偶数(存入AX)。
2221?2???n??的前n项和刚大于2000的项数n。 41. 编写程序实现求级数
F1?1,F2?1,Fi?Fi?1?Fi?2(i?3),编写
42. 已知数组A中包含有15个互不相等的整数,数组B中包含有20个互不相等的整数,编写程序实现将既在数组A中出现又在数组B中出现的整数存放于数组C中。
43. 定义一条宏指令,实现将指定数据段的段地址传送到段寄存器ES或DS的功能。 44. 定义一条宏指令,实现从键盘中输入一个字符串(利用INT 21H的09号功能)。 45. 定义一条宏指令,实现在屏幕上显示出指定的字符串。 46. 定义一条宏指令,实现在屏幕上输出回车、换行。 47. 利用其它指令完成与下列指令一样的功能: (1)REP MOVSB; (2)REP LODSB; (3)REP STOSB; (4)REP SCASB。 48. 设在数据段中定义了:
STR1 DB ‘ASSEMBLE LANGUAGE’ STR2 DB 20 DUP(?) 利用字符串指令编写程序段实现:
(1)从左到右将STR1中的字符串传送到STR2; (2)从右到左将STR1中的字符串传送到STR2; (3)将STR1中的第6个和第7个字节装入DX;
(4)扫描STR1字符串中有无空格,如有则将第一个空格符的地址传送到SI。 49. 设在数据段中定义了:
STRING DB ‘Today is Sunday & July 16, 2000’
编写程序实现将STRING中的’&’用’/’代替。 50. 分析下列程序段完成的功能: MOV CX,100 LEA SI,FIRST LEA DI,SECOND REP MOVSB
51. 分析下列程序段:
LEA DI,STRING MOV CX,200 CLD
MOV AL,20H REPZ SCASB JNZ FOUND JMP NOT_FOUND 问:转移到FOUND的条件。
52. 设在数据段的变量OLDS和NEWS中保存有5个字节的字符串,如果OLDS字符串不同于
NEWS字符串,则执行NEW_LESS,否则顺序执行程序。 53. 编程实现将STRING字符串中的小写字母变换成大写字母。 54. 设在数据段中定义了:
STUDENT_NAME DB 30 DUP(?) STUDENT_ADDR DB 9 DUP(?) STUDENT_PRINT DB 50 DUP(?)
编写程序实现:
(1)用空格符清除缓冲区STUDENT_PRINT; (2)在STUDENT_ADDR中查找第一个’_’字符; (3)在STUDENT_ADDR中查找最后一个’_’字符;
(4)如果STUDENT_NAME中全为空格符,则STUDENT_PRINT全存入’*’; (5)将STUDENT_NAME传送到STUDENT_PRINT的前30个字节中,将STUDENT_ADDR传送到STUDENT_PRINT的后9个字节中。
55. 在DS:X_BUF为起始地址的表中存有按由小到大顺序排列的一组16位无符号数,其中
该表的第一、二两字节存放数据个数。现在DS:X_KEY中存有一个关键字(16位无符号数),要求从上述表中查找第一个此关键字,若找到此关键字,则DI中存放该关键字在该表中的偏移量;若无此关键字,则将该关键字插入X_BUF表中,使该表依然有序,并将该关键字在表中的偏移量存放在DI中。 56. 分析下列子程序FUNC1,并回答相应的问题。
FUNC1 PROC NEAR XOR CX,CX MOV DX,01 MOV CL,X JCXZ A20
INC DX INC DX DEC CX JCXZ A20 A10: MOV AX,02 SHL AX,CL ADD DX,AX LOOP A10 A20: MOV Y,DX RET FUNC1 ENDP
若该子程序的入口参数为X(0≤X≤10),其输出参数为Y,则:
(1) 该子程序的功能是Y=f(X)= ; (2) 若X=0 , 则Y= ; 若X=3 , 则Y= ; 若X=5 , 则Y= 。
57. 已知N(3 从第二个字节开始存放数据,下列的FUNC2子程序完成对这N个数据按由大到小排序,在划线处填入必要指令,使以下子程序完整。 FUNC2 PROC NEAR LEA SI,INX XOR CX, CX MOV CL, [SI] DEC CX B10: INC SI MOV DI,SI PUSH SI MOV AL,[SI] B20: INC SI CMP AL,[SI] MOV AL,[SI] MOV DI,SI B30: LOOP B20 POP CX POP SI MOV AH,[SI] MOV [SI],AL MOV [DI],AH LOOP B10 FUNC2 ENDP 58. 假设X和X+2单元的内容为双精度数P,Y和Y+2单元的内容为双精度数Q (P,Q均 为无符号数,其中X,Y为低位数),下列的子程序FUNC3完成使 2P>Q时,(AX)=1;2P<=Q时,(AX)=-1 ,在划线处填入必要指令,使以下子程序完整。 FUNC3 PROC NEAR MOV DX,X+2 MOV AX,X ADD AX,AX ADC DX,DX JC C10 CMP DX,Y+2 C20 C10 CMP AX,Y C20 C10: MOV AX,1 C30 C20: MOV AX,-1 C30: RET FUNC3 ENDP 59. (上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺 序显示: 数据1 <原序号> 数据2 <原序号> ?? 60. (上机题)按同余法产生一组随机数N(1 课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:90~100,B:80~89,C:70~79,D:66~69,E:60~65,F:60分以下),按下列格式显示: Total <总人数> A: <人数1> B: <人数2> C: <人数3> D: <人数4> E: <人数5> F: <人数6> 61. (上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: <原字符串>例如:abcdgyt0092 <新字符串> ABCDGYT0092 按任一键重做;按Esc键返回主菜单。 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字 0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示: <原字符串> The maximum is <最大值>. 按任一键重做;按Esc键返回主菜单。 (3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255), 然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示: <原数值串> <新数值串> 按任一键重做;按Esc键返回主菜单。 (4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。 按任一键重新对时;按Esc键返回主菜单。 (5)按数字键“5”,结束程序的运行,返回操作系统。 [参考答案] 1. 解:(1)var1 DW 4512H,4512,-1,100/3,10H,65530 (2)var2 DB ’BYTE’, ’word’, ’WORD’ (3)buf1 DB 100 DUP(?) (4)buf2 DB 7 DUP(5 DUP(55H), 10 DUP(240)) (5)var3 DB LENGTH buf1 (6)pointer DW var1, var2 3. 答: (1)MOV SI,100 ;指令正确,源:立即数寻址,目的:寄存器寻址 (2)MOV BX,VAR1[SI] ;指令正确,源:寄存器相对寻址,目的:寄存器寻址 (3)MOV AX, [BX] ;指令正确,源:寄存器间接寻址,目的:寄存器寻址 (4)MOV AL, [DX] ;指令错误,DX不能用作为地址寄存器 (5)MOV BP, AL ;指令错误,类型不一致 (6)MOV VAR1, VAR2 ;指令错误,MOV指令不能从存储器到存储器传送 (7)MOV CS, AX ;指令错误,CS不能用作为目的操作数 (8)MOV DS, 0100H ;指令错误,MOV指令不能将立即数传送到段寄存器 (9)MOV [BX][SI], 1 ;指令错误,类型不定 (10)MOV AX, VAR1+VAR2 ;指令错误,MOV指令中不能完成加法运算 (11)ADD AX, LENGTH VAR1 ;指令正确,源:立即数寻址,目的:寄存器寻址 (12)OR BL, TYPE VAR2 ;指令正确,源:立即数寻址,目的:寄存器寻址 (13)SUB [DI], 78H ;指令错误,类型不定 (14)MOVS VAR1, VAR2 ;指令正确,源:隐含寻址,目的:隐含寻址 (15)PUSH 100H ;指令错误,立即数不能直接压入堆栈 (16)POP CS ;指令错误,CS不能用作为目的操作数 (17)XCHG AX, ES ;指令错误,XCHG指令中不能使用段寄存器 (18)MOV DS, CS ;指令错误,MOV指令不能从段寄存器到段寄存器 (19)JMP L1+5 ;指令正确,段内直接转移 (20)DIV AX, 10 ;指令错误,DIV指令格式错误 (21)SHL BL, 2 ;指令错误,移位指令的移位数要么是1,要么是CL (22)MOV AL, 15+23 ;指令正确,源:立即数寻址,目的:寄存器寻址 (23)MUL CX ;指令正确,源:寄存器寻址,目的:隐含寻址 (24)XCHG CL, [SI] ;指令正确,源:寄存器间接寻址,目的:寄存器寻址 (25)ADC CS:[0100], AH ;指令正确,源:寄存器寻址,目的:直接寻址 (26)SBB VAR1-5,154 ;指令正确,源:立即数寻址,目的:直接寻址 5. 答:(1)JMP L1 ;段内直接寻址 (2)JMP NEAR L1 ;段内直接寻址 (3)JNZ L1 ;段内相对寻址 (4)JMP BX ;段内间接寻址 (5)JG L1 ;段内相对寻址 (6)JMP VAR1[SI] ;段内间接寻址 (7)JMP FAR PTR L1 ;段间直接寻址(8)JMP DVAR1 ;段间间接寻址 7. 答:DX寄存器中的内容为10FFH 9. 答:(1)ADD AL,N1-N2 ;指令错误,因为N1-N2超出一个字节的范围 (2)MOV AX,N3+N4 ;指令正确 (3)SUB BX,N4-N3 ;指令正确 (4)SUB AH,N4-N3-N1 ;指令错误,因为N4-N3-N1超出一个字节的范围 (5)ADD AL,N2 ; 指令正确 (6)MOV AH,N2*N2 ;指令正确 11. 解:(1)MOV AL,40H (2)SHL AL,1 (3)MOV AH,16H (4)ADD AL,AH 执行后(AL)=96H 13. 解:(1)XOR BX,VAR; 执行后(BX)=00F9H (2)AND BX,VAR; 执行后(BX)=0002H (3)OR BX,VAR; 执行后(BX)=00FBH (4)XOR BX,11110000B;执行后(BX)=003BH (5)AND BX,00001111B;执行后(BX)=00C4H (6)TEST BX,1 ; 执行后(BX)=00CBH(不变) 15. 答:(1)d (2)c (3)b 17. 解: 设要传送的字符串有30个。 N=30 STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT ASC1 DB 'abcdefghijklmnopqrstuvwxyz1234' ASC2 DB 30 DUP(?) DATA ENDS
正在阅读:
汇编练习及答案04-03
小学生课外阅读:《君伟上小学一年级鲜事多》阅读测试题09-03
那一次我真高兴作文600字07-09
毛邓复习大纲10-23
小学体育德育渗透教案05-15
公务员养老保险改革国际趋势及对中国启示06-01
神经生物硕士研究生培养方案 2 - 图文01-14
PPAP05-13
工程项目管理考核题--转正试卷04-20
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 汇编
- 练习
- 答案
- 全员生发智慧系统
- 基础知识归类
- 电控技术
- (新课标)高中物理 第七章 机械能守恒定律单元测试题 新人教版
- 茶叶公司网站 - 图文
- 经济法B
- 壮歌如虹写忠诚
- 研究生复试原子物理试题
- 15个晚稻新品种在嘉兴市秀洲区的种植表现研究
- 教学答辩题1
- 高中英语各类从句综合练习55题及答案
- 信息工程大学2018年硕士研究生复试专业课笔试科目及参考书 - 图
- 广东省第十三届运动会
- 2017-2018学年人教版高二英语暑假作业:(17)
- ABAQUS瑞利阻尼
- 《建设工程高大模板支撑系统施工安全监督管理导则》建质25
- 解析几何经典例题
- 国际贸易教程计算题举例
- 娄底市集体土地上房屋拆迁补偿安置办法娄政发〔2008〕3号
- 制药企业生产工艺,过程中的危险有害因素,及安全对策措施