您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > 汇编语言复习重点总结版
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)-CF5.除法指令(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)+2POPFD;(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;4).SAR——算术右移指令指令格式:SAROPR,CNT;(2).循环移位指令1).ROR——循环右移指令指令格式:ROROPR,CNT;2).RCR——带进位位循环右移指令指令格式:RCROPR,CNT;说明:①.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)≠01).JZ(或JE)——结果为零(或相等)则转移指令格式:JZ(或JE)OPR测试条件:ZF=1(2).TEST——测试指令指令格式:TESTOPR1,OPR2;(OPR1)∧(OPR2)说明:①.DST、OPR、OPR1不允许使用立即数寻址方式。(3).CMP——比较指令指令格式:CMPOPR1,OPR2;(OPR1)-(OPR2),运算后根据结果影响标志CFOPR0CFOPR0CFOPRCFOPRCFOPR说明:①.以上指令除DEC不影响CF标志外,它们都影响条件标志位。②.OF是有符号数的溢出,CF是无符号数的溢出。但CF可作为多位运算借位标志。1.WORDPTR:取字长地址值操作符。(4).INT——中断调用指令指令格式:INTTYPE或INT;TYPE=3时,缺省执行操作:Push(FLAGS)IF←0TF←0AC←0Push(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).在实模式下逻辑地址即为段地址:偏移地址。物理地址
本文标题:汇编语言复习重点总结版
链接地址:https://www.777doc.com/doc-1499172 .html