川大学微机原理与接口技术-何小海-第三章指令系统.ppt

上传人:牧羊曲112 文档编号:6466482 上传时间:2023-11-02 格式:PPT 页数:148 大小:536.50KB
返回 下载 相关 举报
川大学微机原理与接口技术-何小海-第三章指令系统.ppt_第1页
第1页 / 共148页
川大学微机原理与接口技术-何小海-第三章指令系统.ppt_第2页
第2页 / 共148页
川大学微机原理与接口技术-何小海-第三章指令系统.ppt_第3页
第3页 / 共148页
川大学微机原理与接口技术-何小海-第三章指令系统.ppt_第4页
第4页 / 共148页
川大学微机原理与接口技术-何小海-第三章指令系统.ppt_第5页
第5页 / 共148页
点击查看更多>>
资源描述

《川大学微机原理与接口技术-何小海-第三章指令系统.ppt》由会员分享,可在线阅读,更多相关《川大学微机原理与接口技术-何小海-第三章指令系统.ppt(148页珍藏版)》请在三一办公上搜索。

1、微机原理与接口技术,第三章 指令系统,主要内容,寻址方式8086/8088的基本指令指令格式及执行时间,基本概念,指令与指令系统CISC与RISCCISC:复杂指令集计算机,典型代表Intel PentiumRISC:精简指令集计算机,典型代表PowerPC,最经常使用的指令,不经常使用的指令,20,80,指令的组成,操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分操作数是指令执行的参与者,即各种操作的对象有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数有些指令隐含操作数,指令由操作码和操作数两部分组成,指令的助

2、记符格式,操作数2,常被称为源操作数src,它表示参与指令操作的一个对象操作数1,成被称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果分号后的内容是对指令的解释,操作码 操作数1,操作数2;注释,指令的操作码和操作数,每种指令的操作码用一个助记符表示(指令功能的英文缩写)对应着机器指令的一个或多个二进制编码指令中的操作数可以是一个具体的数值可以是存放数据的寄存器或指明数据在主存位置的存储器地址,寻址与寻址方式,指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址把寻找操作数的方式叫做操作数的寻址方式理解操作数的寻址方式是理解指令功能的前提操作数采

3、取哪一种寻址方式一方面,会影响处理器执行指令的速度和效率另一方面,对程序设计也很重要,操作数的来源,指 令,寄 存 器,内 存,I/O设备或端口,操作数,立即数寻址方式,指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)这种操作数被称为立即数imm可以是8位数值i8(00HFFH)也可以是16位数值i16(0000HFFFFH)立即数寻址方式常用来给寄存器和存储单元赋值,MOV AX,0102H;AX0102H,寄存器寻址方式,操作数存放在CPU的内部寄存器reg中8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器

4、r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器seg:CS、DS、SS、ES寄存器名表示其内容(操作数),MOV AX,BX;AXBX,存储器寻址方式,操作数在主存储器中,用主存地址表示程序设计时,8088采用逻辑地址表示主存地址段地址在默认的或用段超越前缀指定的段寄存器中指令中只需给出操作数的偏移地址(有效地址EA)PA(段寄存器)10H+EA8086设计了多种存储器寻址方式1、直接寻址方式2、寄存器间接寻址方式3、寄存器相对寻址方式4、基址变址寻址方式5、相对基址变址寻址方式,(1)直接寻址方式,直接寻址方式的有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段

5、超越前缀改变用中括号包含有效地址,表达存储单元的内容,MOV AX,2000H;AXDS:2000H,MOV AX,ES:2000H;AXES:2000H,MOV AX,BUFFER;BUFFER:符号地址,(2)寄存器间接寻址方式,有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中对于BX、SI、DI,默认的段地址在DS段寄存器,可使用段超越前缀改变对于BP,默认的段地址在SS段寄存器,可使用段超越前缀改变,MOV AX,BX;AXDS:BX,MOV AX,ES:BX;AXES:BX,MOV AH,DS:BPMOV ES:DI,AL,(3)寄存器相对寻址方式,有效地址是寄存器内容与有

6、符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址BX/BP/SI/DI8/16位偏移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变,MOV AX,SI+06H;AXDS:SI+06H,MOV AX,06HSI;AXDS:SI+06H,(4)基址变址寻址方式,有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址BX/BPSI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变,MOV AX,BX+SI;AXDS:BX+SI,MOV AX,BXSI;AXDS:

7、BX+SI,(5)相对基址变址寻址方式,有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:有效地址BX/BPSI/DI8/16位偏移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变,MOV AX,BX+DI+6;AXDS:BX+DI+6,MOV AX,6BX+DI,MOV AX,6BXDI,相对寻址方式中的偏移量,在寄存器相对和相对基址变址寻址方式中,其偏移量不仅可用常量表示,也可用符号表示这个符号可以是变量名,例如WVAR变量,而且支持多种表达形式MOV AX,DI+WVAR;等同于 MOV AX,WVARDIMO

8、V AX,BX+SI+WVAR;等同于 MOV AX,BXSI+WVAR;等同于 MOV AX,WVARBX+SI;等同于 MOV AX,WVARBXSI,举例,若(BX)0313H,(SI)1123H,(DI)0606H,(DS)2000H,(SS)6800H,(BP)0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。,;立即寻址,MOVAX,1117H MOVBX,SP MOVDX,BX,;寄存器寻址,EA0313H,PA20000H+0313H20313H,;寄存器间接寻址,举例,若(BX)0313H,(SI)1123H,(DI)0

9、606H,(DS)2000H,(SS)6800H,(BP)0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。,;寄存器相对寻址,MOVAX,BP100H MOVAX,100HSI,;寄存器相对寻址,EA0100H+100H0200H,PA68000H+0200H68200H,EA1123H+100H1223H,PA20000H+1223H21223H,举例,若(BX)0313H,(SI)1123H,(DI)0606H,(DS)2000H,(SS)6800H,(BP)0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计

10、算该操作数的有效地址与物理地址。,;基址变址寻址,MOVAL,BXSI MOVAX,BP+SI+100H,;相对基址加变址寻址,EA0313H+1123H1436H,PA20000H+1436H21436H,EA0100H+1123H+100H1323H,PA68000H+1323H69323H,数据传送指令,数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOV XCHG XLAT PUSH POP IN OUT LEA,(1)通用数据传送指令,提供方便灵活的通用传送操作有5条指令M

11、OVXCHGXLATPUSHPOP,MOV,XCHG,XLAT,PUSH,POP,传送指令MOV(move),把一个字节或字的操作数从源地址传送至目的地址,MOV reg/mem,imm;立即数送寄存器或主存,MOV reg/mem/seg,reg;寄存器送(段)寄存器或主存,MOV reg/seg,mem;主存送(段)寄存器,MOV reg/mem,seg;段寄存器送寄存器或主存,MOV指令立即数传送,mov cl,4;cl4,字节传送mov dx,0ffh;dx00ffh,字传送mov si,200h;si0200h,字传送,明确指令是字节操作还是字操作,MOV指令寄存器传送,mov ah

12、,al;ahal,字节传送mov bvar,ch;bvarch,字节传送mov ax,bx;axbx,字传送mov ds,ax;dsax,字传送mov bx,al;bxal,字节传送,寄存器具有明确的字节和字类型,MOV指令存储器传送,mov al,bx;alds:bxmov dx,bp;dxss:bp+0mov dx,bp+4;dxss:bp+4mov es,si;esds:si,不存在存储器向存储器的传送指令,MOV指令段寄存器传送,mov si,dsmov ax,ds;axdsmov es,ax;esaxds,对段寄存器的操作不灵活,MOV指令传送功能图解,MOV指令也并非任意传送!,立

13、即数,段寄存器CS DS ES SS,通用寄存器AX BX CX DXBP SP SI DI,存储器,非法指令的主要现象:两个操作数的类型不一致无法确定是字节量还是字量操作两个操作数都是存储器段寄存器的操作有一些限制,非法指令两个操作数类型不一致,在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令MOV AL,050AH;非法指令,修正:;mov ax,050ahMOV SI,DL;非法指令,修正:;mov dh,0;mov si,dx,非法指令无法确定是字节还是字操作,当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操

14、作符显式指明MOV BX+SI,255;非法指令,修正:;mov byte ptr bx+si,255;byte ptr 说明是字节操作;mov word ptr bx+si,255;word ptr 说明是字操作,非法指令两个操作数都是存储器,8086/8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)MOV 0200H,0100H;非法指令,修正:;假设是字操作;mov ax,0100H;mov 0200H,ax,非法指令段寄存器的操作有一些限制,8086/8088指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活MOV DS,ES;非法指

15、令,修正:;mov ax,es;mov ds,axMOV DS,100H;非法指令,修正:;mov ax,100h;mov ds,ax MOV CS,SI;非法指令;指令存在,但不能执行,交换指令XCHG(exchange),把两个地方的数据进行互换,寄存器与寄存器之间交换数据寄存器与存储器之间交换数据不能在存储器与存储器之间对换数据,XCHG reg,reg/mem;reg reg/mem,举例,mov ax,1199h;ax=1199hxchg ah,al;ax=9911h;等同于 xchg al,ahmov wvar,5566h;wvar是一个字量变量xchg ax,wvar;ax=55

16、66h,wvar=9911h;等同于 xchg wvar,ax,查表转换指令XLAT(translate),XLAT指令是字节的查表转换指令,可以根据表中元素的序号查出表中相应元素的内容将BX为首地址的缓冲区中、由AL指定的位移处的一个字节数据取出赋给AL,查表指令执行前:在主存建立一个字节量表格,含有希望转换成的目标码表格首地址存放于BX,AL存放相对表格首地址的位移量查表指令执行后:将AL寄存器的内容转换为目标码,XLAT;alds:bx+al,XLAT的例子,MOV BX,OFFSET TABMOV AL,10XLAT TAB,MOV SI,10MOV AL,TABSI,堆栈操作指令,堆

17、栈是一个“后进先出”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP,堆栈的图示,存储器,地址增加,SP,已有数据,堆栈段,SS,栈底,栈顶,(堆栈初始化时),SP,(a)堆栈的建立,堆栈的建立就是初始化SS和SP,MOV AX,2000HMOV SS,AX;初始化SSMOV SP,0080H;初始化SP,(b)进栈指令PUSH,进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部,PUSH r16/m16/seg;SPSP2;SS:SPr1

18、6/m16/seg,push axpush 2000h,(c)出栈指令POP,出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2,POP r16/m16/seg;r16/m16/segSS:SP;SPSP2,pop axpop wvar,堆栈操作的特点,堆栈操作的单位是字,进栈和出栈只针对字操作字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据堆栈段是程序中不可或缺的一个内存区,常用来临时存放数据传递参数保存和恢复寄存器,保存和恢复寄存器,push ax;进入子程序后push bxpush d

19、s.pop ds;返回主程序前pop bxpop ax,(2)输入输出指令,完成CPU与外设I/O端口的信息传送有2条指令INOUT,IN,OUT,输入输出指令概念,端口外设与CPU的接口端口地址 端口的地址,以区分不同的端口端口寻址直接端口寻址由指令中的8位数决定,范围0255间接端口寻址由DX决定,范围065535,输入输出指令IN和OUT,IN ac,port功能:从端口输入字节或字到累加器如果累加器为AL,则从端口输入1字节如果累加器为AX,则从两个连续端口port,port+1各输入1字节,分别送到AL、AHOUT port,ac 功能:将累加器的内容输出到端口如果累加器为AL,则输

20、出AL内容到端口如果累加器为AX,则分别将AL、AH内容输出到两个连续端口port,port+1,输入输出指令,IN AL,80H IN AX,80H IN AL,DX IN AX,DX,OUT 70H,AL OUT 70H,AX OUT DX,AL OUT DX,AX,注意接收或发送的数据必须放在累加器(AX/AL)中。使用间接端口寻址时,应将端口地址给DX,举例,IN AX,20H;直接寻址,字量输入,;直接寻址,字量输入IN AL,21H MOV AH,ALIN AL,20H,两段功能相同 字数据传送实际上实现了连续的两个端口地址的字节传送,(3)地址传送指令,传送操作数的段地址或偏移地

21、址有3条指令LEALDSLES,LEA,LDS,LES,取有效地址指令LEA(load effective address),将存储器操作数的有效地址送至指定的16位通用寄存器,LEA r16,mem;r16mem的有效地址EA,举例 有效地址的获取mov bx,400hmov si,3chlea bx,bx+si+0f62h,;BX400H3CH0F62H139EH,举例 地址传送与内容传送,LEA指令和MOV指令有区别:LEA BX,BUFFER MOV BX,BUFFER,1234H,BUFFER,0100H,LEA指令的执行结果:(BX)=0100HMOV指令的执行结果:(BX)=12

22、34H,LDS与LES指令,LDS reg,src reg:16位通用寄存器 src:存储器操作数功能:从src指定的存储单元开始,由4个连续存储单元中取出前2字节送到reg,取出后2字节送到DS中 LES reg,src reg:16位通用寄存器 src:存储器操作数功能:从src指定的存储单元开始,由4个连续存储单元中取出前2字节送到reg,取出后2字节送到ES中,(4)标志传送指令,LAHF功能:标志寄存器低8位传送给AHSAHF 功能:将AH传送给标志寄存器低8位PUSHF 功能:将16位标志寄存器内容入栈 POPF 功能:将栈顶内容弹出到标志寄存器,传送指令小结,通用传送指令 MOV

23、 XCHG XLAT IN OUT PUSH POP(5)输入输出指令IN OUT(2)地址传送指令LEA LDS LES(3)标志传送指令LAHF SAHF PUSHF POPF(4),算术运算指令,算术运算类指令用来执行二进制的算术运算:加、减、乘、除。这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志重点掌握加法指令:ADD、ADC、INC 减法指令:SUB、SBB、DEC、CMP、NEG,(1)加法和减法指令,加法指令:ADD,ADC和INC减法指令:SUB,SBB,DEC,NEG和CMP它们分别执行字或字节的加法和减法运算,除INC

24、和DEC不影响CF标志外,其他按定义影响全部状态标志位操作数组合:运算指令助记符 reg,imm/reg/mem运算指令助记符 mem,imm/reg运算指令助记符 mem/reg,加、减指令,ADD dest,src;加法:destdestsrc;ADD指令使目的操作数加上源操作数,和的结果送到目的操作数SUB dest,src;减法:destdestsrc;SUB指令使目的操作数减去源操作数,差的结果送到目的操作数,例题-加法,MOV AX,7348H,;AL48H27H6FH(01101111);OF0,SF0,ZF0,PF1,CF0,ADD AX,3FFFH,;AX736FH3FFFH

25、B36EH(01101110);OF1,SF1,ZF0,PF0,CF0,;AX7348H,ADD AL,27H,例题-减法,sub ah,0f0h,;AHB3HF0HC3H(11000011);OF0,SF1,ZF0,PF1,CF1,mov word ptr0200h,0ef00h,;0200HEF00H,标志不变,sub 0200h,ax,;0200HEF00HC36EH2B92H;OF0,SF0,ZF0,PF0,CF0,sub si,si,;SI0;OF0,SF0,ZF1,PF1,CF0,带进位加、带借位减指令,ADC dest,src;加法:destdestsrcCF;ADC指令除完成A

26、DD加法运算外,还要加上进位CF,结果送到目的操作数SBB dest,src;减法:destdestsrcCF;SBB指令除完成SUB减法运算外,还要减去借位CF,结果送到目的操作数,主要用途是完成多字节加、减法,例题-无符号双字加法和减法,mov ax,5678h;AX 5678Hadd ax,0bcdeh;AX 1356H,CF=1mov dx,1234h;DX 1234Hadc dx,789ah;DX 8ACFH,CF=0,12345678H+789ABCDEH=?,1234 5678H 789A BCDEH 8ACF 1356H,比较指令CMP(compare),CMP dest,sr

27、c;做减法运算:destsrc;CMP指令将目的操作数减去源操作数,但结果不回送目的操作数比较指令通过减法运算影响状态标志,用于比较两个操作数的大小关系,cmp ax,bxcmp al,100,增量和减量指令,INC reg/mem;增量(加1):reg/memreg/mem1DEC reg/mem;减量(减1):reg/memreg/mem1INC指令和DEC指令是单操作数指令与加法和减法指令实现的加1和减1不同的是:INC和DEC不影响CF标志,inc si;sisi1dec byte ptr si;sisi1,求补指令NEG(negtive),NEG reg/mem;reg/mem0re

28、g/memNEG指令对操作数执行求补运算,即用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEG指令也是一个单操作数指令,例题-求补运算,mov ax,0ff64hneg alsub al,9dhneg axdec alneg ax,;AL064H9CH,AXFF9CH;OF0 SF1,ZF0,PF1,CF1,;AL9CH9DHFFH,AXFFFFH;OF0,SF1,ZF0,PF1,CF1,;AX0FFFFH0001H;OF0,SF0,ZF0,PF0,CF1,;AL01H10,AX0000H;OF0,SF0,ZF

29、1,PF1,CF1,;AX000;OF0,SF0,ZF1,PF1,CF0,符号扩展指令,符号扩展是指用一个操作数的符号位(最高位)形成另一个操作数,形成的新操作数的高位是全0(正数)或全1(负数)符号扩展虽然使数据位数加长,但数据大小并没有改变,扩展的高部分仅是低部分的符号扩展符号扩展指令有两条,用来将字节转换为字,字转换为双字CBW;AL符号扩展成AXCWD;AX符号扩展成DX,例题-符号扩展,mov al,64h;AL64H(机器数),表示10进制数100(真值)cbw;将符号0扩展,AX0064H,仍然表示100mov ax,0ff00h;AXFF00H,表示有符号10进制数256cwd

30、;将符号位“1”扩展,DX.AXFFFFFF00H;仍然表示256,(2)乘法和除法指令,乘法指令分无符号和有符号乘法指令MUL reg/mem;无符号乘法IMUL reg/mem;有符号乘法除法指令分无符号和有符号除法指令DIV reg/mem;无符号除法IDIV reg/mem;有符号除法,乘法和除法指令(续),乘法指令举例,MOV AL,0B4H;al=b4h=180MOV BL,11H;bl=11h=17MUL BL;ax=0bf4h=3060MOV AL,0B4H;al=b4h=76MOV BL,11H;bl=11h=17IMUL BL;ax=faf4h=1292,除法指令举例,MO

31、V AX,0400H;ax=400h=1024MOV BL,0B4H;bl=b4h=180DIV BL;商al05h5;余数ah7ch124MOV AX,0400H;ax=400h=1024MOV BL,0B4H;bl=b4h=76IDIV BL;商alf3h13;余数ah24h36,思考,对于带符号数除法,如77除以+5,可以商15,余2;也可以商16,余3。哪一种结果是正确的?,?,(3)十进制调整指令,十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果,以此实现十进制BCD码运算8088指令系统支持两种BCD码调整运算压缩BCD码就是通常的8421码;它用4个二进制

32、位表示一个十进制位,一个字节可以表示两个十进制位,即0099非压缩BCD码用8个二进制位表示一个十进制位,只用低4个二进制位表示一个十进制位09,高4位通常默认为0,编码的比较,真值(十进制)864二进制编码08H40H压缩BCD码08H64H非压缩BCD码08H0604HASCII码38H3634H,压缩BCD码加减法调整指令DAA DAS非压缩BCD码加减乘除法调整指令AAA AAS AAM AAD,未组合BCD码调整,AAA如果AL&0FH9,或AF=1,则AL=AL06H,AH=AH1,AF=1,CF=AF,AL=AL&0FH 否则AL=AL&0FHAAS如果AL&0FH9,或AF=1

33、,则AL=AL06H,AH=AH1,AF=1,CF=AF,AL=AL&0FH 否则AL=AL&0FH,组合BCD码调整,DAA 如果AL&0FH9,或AF=1,则AL=AL06H,AF=1 如果AL&F0H90H,或CF=1,否则AL=AL60H,CF=1DAS如果AL&0FH9,或AF=1,则AL=AL06H,AF=1 如果AL&F0H9,或CF=1,否则AL=AL60H,CF=1,未组合BCD码乘法、除法调整,AAM AH=AL/10 AL=AL%10 调整之前先用MUL指令将两个未组合BCD码相乘 影响SF、ZF、PFAADAL=AH10AL AH=0 影响SF、ZF、PF 先调整,再用

34、DIV指令进行除法,所得商还需要用AAM指令调整,调整指令小结,调整指令操作数隐含,通常是对AL进行调整AAA、DAA指令通常紧跟在加法指令之后AAS、DAS指令通常紧跟在减法指令之后AAM指令通常无符号乘法MUL指令之后AAD在DIV指令之前进行调整,调整指令举例,MOV AH,00HMOV AL,08HADD AL,09H;AL=11HAAAAH=01H,AL=07H,CF=1,MOV AL,48HADD AL,27H;AL=6FHDAAAL=75H,CF=0,MOV AX,0103HMOV BL,08HSUB AL,BL;AL=FBHAASAL=05H,AH=00H,CF=1,MOV A

35、L,08HMOV BL,07HMUL BL;AX=0038HAAMAH=05H,AL=06H,算术运算指令小结,加法指令 ADD ADC INC(3)减法指令SUB SBB DEC NEG CMP(5)乘除法指令MUL IMUL DIV IDIV(4)十进制调整指令AAA DAA AAS DAS AAM AAD(6)扩展指令CBW CWD(3),逻辑操作和移位指令,位操作类指令以二进制位为基本单位进行数据的操作当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令注意这些指令对标志位的影响1.逻辑运算指令AND OR XOR NOT TEST2.移位指令SHL SHR SAR3.

36、循环移位指令ROL ROR RCL RCR,(1)逻辑运算指令,双操作数逻辑指令AND、OR、XOR和TEST设置CFOF0,根据结果设置SF、ZF和PF状态,而对AF未定义;它们的操作数组合与ADD、SUB等一样:运算指令助记符 reg,imm/reg/mem运算指令助记符 mem,imm/reg 单操作数逻辑指令NOT不影响标志位,操作数与INC、DEC和NEG一样:NOT reg/mem,逻辑与指令AND,对两个操作数执行逻辑与运算,结果送目的操作数,AND dest,src;destdestsrc,只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0,逻辑或指令OR,对两个操作

37、数执行逻辑或运算,结果送目的操作数,OR dest,src;destdestsrc,只要相“或”的两位有一位是1,结果就是1;否则,结果为0,逻辑异或指令XOR,对两个操作数执行逻辑异或运算,结果送目的操作数,XOR dest,src;destdestsrc,只有相“异或”的两位不相同,结果才是1;否则,结果为0,测试指令TEST,对两个操作数执行逻辑与运算,结果并不送目的操作数,仅按AND指令影响标志,TEST dest,src;destsrc,AND与TEST指令的关系,同SUB与CMP指令的关系一样,逻辑非指令NOT,对一个操作数执行逻辑非运算,NOT reg/mem;reg/memre

38、g/mem,按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”,例题-逻辑运算,mov al,75hand al,32hor al,71hxor al,0f1hnot al,例题-逻辑运算(答案),mov al,75h;AL75Hand al,32h;AL30H;CFOF0,SF0,ZF0,PF1or al,71h;AL71H;CFOF0,SF0,ZF0,PF1xor al,0f1h;AL80H;CFOF0,SF1,ZF0,PF0not al;AL7FH,标志不变,例题-逻辑运算指令的应用,AND BL,11110110b;BL中D0和D3清0,其余位不变OR BL,000010

39、01b;BL中D0和D3置1,其余位不变XOR BL,00001001b;BL中D0和D3求反,其余位不变,AND指令可用于复位某些位(同0相与),不影响其他位,OR指令可用于置位某些位(同1相或),不影响其他位,XOR指令可用于求反某些位(同1相异或),不影响其他位,(2)移位指令,将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存储单元;后一个操作数表示移位位数:该操作数为1,表示移动一位该操作数为CL,CL寄存器值表示移位位数(移位位数大于1只能CL表示)按照移入的位设置进位标志CF,根据移位后的结果影响S

40、F、ZF、PF,逻辑左移指令SHL,SHL reg/mem,1/CL;reg/mem左移1或CL位;最低位补0,最高位进入CF,逻辑右移指令SHR,SHR reg/mem,1/CL;reg/mem右移1/CL位;最高位补0,最低位进入CF,算术左移指令SAL,SAL reg/mem,1/CL;与SHL是同一条指令,算术右移指令SAR,SAR reg/mem,1/CL;reg/mem右移1/CL位;最高位不变,最低位进入CF,例题-数据移位,mov dx,6075h;DX01100000 01110101Bshl dx,1;DX11000000 11101010B;CF0,SF1、ZF0、PF0

41、sar dx,1;DX11100000 01110101B;CF0,SF1、ZF0、PF0shr dx,1;DX01110000 00111010B;CF1,SF0、ZF0、PF1mov cl,4;CL4,标志不变sar dx,cl;DX00000111 00000011B;CF1,SF0、ZF0、PF1,例题:将AL寄存器中的无符号数乘以10,xor ah,ah;实现AH0,同时使CF0shl ax,1;AX2ALmov bx,ax;BXAX2ALshl ax,1;AX4ALshl ax,1;AX8AL add ax,bx;AX8AL2AL10AL,逻辑左移一位相当于无符号数乘以2 逻辑右移

42、一位相当于无符号数除以2,(3)循环移位指令,循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。分为:ROL reg/mem,1/CL;不带进位循环左移ROR reg/mem,1/CL;不带进位循环右移RCL reg/mem,1/CL;带进位循环左移RCR reg/mem,1/CL;带进位循环右移循环移位指令的操作数形式与移位指令相同,按指令功能设置进位标志CF,但不影响SF、ZF、PF、AF标志,32位数据移位,;将DX.AX中32位数值左移一位SHL AX,1RCL DX,1,考虑32位数据的右移等操作,例题:非压缩BCD码合并为压缩BCD,and ax,0f0fh;保证

43、高4位为0mov cl,4rol ah,cl;也可以用shl ah,cladd al,ah;也可以用or al,ah,0000XXXX 0000YYYY,XXXX YYYY,00001111 00001111,0000XXXX 0000YYYY,XXXX0000 0000YYYY,;AH.AL分别存放着非压缩BCD码的两位;将它们合并成为一个压缩BCD码存AL,逻辑运算和移位指令小结,逻辑运算指令 AND OR NOT XOR TEST(5)移位指令SHL SAL SHR SAR(4)ROL ROR RCL RCR(4),控制转移指令,控制转移类指令用于实现分支、循环等程序结构,是仅次于传送指

44、令的常用指令重点掌握:JMP/Jcc/LOOP/JCXZ CALL/RET INT n/IRET,控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变,目标地址的寻址方式,相对寻址方式指令代码中提供目的地址相对于当前IP的位移量,转移到的目的地址(转移后的IP值)就是当前IP值加上位移量直接寻址方式指令代码中提供目的逻辑地址,转移后的CS和IP值直接来自指令操作码后的目的地址操作数间接寻址方式指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中间接获得,用标号表达,用标号表达,用寄存器或存储器操作数表达,目标地址的寻址范围:段内寻址,段内转移近转移(near)在当前代码段64

45、KB范围内转移(-32768+32767范围)不需要更改CS段地址,只要改变IP偏移地址段内转移短转移(short)转移范围可以用一个字节表达,在段内128127范围的转移,目标地址的寻址范围:段间寻址,段间转移远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址,代码段,代码段,实际编程时,汇编程序会根据目标地址的属性,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr或far ptr 强制成为需要的转移类型,(1)无条件转移指令,只要执行无条件转移指令JM

46、P,就使程序转到指定的目标地址,从目标地址处开始执行指令操作数label是要转移到的目标地址JMP指令分成4种类型:段内转移、相对寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址,JMP label;程序转向label标号指定的地址,无条件转移指令JMP(jump),JMP label;段内转移、相对寻址;IPIP位移量 JMP r16/m16;段内转移、间接寻址;IPr16/m16 JMP far ptr label;段间转移、直接寻址;IP偏移地址,CS段地址 JMP far ptr mem;段间转移,间接寻址;IPmem,CSmem2,(2)条件转移指令,条件转移指令Jc

47、c根据指定的条件确定程序是否发生转移。其通用格式为:Jcc label;条件满足,发生转移;IPIP8位位移量;否则,顺序执行label是一个标号、一个8位位移量,表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移label只支持短转移的相对寻址方式,Jcc指令的分类,Jcc指令不影响标志,但要利用标志根据利用的标志位不同,分成三种情况:判断单个标志位状态 比较无符号数高低 比较有符号数大小,Jcc指令实际虽然只有16条,但却有30个助记符 采用多个助记符,目的是为了方便记忆和使用,条件转移指令的含义,JZ/JEJump on Zero/EqualJNZ/JNEJump on

48、 Not Zero/EqualJSJump on SignJNSJump on Not SignJP/JPEJump on Parity/Parity EvenJNP/JPOJump on Not Parity/Parity OddJOJump on OverflowJNOJump on Not OverflowJC/JB/JNAEJump on Carry/Below/Not Above or EqualJNC/JNB/JAEJump on Not Carry/Not Below/Above or EqualJBE/JNAJump on Below or Equal/Not AboveJNB

49、E/JAJump on Not Below or Equal/AboveJL/JNGEJump on Less/Not Greater or EqualJNL/JGEJump on Not Less/Greater or EqualJLE/JNGJump on Less or Equal/Not GreaterJNLE/JGJump on Not Less or Equal/Greater,判断单个标志位状态,JZ/JE和JNZ/JNE利用零标志ZF,判断结果是否为零(或相等)JS和JNS利用符号标志SF,判断结果是正是负 JO和JNO利用溢出标志OF,判断结果是否产生溢出 JP/JPE和JN

50、P/JPO利用奇偶标志PF,判断结果中“1”的个数是偶是奇 JC和JNC利用进位标志CF,判断结果是否进位或借位,例题,题目:将AX中存放的无符号数除以2,如果是奇数则加1后除以2,问题:如何判断AX中的数据是奇数还是偶数?,解答:判断AX最低位是“0”(偶数),还是“1”(奇数)。可以用位操作类指令,1:用逻辑与指令将除最低位外的其他位变成0,保留最低位不变。判断这个数据是0,AX就是偶数;否则,为奇数,2:将最低位用移位指令移至进位标志,判断进位标志是0,AX就是偶数;否则,为奇数,3:将最低位用移位指令移至最高位(符号位),判断符号标志是0,AX就是偶数;否则,为奇数,例题解答1-用JZ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号