590 likes | 814 Views
第 4 章. 指令系统. 4.1 寻址方式 4.1.1 与数据有关的寻址方式 4.1.2 与转移地址有关的寻址方式 4.2 指令系统 4.2.1 数据传送指令 4.2.2 算术运算指令 4.2.3 逻辑指令 4.2.4 串处理指令 4.2.5 控制转移指令 4.2.6 处理器控制指令. 4.3 80x86 新增指令 4.3.1 80286 新增指令 4.3.2 80386 新增指令 4.3.3 80486 新增指令 4.3.4 MMX 多媒体指令集. 指令系统. 操作码. 操作数. …….
E N D
第 4章 指令系统 4.1 寻址方式 4.1.1 与数据有关的寻址方式 4.1.2 与转移地址有关的寻址方式 4.2 指令系统 4.2.1 数据传送指令 4.2.2 算术运算指令 4.2.3 逻辑指令 4.2.4 串处理指令 4.2.5 控制转移指令 4.2.6 处理器控制指令 4.3 80x86新增指令 4.3.1 80286新增指令 4.3.2 80386新增指令 4.3.3 80486新增指令 4.3.4 MMX多媒体指令集
指令系统 操作码 操作数 …… 操作数 4.1 寻址方式 指令的寻址方式 根据指令内容确定本条指令操作数地址,以及下一条要执行的指 令地址的过程。不同系列的计算机有不同的寻址方式,但基本工 作原理是一样 。 ● 指令的一般格式 操作码字段:指示指令的操作特性与功能; 操作数字段:指出在指令执行过程中所需要的操作数,即指出操作数 存放于何处——CPU内部的寄存器或内存储器。 教学进程
与数据有关的寻址方式(7种) 例如:MOV AL,34H 指令执行后,(AL)=34H 例如:MOV AL,34H 指令执行后,(AL)=34H 注意 例如:MOV AX,1234H 指令执行后,(AX)=12 示意图如下: 存储器 低地址 高地址 . . . MOV操作码 34 12 . . . AH AL AX 12 34 代码段 操作数送寄存器AX 4.1寻址方式 4.1.1 1.立即寻址 ——指令中直接给出操作数 ● 在16位操作时,两个字节数据的高低位存储位置——高字节存放在高地址中,低字节存放在低地址中。 教学进程
寄存器寻址 例如:MOV AX,BX 若执行前(AX)=1234H, (BX)=56EDH, 则执行后(AX)=56EDH, BX内容不变。 示意图如下: AH AL BH BL AX BX 56 ED 56 ED 操作数送寄存器AX 4.1寻址方式 4.1.1 与数据有关的寻址方式(7种) ●2. ——指令中给出存储操作数的寄存器号,即操作数放在CPU内部寄存器 AX、BX、CX、DX、DI、SI、SP和BP中,不需要访问存储器。 教学进程
直接寻址 DS 3000 ×10H 例如:MOV AX,[2000H] 默认的段寄存器是DS, 如(DS)=3000H,则物理地址 PA=3000H×10H+2000H 例如:MOV AX,ES :[2000H] 物理地址PA=(ES)×10H+2000H 存储器 低地址 高地址 . . MOV操作码 00 20 . . . + 2000 代码段 32000 AH AL AX 12 34 数据段 32000 34 12 操作数送寄存器AX 4.1寻址方式 4.1.1 与数据有关的寻址方式(7种) ●3. ————有效地址EA由指令直接给出 物理地址=(DS)×10H+EA 教学进程
寄存器间接寻址 存储器 DS 2000 ×10H 低地址 高地址 . . . 操作码 操作码 . . . +BX 1000 代码段 21000 例如: MOV AX,[BX] 若(DS)=2000H,(BX)=1000H 则EA=(BX)=1000H 物理地址 PA=20000H+1000H 执行情况如图 (AX)=(21000H)=50A0H AH AL 数据段 50A0 AX 21000 A0 50 操作数送寄存器AX 4.1寻址方式 4.1.1 与数据有关的寻址方式(7种) ——EA在基址寄存器BP、BX或变址寄存器SI、DI中,而操作数则在存储器中。对BX、SI、DI这三个间址寄存器,指示的是数据段中的数据,而用BP作间址寄存器,则指示的是堆栈段中的数据。 ●4. 教学进程
寄存器相对寻址 除有段跨越前缀者外,对于寄存器为BX、SI、DI的情况下,段寄存器用DS;寄存器用BP,则使用SS段寄存器的内容作为段地址。 (BX) (BP) (SI) (DI) 8位 16位 位移量 有效地址 = + 例如: MOV AX,COUNT[SI] 或 MOV AX,[COUNT+SI] 若 (DS)=3000H, (SI)=2000H, COUNT=3000H 则 PA=35000H; 若 (35000H)=1234H, 则 (AX)=1234H DS 3000 ×10H 存储器 低地址 高地址 . 操作码 操作码 00 30 . . + SI 2000 + COUNT 3000 代码段 35000 AH AL 数据段 34 12 AX 12 34 35000 操作数送寄存器AX 4.1寻址方式 4.1.1 与数据有关的寻址方式(7种) ● 5. 教学进程
基址变址寻址 (BX) (BP) (SI) (DI) 例如: MOV AX, [BX][SI] 如 (DS)= 2100H(BX)=0158H, (SI)=10A5H, 则 PA=35000H; 若(35000H)= 1234H, 则(AX)=1234H 有效地址 = + 存储器 DS 2100 ×10H 低地址 高地址 + BX 0158 . . . 操作码 操作码 . . . + SI 1200 代码段 22358 AH AL 数据段 AX 12 34 22358 34 12 操作数送寄存器AX 4.1.1 4.1寻址方式 与数据有关的寻址方式(7种) ● 6. 使用BX作为基址寄存器,则数据默认在数据段;若使用BP作为基址寄存器,则默认在堆栈段,允许使用段跨越前缀 教学进程
相对基址变址寻址 8位 16位 (BX) (BP) (SI) (DI) 位移量 有效地址 = + + 例如: MOV AX, MASK[BX][SI] 如 (DS)= 2100H(BX)=0158H, (SI)=10A5H, MASK=0134H 则 PA= 2148CH ; 若(2148CH)= 5678H 则(AX)=5678H 存储器 DS 2100 ×10H 低地址 高地址 操作码 操作码 34 01 + BX 0158 代码段 + SI 1200 + MASK 0134 2148C AH AL 数据段 AX 56 78 78 56 2148C 操作数送寄存器AX 4.1.1 4.1寻址方式 与数据有关的寻址方式(7种) ● 7. 教学进程
与转移地址有关的寻址方式 指令 转移的目 标地址IP + 位移量 当前IP值 4.1.2 ● 1. 段内寻址 ——转移地址时,不改变CS值,在当前IP上加一个 位移量,即EA=(IP)+disp 段内直接寻址 例如: JMP NEAR PTR PROGIA ——段内近转移; JMP SHORT QUEST ——段内短转移 JMP NEAR PTR PROGIA ——段内近转移; JMP SHORT QUEST ——段内短转移 教学进程
与转移地址有关的寻址方式 除立即数以外的任何一种数据寻址方式得到 例如:若 (BX)=1256H,(DS)=2000H, TABLE=2012H,(23268H)=3476H, 则:JMP BX;段内间接转移,执行后(IP)=EA=(BX)=1256H JMP WORD PTR[BX+TABLE] 执行后,EA=(BX)+disp=3268H 指令 寄存器 根据寻址 方式确定 有效地址在 存储器单元 4.1.2 4.1寻址方式 1.段内寻址 ● ——转向的有效地址EA是一个寄存器或存储单元的内容。 有效地址用来取代IP,并CS值不变。 段内间接寻址 教学进程
段间寻址 指令 IP ——用存储器中两个相继字的内容取代IP和CS, 低地址中内容送IP,高地址中内容送CS。 段间间接寻址 段地址 偏移地址 CS 存储器连 续4个单元 指令 根据寻 址方式 计算EA 偏移地址 寻址方式 段地址 4.1.2 4.1寻址方式 与转移地址有关的寻址方式 ●2. ——指令中提供了转向的段地址和偏移地址, 故用段地址取代CS,用偏移地址取代IP 段内直接寻址 例如: JMP 3500H:120BH; 则(CS)=3500H,(IP)=120BH 教学进程
指令系统 4.2 • ● 8086指令系统按功能可分为6大类: • 数据传送指令 • 算术运算指令 • 逻辑指令 • 串处理指令 • 控制转移指令 • 处理机控制指令 教学进程
数据传送指令 注意 MOV指令源、目标操作数长度必须一致,即两者同为8位或同为16位;的目的操作数DST不能为立即数; DST、SRC不能同时为段寄存器,也不能同时为存储器单元; 不能使用此指令为代码段寄存器CS以及指令指针IP赋值; MOV指令不影响标志位寄存器PSW的值。 1) 2) 3) 4) 5) 4.2.1 ● 1.通用数据传送指令 (1)数据传送MOV指令 ●指令功能:将数据从源地址传送到目的地址,具有“复制”性质; ●指令格式:MOV DST,SRC; MOV为指令助记符,DST、SRC分别为目的操作数和源操作数 例如: MOV AX,1234H;立即数1234H送AX MOV AL,CL;通用寄存器CL中内容送AL 教学进程
(2)堆栈操作指令 注意 堆栈指令必须是16位双字节数,即每进行一次PUSH操作,SP减2; 每进行一次POP操作SP加2; 目的操作数DST,与原操作数SRC都不能为立即数; DST不能为代码段寄存器CS; 堆栈指令不影响标志位寄存器PSW的值。 1) 2) 3) 4) 5) ● 1.通用数据传送指令 4.2.1数据传送指令 ●堆栈操作指令分为两类:进栈(压栈)指令PUSH和出栈指令POP ●压栈指令格式为: PUSH SRC; 执行的操作: (SP)←(SP)-2 ((SP)+1,(SP))←(SRC) ●出栈指令格式为:POP DST; 执行的操作: (DST)←((SP)+1,(SP)) (SP)←(SP)+2; 教学进程
(3)交换指令XCHG 注意 两个操作数必须有一个在寄存器中; XCHG交换指令不影响标志位寄存器PSW的值。 1) 2) ● 2.地址传送指令 (1)LEA有效地址送寄存器 ●指令功能:将源操作数的偏移地址传送给16位寄存器; ●指令格式: LEA REG,SRC; 执行操作:(REG) ←SRC; ● 1.通用数据传送指令 4.2.1 数据传送指令 ●指令功能:将一个字节或一个字的源操作数和目的操作数相交换; ●指令格式:XCHG OPR1,OPR2; 执行操作:OPR1↔ OPR2; 教学进程
(2)LDS指针送寄存器和DS (3) LES指针送寄存器和ES ●指令功能:除地址指针的段地址送ES外,其他与LDS类似; ●指令格式: LDS REG,SRC; 执行操作:(REG) ←SRC; (ES)←(SRC+2); 注意 目的操作数16位通用寄存器(REG)不能使用段寄存器; 源操作数SRC只能使用存储器寻址方式来确定地址; 地址传送指令不影响标志位寄存器PSW的值 1) 2) 3) ● 2.地址传送指令 4.2.1 数据传送指令 ●指令功能:将源操作数传送至一对目标寄存器; ●指令格式: LDS REG,SRC; 执行操作:(REG)←(SRC) (DS)←(SRC+2); 教学进程
标志传送指令 (2) SAHF指令 (3) PUSHF指令 ● 3. 4.2.1 数据传送指令 (1) LAHF指令 ●指令功能:把标志寄存器的低8位送入寄存器AH; ●指令格式: LAHF 执行操作:(AH)←(PSW低8位) ●指令功能:与LAHF指令执行相反的操作,寄存器AH的第0、2、 4、6、7位分别传送至标志位寄存器PSW的相应位中。 ●指令功能:把标志寄存器PSW的内容压栈; ●指令格式:PUSHF 执行操作:(SP)←(SP-2); [SP] ←(PSW低8位); [SP+1]←(PSW高8位); 教学进程
(4) POPF指令 ● 3. 标志传送指令 4.2.1 数据传送指令 ●指令功能:与PUSHF指令执行相反的操作,将堆栈栈顶两个单元 的内容弹出至标志寄存器。 ●指令格式: POPF 执行操作:(PSW低8位)→[SP]; (PSW高8位)→[SP+1]; (SP)←(SP+2); 查表转换指令XLAT ● 4. ●指令功能:把存储区域内某个连续区域指定的内容送到寄存器AL ●指令格式: XLAT或XLAT OPR 执行操作:(AL)←((BX)+(AL) 教学进程
算术运算指令 (2)带进位加法指令ADC ●指令格式: ADC DST,SRC; 执行操作:(DST)←(SRC)+(DST)+CF 注意:ADD和ADC影响标志位: CF:当结果的最高位产生进位时,CF=1,否则CF=0; OF:当带符号数运算的结果超出其所能表示范围时,OF=1,否则OF=0; PF:结果中含“1”的个数为偶数时,PF=1,否则PF=0; SF:结果最高位为1时,SF=1,否则SF=0; ZF:结果为零时,ZF=1,否则ZF=0; AF:字节运算时D3产生进位;字运算时D7产生进位,则AF=1,否则AF=0。 1) 2) 3) 4) 5) 4.2.2 4.2指令系统 ● 1.二进制加法指令 (1)加法指令ADD ●指令格式: ADD DST,SRC; 执行操作:(DST)←(SRC)+(DST) 教学进程
加1指令INC 注意 以上三种减法运算 影响各标志位,情 况同对应加法运算 ● 2.二进制减法指令 (1) SUB指令 ●指令格式: SUB DST,SRC 执行操作:(DST)←(DST)-(SRC) (2)带借位减法指令SBB ●指令格式: SBB DST,SRC 执行操作:(DST)←(DST)-(SRC)-CF (3)减1指令DEC ●指令格式: DEC OPR 执行操作:(OPR)←(OPR)-1 ● 1.二进制加法指令 4.2.2算术运算指令 (3) ●指令格式: INC OPR 执行操作:(OPR)←(OPR)+1 教学进程
求补指令NEG 注意 注意 NEG指令对标志位的有影响,尤注意CF以及OF位; CF:操作数为0时,CF=0,否则CF=1; OF:操作数为-128(字节)或-32768(字)运算时,OF=1,否则OF=0。 (5)比较指令CMP ●指令格式: CMP OPR1, OPR2 执行操作:(OPR1)-(OPR2) 目的操作数减源操作数,结果只影响标志位,不送入目的地址。 对于无符号数,若CF=0,则OPR1> OPR2; 若为有符号数,则OF⊕SF=0时OPR1> OPR2。 ● 2.二进制减法指令 4.2.2 算术运算指令 (4) ●指令格式: NEG OPR 执行操作:(OPR)← 0 -(OPR) 教学进程
二进制乘法指令 注意 (2)带符号数乘法指令IMUL ●指令格式与操作同MUL指令。 1) 乘法指令中源操作数不能为立即数; 2) AL(AX)为隐含的乘数寄存器; 3) AX(DX,AX)为隐含的乘积寄存器。 4) MUL指令,影响CF和OF标志位;当结果的高一半等于0时,CF OF都为0,否则CF、OF都为1; 5)IMUL指令,同样影响CF和OF标志位;当结果的高一半是低一 半的符号扩展时,CF、OF都为0,否则CF、OF都为1; ● 3. 4.2.2 算术运算指令 (1)无符号数乘法指令MUL ●指令格式: MUL SRC 指令操作:(AX)←(AL)*(SRC);字节操作数 (DX,AX)←(AX)*(SRC);字操作数 教学进程
符号扩展指令 (2)字转换为双字指令CWD ●指令功能:将源操作数由字转换为双字 ●指令格式:CWD CWD指令默认(AX)为源操作数,若(AX)的最高有效位为0, 则执行CWD后,(DX)=0000H,若(AX)最高有效位为1, 则执行CWD后,(AH)=0FFFFH 。 ● 4. 4.2.2 算术运算指令 (1)字节转换为字指令CBW ●指令功能:将源操作数由字节转换为字 ●指令格式:CBW CBW指令默认(AL)为源操作数,若(AL)的最高有效位为0, 则执行CBW后,(AH)=00H,若(AL)最高有效位为1,则执 行CBW后,(AH)=0FFH。 教学进程
二进制除法指令 注意 (2)带符号数除法指令IDIV ●指令IDIV格式与操作同DIV指令。 1)法指令中源操作数不能为立即数; 2) AX(DX,AX)为隐含的被除数寄存器; 3)AL(AX)为隐含的商寄存器; 4)AH(DX)为隐含的余数寄存器; 5)除法指令对所有标志位无定义。 ● 5. 4.2.2 算术运算指令 (1)无符号数除法指令DIV ●指令格式:DIV SRC●指令操作: 字节除法:AL(商)、AH(余数)←(AX)/(SRC) 字除法:AX(商)、DX(余数)←(DX,AX)/(SRC) 教学进程
十进制调整指令 ● 6. 4.2.2 算术运算指令 8086提供了6种调整指令 • 加法十进制调整指令DAA • 减法十进制调整指令DAS • 加法非压缩BCD码调整指令AAA • 减法非压缩BCD码调整指令AAS • 乘法的ASCII码调整指令AAM • 除法的ASCII码调整指令AAD 例如:计算(X*Y+Z)/X,其中X、Y、Z均为16位带符号数,分别存 入存储单元BUFF1、BUFF2、BUFF3中。 MOV AX,BUFF1 ;将BUFF1存入默认被乘数寄存器AX IMUL BUFF2 ;带符号乘法运算,结果在(DX,AX) MOV CX,AX ;中间结果转移,让出AX寄存器 MOV BX,DX ;中间结果转移,让出DX寄存器 MOV AX,BUFF3 ; CWD ;将Z转换为双字放入(DX,AX) ADD CX,AX ; ADC BX,DX ;双字加法运算 MOV AX,CX ; MOV DX,BX ;将被除数存入默认寄存器(DX,AX) IDIV BUFF1 ;带符号除法运算,结果商(AX)余数(DX) 教学进程
逻辑指令 (2) 逻辑与指令AND 4.2.3 4.2指令系统 ● 1. 逻辑运算指令 (1) 逻辑非指令NOT ●指令功能:将OPR内容按位取反并送回 ●指令格式:NOT OPR ●指令操作: (OPR) ← ┓(OPR) ●指令功能:两个操作数进行按位逻辑与运算,结果送目的操作数 ●指令格式:AND DST,SRC ●指令操作:(DST) ← (DST)∧(SRC) ●运算法则:1∧1=1,1∧0=0,0∧1=0,0∧0=0。 ●该指令可以清除目的操作数中与源操作数置0的对应位 教学进程
逻辑或指令OR (4) 逻辑异或指令XOR ● 1.逻辑运算指令 4.2.3逻辑指令 (3) ●指令功能:两个操作数进行按位逻辑或运算, 并将结果送目的操作数 ●指令格式:OR DST,SRC ●指令操作: (DST) ← (DST)∨(SRC) ●运算法则:1∨1=1,1∨0=1,0∨1=1,0∨0=0 ●该指令可以使操作数中某些位置1,而其他位保持不变 ●指令功能:两个操作数进行按位逻辑异或运算,并将结果送目的操作数 ●指令格式: XOR DST, SRC ●指令操作: (DST) ← (DST)⊕(SRC) ●运算法则:1⊕1=0,1⊕0=1,0⊕1=1,0⊕0=0 ●XOR指令可以将指定位求反 教学进程
测试指令TEST 注意 (6)移位指令 ●指令功能:算术左移 / 右移位指令 逻辑左移 / 右移位指令 循环左移 / 右移位移位指令 ●指令格式:操作符OPR,1 或CL。 当移动一位时,后一操作数为1,当移动位数超过一位时,使用CL寄存器的值表示。 ● 1.逻辑运算指令 4.2.3逻辑指令 (5) ●指令功能:与AND指令的唯一区别是结果不回送目的地址 ●指令格式: TEST OPR1,OPR2 ●指令操作: (OPR1) ∧(OPR2) ● 可在不改变源操作数的情况下,测试某一位或几位的值 教学进程
移位指令举例 注意 SHL(shift logical left)逻辑左移 SAL(shift arithmetic left) 算术左移(乘2n) SHR(shift logical right)逻辑右移 SAR(shift arithmetic right)算术右移(除2n) ROL(rotate left)不带进位循环左移 ROR(rotate right)不带进位循环右移 RCL(rotate left carry)带进位循环左移 RCR(rotate right through carry) 带进位循环右移 逻辑运算指令中除逻辑非NOT指令不影响标志位外, 其余均影响标志位:CF=0;OF=0;SF、ZF、PF依据运算结果设置。 ● 1.逻辑运算指令 4.2.3逻辑指令 教学进程
串处理指令 8086提供的处理串的指令,称为串操作指令。包含: • 串传送指令 • 串比较指令 • 从源串中取数指令 • 向目的串存数指令 • 串扫描指令 串处理指令只能处理单个字节或字,应用中需要串重复前缀配合使用。 串重复前缀指令:REP(重复)、REPE/REPZ(相等/为零重复)、REPNE/REPNZ(不相等/不为零重复); CX寄存器存放重复操作的次数; 一般源串存放在数据段DS中,偏移地址由SI指定; 目的串存放在附加段ES中,偏移地址由DI指定; 设置方向标志指令:CLD(DF=0)和STD(DF=1)来设置SI、DI偏移地址在重复操作过程中的移动方向。 4.2.4 4.2指令系统 ● 定义 串——指存储器中地址连续的若干单元字符或数据。 教学进程
与REP相配合使用的MOVS,STOS和LODS指令 4.2.4串处理指令 ● 1. (1)MOVS串传送指令 ●指令功能:把位于数据段DS:[SI]中一个字节或字的数据传送到 附加段ES:[DI]中。 ●指令格式:MOVSB; 传字节 MOVSW; 传字 ●指令操作: 字节操作:((DI))←((SI)),(SI)←(SI)±1,(DI)←(DI)±1 字 操 作:((DI))←((SI)),(SI)←(SI)±2,(DI)←(DI)±2 (方向标志DF=0时用+;DF=1 时用-) 教学进程
(2)STOS串存储指令 1.与REP相配合使用的MOVS,STOS和LODS指令 4.2.4串处理指令 ● ●指令功能:将AL或AX中的数据送入DI所指目的串中的字节(或字) 存储单元中。 ●指令格式:STOSB; 存字节 STOSW; 存字 ●指令操作: 字节操作:((DI))←(AL),(DI)←(DI)±1 字 操 作:((DI))←(AX),(DI)←(DI)±2 (方向标志DF=0时用+;DF=1 时用-) 教学进程
(3)LODS串中取数指令 1.与REP相配合使用的MOVS,STOS和LODS指令 4.2.4串处理指令 ● ●指令功能:将SI所指的源串中的一个字节(或字)存储单元中的数据 取出来送入AL(或AX)中。 ●指令格式:LODSB; 存字节 LODSW; 存字 ●指令操作: 字节操作:(AL)←((SI)),(SI)←(SI)±1 字 操 作:(AX)←((SI)),(SI)←(SI)±2 (方向标志DF=0时用+;DF=1 时用-) 教学进程
(4) REP无条件重复前缀 注意 (5)设置方向标志DF指令 ●指令操作:CLD指令:DF ← 0 STD指令:DF ← 1 与REP相配合使用的MOVS,STOS和LODS指令均不影响标志位 4.2.4串处理指令 1.与REP相配合使用的MOVS,STOS和LODS指令 ● ●指令功能:重复执行指令规定的操作,直到(CX)=0。 ●指令格式:REP MOVS(B/W)或STOS(B/W)或LODS(B/W) ●指令操作:①如(CX)=0 则退出REP,否则转②; ②(CX)←(CX)-1; ③执行其后的串操作指令; ④ 重复①〜③。 教学进程
串处理指令 设置SI、DI、CX、DF 否 串重复前缀? 是 是 (CX)=0? 否 (CX)←(CX)-1 串操作指令 (SI)←(SI)±1/2 (DI)←(DI)±1/2 下一条指令 4.2.4 在进行串操作前,应当设置好源串地址DS:[SI]、目的串地址ES:[DI]、方向标志位DF以及重复操作的次数(CX)。 串操作的一般流程 教学进程
串处理指令举例 存储器 … 低地址 DS→ (SI)=1000H 78 56 34 12 (SI)←(SI)+1 … … ≈ ≈ ES→ … (DI)=2000H 78 56 34 12 (DI)←(DI)+1 … 高地址 4.2.4 例:在数据段中有一字符串,偏移地址为1000H,长度为4,要求把它们传送到偏移地址为2000H附加段中 。 MOV SI,1000H ;源串偏移地址放SI MOV DI,2000H ;目的串偏移地址放DI MOV CX,4 ;设置重复操作次数 CLD ;设置方向标志位DF=0REP MOVSB ;传送串 教学进程
与REPE/REPZ和REPNE/REPNZ相配合使用的CMPS和SCAS指令与REPE/REPZ和REPNE/REPNZ相配合使用的CMPS和SCAS指令 4.2.4串处理指令 ● 2. (1) CMPS串比较指令 ●指令功能:用位于数据段DS:[SI]中一个字节或字的数据减去附加段 ES:[DI]中对应的一个字节或字的数据,并根据结果设置 标志位,但结果不回送任何单元。 ●指令格式:CMPSB; 比较字节 CMPSW; 比较字 ●指令操作:①((SI))-((DI)), 根据比较结果置条件标志位: 相等ZF=1,不等ZF=0 ②字节操作:(SI)←(SI)±1,(DI)←(DI)±1 字 操 作:(SI)←(SI)±2,(DI)←(DI)±2 (方向标志DF=0时用+;DF=1 时用-) 教学进程
SCAS串扫描指令 ● 2. 4.2.4串处理指令 与REPE/REPZ和REPNE/REPNZ相配合使用的CMPS和SCAS指令 (2) ●指令功能:AL或AX中的内容与附加段ES:[DI]所指的目的串中的 一个字节(或字)的数据相减,并根据结果设置标 志位,但结果不回送任何单元。 ●指令格式:SCASB; 比较字节 SCASW;比较字 ●指令操作:字节操作:(AL)-((DI)), (DI)←(DI)±1 字 操 作:(AX)-((DI)), (DI)←(DI)±2 (方向标志DF=0时用+;DF=1 时用-) 教学进程
REPE/REPZ相等或为零时重复串前缀 ● 2. 4.2.4串处理指令 与REPE/REPZ和REPNE/REPNZ相配合使用的CMPS和SCAS指令 (3) ●指令功能:重复执行指令规定的操作,每执行一次串 指令(CX)-1,并判断ZF标志是否为0, 只要(CX)=0或ZF=0,则重复执行结束直到(CX)=0。 ●指令格式:REPE/REPZ MOVS(B/W)或STOS(B/W)或LODS(B/W) ●指令操作:① 如(CX)=0或 ZF=0则退出,否则转②; ②(CX)←(CX)-1; ③ 执行其后的串操作指令; ④ 重复① 〜 ③。 教学进程
REPNE/REPNZ不相等或不为零时重复串前缀 ● 2. 4.2.4串处理指令 与REPE/REPZ和REPNE/REPNZ相配合使用的CMPS和SCAS指令 (4) ●指令功能:重复执行指令规定的操作,每执行一次串 指令(CX)-1,并判断ZF标志是否为1, 只要(CX)=0或ZF=1,则重复执行结束直到(CX)=0。 ●指令格式:REPNE/REPNZ MOVS(B/W)或STOS(B/W)或LODS(B/W) ●指令操作:①如(CX)=0或ZF=1则退出,否则转②; ②(CX)←(CX)-1; ③执行其后的串操作指令; ④ 重复① 〜 ③。 教学进程
指令串处理指令举例 例:扫描长度为LEN的STR1串中是否含有字母L。 LEA DI,STR1; (DI)←被扫描串首地址 MOV AL,‘L’ ; (AL)←预查找字符 MOV CX,LEN; 重复操作次数 CLD; 设置方向标志位DF=0 REPNE SCANSB; 串扫描 结果: (DI)←相匹配字符的下一个地址 (CX)←剩下还未比较的字符个数 教学进程
控制转移指令 指令名称 指令格式 执行操作 1.段内直接短转移 JMP SHORT OPR (IP) ← (IP) + 8位位移量 2.段内直接近转移 JMP NEAR PTR OPR (IP) ← (IP) + 16位位移量 3.段内间接转移 JMP WORD PTR OPR (IP) ← (EA) ●无条件转移指令根据其转移范围的大小可以分为五种方式: 4.段间直接转移 JMP FAR PTR OPR (IP) ← OPR 的段内偏移地址 (CS) ← OPR所在段的段地址 5.段间间接转移 JMP DWORD PTR OPR (IP) ← (EA) (CS) ← (EA+2) 4.2.5 4.2指令系统 ● 1.转移指令 无条件转移指令JMP (1) ●指令功能:无条件地转移到由地址表达式所确定的目标单元。 ●指令格式:JMP 地址表达式 教学进程
条件转移指令JCC ● 1.转移指令 4.2.5控制转移指令 (2) ●指令功能:根据前面指令形成的条件来确定转移目的的地址。 ●指令操作:当条件满足时程序转移至标号处, 转移范围只能在离当前IP的-128 〜 +127个字节之内。 按照转移条件分为三类 1. 简单条件转移指令。如JZ(JE)、JP 2.无符号数条件转移指令。如JB(JNAE,JC)、JBE(JNA) 3.有符号数条件转移指令。如JLE(JNG)、JNL(JGE) 教学进程
指令分类 指令格式 执行条件 1. 简单 条件转移指令 JZ(JE) 标号 ZF=1 JNZ(JNE) 标号 ZF=0 JS 标号 SF=1 JNS 标号 SF=0 JO 标号 OF=1 JNO 标号 OF=0 JP 标号 PF=1 JNP 标号 PF=0 JC 标号 CF=1 JNC 标号 CF=0 2.无符号数 条件转移指令 JB(JNAE,JC) 标号 CF=1 (<) JNB(JAE,JNC) 标号 CF=0 (≥) JBE(JNA) 标号 CF∨ZF=1 (≤) JNBE(JA) 标号 CF∨ZF=0 (>) 3.有符号数 条件转移指令 JL(JNGE) 标号 SF⊕OF=1 (<) JNL(JGE) 标号 SF⊕OF=0 (≥) JLE(JNG) 标号 (SF⊕OF)∨ZF=1 (≤) JNLE(JG) 标号 (SF⊕OF)∨ZF=0 (>) 教学进程
循环控制指令 (2) LOOPE/LOOPZ相等或为零时循环指令 ●指令格式:LOOPZ(LOOPE)OPR ●循环条件:ZF=1 且(CX)≠0 (3) LOOPNE/LOOPNZ不相等或不为零时循环指令 ●指令格式:LOOPZ(LOOPE)OPR ●循环条件:ZF=1 且(CX)≠0 ●执行操作:①(CX) ← (CX)-1; ② 检查是否满足循环条件: 如满足则(IP) ← (IP) + 8位位移量,实行循环; 不满足则IP 不变,退出循环。 ● 2. 4.2.5控制转移指令 (1) JCCLOOP循环指令 ●指令格式:LOOP OPR ●循环条件:(CX)≠0 教学进程
过程调用指令CALL与返回指令RET code1 segment main proc far …… call sub …… ret main endp code1 ends code2 segment sub proc far …… ret sub endp code2 ends code segment main proc far …… call sub …… ret main endp sub proc near …… ret sub endp code ends (1) CALL指令 ①段内直接近调用 ●指令格式:CALL DST ●执行操作:(SP)←(SP)-2 ((SP)+1, (SP))←(IP) (IP)←(IP)+ 16位位移量 段内调用和返回 段间调用和返回 ● 3. 4.2.5控制转移指令 ●过程调用指令CALL必须同返回指令RET成对使用。 ●过程定义的形式如下: 过程名PROC [near / far] 过程体 RET 过程名 ENDP 教学进程
②段内间接近调用 ④段间间接远调用 ●指令格式:CALL DST ●执行操作:(SP)←(SP)-2 ((SP)+1, (SP))←(CS) (SP)←(SP)-2 ((SP)+1, (SP))←(IP) (IP)←(EA) (CS)← (EA+2) (1) CALL指令 ③段间直接远调用 ●指令格式:CALL DST ●执行操作:(SP)←(SP)-2 ((SP)+1, (SP))←(CS) (SP)←(SP)-2 ((SP)+1, (SP))←(IP) (IP)←偏移地址 (CS)←段地址 ●指令格式:CALL DST ●执行操作:(SP)←(SP)-2 ((SP)+1, (SP))←(IP) (IP)←(EA) 过程调用指令CALL与返回指令RET ● 3. 4.2.5控制转移指令 教学进程
RET返回指令 ④段间带立即数远返回 ●指令格式:RET EXP ②段内带立即数近返回 ●指令格式: RET EXP 过程调用指令CALL与返回指令RET ● 3. 4.2.5控制转移指令 (2) ③段间远返回 ●指令格式:RET ●执行操作: (IP)← ((SP)+1, (SP)) (SP)←(SP)+2 (CS)← ((SP)+1, (SP)) (SP)←(SP)+ 2 ①段内近返回 ●指令格式:RET ●执行操作:(IP)← ((SP)+1, (SP)) (SP)←(SP)+2 教学进程
中断调用与返回指令 ● 4. 4.2.5控制转移指令 (1)中断指令 (3)中断返回指令 ●指令格式: INT TYPE 或 INT ●执行操作:(SP)←(SP)-2 ((SP)+1, (SP))←(PSW) (SP)←(SP)-2 ((SP)+1, (SP))←(CS) (SP)←(SP)-2 ((SP)+1, (SP))←(IP) (IP)←(TYPE*4) (CS)←(TYPE*4+2) ●指令格式:IRET ●执行操作: (IP)← (SP)+1, (SP)) (SP)←(SP)+2 (CS)← ((SP)+1, (SP)) (SP)←(SP)+ 2 (PSW)←((SP)+1, (SP)) (SP)←(SP)+ 2 (2)溢出中断指令 ●指令格式:INTO ●执行操作:若OF=1,同INT指令; 否则(IP)←(10H) (CS)←(12H) 教学进程