汇编语言重点总结版.docx
- 文档编号:15522842
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:18
- 大小:37.36KB
汇编语言重点总结版.docx
《汇编语言重点总结版.docx》由会员分享,可在线阅读,更多相关《汇编语言重点总结版.docx(18页珍藏版)》请在冰点文库上搜索。
汇编语言重点总结版
1.通用数据传送指令
MOV——传送指令
指令格式:
MOVDST,SRC;(DST)←(SRC)。
DST表示目的操作数,SRC表示源操作数
说明:
①.DST为除CS外的各寄存器寻址方式或任意存储器寻址方式。
SRC为任意数据寻址方式。
②.DST、SRC不能同时为存储器寻址方式,也不能同时为段寄存器寻址方式,而且在DST为段寄存器时,SRC不能为立即数。
③.MOV指令不影响标志位。
2.地址传送指令
(1).LEA——有效地址(EA)送寄存器指令
指令格式:
LEAREG,SRC;(REG)←SRC
说明:
①.指令把源操作数(只能是存储器寻址方式)指定的有效地址送到指令指定的16位或32位寄存器(REG)中(但不能是段寄存器)。
②.LEA指令不影响标志位。
3.加法指令
(1).ADD——加法指令
指令格式:
ADDDST,SRC;(DST)←(DST)+(SRC)
4.减法指令
(1).SUB——减法指令
指令格式:
SUBDST,SRC;(DST)←(DST)-(SRC)
(2).SBB——带借位减法指令
指令格式:
SBBDST,SRC;(DST)←(DST)-(SRC)-CF
5.除法指令
(1).DIV——无符号数除法指令
指令格式:
DIVSRC;字节操作:
(AL)←(AX)/(SRC),(AH)←
(AX)%(SRC)
字操作:
(AX)←(DX,AX)/(SRC),(DX)←
(DX,AX)%(SRC)
双字操作:
(EAX)←(EDX,EAX)/(SRC),(EDX)←
(EDX,EAX)%(SRC)
6.逻辑运算指令:
可以对双字、字或字节执行按位的逻辑运算。
(1).AND——逻辑与指令
指令格式:
ANDDST,SRC;(DST)←(DST)∧(SRC)
(2).OR——逻辑或指令
指令格式:
ORDST,SRC;(DST)←(DST)∨(SRC)
(3).XOR——逻辑异或指令
指令格式:
XORDST,SRC;(DST)←(DST)⊕(SRC)
(4).PUSH——进栈指令
指令格式:
PUSHSRC;16位指令:
(SP)←(SP)–2((SP)+1,(SP))←(SRC)
32位指令:
(ESP)←(ESP)–4((ESP)+3,(ESP)+2,(ESP)+1,(ESP))←(SRC)
说明:
①.堆栈:
计算机开辟的以“后进先出”方式工作的存储区。
它必须存在于
堆栈段中,只有一个出入口,所以只有一个堆栈指针SP或ESP。
SP或
ESP的内容在任何时候都指向当前的栈顶。
②.8086中的SRC不能为立即数寻址方式。
286及其后继机型可用立即数寻址方式。
③.PUSH指令不影响标志位。
(5).POPF/POPFD——标志出栈指令
指令格式:
POPF;(FLAGS)←((SP)+1,(SP)),(SP)←(SP)+2
POPFD;(EFLAGS)←((ESP)+3,(ESP)+2,(ESP)+1,(ESP)),(ESP)←(ESP)-4
说明:
这组指令中LAHF、PUSHF/PUSHFD不影响标志位。
但POPFD指令不影响VM,RF,IOPL,VIF和VIP的值。
7.移位指令
(1).移位指令
1).SHL——逻辑左移指令
指令格式:
SHLOPR,CNT;
2).SAL——算术左移指令
指令格式:
SALOPR,CNT;同上
3).SHR——逻辑右移指令
指令格式:
SHROPR,CNT;0
4).SAR——算术右移指令
指令格式:
SAROPR,CNT;
(2).循环移位指令
1).ROR——循环右移指令
指令格式:
ROROPR,CNT;2).RCR——带进位位循环右移指令指令格式:
RCROPR,CNT;
0
OPRCF
OPRCF
OPRCF
OPRCF
说明:
①.OPR为除立即数以外的任意寻址方式。
移位次数由CNT决定,CNT=1只移位1次;若移位次数超过1次,在8086中则CNT必须用CL代替。
而在其他机型中也可用8位立即数指定范围从1~31的移位次数。
②.CF位已在指令中给出其影响情况。
OF位只有在CNT=1时有效,一次移位前后的最高有效位(符号位)发生变化则OF=1,否则OF=0。
循环指令不影响其它条件。
移位指令由结果影响SF、ZF、PF,而AF无定义。
8.循环指令
(1).LOOP——循环指令
指令格式:
LOOPOPR
测试条件:
(CountReg)≠0
1).JZ(或JE)——结果为零(或相等)则转移指令格式:
JZ(或JE)OPR
测试条件:
ZF=1
(2).TEST——测试指令
指令格式:
TESTOPR1,OPR2;(OPR1)∧(OPR2)
说明:
①.DST、OPR、OPR1不允许使用立即数寻址方式。
(3).CMP——比较指令
指令格式:
CMPOPR1,OPR2;(OPR1)-(OPR2),运算后根据结果影响标志
说明:
①.以上指令除DEC不影响CF标志外,它们都影响条件标志位。
②.OF是有符号数的溢出,CF是无符号数的溢出。
但CF可作为多位运算借位标志。
1.WORDPTR:
取字长地址值操作符。
(4).INT——中断调用指令
指令格式:
INTTYPE
或INT;TYPE=3时,缺省执行操作:
Push(FLAGS)
IF←0TF←0AC←0
Push(CS)
Push(IP)
(IP)←(TYPE*4)(每个中断向量占4个字节)(CS)←(TYPE*4+2)
说明:
①.其中TYPE为类型号,它可以是常数或常数表达式,其值需在0~255
范围内。
②.类型0的中断称为除数为0中断,由CPU自动产生,不能用中断指令调用。
③.类型1的中断称为单步中断,CPU进入单步中断的依据为(TF)=1。
不能用中断指令来调用。
单步中断由调试程序DEBUG使用。
④.类型2的中断称为非屏蔽中断,属硬件中断,紧急情况使用,不许用中断指令来调用。
⑤.类型3的中断称为断点中断。
用在调试程序中。
INT又称为断点中断指令,它是单字节指令。
与其他INTTYPE不同,是双字节指令。
⑥.类型4的中断称为溢出中断。
有专门的溢出中断调用指令INTO。
无INT4指令。
见下面。
1.1.2段定义伪操作
1.完整的段定义伪操作
(1).SEGMENT/ENDS——段定义伪操作:
此对伪操作可以将汇编语言源程序分成几个段,通常为数据段、堆栈段、附加段和代码段。
伪操作格式:
segnameSEGMENT[align_type][combine_type][use_type][‘class’]
(2).ASSUME——段指定伪操作:
告诉汇编程序,段和段寄存器的对应关系。
伪操作格式:
ASSUME分配(assignment),…,assignment
说明:
其中assignment说明分配情况,其格式为:
段寄存器名(segmentregistername):
段名字(segmentname)[,段寄存器名:
段名字[,……]]
ASSUMENOTHING则可取消前面由ASSUME所指定的段寄存器。
2.助记符(Mnemonic):
说明所用伪操作的助记符名称同时也说明所定义的数据类型。
通常为下面6种。
(1).DB(DefineByte):
定义字节伪操作,其后的每个操作数都占有一个字节(8位)。
(2).DW(DefineWord):
定义字伪操作,其后的每个操作数都占有一个字(16位)。
(3).DD(DefineDoubleWord):
定义双字伪操作,其后的每个操作数都占有一个双字(32
位)。
(4).重复操作符DUP:
用来指定某个(或某些)操作数重复的次数(还可以嵌套)。
形式为:
repeat_countDUP(初值[,初值…]);repeat_count为重复的次数
(5)“?
”操作数:
仅给变量保留相应的存储空间,而不赋给变量初值。
3.EQU——表达式赋值伪操作:
用来对一个名字进行赋值。
但不能对一个已赋值的名字重新赋值。
伪操作格式:
表达式名字EQU表达式;表达式可以为常数或者数据的地址说明:
PURGE语句:
用来解除对某一个名字的赋值。
以后此名字才可由EQU
重新赋值。
伪操作格式:
PURGE原名字;原名字,即前面已赋过值的名字
4.=——表达式赋值伪操作:
“=”(等号)伪操作的功能与EQU伪操作基本相同,主要区别在于它可以对同一个名字重新赋值。
伪操作格式:
名字=表达式;表达式可以为常数或者数据的地址
(1).INC——加1指令
指令格式:
INCOPR;(OPR)←(OPR)+1
说明:
①.以上指令除INC不影响CF标志外,它们都影响条件标志位。
②.OF是有符号数的溢出,CF是无符号数的溢出。
但CF可作为多位运算的进位标志。
(2).PTR属性操作符:
指定操作数的类型属性为BYTE、WORD、DWORD、FWORD、QWORD或TBYTE类型。
操作符格式:
类型(Type)PTR变量(Variable)±常数表达式(Constantexpression)SIZE:
回送分配给变量的字节数,它是LENGTH与TYPE值的乘积。
OFFSET:
回送变量或者标号的偏移地址值。
物理地址的求法
5.逻辑地址
(1).在实模式下逻辑地址即为段地址:
偏移地址。
物理地址=段地址×10H+偏移地址
(2).在保护模式下逻辑地址则由选择器和偏移地址两部分组成。
选择器存放在段寄存器中,但它不能直接表示段基地址,而由操作系统通过一定的方法取得段基地址,
再和偏移地址相加,从而求得所选存储单元的物理地址。
1.1.3存储单元的地址和内容:
1.字节:
每8位二进制数组成一个字节(Byte)。
在存储器里是以字节为单位存储信息。
2.字:
16位二进制数(2个字节)组成一个字。
分成低位字节和高位字节存储。
3.存储单元的地址:
为了正确的存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址。
以字节为单位给存储单元按二进制从0开始顺序进行的编号。
它是无符号的二进制整数,书写格式为十六进制数。
(1).选址能力:
若干位(如x位)二进制数(相当于若干根地址线)所能选择的最大存储单元
的地址数(2x)。
(2).1K=1024=210。
所以16位二进制数的选址能力为216=64KB。
用0~FFFFH表示。
IBMPC机(8086/8088CPU)的选址能力为220=1MB。
4.存储单元的内容:
该存储单元存放的信息。
存储器的内容取之不尽。
(1).字节的存储:
直接存入某存储单元。
(2).字的存储:
一个字存入存储器要占用两个单元。
存放时,低位字节存入低地址单元,高位字节存入高位地址单元。
字单元的地址用它的低地址表示,应尽量为偶数地址。
(3).如果用X表示某存储单元的地址,则X单元的内容可以表示为(X);假如X单元中存放着Y,而Y又是一个地址,则可用(Y)=((X))来表示Y单元的内容。
(4).存储器的内容取之不尽。
1.1.4实模式存储器寻址
实模式就是为8086/8088而设计的工作方式,实模式下允许的最大寻址空间为1MB。
它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法。
1.存储器地址的分段
(1).段:
程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。
段的最大长度为64KB,以便能用16位二进制数表示段内地址。
1).小段:
从0地址开始,每16字节为一小段。
小段的首地址用16进制数表示时其最低位为0。
2).段的起始地址:
段不能起始于任意地址,而必须从任一小段(paragraph)的首地址开始。
(2).物理地址、段地址、偏移地址
1).物理地址(PA):
在1MB的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址(20位)。
20位物理地址由16位段地址和16位偏移地址组成。
2).段地址:
段起始地址的高16位值(16位),低4位固定为0被省去。
3).偏移地址(偏移量EA):
指在段内相对于段起始地址的偏移值(16位)。
4).物理地址=段地址×10H+偏移地址。
用段地址:
偏移地址表示。
2.段寄存器:
在8086~80286中,有4个专门存放段地址的寄存器。
(1).代码段CS:
存放当前正在运行的程序。
(2).数据段DS:
存放当前运行程序所用的数据。
(3).堆栈段SS:
定义堆栈的所在区域。
(4).附加段ES:
附加的数据段。
在80386及其后又增加了FS和GS两个附加数据段寄存器。
3.逻辑地址
(1).在实模式下逻辑地址即为段地址:
偏移地址。
物理地址=段地址×10H+偏移地址
(2).在保护模式下逻辑地址则由选择器和偏移地址两部分组成。
选择器存放在段寄存器
中,但它不能直接表示段基地址,而由操作系统通过一定的方法取得段基地
址,再和偏移地址相加,从而求得所选存储单元的物理地址。
1.2I/O设备的数据传送方式
1.2.1CPU与外设
1.CPU和外部设备的连接:
通过硬件接口或控制器相连。
2.CPU利用输入/输出指令(IN/OUT)与外部设备交换信息。
这些信息有以下三种:
(1).控制信息:
CPU输出到I/O接口,告诉接口和设备要做什么工作。
(2).状态信息:
CPU从I/O接口输入,表示I/O设备当前的状态。
(3).数据信息:
双向传输,是I/O设备和CPU真正要交换的信息。
1.2.2直接存储器存取DMA方式
1.输入/输出的传送方式
(1).程序直接控制I/O方式:
CPU通过执行程序不断读取并测试外设的状态,如果外设处于准备好状态(输入设备)或者空闲状态(输出设备),则CPU执行输入指令或输出指令与外设交换信息。
此为查询式传送方式。
也可用无条件传送方式直接与外设交换信息。
(2).中断传送方式:
利用中断技术对输入/输出进行处理的方式。
(3).DMA方式:
直接存储器存取方式(或称为成组数据传送方式)。
(4).通道控制方式:
利用I/O协处理器的传送方式。
(5).I/O处理机方式:
利用专门的计算机进行I/O传送的I/O处理机方式。
2.DMA方式
(1).DMA控制器或接口一般包括四个寄存器:
状态控制寄存器、数据寄存器、地址寄存器和字节计数器,这些寄存器能在信息传送之前进行初始化。
每个字节传送后,地址寄存器增1,字节计数器减1。
(2).计算机系统完成DMA传送的步骤
首先由接口发出DREQ信号,请求DMA控制器进行数据传送;
1).DMA控制器向CPU发出HOLD信号,请求使用总线。
2).CPU发出响应信号HLDA给DMA控制器,并将总线让出,DMA控制器取得总线控制权。
DMA控制器向接口发出DACK(DMA应答)信号,启动接口进行数据传送;
3).传输数据的存储器地址通过地址总线发出。
4).传输的数据字节通过数据总线传送。
5).地址寄存器增1。
6).字节计数器减1。
7).如字节计数器未减1到0,则转向第3步。
8).否则,DMA控制器撤销总线请求信号HOLD,CPU收回总线控制权,传送结束。
1.380x86的寻址方式
1.3.1与数据有关的寻址方式
这种寻址方式用来确定操作数地址从而找到操作数。
1.立即数寻址方式:
操作数直接存放在指令中,紧跟在操作码之后,这种操作数称为立即数。
它作为指令的一部分存放在代码段里。
如:
MOVAL,6;MOVAX,300AH;MOVEAX,2030300AH
2.寄存器寻址方式:
操作数在寄存器中,指令指定寄存器号。
如:
MOVAL,AH
3.直接寻址方式:
操作数的有效地址只包含位移量一种成份,其值就存放在代码段中的指令的操作码之后。
位移量的值即操作数的有效地址EA。
如:
MOVAX,VALUE;MOVAX,[2000H]
(1).由此及往下的各种寻址方式的操作数都在除代码段以外的存储区中。
用方括号(“[]”)
括起来的为存储器操作数。
寄存器名称外加小括号“()”表示是该寄存器的内容。
(2).有效地址(effectiveaddress,EA):
即操作数的偏移地址。
自此开始的寻址方式即为求得有效地址(EA)的不同途径。
有效地址的计算可以用下式表示:
EA=基址+(变址×比例因子)+位移量有效地址可以由以下四种成分组成:
1).位移量(displacement)是存放在指令中的一个8位、16位或32位的数,但它不是立即数,而是一个地址。
2).基址(base)是存放在基址寄存器中的内容。
它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。
3).变址(index)是存放在变址寄存器中的内容。
它通常用来访问数组中的某个元素或字符串中的某个字符。
4).比例因子(scalefactor)是386及其后继机型新增加的寻址方式中的一个术语,其值可为1、2、4或8。
在寻址中可用变址寄存器的内容乘以比例因子来取得变址值。
(3).段跨越前缀:
80x86允许数据存放在数据段以外的段中,应在指令中用该段寄存器加冒号(“:
”)即段跨越前缀来指定该段。
只要有BP则隐含的段寄存器为SS。
否则隐含的段寄存器为DS。
如:
MOVAX,ES:
VALUE。
但是在以下三种情况下,不允许使用段跨越前缀,它们是:
1).串处理指令的目的串必须使用ES段;
2).PUSH指令的目的和POP指令的源必须用SS段;
3).指令代码必须存放在CS段中。
(4).80x86CPU中为了使指令字不要过长,规定双操作数指令的两个操作数中,只能有一个使用存储器寻址方式,这就是一个变量常常先要送到寄存器的原因。
4.寄存器间接寻址方式:
操作数的有效地址只包含基址寄存器或变址寄存器内容一种成份。
有效地址就在某个寄存器中,而操作数则在存储器中。
可使用段跨越前缀。
如:
MOVAX,ES:
[BX]
5.寄存器相对寻址方式(或称直接变址寻址方式):
操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,有效地址由两部分组成。
可使用段跨越前缀(又称为段超越)。
如:
MOVES:
STRING[SI],DL
⎧(BX)⎫
⎪(BP)⎪⎧8位位移量⎫
⎨
+
⎨
⎬
EA=⎪⎪⎬
⎪(DI)⎪⎩16位位移量⎭
⎪⎩(SI)⎪⎭
6.基址变址寻址方式:
操作数的有效地址EA是一个基址寄存器和一个变址寄存器的内容之和。
可使用段跨越前缀。
如:
MOVAX,ES:
[BX][SI]
EA=⎧(BX)⎫+⎧(SI)⎫
⎨⎬⎨⎬
⎩(BP)⎭⎩(DI)⎭
7.相对基址变址寻址方式:
操作数的有效地址EA是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和。
可使用段跨越前缀。
如:
MOVES:
MASK[BX][SI],AX
EA=⎧(BX)⎫+⎧(SI)⎫+⎧8位位移量⎫
⎨⎬⎨⎬⎨⎬
⎩(BP)⎭⎩(DI)⎭⎩16位位移量⎭
8.端口(输入/输出)寻址方式:
一个操作数必须为AX或AL或EAX,另一个用端口直接寻址方式(端口号<256)或端口间接寻址方式(DX的内容为端口号)。
如:
INAL,0ADH;OUTDX,AX
附:
书上3.1.2所用到的操作符意义:
2.SHORT:
属性操作符,表示段内短程转移。
3.PTR:
属性操作符,建立一个符号地址(取后面内容的地址)。
4.NEAR:
类型操作符,距离类型,段内近程。
5.FAR:
类型操作符,距离类型,段间远程。
6.WORD:
类型操作符,数据类型,字。
7.DWORD:
类型操作符,数据类型,双字。
8.NEARPTR:
取段内近程地址值操作符。
9.FARPTR:
取段间远程地址值操作符。
10.WORDPTR:
取字长地址值操作符。
11.DWORDPTR:
取双字长地址值操作符。
补码及其加减运算
9.n位补码所表示数的范围:
-2n-1≤N≤2n-1-1
10.双字长数或双精度数:
在机器里,为了扩大表数范围,可以用两个机器字(高位字和低位字)来表示一个机器数,这种数称为双字长数或双精度数。
在80386及其后则有4字(64位)。
1.3.2补码的加法和减法
1.求补运算:
对一个二进制数按位求反后在末尾加1的运算称为求补运算。
[X]补求补
2.补码的减法运算规则
[-X]补求补
[X]补
[X-Y]补=[X]补+[-Y]补
1.3.3无符号整数:
把最高有效位也作为数值处理的数称为无符号整数。
1.3.4字符表示法(ASCII码):
80x86机采用目前最常用的美国信息交换标准代码ASCII码表示。
1.3.5BCD码:
4位二进制数编码的十进制数称为BCD码(又叫8421码)。
BCD码是无符号整数
1.压缩BCD码:
用4位二进制数表示一个十进制数位。
2.非压缩BCD码:
用8位二进制数表示一个十进制数位
1.3.6“异或”运算(XOR)
Y=A⊕B=A∀
B=AXORB
所有的逻辑运算都是按位操作的。
1.4中央处理机
1.4.1中央处理机CPU的组成
1.CPU的任务是执行存放在存储器里的指令序列。
2.CPU芯片中除高速缓冲存储器之外,主要由以下三部分组成:
(1).算术逻辑部件(arithmeticlogicunit,ALU):
用来进行算术和逻辑运算。
(2).控制逻辑:
负责对全机的控制工作。
(3).工作寄存器:
用来存放计算过程中所需要的或所得到的各种信息。
1.4.280x86寄存器组
寄存器可以分为程序可见的寄存器和程序不可见的寄存器两大类。
①程序可见的寄存器是指在汇编语言程序设计中用到的寄存器,分为通用寄存器、专用寄存器和段寄存器3类。
②程序不可见的寄存器是指一般应用程序设计中不用而由系统所用的寄存器。
1.通用寄存器
(1).数据寄存器:
AX、BX、CX、DX,四个16位通用寄存器,用来暂时存放计算过程中所用到的操作数、结果和其他信息。
既
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 重点 总结