汇编语言复习重点王爽.docx
- 文档编号:27629705
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:29
- 大小:32.34KB
汇编语言复习重点王爽.docx
《汇编语言复习重点王爽.docx》由会员分享,可在线阅读,更多相关《汇编语言复习重点王爽.docx(29页珍藏版)》请在冰豆网上搜索。
汇编语言复习重点王爽
汇编语言(教材王爽)期末考试复习:
考试题型:
选择、填空、程序分析、编程题
一、重点复习课本的检测点1.1-3.2与课后实验1-14:
二、需要掌握的指令见后面附录
三、汇编语言主要知识点:
寄存器与存储器
1.寄存器功能
.寄存器的一般用途和专用用途
.CS:
IP控制程序执行流程
.SS:
SP提供堆栈栈顶单元地址
.DS:
BX(SI,DI)提供数据段内单元地址
.SS:
BP提供堆栈内单元地址
.ES:
BX(SI,DI)提供附加段内单元地址
.AX,CX,BX和CX寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。
.PSW程序状态字寄存器只能通过专用指令(LAHF,SAHF)和堆栈(PUSHF,POPF)进行存取。
2.存储器分段管理
.解决了16位寄存器构成20位地址的问题
.便于程序重定位
.20位物理地址=段地址*16+偏移地址
.程序分段组织:
一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。
3.堆栈
.堆栈是一种先进后出的数据结构,数据的存取在栈顶进行,数据入栈使堆栈向地址减小的方向扩展。
.堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。
.堆栈总是以字为单位存取
指令系统与寻址方式
1.指令系统
.计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。
执行指令后,一般源操作数不变,目的操作数被计算结果替代。
.机器指令由CPU执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类:
数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。
2.寻址方式
.寻址方式确定执行指令时获得操作数地址的方法
.分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。
.与数据有关的寻址方式的一般用途:
(1)立即数寻址方式--将常量赋给寄存器或存储单元
(2)直接寻址方式--存取单个变量(直接给出地址值或变量名)
(3)寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度
(4)寄存器间接寻址方式--访问数组元素
(5)变址寻址方式
(6)基址变址寻址方式课本P164
(7)相对基址变址寻址方式
(5),(6),(7)都便于处理数组元素
.与数据有关的寻址方式中,提供地址的寄存器只能是BX,SI,DI或BP
.与转移地址有关的寻址方式的一般用途:
(1)段内直接寻址--段内直接转移或子程序调用
(2)段内间接寻址--段内间接转移或子程序调用
(3)段间直接寻址--段间直接转移或子程序调用
(4)段间间接寻址--段间间接转移或子程序调用
汇编程序和汇编语言
1.汇编程序
.汇编程序是将汇编语言源程序翻译成二进制代码程序的语言处理程序,翻译的过程称为汇编。
2.汇编语言
.汇编语言是用指令助记符,各种标识变量,地址,过程等的标识符书写程序的语言,汇编语言指令与机器指令一一对应。
.伪指令,宏指令不是由CPU执行的指令,而是由汇编程序在汇编期间处理的指令。
.伪指令指示汇编程序如何完成数据定义,存储空间分配,组织段等工作。
.宏指令可简化程序并减少程序书写量。
(不要求)
.条件汇编伪指令的功能是确定是否汇编某段源程序,而不是实现程序分支,对未汇编的程序将不产生相应的目标代码。
.结构作为一种数据结构可将一组类型不同但有逻辑关联的数据组织在一起,便于整体处理数据。
.记录可用于提高存储单元的利用率,将若干不足一个字节或字且有逻辑关联的信息压缩存放在一个字节或字中。
.指令中的表达式在汇编期间计算,并且只能对常量或地址进行计算。
程序设计基础
1.分支程序设计
.程序分支由条件转移指令或无条件转移指令实现
.存放若干目的转移地址或跳转指令的跳转表常用于实现多路分支
.条件转移指令只能实现偏移量为-128至+127字节范围的转移
.无条件转移指令根据寻址方式可实现短转移(偏移量为-128至+127字节),段内转移,段间转移。
2.循环程序设计
.可由循环控制指令或条件转移指令组织循环结构
.内层循环结构必须完全包含在外层循环结构内,并不能发生从循环结构外向循环结构内的转移。
3.子程序设计
.子程序中应保护寄存器内容,并正确使用堆栈,成对执行PUSH和POP指令,保证执行RET指令时堆栈栈顶为返回地址。
.主程序可通过寄存器,参数表,或堆栈传递参数给子程序
4.EXE文件和COM文件?
.二者都是可执行文件
.COM文件源程序的特点是:
第一条可执行指令的起始存放地址必须是100H,不能分段,不用定义堆栈,所有过程为NEAR类型,直接用INT20H指令返回DOS。
5.DOS功能调用与BIOS中断调用
.二者都是完成DOS系统提供给用户的输入/输出等常用功能,通过执行软中断指令完成一次软中断服务。
.DOS功能调用的中断服务程序是操作系统的一部分,存于RAM中;而BIOS中断调用的中断服务程序存放在ROM中。
输入/输出与中断系统
1.输入/输出的方式
.程序直接I/O方式:
用IN和OUT指令直接在端口级上进行I/O操作,数据传送方式分为无条件传送方式和查询传送方式。
.中断传送方式:
由CPU响应中断请求完成中断服务。
.DMA传送方式:
直接在存储器与外设之间传送数据。
2.有关中断的概念
.中断、中断源、中断请求、中断服务、中断向量、中断向量表、中断响应过程、中断指令、开中断、关中断、内部中断、外部中断、可屏蔽中断、非屏蔽中断。
四、程序编写及程序分析填空类的题目:
(主要是书中的实验)
1、编程,向内存0:
200~0:
23f依次传递数据0~63(3fh),程序中只能使用9条指令,9条指中包括“movax,4c00h”和“int21h”。
以及实验4的第3小题将指令复制到0:
200处
2、编程,将datasg段中每个单词的前4个字母改写为大写字母。
assumecs:
codesg,ss:
stacksg,ds:
datasg
stacksgsegment
dw0,0,0,0,0,0,0,0
stacksgends
datasgsegment
db'1.display'
db'2.brows'
db'3.replace'
db'4.modify'
datasgends
3、编程:
在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcometomasm!
'。
4、编写子程序:
显示字符串
;名称:
show_str
;功能:
在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串
;参数:
(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:
si:
该字符串的首地址
;返回:
显示在屏幕上
5、编写子程序:
.解决除法溢出问题
;名称:
divdw
;功能:
除法,被除数32位,除数16位,商32位,余数16位,不会溢出
;参数:
(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数
;返回:
(dx)=商高16位,(ax)=商低16位,(cx)=余数
6、数值显示
;名称:
dtoc_word
;功能:
将一个word型数转化为字符串
;参数:
(ax)=word型的数据,ds:
si指向字符串的首地址
;返回:
ds:
[si]放此字符串,以0结尾
7、编写子程序
;名称:
letterc
;功能:
将以0结尾的字符串中的小写字母转变成大写字母
;参数:
ds:
si开始存放的字符串
;返回:
ds:
si开始存放的字符串
8、编写0号中断的处理程序
编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divideerror!
”,然后返回到DOS。
五、参考习题
1什么是堆栈操作?
以下关于堆栈操作的指令执行后,SP的值是多少?
PUSHAX
PUSHCX
PUSHDX
POPAX
PUSHBX
POPCX
POPDX
堆栈被定义为一种先进后出的数据结构,即最后进栈的元素将被最先弹出来。
堆栈从一个称为栈底的位置开始,数据进入堆栈的操作称为压入(或压栈),数据退出堆栈的操作称为弹出,每进行一次弹出操作,堆栈就减少一个元素,最后一次压入的元素,称为栈顶元素,压入弹出操作都是对栈顶元素进行的堆栈的两种基本的操作。
在进行以上一系列堆栈操作后,SP指针的值是原SP-2。
2用汇编语言指令实现以下操作。
(1)将寄存器AX、BX和DX的内容相加,和放在寄存器DX中。
ADDAX,BX
ADDDX,AX
(2)用基址变址寻址方式(BX和SI)实现AL寄存器的内容和存储器单元BUF中的一个字节相加的操作,和放到AL中。
movbx,offsetbuf
movsi,0
ADDAL,BYTEPTR[BX][SI]
(3)用寄存器BX实现寄存器相对寻址方式(位移量为100H),将DX的内容和存储单元中的一个字相加,和放到存储单元中。
ADD100H[BX],DX
(4)用直接寻址方式(地址为0500H)实现将存储器中的一个字与立即数3ABCH相加,和放回该存储单元中。
ADDwordptr[0500H],3ABCH
(5)用串操作指令实现将内存定义好的两个字节串BUF1和BUF2相加后,存放到另一个串BUF3中的功能。
……
MOVCX,COUNT
MOVSI,OFFSETBUF1源串
MOVDI,OFFSETBUF3目的串
MOVBX,OFFSETBUF2辅助
AGAIN:
LODSB
ADDAL,[BX]
STOSB
INCBX注意没有和KEP配合,所以CX-1
DECCX
JNZAGAIN
……
3指出下列指令中,源操作数及目的操作数的寻址方式。
(1)SUBBX,[BP+35];寄存器寻址、寄存器相对寻址
(2)MOVAX,2030H;寄存器寻址、立即寻址串扫描指令
(3)SCASB;隐含操作数为寄存器寻址和寄存器间接寻址
(4)INAL,40H;寄存器寻址、立即寻址
(5)MOV[DI+BX],AX;基址加变址寻址、寄存器寻址
(6)ADDAX,50H[DI];寄存器寻址、寄存器相对寻址
(7)MOVAL,[1300H];寄存器寻址、直接寻址
(8)MULBL;寄存器寻址、目的操作数为隐含寄存器寻址
4已知(DS)=1000H,(SI)=0200H,(BX)=0100H,(10100H)=11H,(10101H)=22H,(10600H)=33H,(10601H)=44H,(10300H)=55H,(10301H)=66H,(10302H)=77H,(10303H)=88H,试分析下列各条指令执行完后AX寄存器的内容。
(1)MOVAX,2500H(AX)=2500H
(2)MOVAX,500H[BX](AX)==4433H[BX+500H]=[0600H]
(3)MOVAX,[300H](AX)=6655H
(4)MOVAX,[BX](AX)=2211H
(5)MOVAX,[BX][SI](AX)=6655H
(6)MOVAX,[BX+SI+2](AX)=8877H
5判断下列指令是否有错,如果有错,说明理由。
(1)SUBBL,BX;两个操作数的宽度不一样
(2)MOVBYTEPTR[BX],3456H;将16位的立即数传送到一个字节的内存单元
(3)SHLAX,CH;移位指令的移位位数用CL给出,不能用CH。
(4)MOVAH,[SI][DI];不能用两个变址寄存器来实现寻址操作
(5)SHRAX,4;只有当移位位数为1时,才能用立即数表达
(6)MOVCS,BX;不能对CS实现传送操作
(7)MOV125,CL;立即数不能做目的操作数
(8)MOVAX,BYTEPTR[SI];源操作数限定为字节,与目的操作数宽度不一致
(9)MOV[DI],[SI];两个操作数不能同时为内存数
6设(DS)=1000H,(ES)=2000H,(SS)=3000H,(SI)=0080H,(BX)=02D0H,(BP)=0060H,试指出下列指令的源操作数字段是什么寻址方式?
它的物理地址是多少?
(1)MOVAX,0CBH立即寻址DS*16+100H
(2)MOVAX,[100H]直接寻址,物理地址为:
10100H
(3)MOVAX,[BX]寄存器间接寻址,物理地址为:
102D0H
(4)MOVAX,[BP]寄存器间接寻址,物理地址为:
30060HSS*16+BP
(5)MOVAX,[BP+50]寄存器相对寻址,物理地址为:
300B0H
(6)MOVAX,[BX][SI]基址加变址寻址,物理地址为:
10350H
7分别说明下列每组指令中的两条指令的区别.
(1)ANDCL,0FH按位相“与”,高4位为“0000”,低4位保留原值;
ORCL,0FH按位相“或”,高4位为原值,低4位为“1111”。
(2)MOVAX,BX将BX寄存器的内容传送到AX寄存器中;
MOVAX,[BX]将BX寄存器所指的内存单元的内容送AX寄存器中。
(3)SUBBX,CXBX寄存器内容减去CX寄存器的内容,结果送回到BX;
CMPBX,CXBX内容减去CX内容,但结果不送回,而根据标志位的情况做进一步的动作。
(4)ANDAL,01HAL内容与01H相“与”,结果为“0000000x”送回AL寄存器;
TESTAL,01HAL内容与01H相“与”,结果为“0000000x”不送回AL寄存器,而根据标志位(ZF)情况做进一步的动作。
(5)JMPNEARPTRNEXTNEXT所指指令在当前指令的同段内(16位地址范围);
JMPSHORTNEXTNEXT所指指令在当前指令的8位地址范围内。
(6)ROLAX,CL循环左移,进位标志位不参与循环;
RCLAX,CL循环左移,进位标志位参与循环。
(7)PUSHAX将AX内容存入栈顶指针处,即进栈操作;
POPAX将栈顶内容弹出装入AX寄存器中,即出栈操作。
8试分析以下程序段执行完后BX的内容为何?
MOVBX,1030H
MOVCL,3
SHLBX,CL
DECBX
程序执行完后,BX=817FH,执行过程如下。
9、在BUF1变量中依次存储了5个字数据,接着定义了一个名为BUF2的字单元,表示如下:
BUF1DW8765H,6CH,0,1AB5H,47EAH
BUF2DW?
(1)设BX中是BUF1的首地址,请编写指令将数据50H传送给BUF2单元。
ADDBX,10
MOVWORDPTR[BX+10],50H
(2)请编写指令将数据FFH传送给数据为0的单元。
ADDBX,4
MOVWORDPTR[BX+10],0FFH
10、下面是一个数据段的定义,请用图表示它们在内存中存放的形式。
DATASEGMENT
A1DB25H,35H,45H
A2DB3DUP(5)
A3DW200,3AB6H
A4DW3000H,6A6FH
DATAENDS
A1
25H
35H
45H
A2
05H
05H
05H
A3
00H
02H
B6H
3AH
A4
00H
30H
6FH
6AH
11、说明下列语句所分配的存储空间及初始化的数据值。
(1)BYTE_VARDB‘BYTE’,21,-42H,3DUP(0,?
,2DUP(2,3),?
)
(2)WORD_VARDW5DUP(4,2,0),?
,-8,‘BY’,‘TE’256H
BYTE_VAR
42H
WORD_VAR
04H
59H
00H
54H
02H
45H
00H
15H
00H
10111110B
00H
0
04H
—
00H
2
02H
3
00H
2
00H
3
00H
—
04H
0
00H
—
02H
2
00H
3
00H
2
00H
3
04H
—
00H
0
02H
—
00H
2
00H
3
00H
2
04H
3
00H
—
02H
00H
00H
00H
—
—
11111000B
11111111B
42H
59H
54H
45H
56H
02H
12、在下列数据传送程序段中有些使用不当的语句,请改正之。
ADB10H,20H,‘OPQ’,4FH
BDBNDUP(?
);改为BDB6DUP(?
)
MOVDI,A;改为MOVDI,OFFSETA
MOVSI,B;改为MOVSI,OFFSETB
MOVCX,LENGTHA;改为MOVCX,LENGTHB
CC:
MOVAL,[DI]
MOV[SI],AL
INCSI
INCDI
LOOPCC
13、有一个数据段定义了如下6个变量,请写出该数据段。
(1)BUF1为十进制数字节变量:
64;
(2)BUF2为字符串变量:
‘Teacher’;
(3)BUF3为十六进制数字节变量:
2FH;
(4)BUF4为双字变量:
657AH;
(5)BUF5为字变量:
657AH;
(6)BUF6为二进制数字节变量:
10101101B。
DATASEGMENT
BUF1DB64
BUF2DB‘Teacher’
BUF3DB2FH
BUF4DD657AH
BUF5DW657AH
BUF6DB10101101B
14以下为用段基址:
偏移量形式表示的内存地址,试计算它们的物理地址。
⑴12F8:
0100⑵1A2F:
0103⑶1A3F:
0003⑷1A3F:
A1FF
15自12FA:
0000开始的内存单元中存放以下数据(用十六进制形式表示):
030611A31301,试分别写出12FA:
0002的字节型数据、字型数据及双字型数据的值。
16分别指出下列指令中源操作数和目标操作数的寻址方式。
⑴MOVBX,12
⑵MOVAL,128
⑶MOV[BX],DX
⑷MOVDS,AX
⑸MOVVAR,8
⑹MOV[1000H],DX
⑺MOV6[BX],CX
⑻MOVAX,[BX][SI]
⑼MOVTAB[BP][DI],AL
17在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
18指出下指令的不同:
⑴MOVAX,3000H与MOVAX,[3000H]
⑵MOVAX,MEM与MOVAX,OFFSETMEM
⑶MOVAX,MEM与LEAAX,MEM
19指出下列指令的错误:
⑴MOV[AX],BX⑵MOVAL,1280
⑶MOV[BX],9⑷MOVDS,1000H
⑸MOVVAR,[BX]⑹MOVM1,M2
⑺MOV6,CX⑻MOVAX,[SI][DI]
⑼MOVCS,AX⑽MOVBX,OFFSETVAR[SI]
20自BUFFER单元开始连续存放着两个字型数据,编程序求它们的和,并把结果存放在这两个数据之后。
21写出把首址为BUF的字型数组的第4个字送到AX寄存器的指令,要求使用以下几种寻址方式:
⑴直接寻址方式
⑵使用BX的寄存器间接寻址方式
⑶使用BX的寄存器相对寻址方式
22设(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]
23编程序使:
⑴使AL的各位变反。
⑵BX寄存器低四位置1。
⑶AX寄存器的低四位清0。
⑷使CX寄存器的低四位变反。
⑸用TEST指令测试AL寄存器的位0和位6是否同时为0,若是则把0送DH寄存器,否则把1送DH寄存器。
24.下列语句各为变量分配了多少字节?
⑴N1DB5
⑵N2DB123
⑶N3DB‘123’
⑷N4DB80,?
80DUP(0)
⑸N5DW1,2,3
⑹N6DD6,100
⑺N7DDN3
⑻N8DWN4
⑼N9DWN4+2
25.对于第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
26.假设有下列数据定义语句:
⑴M1DB10
⑵M2DW2345H
⑶M3DD987865H
试写出汇编程序对这些语句汇编后所生成的值(例如M2单元、M2+1单元的内容)。
27.有以下程序片段,试问汇编后符号L1和L2的值各为多少?
BUF1DB1,2,3
BUF2DW5,6,7
L1EQ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 复习 重点