版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第2 2部分部分四四第第2章:章:2.2 8088/8086的寻址方式的寻址方式从从8088/8086的指令格式入手,论述:的指令格式入手,论述:立即数寻址方式立即数寻址方式寄存器寻址方式寄存器寻址方式存储器寻址方式存储器寻址方式进而熟悉进而熟悉8088/8086汇编语言指令格式,尤汇编语言指令格式,尤其是其中操作数的表达方法其是其中操作数的表达方法为展开为展开8088/8086指令系统做好准备指令系统做好准备第第2章:指令的组成章:指令的组成操作码操作码说明计算机要执行哪种操作说明计算机要执行哪种操作操作数操作数是指令执行的参与者,即各种操作的是指令执行的参与者,即各种操作的对象对象操作码
2、操作码操作数操作数指令由操作码和操作数两部分组成指令由操作码和操作数两部分组成第第2章:指令的助记符格式章:指令的助记符格式操作数操作数2 2,常被称为,常被称为源操作数源操作数srcsrc操作数操作数1 1,成被称为,成被称为目的操作数目的操作数destdest后的内容是后的内容是对指令的解释对指令的解释, ,对指令的执对指令的执行不起作用行不起作用 操作码操作码 操作数操作数1,操作数操作数2 ;注释注释汇编语句格式汇编语句格式第第2章:操作数的寻址方式章:操作数的寻址方式寻找操作数的过程就是寻找操作数的过程就是操作数的寻址操作数的寻址把寻找操作数的方式叫做(操作数)把寻找操作数的方式叫做
3、(操作数)寻址寻址方式方式MOV指令指令第第2章:章:2.2.1 立即数寻址方式立即数寻址方式操作数是指令的一部分,这种操作数被称为操作数是指令的一部分,这种操作数被称为立即立即数数imm可以是可以是8位数值位数值i8(00HFFH)也可以是也可以是16位数值位数值i16(0000HFFFFH)MOV AX, 0102H;AX0102H第第2章:章:2.2.2 寄存器寻址方式寄存器寻址方式操作数存放在操作数存放在CPU的内部寄存器的内部寄存器reg中:中:8位寄存器位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器位寄存器r16:AX、BX、CX、DX、SI、DI、BP、
4、SP4个段寄存器个段寄存器seg:CS、DS、SS、ES寄存器名表示寄存器名表示其内容(操作数)其内容(操作数)MOV AX, BX;AXBX第第2章:章: 2.2.3 存储器寻址方式存储器寻址方式操作数在主存储器中,用主存地址表示操作数在主存储器中,用主存地址表示程序设计时,程序设计时,8088采用逻辑地址表示主存地址采用逻辑地址表示主存地址段地址在默认的或用段超越前缀指定的段寄存器中段地址在默认的或用段超越前缀指定的段寄存器中指令中只需给出操作数的偏移地址(有效地址指令中只需给出操作数的偏移地址(有效地址EA)8086设计了多种设计了多种存储器寻址方式存储器寻址方式1、直接寻址方式、直接寻
5、址方式2、寄存器间接寻址方式、寄存器间接寻址方式3、寄存器相对寻址方式、寄存器相对寻址方式4、基址变址寻址方式、基址变址寻址方式5、相对基址变址寻址方式、相对基址变址寻址方式第第2章:章:1. 直接寻址方式直接寻址方式直接寻址方式的有效地址在指令中直接给出直接寻址方式的有效地址在指令中直接给出默认的默认的段地址在段地址在DS段寄存器,可使用段寄存器,可使用段超越前段超越前缀缀改变改变用用中括号包含有效地址中括号包含有效地址,表达存储单元的内容,表达存储单元的内容MOV AX, 2000H;AXDS:2000HMOV AX, ES: 2000H;AXES:2000H第第2章:章:2. 寄存器间接
6、寻址方式寄存器间接寻址方式有效地址存放在基址寄存器有效地址存放在基址寄存器BX或变址寄存或变址寄存器器SI、DI中中默认的默认的段地址在段地址在DS段寄存器,可使用段超段寄存器,可使用段超越前缀改变越前缀改变MOV AX, BX;AXDS:BX第第2章:章:3. 寄存器相对寻址方式寄存器相对寻址方式有效地址有效地址是寄存器内容与有符号是寄存器内容与有符号8位或位或16位位移位位移量之和,寄存器可以是量之和,寄存器可以是BX、BP或或SI、DI有效地址有效地址BX/BP/SI/DIBX/BP/SI/DI8/168/16位位移量位位移量段地址对应段地址对应BX/SI/DI寄存器寄存器默认是默认是D
7、S,对应,对应BP寄存器寄存器默认是默认是SS;可用段超越前缀改变;可用段超越前缀改变MOV AX, SI+06H;AXDS:SI+06HMOV AX, 06HSI;AXDS:SI+06H第第2章:章:4. 基址变址寻址方式基址变址寻址方式有效地址有效地址由基址寄存器(由基址寄存器(BX或或BP)的内容加上)的内容加上变址寄存器(变址寄存器(SI或或DI)的内容构成:)的内容构成:有效地址有效地址BX/BPSI/DI段地址对应段地址对应BX基址寄存器基址寄存器默认是默认是DS,对应,对应BP基基址寄存器址寄存器默认是默认是SS;可用段超越前缀改变;可用段超越前缀改变MOV AX, BX+SI;
8、AXDS:BX+SIMOV AX, BXSI;AXDS:BX+SI第第2章:章:5. 相对基址变址寻址方式相对基址变址寻址方式有效地址有效地址是基址寄存器(是基址寄存器(BX/BP)、变址寄存器)、变址寄存器(SI/DI)与一个)与一个8位或位或16位位移量之和:位位移量之和:有效地址有效地址BX/BPSI/DI8/16位位移量位位移量段地址对应段地址对应BX基址寄存器基址寄存器默认是默认是DS,对应,对应BP基基址寄存器址寄存器默认是默认是SS;可用段超越前缀改变;可用段超越前缀改变MOV AX, BX+DI+6;AXDS:BX+DI+6MOV AX, 6BX+DIMOV AX, 6BXDI
9、第第2章:存储器寻址方式中的变量章:存储器寻址方式中的变量变量的定义变量的定义WVAR DW 1234H;定义;定义16位变量位变量WVAR,具有初值,具有初值1234H;汇编时在数据段为其分配两个连续的存储单元;汇编时在数据段为其分配两个连续的存储单元;假设其偏移地址为假设其偏移地址为10HMOV AX,WVAR;指令功能:;指令功能:AX1234H;等同于;等同于 MOV AX,0010H相对寻址方式中,相对寻址方式中,变量名表示其偏移地址变量名表示其偏移地址,相当,相当于位移量于位移量MOV AX, DI+WVAR;等同于;等同于 MOV AX,DI+0010H第第2章:操作数的表达符号
10、(章:操作数的表达符号(1) 操作数符号操作数符号含义(寻址方式含义(寻址方式)i8一个一个8位立即数位立即数i16一个一个16位立即数位立即数imm代表代表i8或或i16r8任意一个任意一个8位通用寄存器位通用寄存器AH, AL, BH, BL, CH, CL, DH, DLr16任意一个任意一个16位通用寄存器位通用寄存器AX, BX, CX, DX, SI, DI, BP, SPreg代表代表r8或或r16seg段寄存器段寄存器CS、DS、ES、SS第第2章:操作数的表达符号(章:操作数的表达符号(2)操作数符号操作数符号含义(寻址方式)含义(寻址方式)m8一个一个8位存储器操作数单元(
11、包括所有主存位存储器操作数单元(包括所有主存寻址方式)寻址方式)m16一个一个16位存储器操作数单元(包括所有主存位存储器操作数单元(包括所有主存寻址方式)寻址方式)mem代表代表m8或或m16dest目的操作数目的操作数src源操作数源操作数 掌握操作数的寻址方式后,进入指令学习掌握操作数的寻址方式后,进入指令学习汇编语言的两种语句格式汇编语言的两种语句格式执行性语句执行性语句执行性语句用于表达处理执行性语句用于表达处理器指令器指令(也称为也称为硬指令硬指令),汇编后对应一条指,汇编后对应一条指令代码。由处理器指令组成的代码序列是令代码。由处理器指令组成的代码序列是程序设计的主体程序设计的主
12、体标号标号: 硬指令助记符硬指令助记符 操作数操作数,操作数操作数 ;注释注释说明性语句说明性语句用于表达用于表达伪指令伪指令,指示源,指示源程序如何汇编、变量怎样定义、过程怎么程序如何汇编、变量怎样定义、过程怎么设置等设置等名字名字 伪指令助记符伪指令助记符 参数参数,参数参数, ;注释注释MOV指令的功能指令的功能立即数寻址方式立即数寻址方式寄存器寻址方式寄存器寻址方式直接寻址方式直接寻址方式间接寻址方式间接寻址方式相对寻址方式相对寻址方式基址变址寻址方式基址变址寻址方式相对基址变址寻址方式相对基址变址寻址方式第第2章:章:2.3 数据传送类指令数据传送类指令数据传送是计算机中最基本、最重
13、要的一种操作数据传送是计算机中最基本、最重要的一种操作, ,传送指令也是最常使用的一类指令传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置传送指令把数据从一个位置传送到另一个位置重点掌握重点掌握MOV XCHG XLAT PUSH POP LEA第第2章:章: 2.3.1 通用数据传送指令通用数据传送指令提供方便灵活的通用传送操作提供方便灵活的通用传送操作有有3条指令条指令MOV:数据传送:数据传送XCHG:数据交换:数据交换XLAT:代码转换:代码转换第第2章:章:1. 传送指令传送指令MOV(move)把一个字节或字的操作数从源地址传把一个字节或字的操作数从源地址传送
14、至目的地址送至目的地址格式:格式:MOV dest,srcdest可以是可以是reg、mem;src可以是可以是reg、mem或或imm演示演示第第2章:章:MOV指令立即数传送指令立即数传送mov cl,4;cl4cl4,字节传送,字节传送mov dx,0ffh;dx00ffhdx00ffh,字传送,字传送mov si,200h;si0200hsi0200h,字传送,字传送mov bvar,0ah;字节传送字节传送;假设;假设bvarbvar是一个字节变量,定义如下:是一个字节变量,定义如下:bvar bvar dbdb 0 0mov wvar,0bh;字传送字传送;假设;假设wvarwva
15、r是一个字变量,定义如下:是一个字变量,定义如下:wvar wvar dwdw 0 0明确指令是字节操作还是字操作明确指令是字节操作还是字操作第第2章:章:MOV指令寄存器传送指令寄存器传送mov ah,al;ahal,字节传送,字节传送mov bvar,ch;bvarch ,字节传送,字节传送mov ax,bx;axbx,字传送,字传送mov ds,ax;dsax,字传送,字传送mov bx,al;bxal,字节传送,字节传送 寄存器具有明确的寄存器具有明确的字节字节或或字字类型类型第第2章:章:MOV指令存储器传送指令存储器传送mov al,bx;alds:bxmov dx,bp;dxss
16、:bp+0mov dx,bp+4;dxss:bp+4mov es,si;esds:si 不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令(串操作指令除外)(串操作指令除外)第第2章:非法指令两个操作数类型不一致章:非法指令两个操作数类型不一致在绝大多数双操作数指令中,在绝大多数双操作数指令中,目的操作数和源操目的操作数和源操作数必须具有一致的数据类型作数必须具有一致的数据类型,或者同为字量,或者同为字量,或者同为字节量,否则为非法指令或者同为字节量,否则为非法指令MOV AL, 050AH;非法指令,;非法指令,;修正:;修正: mov ax,050ahMOV SI, DL;非法指
17、令,;非法指令,;修正:;修正: mov dh,0; mov si,dx第第2章:非法指令无法确定是字节量还是字量操作章:非法指令无法确定是字节量还是字量操作当无法通过任一个操作数确定是操作类型时,需当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的要利用汇编语言的操作符显式指明:操作符显式指明:byte ptr(字字节类型),节类型),word ptr(字类型)字类型)MOV BX+SI, 255 ;修正:;修正: mov byte ptrbyte ptr bx+si bx+si,255; mov word ptrword ptr bx+si bx+si,255第第2章:非法指令两个
18、操作数都是存储器章:非法指令两个操作数都是存储器8088指令系统除串操作指令外,指令系统除串操作指令外,不允许两个操作不允许两个操作数都是存储单元数都是存储单元(存储器操作数)(存储器操作数)MOV buf2, buf1;非法指令,;非法指令,;假设;假设buf2和和buf1是两个字变量是两个字变量;修正:;修正: mov ax,buf1; mov buf2,ax;假设;假设buf2和和buf1是两个字节变量是两个字节变量;mov al,buf1;mov buf2,al第第2章:非法指令段寄存器的操作有一些限制章:非法指令段寄存器的操作有一些限制8088指令系统中,指令系统中,能直接对能直接对
19、段寄存器段寄存器操作的指令操作的指令只有只有MOV等个别传送指令等个别传送指令,并且不灵活并且不灵活MOV DS, ES;非法指令,;非法指令,;修正:;修正: mov ax,es;mov ds,axMOV DS, 100H;非法指令,;非法指令,;修正:;修正: mov ax,100h;mov ds,ax MOV CS, SI;非法指令;非法指令第第2章:章:2. 交换指令交换指令XCHG(exchange)把两个地方的数据进行互换把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与寄存器之间对换数据寄存器与存储器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据不
20、能在存储器与存储器之间对换数据XCHG reg,reg/memXCHG reg,reg/mem;reg reg reg/memreg/mem演示演示第第2章:章:3. 换码指令换码指令XLAT(translate)用于将一种代码转换为另一种代码用于将一种代码转换为另一种代码将将BX指定的缓冲区中、指定的缓冲区中、AL指定的位移处的一个指定的位移处的一个字节数据取出赋给字节数据取出赋给AL换码指令执行前:换码指令执行前:在主存建立一个在主存建立一个字节表格字节表格,内含要转换成的目的代码,内含要转换成的目的代码表格首地址表格首地址存放于存放于BXBX,ALAL存放相对表格首地址的存放相对表格首地
21、址的位移量位移量换码指令执行后:换码指令执行后:将将ALAL寄存器的内容转换为寄存器的内容转换为目标代码目标代码XLATXLAT;alds:bx+alalds:bx+al演示演示第第2章:章:2.3.2 堆栈操作指令堆栈操作指令堆栈是一个堆栈是一个“后进先出后进先出LIFOLIFO”(或说(或说“先进先进后出后出FILOFILO”)的主存区域,位于堆栈段中;)的主存区域,位于堆栈段中;SSSS段寄存器段寄存器记录其段地址记录其段地址堆栈只有一个出口,即当前栈顶堆栈只有一个出口,即当前栈顶(活动(活动端)端),用,用堆栈指针寄存器堆栈指针寄存器SPSP指定。指定。(实际(实际上,上,SPSP总指
22、向最后一个压入堆栈的数据。)总指向最后一个压入堆栈的数据。)堆栈只有两种基本操作:进栈和出栈,对堆栈只有两种基本操作:进栈和出栈,对应两条指令应两条指令PUSH和和POP图示图示第第2章:进栈指令章:进栈指令PUSH进栈指令进栈指令先使堆栈指针先使堆栈指针SP减减2,然后把一,然后把一个字操作数存入堆栈顶部个字操作数存入堆栈顶部push axpush 2000h演示演示第第2章:出栈指令章:出栈指令POP出栈指令把栈顶的一个字传送至指定的目出栈指令把栈顶的一个字传送至指定的目的操作数,的操作数,然后然后堆栈指针堆栈指针SP加加2pop axpop wvar演示演示第第2章:堆栈操作的特点章:堆
23、栈操作的特点字字数据数据从栈顶压入和弹出时,都是低地址从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节字节送低字节,高地址字节送高字节堆栈操作遵循堆栈操作遵循先进后出先进后出原则原则堆栈段是程序中不可或缺的一个内存区,堆栈段是程序中不可或缺的一个内存区,常用来常用来n临时存放数据临时存放数据n传递参数传递参数n保存和恢复寄存器保存和恢复寄存器第第2章:章:2.3.3 标志操作指令标志操作指令1. 标志位操作指令标志位操作指令CLC;复位进位标志:;复位进位标志:CF0STC;置位进位标志:;置位进位标志:CF1CMC(Complement Carry Flag);求反进位标志:;
24、求反进位标志: CFCFCLD;复位方向标志:;复位方向标志:DF0STD;置位方向标志:;置位方向标志:DF1CLI;复位中断标志:;复位中断标志:IF0STI;置位中断标志:;置位中断标志:IF12. 标志寄存器低字节与标志寄存器低字节与AH的传送指令:的传送指令:LAHF,SAHF3. 标志寄存器出入堆栈指令:标志寄存器出入堆栈指令:PUSHF,POPF将存储器操作数的有效地址送至指定的将存储器操作数的有效地址送至指定的16位通用位通用寄存器寄存器第第2章:有效地址传送指令章:有效地址传送指令LEA(load effective address)LEA r16, mem;r16mem的有
25、效地址的有效地址EA例题例题 有效地址的获取有效地址的获取mov bx,400hmov si,3chlea bx,bx+si+0f62h;BX400H3CH0F62H139EH第第2章:例题:地址传送与内容传送章:例题:地址传送与内容传送wvar dw 4142h;假设偏移地址为;假设偏移地址为04Hmov ax,wvar;内容传送内容传送:AX4142Hlea si,wvar;地址传送地址传送:SI0004Hmov cx,si;内容传送:;内容传送:CX4142Hmov di,offset wvar;mov di,0004h;利用操作符;利用操作符OFFSET获取变量的有效地址获取变量的有效
26、地址mov dx,di ;内容传送:;内容传送:DX4142HMOV指令的功能指令的功能XCHG指令的功能指令的功能XLAT指令的功能指令的功能堆栈的图示堆栈的图示SSSSSPSP0000H0000H(栈顶)(栈顶)存储器存储器高地址高地址堆栈段堆栈段PUSH指令的功能指令的功能POP指令的功能指令的功能第第2章:章:2.4 算术运算类指令算术运算类指令加减乘除加减乘除。这类指令会根据运算结果影响这类指令会根据运算结果影响状态标志状态标志。加法指令加法指令:ADD, ADC和和INC减法指令减法指令:SUB, SBB, DEC, NEG和和CMP第第2章:章:1. 加和减指令加和减指令 ADD
27、 dest,src;加法:加法:destdestsrc目的操作数不能为立即数目的操作数不能为立即数两个操作数不能同时为存储器寻址方式两个操作数不能同时为存储器寻址方式SUB dest,src;减法:减法:destdestsrc目的操作数不能为立即数目的操作数不能为立即数两个操作数不能同时为存储器寻址方式两个操作数不能同时为存储器寻址方式第第2章:例题:章:例题: 加法加法mov ax,7348h;AX7348Hadd al,27h;AL48H27H6FH,AX736FH;OF0,SF0,ZF0,PF1,CF0add ax,3fffh;AX736FH3FFFHB36EH;OF1,SF1,ZF0,
28、PF0,CF0第第2章:章:2. 带进位加和减指令带进位加和减指令 ADC dest,src;加法:;加法:destdestsrcCFSBB dest,src;减法:减法:destdestsrcCF第第2章:例题章:例题 无符号双字加法和减法无符号双字加法和减法mov ax,7856h;AX7856Hmov dx,8234h;DX8234Hadd ax,8998h;AX01EEH,CF1adc dx,1234h;DX9469H,CF0sub ax,4491h;AXBD5DH,CF1sbb dx,8000h;DX1468H,CF0第第2章:章:3. 比较指令比较指令CMP(compare)CMP
29、 dest,src;做减法运算:;做减法运算:destsrc;CMP指令将目的操作数减去源操作数,但指令将目的操作数减去源操作数,但差值差值不回送不回送目的操作数目的操作数比较指令通过减法运算影响比较指令通过减法运算影响状态标志状态标志,用,用于比较两个操作数的大小关系于比较两个操作数的大小关系cmp ax,bxcmp al,100第第2章:章:4. 增量和减量指令增量和减量指令INC reg/mem (increment);增量(;增量(加加1):):reg/memreg/mem1DEC reg/mem (decrement);减量(;减量(减减1):):reg/memreg/mem1与加法
30、和减法指令实现的加与加法和减法指令实现的加1和减和减1不同的是:不同的是:INC和和DEC不影响不影响CF标志标志inc si;sisi1dec byte ptr si;sisi1第第2章:章:5. 求补指令求补指令NEG(negtive)NEG reg/mem;reg/mem0reg/memNEG指令对操作数执行指令对操作数执行求补运算求补运算,即用零,即用零减去操作数,然后结果返回操作数减去操作数,然后结果返回操作数求补运算也可以表达成:求补运算也可以表达成:将操作数按位取将操作数按位取反后加反后加1第第2章:章:2.4.2 符号扩展指令符号扩展指令 符号扩展是指用一个操作数的符号位(最高
31、位)符号扩展是指用一个操作数的符号位(最高位)形成另一个操作数,形成另一个操作数,后一个操作数的高位是全后一个操作数的高位是全0(正数)或全(正数)或全1(负数)(负数) 符号扩展指令有两条,用来将符号扩展指令有两条,用来将字节转换为字,字字节转换为字,字转换为双字转换为双字CBW;AL扩展成扩展成AXCWD;AX扩展成扩展成AX和和DX 获得了倍长数据获得了倍长数据第第2章:章:2.4.3 乘法和除法指令乘法和除法指令乘法指令分乘法指令分无符号无符号和和有符号有符号乘法指令乘法指令MUL reg/mem;无符号乘法;无符号乘法IMUL reg/mem;有符号乘法;有符号乘法除法指令分除法指令
32、分无符号无符号和和有符号有符号除法指令除法指令DIV reg/mem;无符号除法;无符号除法IDIV reg/mem;有符号;有符号除除法法Mul al ;无符号字节乘:;无符号字节乘:ax al*alImul word ptr 2000h; 有符号字乘:有符号字乘:dx.ax ax*m16第第2章:章:2.4.4 十进制调整指令十进制调整指令 对对二进制运算的结果二进制运算的结果进行进行十进制十进制调整调整80888088指令系统支持两种指令系统支持两种BCDBCD码调整运算码调整运算q压缩压缩BCD码码就是通常的就是通常的8421码;它用码;它用4个个二进二进制位表示一个十进制位,一个字节
33、可以表示两制位表示一个十进制位,一个字节可以表示两个十进制位,即个十进制位,即0099q非压缩非压缩BCD码码用用8个个二进制位表示一个十进制二进制位表示一个十进制位,只用低位,只用低4位表示一个十进制位位表示一个十进制位09,高,高4位位任意,通常默认为任意,通常默认为0第第2章:编码的比较章:编码的比较真值(十进制)真值(十进制)864二进制编码二进制编码08H40H压缩压缩BCD码码08H64H非压缩非压缩BCD码码08H0604HASCII码码38H3634H压缩压缩BCD码加、减法调整指令码加、减法调整指令DAA DAS非压缩非压缩BCD码加减乘除法调整指令码加减乘除法调整指令AAA
34、 AAS AAM AAD第第2章:章:2.5 位操作类指令位操作类指令 以以二进制位二进制位为基本单位进行数据的操作为基本单位进行数据的操作当需要对字节或字数据中的各个二进制位操作时,当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令可以考虑采用位操作类指令要注意这些指令对标志位的影响要注意这些指令对标志位的影响1. 逻辑运算指令逻辑运算指令AND OR XOR NOT TEST2. 移位指令移位指令SHL SHR SAR3. 循环移位指令循环移位指令ROL ROR RCL RCR第第2章:章:2.5.1 逻辑运算指令逻辑运算指令双操作数双操作数逻辑指令逻辑指令AND、OR、
35、XOR和和TEST设置设置CFOF0,根据结果设置根据结果设置SF、ZF和和PF状态;状态;运算指令助记符运算指令助记符 reg, imm/reg/mem运算指令助记符运算指令助记符 mem, imm/reg 单操作数单操作数逻辑指令逻辑指令NOT不影响标志位,操不影响标志位,操作数与作数与INC、DEC和和NEG一样:一样:NOT reg/mem第第2章:逻辑与指令章:逻辑与指令AND对两个操作数执行逻辑与运算,结果送目的操作数对两个操作数执行逻辑与运算,结果送目的操作数AND dest,srcAND dest,src;destdestdestdestsrcsrc第第2章:逻辑或指令章:逻辑
36、或指令OR对两个操作数执行逻辑或运算,结果送目的操作数对两个操作数执行逻辑或运算,结果送目的操作数OR dest,srcOR dest,src;destdestdestdestsrcsrc第第2章:逻辑异或指令章:逻辑异或指令XOR对两个操作数执行逻辑异或运算,结果送目的操作数对两个操作数执行逻辑异或运算,结果送目的操作数XOR dest,srcXOR dest,src;destdestdestdestsrcsrc第第2章:测试指令章:测试指令TEST对两个操作数执行逻辑与运算,对两个操作数执行逻辑与运算,结果并不送结果并不送目的操作数目的操作数,仅按,仅按AND指令影响标志指令影响标志TES
37、T dest,srcTEST dest,src;destdestsrcsrc AND与与TEST指令的关系,指令的关系,同同SUB与与CMP指令的关系一样指令的关系一样第第2章:逻辑非指令章:逻辑非指令NOT对一个操作数执行逻辑非运算对一个操作数执行逻辑非运算NOT reg/memNOT reg/mem;reg/memreg/memreg/memreg/mem第第2章:例章:例2.13 逻辑运算逻辑运算mov al,75h;AL75Hand al,32h;AL30H;CFOF0, SF0,ZF0,PF1xor al,0f1h;AL80H;CFOF0,SF1,ZF0,PF0not al;AL7F
38、H,标志不变,标志不变第第2章:逻辑运算指令的应用章:逻辑运算指令的应用and bl,11110110b;BL中中D0和和D3清清0,其余位不变,其余位不变or bl,00001001b;BL中中D0和和D3置置1,其余位不变,其余位不变xor bl,00001001b;BL中中D0和和D3求反,其余位不变求反,其余位不变 AND指令可用于复位某些位(同指令可用于复位某些位(同0相与),不影响其他位相与),不影响其他位 OR指令可用于置位某些位(同指令可用于置位某些位(同1相或),不影响其他位相或),不影响其他位 XOR指令可用于求反某些位(同指令可用于求反某些位(同1相异或),不影响其他位相
39、异或),不影响其他位逻辑运算指令常用应用逻辑运算指令常用应用1.对寄存器清零对寄存器清零 AND AX,0 MOV AX,0 XOR AX,AX2.对对8位寄存器低位寄存器低4位清零位清零 AND AL, 0F0h; 对对8位寄存器高位寄存器高4为清零为清零 AND AL,0FH逻辑运算指令常用应用逻辑运算指令常用应用3.将数字将数字(09)转换为转换为ASCII码码 MOV AL,05H OR AL,30H 或者或者ADD AL,30H4.大小写转换大小写转换(A 41H 01000001B a 61H 01100001B) 小写转换为大写小写转换为大写 AND AL, 11011111b
40、大写转化为小写大写转化为小写 OR AL,00100000b 大小写转换大小写转换 XOR AL,00100000b逻辑运算指令常用应用逻辑运算指令常用应用5.比较两个操作数是否相同比较两个操作数是否相同 例例. 判断判断AL中数据是否为中数据是否为3CH XOR AL,3CH 结果判断结果判断 ZF=1,则,则(AL)=3CH ZF=0, 则则(AL)3CH6.将指定数据求反将指定数据求反 (AL)=2AH XOR AL,0FFH 将数据指定位求反将数据指定位求反逻辑运算指令常用应用逻辑运算指令常用应用7.判断数据是正负数判断数据是正负数 TEST AH,80H看看ZF标志标志 ZF=1,说
41、明结果为说明结果为0,则数据首,则数据首位肯定是位肯定是0,则数据是正数;,则数据是正数; ZF=0,说明结果不为说明结果不为0,则数据,则数据首位肯定是首位肯定是1,则数据是负数;,则数据是负数;逻辑运算指令常用应用逻辑运算指令常用应用8.判断数据的奇偶性判断数据的奇偶性 TEST AH,01H看看ZF标志标志 ZF=1,说明结果为说明结果为0,则数据最,则数据最低位肯定是低位肯定是0,则数据是偶数;,则数据是偶数; ZF=0,说明结果不为说明结果不为0,则数据,则数据最低位肯定是最低位肯定是1,则数据是奇数;,则数据是奇数;第第2章:章:2.5.2 移位指令移位指令将操作数移动一位或多位,
42、分成逻辑移位将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作和算术移位,分别具有左移或右移操作按照移入的位设置进位标志按照移入的位设置进位标志CF,根据移位,根据移位后的结果影响后的结果影响SF、ZF、PF第第2章:逻辑(算术)左移指令章:逻辑(算术)左移指令SHL(SAL)SHL或或SAL reg/mem,1/CL;reg/mem左移左移1或或CL位位;最低位补;最低位补0,最高位进入,最高位进入CF演示演示第第2章:逻辑右移指令章:逻辑右移指令SHRSHR reg/mem,1/CL;reg/mem右移右移1/CL位位;最高位补;最高位补0,最低位进入,最低位进入CF演
43、示演示第第2章:算术右移指令章:算术右移指令SARSAR reg/mem,1/CL;reg/mem右移右移1/CL位位;最高位不变,最低位进入;最高位不变,最低位进入CF演示演示第第2章:例章:例2.15 数据移位数据移位mov dx,6075h;DX01100000 01110101Bshl dx,1;DX11000000 11101010B;CF0,SF1、ZF0、PF0sar dx,1;DX11100000 01110101B;CF0,SF1、ZF0、PF0shr dx,1;DX01110000 00111010B;CF1,SF0、ZF0、PF1mov cl,4;CL4,标志不变,标志不
44、变sar dx,cl;DX00000111 00000011B;CF1,SF0、ZF0、PF1第第2章:例章:例2.16 将将AL寄存器中的无符号数乘以寄存器中的无符号数乘以10 xor ah,ah;实现;实现AH0,同时使,同时使CF0shl ax,1;AX2ALmov bx,ax;BXAX2ALshl ax,1;AX4ALshl ax,1;AX8ALadd ax,bx;AX8AL2AL10ALsub ah,ahand ah,0 逻辑左移一位相当于无符号数乘以逻辑左移一位相当于无符号数乘以2 逻辑右移一位相当于无符号数除以逻辑右移一位相当于无符号数除以2第第2章:章:2.5.3 循环移位指令
45、循环移位指令循环移位指令类似移位指令,但要将从一循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。分为端移出的位返回到另一端形成循环。分为:ROL ;不带进位循环左移不带进位循环左移ROR ;不带进位循环右移不带进位循环右移RCL ;带进位循环左移带进位循环左移RCR ;带进位循环右移带进位循环右移循环移位指令的操作数形式与移位指令相循环移位指令的操作数形式与移位指令相同,按指令功能设置进位标志同,按指令功能设置进位标志CF,但不影,但不影响响SF、ZF、PF、AF标志标志演示演示演示演示演示演示演示演示SHL和和SAL指令的功能指令的功能SHR指令的功能指令的功能SAR指令
46、的功能指令的功能ROL指令的功能指令的功能ROR指令的功能指令的功能RCL指令的功能指令的功能RCR指令的功能指令的功能第第2章:章:2.6 控制转移类指令控制转移类指令 控制转移类指令用于实现控制转移类指令用于实现分支、循环、分支、循环、过程过程等程序结构,是仅次于传送指令等程序结构,是仅次于传送指令的常用指令的常用指令 控制转移类指令通过控制转移类指令通过改变改变IP(和(和CS)值,值,实现程序执行顺序的改变实现程序执行顺序的改变第第2章:章:2.6 控制转移类指令控制转移类指令 地址寻址方式:地址寻址方式:相对寻址方式相对寻址方式直接寻址方式直接寻址方式间接寻址方式间接寻址方式注意和操
47、作数的寻址方式加以区分注意和操作数的寻址方式加以区分相对寻址和直接寻址时,一般采用地址的相对寻址和直接寻址时,一般采用地址的标号标号Label;间接寻址时,采用寄存器名和;间接寻址时,采用寄存器名和存储器操作数存储器操作数.第第2章:章:2.6 控制转移类指令控制转移类指令 段内转移:在当前短段内转移:在当前短64kB范围内转移,不范围内转移,不需要改变需要改变CS段地址,只要改变段地址,只要改变IP偏移地址偏移地址,也称,也称“近转移近转移”段间转移:从当前代码段跳转到另一个代段间转移:从当前代码段跳转到另一个代码段,需更改码段,需更改CS段地址和段地址和IP偏移地址,也偏移地址,也称称“远
48、转移远转移”第第2章:章:2.6.1 无条件转移指令无条件转移指令(jump) 操作数操作数label是要转移到的是要转移到的目标地址目标地址(目的目的地址地址、转移地址转移地址)只要执行无条件转移指令只要执行无条件转移指令JMP,就使程序,就使程序转到指定的目标地址,从目标地址处开始转到指定的目标地址,从目标地址处开始执行指令执行指令JMP labelJMP label;程序转向;程序转向labellabel标号指定的地址标号指定的地址第第2章:无条件转移指令章:无条件转移指令JMPJMP label;段内转移、相对寻址段内转移、相对寻址;IPIP位移量位移量 JMP r16/m16;段内转
49、移、间接寻址段内转移、间接寻址;IPr16/m16 JMP far ptr label;段间转移、直接寻址段间转移、直接寻址;IP偏移地址偏移地址,CS段地址段地址 JMP far ptr mem;段间转移,间接寻址段间转移,间接寻址;IPmem,CSmem2演示演示演示演示演示演示演示演示演示演示第第2章:章:2.6.2 条件转移指令条件转移指令条件转移指令条件转移指令Jcc(cc是一个总的表示,代是一个总的表示,代表转换条件的意思):表转换条件的意思):根据指定的条件确根据指定的条件确定程序是否发生转移。定程序是否发生转移。只能用于短转移只能用于短转移。其通用格式为:其通用格式为:Jcc
50、label;条件满足条件满足,发生转移发生转移;IPIP8位位移量;位位移量;否则,顺序执行否则,顺序执行第第2章:章:Jcc指令的分类指令的分类Jcc指令不影响标志,但要利用标志(表指令不影响标志,但要利用标志(表2-3)根据利用的标志位不同,分成三种情况:根据利用的标志位不同,分成三种情况: 判断单个标志位状态判断单个标志位状态 比较无符号数高低比较无符号数高低 比较有符号数大小比较有符号数大小 Jcc指令实际虽然只有指令实际虽然只有16条,但却有条,但却有30个助记符个助记符 采用多个助记符,目的是为了方便记忆和使用采用多个助记符,目的是为了方便记忆和使用第第2章:章:1. 判断单个标志
51、位状态判断单个标志位状态 JZ/JE和和JNZ/JNE利用零标志利用零标志ZF,判断结果是否为零(或相等),判断结果是否为零(或相等) JS和和JNS利用符号标志利用符号标志SF,判断结果是正是负,判断结果是正是负 JO和和JNO利用溢出标志利用溢出标志OF,判断结果是否产生溢出,判断结果是否产生溢出 JP/JPE和和JNP/JPO利用奇偶标志利用奇偶标志PF,判断结果中,判断结果中“1”的个数是偶是奇的个数是偶是奇 JC/JB/JNAE和和JNC/JNB/JAE利用进位标志利用进位标志CF,判断结果是否进位或借位,判断结果是否进位或借位第第2章:例题章:例题2.19题目:题目:处理处理AX中
52、存放的无符号数,如果是偶数则中存放的无符号数,如果是偶数则除以除以2,如果是奇数则加,如果是奇数则加1后除以后除以2问题:问题:如何判断如何判断AX中的数据是奇数还是偶数?中的数据是奇数还是偶数?解答:解答:判断判断AX最低位是最低位是“0”(偶数),还是(偶数),还是“1”(奇数)。可以用位操作类指令(奇数)。可以用位操作类指令1:用逻辑与指令将除最低位外的其他位变成用逻辑与指令将除最低位外的其他位变成0,保留最低位,保留最低位不变。判断这个数据是不变。判断这个数据是0,AX就是偶数;否则,为奇数就是偶数;否则,为奇数2:将最低位用移位指令移至进位标志,判断进位标志是将最低位用移位指令移至进
53、位标志,判断进位标志是0,AX就是偶数;否则,为奇数就是偶数;否则,为奇数3:将最低位用移位指令移至最高位(符号位),判断符号将最低位用移位指令移至最高位(符号位),判断符号标志是标志是0,AX就是偶数;否则,为奇数就是偶数;否则,为奇数第第2章:例题章:例题2.19解答解答1 用用JZ指令实现指令实现 test ax,01h ;测试;测试AX的最低位的最低位D0(不用(不用AND指令,以免改变指令,以免改变AX) jz even ;标志;标志ZF1,即,即D00:AX内是偶数,程序转移内是偶数,程序转移 add ax,1 ;标志;标志ZF0,即,即D01:AX内的奇数,加内的奇数,加1eve
54、n: shr ax,1;AXAX2用右移一位的方法实现除以用右移一位的方法实现除以2。本例中用本例中用RCR指令比指令比SHR指令更好。指令更好。第第2章:例题章:例题2.19解答解答2 用用JNC指令实现指令实现mov bx,axshr bx,1 ;将;将AX的最低位的最低位D0移进移进CFjnc even;标志;标志CF0,即,即D00:AX内是偶数,程序转移内是偶数,程序转移add ax,1;标志;标志CF1,即,即D01:AX内的奇数,加内的奇数,加1even:shr ax,1 ;AXAX2还可用还可用SAR、ROR和和RCR指令指令第第2章:例章:例2.20 判断是否为字母判断是否为
55、字母Y;寄存器;寄存器AL中是字母中是字母Y(含大小写),则令(含大小写),则令AH0,否则令否则令AH1cmp al,y;比较;比较AL与小写字母与小写字母yje next;相等,转移;相等,转移cmp al,Y ;不相等,;不相等,;继续比较;继续比较AL与大写字母与大写字母Yje next;相等,转移;相等,转移mov ah,-1;不相等,令;不相等,令AH1jmp done;无条件转移指令;无条件转移指令next:mov ah,0;相等的处理:令;相等的处理:令AH0done:第第2章:章:2. 比较无符号数高低比较无符号数高低无符号数的大小用高(无符号数的大小用高(Above)、低(
56、)、低(Below)表示,需要利用表示,需要利用CF确定高低、利用确定高低、利用ZF标志确定相标志确定相等(等(Equal)两数的高低分成两数的高低分成4种关系,对应种关系,对应4条指令条指令JB(JNAE):目的操作数低于(不高于等于)源操作数):目的操作数低于(不高于等于)源操作数JNB(JAE):目的操作数不低于(高于等于)源操作数):目的操作数不低于(高于等于)源操作数JBE(JNA):目的操作数低于等于(不高于)源操作数):目的操作数低于等于(不高于)源操作数JNBE(JA):目的操作数不低于等于(高于)源操作数):目的操作数不低于等于(高于)源操作数第第2章:章:3. 比较有符号数
57、大小比较有符号数大小判断有符号数的大(判断有符号数的大(Greater)、小()、小(Less),),需要组合需要组合OF、SF标志、并利用标志、并利用ZF标志确定相等标志确定相等与否与否两数的大小分成两数的大小分成4种关系,分别对应种关系,分别对应4条指令条指令JL(JNGE):目的操作数小于(不大于等于)源操作数):目的操作数小于(不大于等于)源操作数JNL(JGE):目的操作数不小于(大于等于)源操作数):目的操作数不小于(大于等于)源操作数JLE(JNG):目的操作数小于等于(不大于)源操作数):目的操作数小于等于(不大于)源操作数JNLE(JG):目的操作数不小于等于(大于)源操作数
58、):目的操作数不小于等于(大于)源操作数第第2章:例章:例2.22 求较大值求较大值cmp ax,bx;比较比较AX和和BXjae next;若若AXBX,转移,转移xchg ax,bx ;若若AXBX,交换,交换next:mov wmax,ax如果如果AX和和BX存放的是有符号数,存放的是有符号数,则条件转移指令应采用则条件转移指令应采用JGE指令指令第第2章:例章:例2.22 求较大值(另解)求较大值(另解)cmp ax,bx;比较比较AX和和BXjae nextmov wmax, bx;若若AXBX,wmaxBXjmp donenext:mov wmax,ax;若若AXBX,wmaxAX
59、done: 第第2章:章:2.6.3 循环指令循环指令一段代码序列多次重复执行就是循环一段代码序列多次重复执行就是循环8088设计有针对设计有针对CX计数器的计数循环指令计数器的计数循环指令LOOP label;循环指令循环指令;首先;首先CXCX1;然后判断;若;然后判断;若CX0,转移,转移JCXZ label;为为0循环指令循环指令:如果:如果CX0,则转移,则转移dec cxjnz label第第2章:例章:例2.23 数据块传送(字节)数据块传送(字节)mov cx,400h;设置循环次数:;设置循环次数:1K1024400Hmov si,offset sbuf;设置循环初值:;设置
60、循环初值:SI指向数据段源缓冲区开始指向数据段源缓冲区开始mov di,offset dbuf;DI指向附加段目的缓冲区开始(附加段)指向附加段目的缓冲区开始(附加段)again:mov al,si;循环体:实现数据传送;循环体:实现数据传送mov es:di,al;每次传送一个字节;每次传送一个字节inc si;SI和和DI指向下一个单元指向下一个单元inc diloop again;循环条件判定:循环次数减;循环条件判定:循环次数减1,不为,不为0转移(循环)转移(循环)第第2章:章:2.6.4 子程序指令子程序指令子程序是完成特定功能的一段程序子程序是完成特定功能的一段程序当主程序(调用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 38003.4-2024军民通用资源分类与编码第4部分:器材类卫生器材
- 信息技术教师劳动合同范本
- 房地产开发商合同 示范文本
- 室内设计装修协议格式
- 个人商业店面出租合同协议
- 2024年化粪池清掏服务合同书
- 标准拆迁安置房买卖合同
- 公司借款合同的编写要点与示范
- 旅游项目投资合作协议模板
- 个人车辆租赁合同
- 公务员2021年国考《申论》真题(地市级)及参考答案
- 新教科版小学1-6年级科学需做实验目录
- DPtech-FW1000系列防火墙系统操作手册
- 思想道德与法治课件:第五章 第二节 吸收借鉴优秀道德成果
- 地方课程六年级上册
- 浅论构建高效课堂研究的意义
- 村级一村一品实施方案
- 高压线安全防护专项施工方案(完整版)
- 时栅位移传感技术讲解
- 灯具施工方案(完整版)
- TKT-Glossary中译版
评论
0/150
提交评论