汇编练习及答案
更新时间:2024-05-06 12:10: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’
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP, TOP MOV CX, N LEA SI, ASC1 ADD SI, CX LEA DI, ASC2 L1:
DEC SI MOV AL, [SI]
MOV [DI], AL INC DI LOOP L1
MOV AH, 4CH ;返回DOS MOV AL, 0
INT 21H CODE ENDS
19. 解:程序如下:
STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT
VAR DW 2100, 1750, 2410 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP, TOP
MOV AX, VAR CMP AX, VAR+2 JBE L1 XCHG AX, VAR+2
L1:
CMP AX, VAR+4 JBE L2 XCHG AX, VAR+4 L2:
MOV VAR, AX MOV AX, VAR+2 CMP AX, VAR+4 JBE L3 XCHG AX, VAR+4 MOV VAR+2, AX L3:
MOV AH, 4CH ;返回 DOS MOV AL, 0
INT 21H CODE ENDS END START
如果VAR中保存的为有符号数,则只需将上述程序中的3条JBE指令改成JLE指令。
21. 解:
XOR DX, DX MOV CX, 8 L1:
SHL BL, 1 RCL DX, 1 SHL AL, 1 RCL DX, 1 LOOP L1
23. 解:假设字变量VAR1、VAR2和VAR3中至少有两个相等,程序段如下:
MOV AX, VAR1 CMP AX, VAR2 JNZ L1
CMP AX, VAR3 JNZ L2 MOV AX, -1 L1:
CMP AX, VAR3 JNZ L3
MOV AX, VAR2 LEA SI, VAR2 JMP L4 L3:
LEA SI,VAR1 JMP L4 L2:
MOV AX, VAR3 LEA SI, VAR3 L4:
25. 答:(BX)=C02DH
32. 提示:在n个字节变量中存入1,每次报数时相当于加上该变量的内容;当报数到m
时该人出列,相当于使变量内容为0,其编号为其相当偏移地址,因此最好采用寄存器相当寻址方式。这样处理的好处是,继续报数时不必考虑已出列的人,只是他们对后续报数的影响是加0,也就是说他已不起作用。 34. 提示:显示部分应调用33题编写的显示子程序。 43. 解:定义的宏指令如下: TRANSSEG MACRO DATA
MOV AX, DATA MOV DS, AX MOV ES, AX ENDM 44. 解:定义的宏指令如下: INPUTSTR MACRO BUF
LEA DX, BUF MOV AH, 0AH INT 21H ENDM 45. 解:定义的宏指令如下:
DISPSTR MACRO BUF LEA DX, BUF MOV AH, 09 INT 21H ENDM
50. 答:从缓冲区FIRST传送100个字节到SECOND缓冲区。
51. 答:在STRING缓冲区中,找到第一个非空格字符时转到FOUND。
正在阅读:
汇编练习及答案05-06
福建师大附中09-10学年高二上学期期末考试(语文)03-11
关于做好村规模调整后基层组织建设有关后续工作的意见03-27
顺达汽车租赁公司管理系统设计与实现04-12
ZTE设备各种传感器配置使用说明05-23
魅力丽江作文550字06-18
通 知 书05-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 汇编
- 练习
- 答案
- 脱硫技术
- 管廊基础施工方案
- 自动控制理论习题答案
- 二年级下册《体育与健康》教案
- 国学晨读
- 黑龙江省双鸭山市骨干教师培训考试答案30—60页
- 中国工商银行操作风险管理案例
- 2017-2018学年吉林省实验中学高二(上)期末数学试卷(理科)
- 2013-2014学年度下学期江苏省灌云高级中学高一期末迎联考综合练
- 《大学物理》下期末考试 有答案
- 射阳实验初中课外阅读教学经验交流
- 淘宝网店营销策略
- 人力资源部门年终工作总结三篇
- 组织学复习题
- 进出口贸易实务期中习题
- 13地质工程实习报告封面 - 图文
- 四川省咨询工程师如何注册每日一讲(4月27日)
- 机械设计专业毕业论文 - 自动洗衣机行星齿轮减速器的设计
- 船舶检验技术档案管理暂行办法
- C语言选择题复习精选