版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,教学重点,第3章是本课程的一个关键内容,是程序设计的基础 难点是各种寻址方式 基础是熟悉寄存器组 重点是掌握8086常用指令的功能及应用,第三章 80 x86的指令系统和寻址方式,2,指令系统:计算机的指令系统就是指该计算机能够执行的全部指令的集合。(一组指令集)。 指令的一般格式:,指令由操作码和操作数两部分组成 操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分 操作数是指令执行的参与者,即各种操作的对象 有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数,3,每种指令的操作码: 用一个唯一的助记符表示(指令
2、功能的英文缩写) 指令中的操作数: 可以是一个具体的数值 可以是存放数据的寄存器 或指明数据在主存位置的存储器地址,指令举例: MOV AX,BX SUB BX,123 ADD AX,3 AND DL,80H MUL BL PUSH DX CLD CBW,4,寻址方式:取得操作数地址的方式,指令系统设计了多种操作数的来源 寻找操作数的过程就是操作数的寻址 操作数采取哪一种寻址方式,会影响机器运行的速度和效率,如何寻址一个操作数对程序设计很重要,与数据有关的寻址方式 与转移地址有关的寻址方式,5,3.1 IBM PC机的寻址方式,与数据有关的寻址方式 与转移地址有关的寻址方式,3.1.1 与数据
3、有关的寻址方式 以 MOV 指令为例,操作码 操作数1,操作数2;注释 操作数2,称为源操作数 src,它表示参与指令操作的一个对象 操作数1,称为目的操作数 dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果 分号后的内容是对指令的解释,6,MOV dest,src;destsrc MOV指令的功能是将源操作数src传送至目的操作数dest,例如: MOV AL,05H;AL05H MOV BX,AX;BXAX MOV AX,SI;AXDS:SI MOV AX,BP+06H;AXSS:BP+06H MOV AX,BX+SI;AXDS:BX+SI,7,1. 立即寻址方式*
4、 操作数在指令中给出 MOV AL, 5 MOV AX, 3064H * 只能用于SRC字段 * SRC 和 DST的字长一致 MOV AH, 3064H,8,2. 寄存器寻址方式* 操作数在指定的寄存器中 MOV AX, BX MOV AL, BH * 字节寄存器只有 AH AL BH BL CH CL DH DL * SRC 和 DST的字长一致 MOV AH, BX * CS不能用MOV指令改变 MOV CS, AX,9,3. 直接寻址方式* 有效地址EA由指令直接给出 有效地址EA:操作数的偏移地址 物理地址PA = 16d (DS) + EA 例:MOV AX, 2000H EA=2
5、000H, 假设(DS)=3000H, 那么(PA)=32000H 例:操作数地址可由变量(符号地址)表示 MOV AH, VALUE ( VALUE DB 10 ),50,30,32000,AH AL,30,50,(AX) = 3050H,10,3. 直接寻址方式* * 隐含的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES :2000H * 使用变量时,要注意变量的属性 VALUE DB 10 MOV AX, VALUE MOV AX, WORD PTR VALUE * 适于处理单个变量,11,4. 寄存器间接寻址方式* EA在基址寄存器 (BX/BP)或变址寄存器(SI/DI
6、)中 BX, SI, DI (DS) 物理地址 = 16d (DS) + BP (SS) 物理地址 = 16d (SS) + (BP) MOV AX, BX PA = 16d (DS) + (BX) MOV AX, ES:BX PA = 16d (ES) + (BX) MOV AX, BP PA = 16d (SS) + (BP),(BX) (SI) (DI),12,4. 寄存器间接寻址方式* * 不允许使用AX、CX、DX存放EA MOV AX, CX * SRC 和 DST的字长一致 MOV DL, BX ; BX指示一个字节单元 MOV DX, BX ; BX指示一个字单元 * 适于数组
7、、字符串、表格的处理,13,5. 寄存器相对寻址方式* 例: MOV AX, COUNTSI 或 MOV AX, COUNT+SI 假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么 PA = 35000H 假设(35000H)=1234H, 那么 (AX)=1234H * 适于数组、字符串、表格的处理,有效地址 =,(BX) (BP) (SI) (DI),+,8位 16位,位移量,14,6. 基址变址寻址方式* MOV AX, BXDI 或 MOV AX, BX+DI MOV AX, ES:BXSI * 适于数组、字符串、表格的处理 * 必须是一个基址寄存器和一
8、个变址寄存器的组合 MOV AX, BXBP MOV AX, SIDI,有效地址 =,(BX) (BP),+,(SI) (DI),15,7. 相对基址变址寻址方式* MOV AX, MASKBXSI 或 MOV AX, MASKBX+SI 或 MOV AX, MASK+BX+SI * 适于堆栈处理和数组处理,有效地址 =,(BX) (BP),+,(SI) (DI),+,8位 16位,位移量,16,例:编写一段显示字符串STRING的程序 DATA SEGMENT STRING DB HAPPY NEW YEAR!, 0DH , 0AH , $ COUNT DW 17 DATA ENDS (1)
9、直接寻址 mov dl, string ; mov dl, H mov ah, 2 int 21h ; 显示字符H mov dl, string+1 ; mov dl, A mov ah, 2 int 21h ; 显示字符A .,17,(2)寄存器间接寻址 mov cx, count ; mov cx, 17 mov bx, offset string ; string的偏址 bx next: mov dl, bx mov ah, 2 int 21h ; 显示一个字符 inc bx loop next ; 循环指令,(3)寄存器相对寻址 mov cx, count ; mov cx, 17 m
10、ov si, 0 next: mov dl, stringsi ; mov dl, string+si mov ah, 2 int 21h ; 显示一个字符 inc si loop next ; 循环指令,18,(4)基址变址寻址 mov cx, count ; mov cx, 17 mov bx, offset string ; string的偏址 bx mov si, 0 next: mov dl, bxsi ; mov dl, bx+si mov ah, 2 int 21h ; 显示一个字符 inc si loop next ; 循环指令 (5)DOS显示字符串功能 mov dx, of
11、fset string ; string的偏址 dx ; lea dx, string mov ah, 9 int 21h ; 显示一串字符,19,3.1.2 与转移地址有关的寻址方式,用来确定 转移指令 及 CALL指令 的转向地址。,段内寻址 段间寻址,段内直接寻址 段内间接寻址,段间直接寻址 段间间接寻址,以 转移(条件转移/无条件转移)指令 为例,段内:转移指令与转向的目标指令在同一代码段中,(CS)不变。 段间:转移指令与转向的目标指令在两个代码段中, (CS)变化。,20,1. 段内直接寻址 转向的有效地址EA = 物理地址 = 16d (CS) + (IP)新 例: JMP AG
12、AIN (IP)当前 MOV BX, AX AGAIN: 例: JMP NEAR PTR NEXT 近转移 -32768 +32767 JMP SHORT NEXT 短转移 -128 +127,(IP)当前 + 位移量( 8bit / 16bit ),(IP)新,(IP)新,21,2. 段内间接寻址 转向的有效地址EA是一个寄存器或存储单元的内容。 (可用除立即数以外的任何一种数据寻址方式得到) 物理地址 = 16d (CS) + EA 例: (BX)=1256H (SI)=528EH TABLE=20A2H (DS)=2000H (232F8H)=3280H (264E4H)=2450H J
13、MP BX ; (IP)=1256H JMP TABLEBX JMP WORD PTR TABLEBX ; (IP)=3280H JMP BXSI JMP WORD PTR BXSI ; (IP)=2450H,22,3. 段间直接寻址 用指令中提供的转向段地址和偏移地址取代CS和IP。 物理地址 = 16d (CS) + (IP) 例:,code1 segment jmp far ptr next code1 ends,code2 segment next: . code2 ends,23,4. 段间间接寻址 用存储器中的两个相继字的内容取代CS和IP。 (存储单元的地址可用除立即数和寄存器以
14、外的任何一种 数据寻址方式得到) 物理地址 = 16d (CS) + (IP) 例: JMP DWORD PTR INTERS+BX,24,3.3 IBM PC机的指令系统, 数据传送指令 算术指令 逻辑指令 串处理指令 控制转移指令 处理机控制指令,注意:1. 指令的基本功能 2. 指令的执行对标志位的影响 3. 对寻址方式或寄存器使用的限制和隐含使用的情况,25,3.3.1 数据传送指令 通用数据传送指令 累加器专用传送指令 地址传送指令 标志寄存器传送指令,26, 通用数据传送指令 传送指令: MOV DST, SRC 执行操作: (DST) (SRC) 注意: * DST不能是CS *
15、 不影响标志位 * DST、SRC不同时为段寄存器 MOV DS, ES * 立即数不能直接送段寄存器 MOV DS, 2000H,27,例: MOV AX, DATA_SEG MOV DS, AX 例: MOV AL, E ; MOV AL, 45H 例: MOV BX, OFFSET TABLE 例: MOV AX, YBPSI,返回,28,进栈指令: PUSH SRC 执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (SRC) 出栈指令: POP DST 执行操作: (DST) (SP)+1, (SP) (SP) (SP) + 2 堆栈:“先进后出”的存储区,存
16、在于堆栈段中,SP在任何 时候都指向栈顶。 注意: * 堆栈操作必须以字为单位。 * 不影响标志位 * 不能用立即寻址方式 PUSH 1234H * DST不能是CS POP CS,29,例: 假设 (AX) = 2107 H , 执行 PUSH AX,(SP),低地址,高地址,(SP),07H 21H,低地址,高地址,进栈方向,* *,* *,* *,* *,PUSH AX 执行前,PUSH AX 执行后,30,例: POP BX,(SP),低地址,高地址,(SP),07H 21H,低地址,高地址,出栈方向,07H 21H,(BX) = 2107H,POP BX 执行前,POP BX 执行后
17、,* *,* *,* *,* *,31,例: PUSH DS SUB AX, AX PUSH AX RET 例: PUSH AX PUSH BX POP BX POP AX,;其间用到AX和BX寄存器,32,交换指令: XCHG OPR1, OPR2 执行操作: (OPR1) (OPR2) 注意: * 不影响标志位 * 不允许使用段寄存器 例:XCHG BX, BP+SI XCHG AL, BH,33, 累加器专用传送指令(只限于使用AX或AL) 输入指令(I/O CPU) 长格式: IN AL, PORT (字节) IN AX, PORT (字) 执行操作:(AL) (PORT) (字节)
18、(AX) (PORT+1, PORT)(字) 短格式: IN AL, DX (字节) IN AX, DX (字) 执行操作:(AL) ( (DX) ) (字节) (AX) ( (DX)+1, (DX) )(字),34,输出指令(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)(字),35,注意:
19、* 不影响标志位 * 前256个端口号00HFFH可直接在指令中指定(长格式) * 如果端口号 256,端口号 DX(短格式) 例: IN AX, 28H ; MOV DX, 28H ; IN AX, DX MOV DATA_WORD, AX 例: MOV DX, 3FCH 例:OUT 5, AL IN AX, DX 例:测试某状态寄存器(端口号27H)的第2位是否为1 IN AL, 27H TEST AL, 00000100B JNZ ERROR ;若第2位为1,转到ERROR处理,36,例 8.1Sound程序 ( page 204 ),mov dx, 100 in al, 61h and
20、 al, 11111100b sound: xor al, 2 out 61h, al mov cx, 140h wait1: loop wait1 dec dx jne sound,设备控制寄存器,端口61H,1 / 0 0,控制其它外部设备,与门,放大器,2号定时器门控,1 0,37,换码指令:XLAT 或XLAT OPR 执行操作:(AL) ( (BX) + (AL) ) 例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令执行后 (AL)=33H 注意: * 不影响标志位 * 字节表格(长度不超过256) 首地址 (BX
21、) * 需转换代码 (AL),38, 地址传送指令 有效地址送寄存器指令: LEA REG, SRC 执行操作: (REG) SRC 指针送寄存器和DS指令: LDS REG, SRC 执行操作: (REG) (SRC) (DS) (SRC+2) 4个相继字节 寄存器(通常是SI)、DS 指针送寄存器和ES指令: LES REG, SRC 执行操作: (REG) (SRC) (ES) (SRC+2) 4个相继字节 寄存器(通常是DI)、ES,39,例:LEA BX, BX+SI+0F62H 例:LDS SI, 10H 例:LES DI, BX 例:,(DS):1000H 40 H,00 H,0
22、0 H,30 H,TABLE,MOV BX, TABLE ; (BX)=0040H MOV BX, OFFSET TABLE ; (BX)=1000H LEA BX, TABLE ; (BX)=1000H LDS BX, TABLE ; (BX)=0040H ; (DS)=3000H LES BX, TABLE ; (BX)=0040H ; (ES)=3000H,注意: * 不影响标志位 * REG不能是段寄存器 * SRC必须为存储器寻址方式,40, 标志寄存器传送指令 标志送AH指令: LAHF 执行操作: (AH) (PSW的低字节) AH送标志寄存器指令: SAHF 执行操作: (PS
23、W的低字节) (AH) 标志进栈指令: PUSHF 执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (PSW) 标志出栈指令: POPF 执行操作: (PSW) (SP)+1, (SP) (SP) (SP) + 2 * 影响标志位,41,3.3.2 算术指令 加法指令 减法指令 乘法指令 除法指令 十进制调整指令,42, 加法指令 加法指令: ADD DST, SRC 执行操作: (DST) (SRC) + (DST) 带进位加法指令: ADC DST, SRC 执行操作: (DST) (SRC) + (DST) + CF 加1指令: INC OPR 执行操作: (O
24、PR) (OPR) + 1,注意: * 除INC指令不影响CF标志外,均对条件标志位 有影响。,43,加法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数相加的溢出。 OF位表示带符号数相加的溢出。,44,n=8bit 带符号数(-128127) 无符号数(0255),45,例:双精度数的加法 (DX)= 0002H (AX)= 0F365H (BX)= 0005H (CX)= 0E024H 指令序列 (1) ADD AX, CX (2) ADC DX, BX (1) 执行后,(AX)= 0D389H CF=1 OF=0 SF=1 ZF=0 (2) 执行后,(DX)= 0
25、008H CF=0 OF=0 SF=0 ZF=0,46, 减法指令 减法指令: SUB DST, SRC 执行操作: (DST) (DST) - (SRC) 带借位减法指令: SBB DST, SRC 执行操作: (DST) (DST) - (SRC) - CF 减1指令: DEC OPR 执行操作: (OPR) (OPR) - 1 求补指令: NEG OPR 执行操作: (OPR) - (OPR) 比较指令: CMP OPR1, OPR2 执行操作: (OPR1) - (OPR2),注意: * 除DEC指令不影响 CF标志外,均对条 件标志位有影响。,47,减法指令对条件标志位(CF/OF/
26、ZF/SF)的影响:,CF位表示无符号数减法的溢出。 OF位表示带符号数减法的溢出。 NEG指令对CF/OF的影响: CF位:操作数为0时,求补的结果使CF=0,否则CF=1。 OF位:字节运算对-128求补或字运算对-32768求补时OF=1, 否则OF=0。,或,48,例:x、y、z均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现 w x+y+24-z ,并用W, W+2单元存放w。 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+2
27、4 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元,49, 乘法指令 无符号数乘法指令: MUL SRC 执行操作:字节操作数 (AX) (AL) * (SRC) 字操作数 (DX, AX) (AX) * (SRC) 带符号数乘法指令: IMUL SRC,注意: * AL(AX)为隐含的乘数寄存器。 * AX(DX,AX)为隐含的乘积寄存器。 * SRC不能为立即数。 * 除CF和OF外,对条件标志位无定义。,50,乘法指令对CF/OF的影响:,例:(AX) = 16A5H,(BX) = 0611H (
28、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=1,51, 除法指令 无符号数除法指令: DIV SRC 执行操作: 字节操作 (AL) (AX) / (SRC) 的商 (AH) (AX) / (SRC) 的余数 字操作 (AX) (DX, AX) / (SRC) 的商 (DX) (DX, AX) / (SRC
29、) 的余数 带符号数除法指令: IDIV SRC 注意: * AX(DX,AX)为隐含的被除数寄存器。 * AL(AX)为隐含的商寄存器。 * AH(DX)为隐含的余数寄存器。 * SRC不能为立即数。 * 对所有条件标志位均无定义。,52,符号扩展指令: CBW AL AX 执行操作: 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= 0FFH CWD AX (DX,AX) 执行操作:若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= 0FFFFH,注意: * 无操作数指令 * 隐含对AL或AX进行符号扩展
30、 * 不影响条件标志位,例:(AX)=0BA45H CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H,53,例:x,y,z,v均为16位带符号数,计算(v-(x*y+z-540)/x MOV AX, X IMUL Y ; x*y MOV CX, AX MOV BX, DX MOV AX, Z CWD ADD CX, AX ADC BX, DX ; x*y+z SUB CX, 540 SBB BX, 0 ; x*y+z-540 MOV AX, V CWD SUB AX, CX SBB DX, BX ; v-(x*y+z-540) IDIV X ; (v
31、-(x*y+z-540)/x,54, 十进制调整指令 BCD码:用二进制编码的十进制数,又称二-十进制数 压缩的BCD码:用4位二进制数表示1位十进制数 例:(59)10 (0101 1001)BCD 非压缩的BCD码:用8位二进制数表示1位十进制数 例:(59)10 (0000 0101 0000 1001)BCD 数字的ASCII码是一种非压缩的BCD码 DIGITASCIIBCD 030H0011 0000 131H0011 0001 232H0011 0010 939H0011 1001,55,例:写出(3590)10的压缩BCD码和非压缩BCD码,并 分别把它们存入数据区PAKED和
32、UNPAK。 压缩BCD:(3590)10(0011 0101 1001 0000)BCD 非压缩BCD: (3590)10(00000011 00000101 00001001 00000000)BCD,56,压缩的BCD码调整指令,加法的十进制调整指令:DAA 执行操作:(AL) (AL)压缩BCD 减法的十进制调整指令:DAS 执行操作:(AL) (AL)压缩BCD,19 压缩BCD: 0001 1001,+ 08 + 0000 1000,27 0010 0001 + 110,(0010 0111)BCD,AF=1,问题的提出:,注意: * 隐含的操作寄存器为AL * 紧接在加减指令之后
33、使用 * 影响条件标志位 (对OF无定义),57,调整方法: AF1或(AL)03AF,则(AL) (AL) 06H,AF1 CF1或(AL)47AF,则(AL) (AL) 60H,CF1 ( DAA做+, DAS做- ) 例:DATA SEGMENT BCD1 DB34H, 18H ; (1834)BCD BCD2 DB89H, 27H ; (2789)BCD BCD3 DB2 DUP (?) DATA ENDS (1) BCD3 BCD1 + BCD2; (4623)BCD (2) BCD3 BCD1 - BCD2 ; (9045)BCD = -955,58,(1)MOV AL, BCD1
34、 ; (AL)=34H ADD AL, BCD2 ; (AL)=34+89=BDH DAA ; (AL)=BD+60+06=23H AF=CF=1 MOV BCD3, AL ; (BCD3)=23H MOV AL, BCD1+1 ; (AL)=18H ADC AL, BCD2+1 ; (AL)=18+27+1=40H AF=1 CF=0 DAA ; (AL)=40+06=46H MOV BCD3+1, AL ; (BCD3+1)=46H (2)MOV AL, BCD1 ; (AL)=34H SUB AL, BCD2 ; (AL)=34-89=ABH DAS ; (AL)=AB-60-06=45
35、H AF=CF=1 MOV BCD3, AL ; (BCD3)=45H MOV AL, BCD1+1 ; (AL)=18H SBB AL, BCD2+1 ; (AL)=18-27-1=F0H DAS ; (AL)=F0-60=90H MOV BCD3+1, AL ; (BCD3+1)=90H,59,非压缩的BCD调整指令 加法调整指令:AAA (AL) (AL)非压缩BCD 减法调整指令:AAS (AL) (AL)非压缩BCD 注意: * 隐含的操作寄存器为AL * 紧接在加减指令之后使用 * 除AF、CF外,对其它条件标志位无定义 调整方法: 若(AL)03=09,且AF=0,则(AL)47
36、 = 0,AF CF0 若(AL)03=AF,或AF=1,则(AL) (AL)6,(AL)470 (AH) (AH)1,AF CF1,( AAA做+, AAS做- ),60,乘法调整指令:AAM (AL) (AX)非压缩BCD 注意: * 隐含的操作寄存器为AL * 紧接在MUL指令之后使用 * 对OF、CF、AF无定义 调整方法: (AL)除以0AH,商 (AH),余数 (AL) 除法调整指令:AAD 被除数(AX) = (0000 xxxx 0000 xxxx)非压缩BCD 除数 = (0000 xxxx)非压缩BCD 在DIV指令之前: (AL)2 0AH (AH)+(AL) (AH)2
37、 0,61,例:(AX)0504H (BL)03H (1) (AL)*(BL) MUL BL ; (AX)=000CH AAM ; (AH)=01H (AL)=02H (2) (AX)/(BL) AAD ; (AH)=00H (AL)=36H DIV BL ; (AH)=00H (AL)=12H AAM ; (AH)=01H (AL)=08H,62,3.3.3 逻辑指令 逻辑运算指令 移位指令,63,逻辑非指令:NOT OPR * OPR不能为立即数 执行操作: (OPR) (OPR) * 不影响标志位 逻辑与指令:AND DST, SRC 执行操作: (DST) (DST) (SRC) 逻辑
38、或指令: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 * * * 无定义,根据运算结果设置,64,例:屏蔽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,* * * * * * * * AND 1 1 1 1 1
39、 1 0 0 * * * * * * 0 0,* * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * *,* * * * * * * * XOR 0 0 0 0 0 0 1 1 * * * * * * * *,65,移位指令: 逻辑左移 SHL OPR, CNT 逻辑右移 SHR OPR, CNT 算术左移 SAL OPR, CNT(同逻辑左移) 算术右移 SAR OPR, CNT,66,循环移位指令: 循环左移 ROL OPR, CNT 循环右移 ROR OPR, CNT 带进位循环左移 RCL OPR, CNT 带进位循环右移 RCR OPR, C
40、NT,67,注意: * OPR可用立即数以外的任何寻址方式 * 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、AF,OF =,68,例:(AX)= 0012H,(BX)= 0034H,把它们装配成(AX)= 1234H MOV CL, 8 ROL AX, CL ADD AX, BX 例:(BX)=84F0H (1
41、) (BX)为无符号数,求(BX)/2 SHR BX, 1 ; (BX) = 4278H (2) (BX)为带符号数,求(BX)/2 SAR BX, 1 ; (BX) = 0C278H (3) 把(BX)中的16位数每4位压入堆栈,0008,0004,000F,0000 (SP),MOV CH, 4 ; 循环次数 MOV CL, 4 ; 移位次数 NEXT: ROL BX, CL MOV AX, BX AND AX, 0FH PUSH AX DEC CH JNZ NEXT,69,3.3.4 串处理指令 串传送指令 存入串指令 从串取指令 串比较指令 串扫描指令,配合使用的前缀有: REP 重复
42、 REPE/REPZ 相等/为零则重复 REPNE/REPNZ 不相等/不为零则重复,70,与REP配合工作的 MOVS / STOS / LODS REP MOVS / STOS / LODS 执行操作:(1) 如(CX)= 0则退出REP,否则转(2) (2) (CX) (CX) -1 (3) 执行MOVS / STOS / LODS (4) 重复(1) (3),71,MOVS 串传送指令 MOVS DST, SRC MOVSB (字节) MOVSW (字) 例:MOVS ES: BYTE PTR DI, DS: SI 执行操作:(1) (DI) (SI) (2) 字节操作:(SI)(SI
43、)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2 方向标志DF=0时用 +,DF=1时用 - 。 REP MOVS:将数据段中的整串数据传送到附加段中。 源串(数据段) 目的串(附加段) 执行REP MOVS之前,应先做好: (1)源串首地址(末地址) SI (2)目的串首地址(末地址) DI (3)串长度 CX (4)建立方向标志(CLD使DF=0,STD使DF=1),72,(SI),低地址,高地址,数据段,附加段,(SI),(DI),(DI),DF=0,DF=1,73,例3.58 datarea segment mess1 db personal_comput
44、er datarea ends extra segment mess2 db 17 dup (?) extra ends code segment lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb code ends,lea si, mess1+16 lea di, mess2+16 mov cx, 17 std rep movsb,74,STOS存入串指令 STOS DST STOSB (字节) STOSW (字) 执行操作: 字节操作:(DI)(AL), (DI)(DI)1 字操作: (DI)(AX), (DI)(DI)2 例:把附加
45、段中的5个字节缓冲区置为20H lea di, mess2 mov al, 20H mov cx, 5 cld rep stosb,75,LODS从串取指令 LODS SRC LODSB (字节) LODSW (字) 执行操作: 字节操作:(AL)(SI), (SI)(SI)1 字操作: (AX)(SI), (SI)(SI)2,注意: * LODS指令一般不与REP联用 * 源串必须在数据段中,目的串必须在附加段中, 但源串允许使用段跨越前缀来修改。 * 不影响条件标志位,76,与REPE/REPZ和REPNE/REPNZ配合工作的CMPS 和SCAS REPE/REPZ (REPNE/REP
46、NZ) CMPS / SCAS 执行操作:(1) 如(CX)=0或ZF=0 (ZF=1)则退出, 否则转(2) (2) (CX)(CX)-1 (3) 执行CMPS / SCAS (4) 重复(1) (3),77,CMPS串比较指令 CMPS SRC, DST CMPSB (字节) CMPSW (字) 执行操作: (1) (SI) - (DI) 根据比较结果设置条件标志位:相等 ZF=1 不等 ZF=0 (2) 字节操作:(SI)(SI)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2,78,SCAS串扫描指令 SCAS DST SCASB (字节) SCASW (字
47、) 执行操作: 字节操作:(AL) - (DI), (DI)(DI)1 字操作: (AX) - (DI), (DI)(DI)2,79,例3.60 从一个字符串中查找一个指定的字符 mess db COMPUTER lea di, mess mov al, T mov cx, 8 cld repne scasb,(DI): 相匹配字符的下一个地址 (CX):剩下还未比较的字符个数,80,例3.61 比较两个字符串,找出它们不相匹配的位置 lea si, mess1 lea di, mess2 mov cx, 8 cld repe cmpsb,例:反向传送,81,3.3.5 控制转移指令 无条件转
48、移指令* 条件转移指令* 循环指令* 子程序调用和返回指令* 中断指令 * 不影响条件标志位,82,无条件转移指令 JMP 段内直接短转移:JMP SHORT OPR 执行操作:(IP)(IP)+8位位移量(-128127) 例: . JMP SHORT HELLO HELLO: MOV AL, 3,83,段内直接近转移:JMP NEAR PTR OPR 执行操作:(IP)(IP)+16位位移量 段内间接转移:JMP WORD PTR OPR 执行操作:(IP)(EA) 段间直接(远)转移:JMP FAR PTR OPR 执行操作:(IP)OPR的段内偏移地址 (CS)OPR所在段的段地址 段
49、间间接转移:JMP DWORD PTR OPR 执行操作:(IP)(EA) (CS)(EA+2),84,条件转移指令,注意:只能使用段内直接寻址的8位位移量(-128127),根据单个条件标志的设置情况转移: 格式 测试条件 JZ(JE) OPR ZF=1 JNZ(JNE) OPR ZF=0 JS OPR SF=1 JNS OPR SF=0 JO OPR OF=1 JNO OPR OF=0 JP OPR PF=1 JNP OPR PF=0 JC OPR CF=1 (JB、JNAE) JNC OPR CF=0 (JNB、JAE),85,比较两个无符号数,并根据比较结果转移:* 格式 测试条件 J
50、NBE(JA) OPR CFZF=0 * 适用于地址或双精度数低位字的比较,86,比较两个带符号数,并根据比较结果转移:* 格式 测试条件 JNLE(JG) OPR (SFOF)ZF=0 * 适用于带符号数的比较 测试CX的值为0则转移: 格式 测试条件 JCXZ OPR (CX)=0,返回,87,例3.64 X50,转到TOO_HIGH; 计算X-Y,溢出转到OVERFLOW,否则 |X-Y|RESULT,MOV AX, X CMP AX, 50 JG TOO_HIGH SUB AX, Y JO OVERFLOW JNS NONNEG NEG AX NONNEG: MOV RESULT, A
51、X TOO_HIGH: OVERFLOW: ,88,例3.65 、是双精度数,分别存于DX,AX及BX,CX中, 时转X,否则转Y。,CMP DX, BX JG X JL Y CMP AX, CX JA X Y: . X: .,89,循环指令 注意:* CX中存放循环次数 * 只能使用段内直接寻址的8位位移量(-128127) LOOP LOOPZ / LOOPE LOOPNZ / LOOPNE 执行步骤: (1) (CX)(CX) -1 (2) 检查是否满足测试条件,如满足则 (IP)(IP)+8位位移量,实行循环; 不满足则IP不变,退出循环。,90,循环指令:LOOP OPR 测试条件:(CX) 0 为零或相等时循环指令:LOOPZ(LOOPE) OPR 测试条件:ZF=1且(CX) 0 不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR 测试条件:ZF=0且(CX) 0,91,例3.67 求首地址为ARRAY的M个字之和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- MT/T 1303-2025连续采煤机使用与管理规范
- GB/T 9996.1-2026棉及化纤纯纺、混纺纱线外观质量黑板检验方法第1部分:综合评定法
- 初中英语九年级上册Module 2 Public Holidays Unit 3 Language in Use综合语用·文化比较课教学设计
- 小学六年级数学《分数乘整数:从计数单位到运算一致性》教学设计
- 初中物理九年级上册《分子动理论与内能》单元整体教学设计
- 初中二年级物理(沪粤版)《走进物理世界》单元整体教学设计
- 小学语文二年级《雪被子》教学设计
- 2025-2026学年上海市黄浦区格致中学高二(下)期末数学试卷(含答案)
- 2026空中交警面试题及答案
- 2026普外科应聘面试题及答案
- 成都四九和美2025小升初入学分班考试数学考试试题及答案
- 新教材人教版高中地理选择性必修1全册学案讲义-知识点及配套习题
- 中层管理能力提升2026年培训课件
- 2026年黑龙江基层法律服务工作者考试试题(含答案)
- 2025春人教版七年级英语下册单词默写练习
- 食品安全应急演练培训
- 福建省招标采购集团公司招聘笔试题库2026
- 少儿篮球教练员培训课件
- 学生兼职模板合同范本
- 2025年泰安法院书记员招聘考试真题及答案
- 各类消防器材的使用方法
评论
0/150
提交评论