




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 指令系统指令系统 一组指令的集合一组指令的集合第第3章章 80 x86的指令系统和寻址方式的指令系统和寻址方式 操作码操作码 操作数操作数 . 操作数操作数指令指令 寻址方式寻址方式 与数据有关的寻址方式与数据有关的寻址方式 与转移地址有关的寻址方式与转移地址有关的寻址方式21. 8086的寻址方式的寻址方式 与数据有关的寻址方式与数据有关的寻址方式:以以 MOV 指令为例指令为例 立即寻址立即寻址 MOV AX , 3069H寄存器寻址寄存器寻址 MOV AL , BH直接寻址直接寻址 MOV AX , 2000H 寄存器间接寻址寄存器间接寻址 MOV AX , BX 寄存器相对寻址寄存
2、器相对寻址 MOV AX , COUNT SI 基址变址寻址基址变址寻址 MOV AX , BP DI 相对基址变址寻址相对基址变址寻址 MOV AX , MASK BX SI 存储器寻址存储器寻址3(1) 立即寻址方式立即寻址方式* 操作数在指令中给出操作数在指令中给出 指令格式: MOV AL, 5 MOV AX, 3064H MOV AL, A* 只能用于只能用于 SRC 字段字段 MOV 40H, AL * SRC 和和 DST 的字长一致的字长一致 MOV AH, 3064H 4(2) 寄存器寻址方式寄存器寻址方式* 操作数在指定的寄存器中操作数在指定的寄存器中 MOV AX, BX
3、 MOV AL, BH MOV AX, 3064H* 字节寄存器只有字节寄存器只有 AH AL BH BL CH CL DH DL* SRC 和和 DST 的字长一致的字长一致 MOV AH, BX * CS 不能用不能用 MOV 指令改变指令改变 MOV CS, AX 5(3) 直接寻址方式直接寻址方式* 有效地址有效地址EA由指令直接给出由指令直接给出 例例:MOV AX, 2000H EA=2000H, 假设假设(DS)=3000H, 那么那么PA=32000H* 隐含的段为数据段隐含的段为数据段 DS* 可使用段跨越前缀可使用段跨越前缀 MOV AX, ES: 2000H* 操作数地址
4、可由变量(符号地址)表示操作数地址可由变量(符号地址)表示, 但要注意但要注意VALUE DB 10 变量的属性变量的属性MOV AH, VALUE MOV AX, VALUE MOV AX, WORD PTR VALUE 5030 32000AH AL3050(AX) = 3050H6(4) 寄存器间接寻址寄存器间接寻址* EA 在基址寄存器在基址寄存器(BX/BP) 或变址寄存器或变址寄存器(SI/DI) 中中 MOV AX, BX PA = 16d (DS) + (BX) MOV AX, ES:BX PA = 16d (ES) + (BX) MOV AX, BP PA = 16d (SS
5、) + (BP) * 不允许使用不允许使用AX、CX、DX 存放存放 EA MOV AX, CX * SRC 和和 DST 的字长一致的字长一致 MOV DL, BX ; BX指示一个字节单元指示一个字节单元 MOV DX, BX ; BX指示一个字单元指示一个字单元 * 适于数组、字符串、表格的处理适于数组、字符串、表格的处理7 有效地址有效地址 =(BX)(BP) 8位位(SI) 16位位(DI)+位移量位移量(5) 寄存器相对寻址方式寄存器相对寻址方式* 指令格式指令格式: MOV AX, COUNTSI MOV AX, COUNTSI 或或 MOV AX, COUNT+SI MOV A
6、X, COUNT+SI 假设假设 (DS)=3000H, (SI)=2000H, COUNT=3000H(DS)=3000H, (SI)=2000H, COUNT=3000H, 则则: PA = 35000HPA = 35000H 假设假设(35000H)=1234H, (35000H)=1234H, 那那么么 (AX)=1234H(AX)=1234H* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理8(6) 基址变址寻址方式基址变址寻址方式*指令格式:指令格式: MOV AX, BX DIMOV AX, BX DI MOV AX, BX+DI MOV AX, BX+DI MOV A
7、X, ES:BX SI MOV AX, ES:BX SI* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理* 必须是一个基址寄存器和一个变址寄存器的组合必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, BX BP MOV AX, SI DI 有效地址有效地址 =(BX) (SI)(BP) (DI)+9( 7 ) 相对基址变址寻址方式相对基址变址寻址方式 MOV AX, MASK BX SI 或或 MOV AX, MASK BX+SI 或或 MOV AX, MASK+BX+SI 有效地址有效地址 =(BX) (SI) 8位位(BP) (DI) 16位位+位移量位移量1080
8、x86 新增的寻址方式新增的寻址方式 EA= = (基址寄存器基址寄存器) + (变址寄存器变址寄存器) 比例因子比例因子 + 位移量位移量( 1 ) 比例变址寻址方式比例变址寻址方式 例:例:MOV EAX, COUNT ESI 4 11(2) 基址比例变址寻址方式基址比例变址寻址方式 例:例:MOV ECX, EAX EDI 4 (3) 相对基址比例变址寻址方式相对基址比例变址寻址方式 例:例:MOV EAX, TABLE EBP EDI 4 16 16位和位和3232位寻址的差异位寻址的差异地址成分地址成分 1616位寻址位寻址 3232位寻址位寻址基址寄存器基址寄存器 BXBX、BP
9、BP 任何任何3232位通用寄存器位通用寄存器变址寄存器变址寄存器 SISI、DI DI 除除ESPESP外的任何外的任何3232位通用寄存器位通用寄存器比例因子比例因子 1 11 1、2 2、4 4、8 8 12与转移地址有关的寻址方式:与转移地址有关的寻址方式: 段内寻址段内寻址 段内直接寻址段内直接寻址 JMP NEAR PTR NEXT 段内间接寻址段内间接寻址 JMP TABLE BX 段间寻址段间寻址 段间直接寻址段间直接寻址 JMP FAR PTR NEXT 段间间接寻址段间间接寻址 JMP DWORD PTR BX 用来确定转移指令及转子指令的转向地址用来确定转移指令及转子指令
10、的转向地址。13 数据传送指令数据传送指令 算术指令算术指令 逻辑指令逻辑指令 串处理指令串处理指令 控制转移指令控制转移指令 处理机控制与杂项操作指令处理机控制与杂项操作指令2. 8086的指令系统的指令系统14数据传送指令数据传送指令: 通用数据传送指令通用数据传送指令 MOV、PUSH、POP、XCHG 累加器专用传送指令累加器专用传送指令 IN、OUT、XLAT 地址传送指令地址传送指令 LEA、LDS、LES 标志寄存器传送指令标志寄存器传送指令 LAHF、SAHF、PUSHF、POPF 类型转换指令类型转换指令 CBW、CWD 15传送指令:传送指令: MOV DST, SRC执行
11、操作:执行操作: (DST) (SRC)注意注意: * DST、SRC 不能同时为段寄存器不能同时为段寄存器 MOV DS, ES * 立即数不能直接送段寄存器立即数不能直接送段寄存器 MOV DS, 2000H * DST 不能是立即数和不能是立即数和CS* DST、SRC 不能同时为存储器寻址不能同时为存储器寻址* 不影响标志位不影响标志位 通用数据传送指令通用数据传送指令MOV AX, DSEGMOV DS, AX16 进栈指令:进栈指令: PUSH SRC 执行操作:执行操作: (SP) (SP) 2 ( (SP)+1, (SP) ) (SRC) 出栈指令:出栈指令: POP DST
12、执行操作:执行操作: (DST) ( (SP)+1, (SP) ) (SP) (SP) + 2堆栈:堆栈:先进后出先进后出的存储区,段地址存放在的存储区,段地址存放在SSSS中,中, SP在任何时候都指向栈顶,进出栈后自动修改在任何时候都指向栈顶,进出栈后自动修改SPSP。 注意注意: * 堆栈操作必须以字为单位。堆栈操作必须以字为单位。 * 不影响标志位不影响标志位 * 不能用立即寻址方式不能用立即寻址方式 PUSH 1234H * DST不能是不能是CS POP CS 17 交换指令:交换指令: XCHG OPR1, OPR2 执行操作:执行操作: (OPR1) (OPR2)注意注意: *
13、 不影响标志位不影响标志位 * 不允许使用段寄存器不允许使用段寄存器 例:例:XCHG BX, BP+SI XCHG AL, BH18 累加器专用传送指令累加器专用传送指令(只限使用(只限使用AX或或AL) 输入指令输入指令 IN (I/O CPU) 长格式:长格式: IN AL, PORT (字节)(字节) IN AX, PORT (字)(字) 执行操作:执行操作:(AL) ( PORT ) (字节)(字节) (AX) ( PORT+1, PORT )(字)(字) 短格式:短格式: IN AL, DX (字节)(字节) IN AX, DX (字)(字) 执行操作:执行操作:(AL) ( (D
14、X) ) (字节)(字节) (AX) ( (DX)+1, (DX) )(字)(字) 19输出指令输出指令 OUT (CPU I/O)长格式:长格式: OUT PORT, AL (字节)(字节) OUT PORT, AX (字)(字)执行操作:执行操作:( PORT ) (AL) (字节)(字节) ( PORT+1, PORT ) (AX)(字)(字)短格式:短格式: OUT DX, AL (字节)(字节) OUT DX, AX (字)(字)执行操作:执行操作:( (DX) ) (AL) (字节)(字节) ( (DX)+1, (DX) ) (AX)(字)(字)20注意注意: * 不影响标志位不影
15、响标志位* 前前256个端口号个端口号00HFFH可直接在指令中指定(长格式)可直接在指令中指定(长格式)* 如果如果端口号端口号 256,端口号端口号 DX(短格式)(短格式)例:例: IN AX, 28H IN AX, 28H MOV DATA_WORD, AX MOV DATA_WORD, AX例:例: MOV DX, 3FCH MOV DX, 3FCH IN AX, DX IN AX, DX例:例: OUT 5, AL OUT 5, AL例:测试某状态寄存器(端口号例:测试某状态寄存器(端口号27H27H)的第)的第2 2位是否为位是否为1 1 IN AL, 27H IN AL, 27
16、H TEST AL, 00000100B TEST AL, 00000100B JNZ ERROR JNZ ERROR ;若第2位为1,转ERROR处理21(BX) 30 H F004031 H F0041 (AL) = 3 32 H F0042 33 H F0043TABLE(DS)=F000H换码指令:换码指令:XLAT 或或XLAT OPR执行操作:执行操作:(AL) ( (BX) + (AL) )例:例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令执行后指令执行后 (AL)=33H注意注意: * 不影响标志位不影响标
17、志位* 字节表格字节表格(长度不超过长度不超过256) 首地址首地址 (BX)* 需转换的代码位移量需转换的代码位移量 (AL)22 地址传送指令地址传送指令 有效地址送寄存器指令:有效地址送寄存器指令: LEA REG, SRC 执行操作:执行操作: (REG) SRC 指针送寄存器和指针送寄存器和DS指令:指令: LDS REG, SRC 执行操作:执行操作: (REG) (SRC) (DS) (SRC+2) 相继二字相继二字 寄存器、寄存器、DS 指针送寄存器和指针送寄存器和ES指令:指令: LES REG, SRC 执行操作:执行操作: (REG) (SRC) (ES) (SRC+2)
18、 相继二字相继二字 寄存器、寄存器、ES 23例:例:LEA BX, BX+SI+0F62H LDS SI, 10H LES DI, BX40 H00 H00 H30 H TABLE(DS):1000HMOV BX, TABLE ; (BX)=0040HMOV BX, OFFSET TABLE ; (BX)=1000HLEA BX, TABLE ; (BX)=1000HLDS BX, TABLE ; (BX)=0040H ; (DS)=3000HLES BX, TABLE ; (BX)=0040H ; (ES)=3000H注意注意: * 不影响标志位不影响标志位 * REG 不能是段寄存器不能
19、是段寄存器 * SRC 必须为存储器寻址方式必须为存储器寻址方式24 标志寄存器传送指令标志寄存器传送指令 标志送标志送AH指令:指令: LAHF 执行操作:执行操作: (AH) (FLAGS的低字节的低字节) AH送标志寄存器指令:送标志寄存器指令: SAHF 执行操作:执行操作: (FLAGS的低字节的低字节) (AH) 标志进栈指令:标志进栈指令: PUSHF 执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (FLAGS) 标志出栈标志出栈指令:指令: POPF 执行操作:执行操作: (FLAGS) ( (SP)+1, (SP) ) (SP) (SP)
20、 + 2* 影响标志位影响标志位25 类型转换指令类型转换指令 CBW AL AX 执行操作:执行操作: 若若(AL)的最高有效位为的最高有效位为0,则,则(AH)= 00H 若若(AL)的最高有效位为的最高有效位为1,则,则(AH)= FFH CWD AX (DX,AX) 执行操作:若执行操作:若(AX)的最高有效位为的最高有效位为0,则,则(DX)= 0000H 若若(AX)的最高有效位为的最高有效位为1,则,则(DX)= FFFFH 例:例:(AX) = 0BA45H CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H注意注意: * 无操作数指令
21、无操作数指令 * 隐含对隐含对AL 或或AX 进行符号扩展进行符号扩展 * 不影响条件标志位不影响条件标志位26算术指令:算术指令: 加法指令加法指令 ADD、ADC、INC 减法指令减法指令 SUB、SBB、DEC、NEG、CMP 乘法指令乘法指令 MUL、IMUL 除法指令除法指令 DIV、IDIV 十进制调整指令十进制调整指令 DAA、DAS、 AAA、AAS、AAM、AAD27 加法指令加法指令 加法指令:加法指令: ADD DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST) 带进位加法指令:带进位加法指令: ADC DST, SRC 执行操作:执行操作:
22、(DST) (SRC) + (DST) + CF 加加1指令:指令: INC OPR 执行操作:执行操作: (OPR) (OPR) + 1注意注意: * 除除INC指令不影响指令不影响CF标志外,均对条件标志位有影响。标志外,均对条件标志位有影响。28加法指令对加法指令对条件标志位条件标志位的影响的影响CF 位表示位表示 无符号数无符号数 相加的溢出。相加的溢出。OF 位表示位表示 带符号数带符号数 相加的溢出。相加的溢出。1 结果为负结果为负0 否则否则SF=1 结果为结果为00 否则否则ZF=1 和的最高有效位和的最高有效位 有有 向高位的进位向高位的进位0 否则否则CF=1 两个操作数符
23、号相同,而结果符号与之相反两个操作数符号相同,而结果符号与之相反0 否则否则OF=29举例举例: n=8 bit 带符号数带符号数(-128127) , 无符号数无符号数(0255) 0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1带:带:(+4)+(+11)=+15 OF=0无:无:4+11=15 CF=0带符号数和无符号数都不溢出带符号数和无符号数都不溢出 0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 带带: (+9)+(+124)=-123 OF=1 无无: 9+124=133 CF=
24、0带符号数溢出带符号数溢出无符号数溢出无符号数溢出 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0带:带:(+7)+(-5)=+2 OF=0无:无:7+251=2 CF=1带符号数和无符号数都溢出带符号数和无符号数都溢出 1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0带:带:(-121)+(-11)=+124 OF=1无:无:135+245=124 CF=130 减法指令减法指令减法指令:减法指令: SUB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC
25、)带借位减法指令:带借位减法指令: SBB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC) - CF减减1指令:指令: DEC OPR 执行操作:执行操作: (OPR) (OPR) - 1求补指令:求补指令: NEG OPR 执行操作:执行操作: (OPR) - (OPR)比较指令:比较指令: CMP OPR1, OPR2 执行操作:执行操作: (OPR1) - (OPR2)注意注意: * 除除DEC指令不影响指令不影响 CF标志外,均对条标志外,均对条 件标志位有影响。件标志位有影响。31减法指令对条件标志位(减法指令对条件标志位(CF/OF/ZF/SF)的影
26、响:)的影响:CF 位表示位表示 无符号数无符号数 减法的溢出。减法的溢出。OF 位表示位表示 带符号数带符号数 减法的溢出。减法的溢出。1 被减数的最高有效位被减数的最高有效位 有有 向高位的借位向高位的借位0 否则否则CF=1 两个操作数符号相反,而结果的符号与减数相同两个操作数符号相反,而结果的符号与减数相同0 否则否则OF=1 减法转换为加法运算时减法转换为加法运算时 无无 进位进位0 否则否则CF=或或32例:例:x、y、z 均为双精度数,分别存放在地址为均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现
27、w x + y + 24 - z ,并用,并用W, W+2单元存放单元存放wMOV AX, XMOV AX, XMOV DX, X+2MOV DX, X+2ADD AX, YADD AX, YADC DX, Y+2 ; x+yADC DX, Y+2 ; x+yADD AX, 24ADD AX, 24ADC DX, 0 ; x+y+24ADC DX, 0 ; x+y+24SUB AX, ZSUB AX, ZSBB DX, Z+2 ; x+y+24-zSBB DX, Z+2 ; x+y+24-zMOV W, AXMOV W, AXMOV W+2, DX ; MOV W+2, DX ; 结果存入结果
28、存入W, W+2W, W+2单元单元33 乘法指令乘法指令 无符号数乘法指令:无符号数乘法指令: MUL SRC 带符号数乘法指令:带符号数乘法指令: IMUL SRC 执行操作:执行操作: 字节操作数字节操作数 (AX) (AL) * (SRC) 字操作数字操作数 (DX, AX) (AX) * (SRC)注意注意: * AL (AX) 为隐含的乘数寄存器。为隐含的乘数寄存器。* AX (DX,AX) 为隐含的乘积寄存器。为隐含的乘积寄存器。* SRC不能为立即数。不能为立即数。* 除除CF和和OF外,对条件标志位无定义。外,对条件标志位无定义。34乘法指令对乘法指令对 CF/OF 的影响:
29、的影响:例:例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL ; (AX) (AL) * (BL) ; A5*11 5B*11=060B F9F5 ; (AX) = 0F9F5H CF=OF=1 (2) MUL BX ; (DX, AX) (AX) * (BX) ; 16A5*0611=0089 5EF5 ; (DX)=0089H (AX)=5EF5H CF=OF=100 乘积的高一半为零乘积的高一半为零11 否则否则MUL指令指令: CF,OF =00 乘积的高一半是低一半的符号扩展乘积的高一半是低一半的符号扩展11 否则否则 IMUL指令指令: CF,OF =
30、35 除法指令除法指令 无符号数除法指令:无符号数除法指令: DIV SRC 带符号数除法指令:带符号数除法指令: IDIV SRC 执行操作:执行操作: 字节操作字节操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余数的余数 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余数的余数注意注意: * AX (DX,AX) 为隐含的被除数寄存器。为隐含的被除数寄存器。 * AL (AX) 为隐含的商寄存器。为隐含的商寄存器。 * AH (DX) 为隐含的余数寄存器。为隐含的余数寄存器。 *
31、 SRC不能为立即数。不能为立即数。 * 对所有条件标志位均无定义。对所有条件标志位均无定义。如何判别结果有效?如何判别结果有效?36例:例:x , y , z , v 均为均为16位带符号数,计算位带符号数,计算 ( v - ( x*y + z 540 ) ) / xMOV AX, X MOV AX, X IMUL Y ; xIMUL Y ; x* *y y (DX,AXDX,AX)MOV CX, AXMOV CX, AXMOV BX, DXMOV BX, DXMOV AX, ZMOV AX, ZCWD CWD ;Z Z (DXDX,AXAX)ADD CX, AXADD CX, AXADC
32、BX, DX ; xADC BX, DX ; x* *y+z y+z (BXBX,CXCX)SUB CX, 540 SUB CX, 540 SBB BX, 0 ; xSBB BX, 0 ; x* *y+z-540y+z-540MOV AX, VMOV AX, VCWD CWD ;V V (DXDX,AXAX)SUB AX, CXSUB AX, CXSBB DX, BX ; v-(xSBB DX, BX ; v-(x* *y+z-540)y+z-540)IDIV X ; (v-(xIDIV X ; (v-(x* *y+z-540)/xy+z-540)/x(AXAX) 余数余数 (DXDX)37
33、十进制调整指令十进制调整指令BCD码:用二进制编码的十进制数,码:用二进制编码的十进制数,又称又称二二-十进制数十进制数压缩的压缩的BCD码:用码:用 4 位二进制数表示位二进制数表示 1 位十进制数位十进制数 例:例:( 59 )10 ( 0101 1001 )BCD非压缩的非压缩的BCD码:用码:用 8 位二进制数表示位二进制数表示 1 位十进制数位十进制数 例:例:( 59 )10 ( 0000 0101 0000 1001 )BCD数字的数字的 ASCII 码是一种码是一种 非压缩的非压缩的 BCD 码码 DIGIT ASCII BCD030H0011 0000131H0011 000
34、1232H0011 0010 939H0011 100138例:写出例:写出( 3590 )10的压缩的压缩 BCD 码和非压缩码和非压缩BCD码,并分码,并分 别别 把它们存入数据区把它们存入数据区 PAKED 和和 UNPAK压缩压缩BCD:( 3590 )10( 0011 0101 1001 0000 )BCD非压缩非压缩BCD: ( 3590 )10( 00000011 00000101 00001001 00000000 )BCD PAKED 90H 35H UNPAK 00H 09H 05H 03H39(1)压缩的)压缩的BCD码调整指令码调整指令 DAA 加法的十进制调整指令加法
35、的十进制调整指令 DAS 减法的十进制调整指令减法的十进制调整指令 (2)非压缩的)非压缩的BCD码调整指令码调整指令 AAA 加法的加法的ASCII码调整指令码调整指令 AAS 减法的减法的ASCII码调整指令码调整指令 AAM 乘法的乘法的ASCII码调整指令码调整指令 AAD 除法的除法的ASCII码调整指令码调整指令40逻辑指令:逻辑指令: 逻辑运算指令逻辑运算指令 AND、OR、NOT、XOR、TEST 移位指令移位指令 SHL、SHR 、 SAL 、SAR、 ROL、ROR、RCL、RCR41逻辑非指令:逻辑非指令:NOT OPR * OPR不能为立即数不能为立即数执行操作:执行操
36、作: (OPR) (OPR) * 不影响标志位不影响标志位 逻辑与指令:逻辑与指令:AND DST, SRC执行操作:执行操作: (DST) (DST) (SRC)逻辑或指令:逻辑或指令:OR DST, SRC执行操作:执行操作: (DST) (DST) (SRC)异或指令:异或指令: XOR DST, SRC执行操作:执行操作: (DST) (DST) (SRC)测试指令:测试指令: TEST OPR1, OPR2执行操作:执行操作: (OPR1) (OPR2)CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置 逻辑运算指令逻辑运算指令42
37、例:屏蔽例:屏蔽AL的第的第0、1两位两位 AND AL, 0FCH例:置例:置AL的第的第5位为位为1 OR AL, 20H 例:使例:使AL的第的第0、1位变反位变反 XOR AL, 3例:测试某些位是例:测试某些位是0是是1 TEST AL, 1 JZ EVEN * * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * * * * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * * * * * * 1 0 * * * * * * * * AND 1 1 1 1 1 1 0 0 * * * * * * 0 0 * * * * *
38、* * * AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 *43逻辑左移逻辑左移 SHL OPR, CNT逻辑右移逻辑右移 SHR OPR, CNT算术左移算术左移 SAL OPR, CNT(同逻辑左移)(同逻辑左移)算术右移算术右移 SAR OPR, CNT CF 0 0 CFCF 移位指令移位指令44循环左移循环左移 ROL OPR, CNT循环右移循环右移 ROR OPR, CNT带进位循环左移带进位循环左移 RCL OPR, CNT带进位循环右移带进位循环右移 RCR OPR, CNTCF CFCFCF45注意注意: * OPR可用除立即数以外的任何寻址方式可用除
39、立即数以外的任何寻址方式 * CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL ; 以以SHL为例为例* 条件标志位:条件标志位: CF = 移入的数值移入的数值 1 CNT=1时,最高有效位的值发生变化时,最高有效位的值发生变化 0 CNT=1时,最高有效位的值不变时,最高有效位的值不变 移位指令:移位指令: SF、ZF、PF 根据移位结果设置,根据移位结果设置,AF无定义无定义 循环移位指令:循环移位指令: 不影响不影响 SF、ZF、PF、AFOF =46串处理指令:串处理指令: 设置方向标志指令设置方向标志指令 CLD、STD 串处理指令串处理指
40、令 串重复前缀串重复前缀 MOVSB / MOVSW REP STOSB / STOSW REPE / REPZ LODSB / LODSW REPNE / REPNZ CMPSB / CMPSW SCASB / SCASW 47与与 REP 配合工作的配合工作的 MOVS / STOS / LODS REP 执行操作:执行操作:(1) 如如 (CX)=0 则退出则退出 REP,否则转,否则转(2)(2) (CX) (CX) -1(3) 执行执行 MOVS / STOS / LODS(4) 重复重复 (1) (3)48MOVS 串传送指令:串传送指令:MOVS DST, SRCMOVSB (字
41、节)(字节)MOVSW (字)(字)例:例:MOVS ES: BYTE PTR DI, DS: SI 执行操作:执行操作: (1) (DI) (SI) (2) 字节操作:字节操作:(SI)(SI)1, (DI)(DI)1 字操作:字操作: (SI)(SI)2, (DI)(DI)2 方向标志方向标志 DF=0 时用时用 + ,DF=1 时用时用 - 。 REP MOVS:将数据段中的整串数据传送到附加段中。:将数据段中的整串数据传送到附加段中。 源串(数据段)源串(数据段) 目的串(附加段)目的串(附加段)49执行执行 REP MOVS 之前,应先做好:之前,应先做好:(1) 源串首地址(末地址
42、)源串首地址(末地址) SI(2) 目的串首地址(末地址)目的串首地址(末地址) DI(3) 串长度串长度 CX(4) 建立方向标志建立方向标志 ( CLD 使使 DF=0,STD 使使 DF=1 ) 50STOS 存入串指令:存入串指令:STOS DSTSTOSB (字节)(字节)STOSW (字)(字)执行操作:执行操作: 字节操作:字节操作:(DI)(AL), (DI)(DI)1 字操作:字操作:(DI)(AX), (DI)(DI)2例:把例:把 附加段附加段 中的中的 10 个字节缓冲区置为个字节缓冲区置为 20Hlea di, mess2lea di, mess2mov al, 20
43、Hmov al, 20Hmov cx, 10mov cx, 10cldcldrep stosbrep stosblea di, mess2lea di, mess2mov ax, 2020Hmov ax, 2020Hmov cx, 5mov cx, 5cldcldrep stoswrep stosw51LODS 从串取指令:从串取指令: LODS SRC LODSB (字节)(字节) LODSW (字)(字)执行操作:执行操作: 字节操作:字节操作:(AL)(SI), (SI)(SI)1 字操作:字操作:(AX)(SI), (SI)(SI)2注意注意: * LODS 指令一般不与指令一般不与
44、REP 联用联用* 源串一般在数据段中(允许使用段跨越前缀来修改),源串一般在数据段中(允许使用段跨越前缀来修改), 目的串必须在附加段中目的串必须在附加段中* 不影响条件标志位不影响条件标志位52与与 REPE / REPZ(REPNE / REPNZ)配合工作的)配合工作的 CMPS 和和 SCAS REPE / REPZ REPNE / REPNZ 执行操作:执行操作: (1) 如如 (CX)=0 或或 ZF=0 (ZF=1) 则退出串操作,则退出串操作, 否则转否则转(2) (2) (CX)(CX) -1 (3) 执行执行 CMPS / SCAS (4) 重复重复 (1) (3)53C
45、MPS 串比较指令:串比较指令: CMPS SRC, DST CMPSB (字节)(字节) CMPSW (字)(字) 执行操作:执行操作: (1) (SI) - (DI) 根据比较结果置条件标志位:相等根据比较结果置条件标志位:相等 ZF=1 不等不等 ZF=0 (2) 字节操作:字节操作:(SI)(SI)1, (DI)(DI)1 字操作:字操作: (SI)(SI)2, (DI)(DI)254SCAS 串扫描指令:串扫描指令: SCAS DST SCASB (字节)(字节) SCASW (字)(字)执行操作:执行操作: 字节操作:字节操作:(AL) - (DI), (DI)(DI)1 字操作:
46、字操作: (AX) - (DI), (DI)(DI)255 控制转移指令:控制转移指令: 无条件转移指令无条件转移指令 JMP 条件转移指令条件转移指令JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、JLE / JNLE、 JCXZ 循环指令循环指令 LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE 子程序调用和返回指令子程序调用和返回指令 CALL、RET 中断与中断返回指令中断与中断返回指令 INT、INTO、IRET56无条件转移指令:无条件转移指令:段内
47、直接短转移:段内直接短转移:JMP SHORT OPR 执行操作:执行操作:(IP) (IP) + 8位位移量位位移量段内直接近转移:段内直接近转移:JMP NEAR PTR OPR 执行操作:执行操作:(IP) (IP) + 16位位移量位位移量段内间接转移:段内间接转移: JMP WORD PTR OPR 执行操作:执行操作: (IP) (EA)57段间直接远转移:段间直接远转移:JMP FAR PTR OPR 执行操作:执行操作:(IP) OPR 的段内偏移地址的段内偏移地址 (CS) OPR 所在段的段地址所在段的段地址段间间接转移:段间间接转移: JMP DWORD PTR OPR
48、执行操作:执行操作: (IP) (EA) (CS) (EA+2)58条件转移指令:条件转移指令:注意:只能使用段内直接寻址的注意:只能使用段内直接寻址的8 位位移量位位移量(1) 根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移 格式格式 测试条件测试条件JZ(JE) OPR ZF = 1JNZ(JNE) OPR ZF = 0JS OPR SF = 1JNS OPR SF = 0JO OPR OF = 1JNO OPR OF = 0JP OPR PF = 1JNP OPR PF = 0JC OPR CF = 1JNC OPR CF = 059(2) 比较两个无符号数,并根据比较结果
49、转移比较两个无符号数,并根据比较结果转移* 格式格式 测试条件测试条件 JB (JNAE,JC) OPR CF = 1 JNB (JAE,JNC) OPR CF = 0 JBE (JNA) OPR CFZF = 1 JNBE (JA) OPR CFZF = 0* 适用于地址或双精度数低位字的比较适用于地址或双精度数低位字的比较60(3) 比较两个带符号数,并根据比较结果转移比较两个带符号数,并根据比较结果转移* 格式格式 测试条件测试条件 JL (JNGE) OPR SF OF = 1 JNL (JGE) OPR SF OF = 0 JLE (JNG) OPR (SF OF)ZF = 1 JN
50、LE (JG) OPR (SF OF)ZF = 0* 适用于带符号数的比较适用于带符号数的比较(4) 测试测试 CX 的值为的值为 0 则转移则转移 格式格式 测试条件测试条件 JCXZ OPR (CX)=061循环指令:循环指令:注意:注意:* CX 中存放循环次数中存放循环次数* 只能使用段内直接寻址的只能使用段内直接寻址的8 位位移量位位移量LOOPLOOPZ / LOOPELOOPNZ / LOOPNE 执行步骤:执行步骤: (1) (CX) (CX) - 1 (2) 检查是否满足测试条件,如满足则检查是否满足测试条件,如满足则 (IP) (IP) + 8位位移量,实行循环;位位移量,
51、实行循环; 不满足则不满足则 IP 不变,退出循环。不变,退出循环。62循环指令:循环指令:LOOP OPR测试条件:测试条件:(CX) 0为零或相等时循环指令:为零或相等时循环指令:LOOPZ(LOOPE) OPR测试条件:测试条件:ZF=1 且且 (CX) 0不为零或不相等时循环指令:不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR测试条件:测试条件:ZF=0 且且 (CX) 0LOOP AGAIN DEC CX JNZ AGAIN63子程序调用和返回指令:子程序调用和返回指令:code1 segmentcode1 segmentmain proc main proc far
52、far callcall far ptr subp far ptr subp ret retmain endpmain endpcode1 endscode1 endscode2 segmentcode2 segmentsubp proc subp proc farfar retretsubp endpsubp endpcode2 endscode2 ends 段间调用和返回段间调用和返回code segmentcode segmentmain proc main proc farfar call call subp subp ret retmain endpmain endpsubp pro
53、c subp proc nearnear retretsubp endpsubp endpcode endscode ends 段内调用和返回段内调用和返回64 CALL 调用指令调用指令段内直接近调用:段内直接近调用:CALL DST执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (IP) + 16位位移量位位移量段内间接近调用:段内间接近调用:CALL DST执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (EA)65段间直接远调用:段间直接远调用:CALL DST执行操作:执行操作
54、: (SP) (SP) - 2 ( (SP)+1,(SP) ) (CS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) 偏移地址偏移地址 (CS) 段地址段地址段间间接远调用:段间间接远调用:CALL DST执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (CS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (EA) (CS) (EA+2)66RET 返回指令返回指令段内近返回:段内近返回:RET执行操作:执行操作: (IP) ( (SP)+1,(SP) ) (SP) (SP) + 2段内带
55、立即数近返回:段内带立即数近返回:RET EXP段间远返回:段间远返回:RET执行操作:执行操作: (IP) ( (SP)+1,(SP) ) (SP) (SP) + 2 (CS) ( (SP)+1,(SP) ) (SP) (SP) + 2段间带立即数远返回:段间带立即数远返回:RET EXP67中断指令:中断指令: 类型类型0的的(IP) 类型类型0的的(CS) 类型类型1的的(IP) 类型类型1的的(CS) 类型类型N的的(IP) 类型类型N的的(CS) 类型类型255的的(IP) 类型类型255的的(CS)0000000004 4*N003FC中断向量表中断向量表中断向量:中断向量:中断例行程序的入口地址,中断例行程序的入口地址,存放于中断向量区。存放于中断向量区。 00000H003FFHA0000HC0000HF0000H640K (RAM)640K (RAM)128K (RAM)128K (RAM)192K (ROM)192K (ROM) 64K (ROM) 64K (ROM)68中断指令:中断指令: INT TYPE 或或 INT执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1,(SP) )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年仪表照明系统合作协议书
- 2024年中国石油高校毕业生招聘考试真题
- 2025年三次采油采出液絮凝剂项目合作计划书
- 人教版一年级下册语文期末复习计划
- 2025年废弃资源回收加工项目发展计划
- 混凝土冬季施工的安全措施
- 生物技术研发课题中期报告范文
- 2024-2025管理人员岗前安全培训考试试题(完美版)
- 2024-2025安全培训考试试题含答案解析
- 25年企业员工岗前安全培训考试试题带答案解析
- 课件-2025年春季学期 形势与政策 第一讲-加快建设社会主义文化强国
- 2025年江苏省南通启东市江海产业园招聘1人历年高频重点提升(共500题)附带答案详解
- 大学美育知到智慧树章节测试课后答案2024年秋长春工业大学
- 《大型商务酒店网络规划与设计》8800字
- 《基于嵌入式Linux的农业信息采集系统设计与研究》
- GB/T 45077-2024国家公园项目建设指南
- 外科创伤处理-清创术(外科课件)
- 小型手推式除雪机毕业设计说明书(有全套CAD图)
- 治安 课件教学课件
- 中韩文化对比
- 乡土中国 读书分享
评论
0/150
提交评论