汇编语言复习.docx
《汇编语言复习.docx》由会员分享,可在线阅读,更多相关《汇编语言复习.docx(11页珍藏版)》请在冰豆网上搜索。
![汇编语言复习.docx](https://file1.bdocx.com/fileroot1/2023-2/6/cde40704-574b-4b69-987f-06547dec532a/cde40704-574b-4b69-987f-06547dec532a1.gif)
汇编语言复习
汇编语言考试复习范围:
课本的习题:
p112(习题三)7-14
P140(习题四)6-11
相关的习题:
1.以下为用段基址:
偏移量形式表示的内存地址,试计算它们的物理地址。
⑴12F8:
0100⑵1A2F:
0103⑶1A3F:
0003⑷1A3F:
A1FF
2.自12FA:
0000开始的内存单元中存放以下数据(用十六进制形式表示):
030611A31301,试分别写出12FA:
0002的字节型数据、字型数据及双字型数据的值。
3.分别指出下列指令中源操作数和目标操作数的寻址方式。
⑴MOVBX,12
⑵MOVAL,128
⑶MOV[BX],DX
⑷MOVDS,AX
⑸MOVVAR,8
⑹MOV[1000H],DX
⑺MOV6[BX],CX
⑻MOVAX,[BX][SI]
⑼MOVTAB[BP][DI],AL
4.在80X86系统中,设(DS)=1000H,(ES)=2000H,(SS)=1200H,(BX)=0300H,(SI)=0200H,(BP)=0100H,VAR的偏移量为0060H,若目标操作数为存储器操作数,请计算目标操作数的物理地址是多少?
⑴MOVBX,12⑵MOVAL,128
⑶MOV[BX],DX⑷MOVES:
[SI],AX
⑸MOVVAR,8⑹MOV[1000H],DX
⑺MOV6[BX],CX⑻MOV[BX][SI],AX
⑼MOV6[BP][SI],AL
5.写出以下指令的执行结果:
⑴MOVAX,3000H与MOVAX,[3000H]
⑵MOVAX,MEM与MOVAX,OFFSETMEM
⑶MOVAX,MEM与LEAAX,MEM
6.指出下列指令的错误:
⑴MOV[AX],BX⑵MOVAL,1280
⑶MOV[BX],9⑷MOVDS,1000H
⑸MOVVAR,[BX]⑹MOVM1,M2
⑺MOV6,CX⑻MOVAX,[SI][DI]
⑼MOVCS,AX⑽MOVBX,OFFSETVAR[SI]
8.自BUFFER单元开始连续存放着两个字型数据,编程序求它们的和,并把结果存放在这两个数据之后。
9.写出把首址为BUF的字型数组的第4个字送到AX寄存器的指令,要求使用以下几种寻址方式:
⑴直接寻址方式
⑵使用BX的寄存器间接寻址方式
⑶使用BX的寄存器相对寻址方式
10.设(DS)=1000H,(BX)=0300H,(SI)=0002H,(DI)=0100H,自1000:
0300单元开始存有以下数据(用十六进制形式表示):
1234567890ABCDEF,试说明下列各条指令执行后目标操作数的内容。
⑴ADDBX,12⑵MOVDX,[0300H]
⑶SUBBYTEPTR[BX],8⑷MOVAX,[BX][SI]
⑸MOVCX,5[BX]⑹MOVDX,4[BX][SI]为非压缩BCD码,完成第15题所要求的操作。
11.编程序使:
⑴使AL的各位变反。
⑵BX寄存器低四位置1。
⑶AX寄存器的低四位清0。
⑷使CX寄存器的低四位变反。
⑸用TEST指令测试AL寄存器的位0和位6是否同时为0,若是则把0送DH寄存器,否则把1送DH寄存器。
12.下列语句各为变量分配了多少字节?
⑴N1DB5
⑵N2DB123
⑶N3DB‘123’
⑷N4DB80,?
80DUP(0)
⑸N5DW1,2,3
⑹N6DD6,100
⑺N7DDN3
⑻N8DWN4
⑼N9DWN4+2
13.对于第12题,若N1的地址为1470:
0000,其后的变量依次连续存放,试给出各变量的偏移量。
N7~N9变量的值是多少?
14.如果定义了如第12题所示的变量,下列指令执行的结果是什么(若语句正确,则给出执行结果;若不正确,说明错误原因)?
⑴ADDN1,10
⑵MOVAL,N2
⑶SUBN3,N2
⑷MOVAL,N3+2
⑸LEADX,N4+2
⑹XORN5,0FH
⑺MOVN4+1,CX
⑻ANDN1,01234H
⑼NUM1EQU89
ADDNUM1,10
⑽NUM2EQU100
NUM2EQU120
15.假设有下列数据定义语句:
⑴M1DB10
⑵M2DW2345H
⑶M3DD987865H
试写出汇编程序对这些语句汇编后所生成的值(例如M2单元、M2+1单元的内容)。
16.有以下程序片段,试问汇编后符号L1和L2的值各为多少?
BUF1DB1,2,3
BUF2DW5,6,7
L1EQU$-BUF2
L2EQUBUF2-BUF1
17.若AX=0ABCDH,BX=7F8FH,CF=1。
求分别执行8086CPU指令
⑴ADD AX,BX ⑵ADC AX,BX
⑶SBB AX,BX ⑷NEG AX
⑸ANDAX,BX ⑹OR AX,BX
⑺XOR AX,BX ⑻IMULBL
后,AX寄存器中的内容,
18.指出下列指令中哪些是错误的,并指出错在何处?
⑴MOVDL,[DX] ⑵MOVES,2000H
⑶SUB[BX],[SI] ⑷ADDAX,[BX+CX]
⑸XCHGDS,[2400H] ⑹DEC15H
⑺INAL,DX ⑻OUT300H,AX
解答
⑴错,DX不能作为间接寻址的寄存器。
⑵错,立即数不能直接送给段寄存器。
⑶错,两个存储单元间内容不能直接相减。
⑷错,CX寄存器不能作为变址寄存器。
⑸错,不允许段寄存器与存储单元内容进行交换
⑹错,减1指令不能对段寄存器直接操作
⑺对
⑻错,输出指令的地址若是16位,必须用DX间址。
19.下列程序段执行后AX=?
设数据段有:
TABLE DW100,200,300,400
ENTRY DW3
代码段 对DS初始化
MOV BX,OFFSETTABLE
MOV SI,ENTRY
MOV AX,[BX+SI]
20.若SS=1000H,SP=2000H,AX=1234H,BX=5678H,FR=2115,试说明执行指令
PUSH AX
PUSH BX
PUSHF
POPCX
POP DX
之后,SP=?
SS=?
CX=?
DX=?
并画图指出堆栈中各单元的内容。
解答:
SS=1000H
SP=1FFEH
CX=2115H
DX=5678H
栈中各单元内容如下所示:
地址
RAM
11FFAH
2115
11FFCH
5678
11FFEH
1234
12000H
21、读下列程序段:
写出;
(1)每条指令连续执行后,哪些寄存器发生变化?
内容是什么?
(2)程序段执行完后,BX寄存器的肉容是什么?
MOVBX,3F93H
MOVCL,4
ADDBX,CL
MOVAL,BL
ANDAL,0FH
0RAL,30H
程序编写及程序填空:
1)修改例2-1程序,输出传送到目的缓冲区dbuffer中的字符串。
修改提示:
①DS应指向附加段
②dbuffer中的字符串应加字符串结束符$
③执行DOS功能调用的9号子功能输出dbuffer中的字符串
(2)写程序,输出演示系统的欢迎词,输出格式的最低要求如下:
***********************************************
**
*英文(中文)欢迎词*
**
***********************************************
提示:
通过编写与调试该程序,掌握两段结构的程序设计、输出数据的格式编排(由ASCII码0AH和0DH控制换行和回车操作)、DOS功能调用,熟悉宏汇编程序调试的上机过程。
(3)编程计算3550H-2320H,按16进制输出计算所得的差1230H。
再输出3550H-2321H的差,检验程序的正确性。
提示:
考虑依次将1230H(即0001001000110000B)从高位到低位,每4位二进制数一组分离出来,再将4位二进制数转换为ASCII码,利用DOS系统功能调用的2号子功能输出,就得到16进制数据的输出效果。
本题要求综合应用移位操作、逻辑操作等指令,并利用条件转移指令实现简单的循环程序,
6.4实习题
(1)编程完成在一个源字符串中搜索子字符串的功能(要求使用串比较指令cmpsb进行各次搜索),并输出搜索结果。
提示:
例如,源串为:
Howareyou?
子串为:
are
搜索方法如下:
①源串中含有子串are时,搜索过程如图3.1所示。
H
o
w
a
r
e
y
o
u
?
源串
a
r
e
第一次搜索
a
r
e
第二次搜索
a
r
e
搜索到子串,搜索结束
图3.1源串中含有子串时的搜索过程
②源串中不含子串arr时,搜索过程如图3.2所示。
H
o
w
a
r
e
y
o
u
?
源串
a
r
r
第一次搜索
a
r
r
第二次搜索
a
r
r
最后一次搜索,搜索结束
图3.2源串中不含子串时的搜索过程
每一次搜索用repzcmpsb指令完成。
第一次搜索时,寄存器SI指向源串,寄存器DI指向子串,每搜索一次,SI指向源串的下一个字符,DI总是指向子串起点,然后进行两串比较,串比较的长度为子串长度。
在整个搜索操作中,最多搜索的次数为:
源串长度-子串长度+1。
程序基本流程如图3.3所示。
(2)编程实现从键盘输入学生分数等级:
A、B、C、D、E,统计每种分数等级的人数并求平均成绩(要求用跳转表实现程序分支),输出统计结果,要求输出信息意义清楚。
提示:
实现所要求功能的程序流程如图3.4所示,当键入ESC键时结束成绩输入,ESC键的ASCII码为27(十六进制1BH)。
图3.4统计成绩程序流程图
(3)编程实现一维数组的排序操作。
要求:
主程序准备待排序的数据,调用子程序进行排序。
子程序接收3个参数:
数组名、数组长度、排序标志(=1:
从大到小排序;=2:
从小到大排序)。
子程序根据主程序由寄存器传递的排序标志,对指定数组从大到小或从小到大排序。
提示:
程序流程如图3.5所示。
图3.5排序程序流程图
(4)编写一个程序,完成自然数1到100的求和运算。