




已阅读5页,还剩154页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第3章 8086/8088指令系统,2,第3章 节 目 录,3.1 概述3.2 寻址方式3.3 8086/8088指令系统,章,3,部分8086/8088常用指令,4,3.23.33.53.63.73.93.113.123.15,作业:p146,章,5,3.1 概述,指令控制计算机完成指定操作的命令机器指令指令的二进制代码形式。例如:CD21H汇编指令助记符形式的指令。例如:INT 21H指令系统CPU所有指令及其使用规则的集合,8088/8086指令系统:(1)指令向后兼容(x86系列)(2)应用广泛,资料易于寻找,6,code segment assume cs:codestart: mov bx,0a9b6h mov ch,4 mov cl,4p3: rol bx,cl mov dl,bl and dl,0fh cmp dl,09h jle p1 add dl,37h jmp short p2,p1: add dl,30hp2: mov ah,2 int 21h dec ch jnz p3 mov dl,H mov ah,2 int 21h mov ah,4ch int 21hcode endsend start,BB B6 A9 B5 04 B1 04 D3 C3 8A D3 80 E2 0F 80 FA 09 7E 05 80 C2 37 EB 03。 CD 21,在计算机存储器中的保存形式,7,指令按功能分为六大类(92种),(1)数据传送类;(2)数据操作类: a、算术运算类; b、逻辑运算和移位;(4)串操作类;(5)控制转移类;(6)处理机控制指令类。,8,3.1.1 指令的基本构成,操作码,操作数,,操作数,要执行的是什么操作,操作对象(0、1或2个),目的,源,INC BX ;1个操作数,HLT ;无操作数,9,部分常用指令,10,8088/8086的操作数分为3类,1、立即数(常数),立即数只能用作源操作数,如,MOV AX,0FA00H;正确MOV 8000H,DX;错误,11,2、寄存器操作数,放在8个通用寄存器或4个段寄存器中的操作数,12,只能存放字操作数,段寄存器存放当前操作数的段基地址,不允许将立即数传送到段寄存器!,SI,DI,BP,SP,CS,DS,ES,SS,13,MOV AX , BX ;数据传送,寄存器操作数,MOV DS, 0FF00H,MOV AX, 0FF00HMOV DS,AX,14,3、存储器操作数,存储器操作数,字节字双字,124,类型,存储单元个数,一般不允许两个操作数同时为存储器操作数!,15,存储单元的物理地址 = 段基地址*16 + 偏移地址,若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。,16,MOV AX , BX ;默认DS与BX,MOV AX , ES:BX ;指定ES与 BX,8086/8088的3类操作数比较,MOV AX , BX,MOV AX , 1234H ,MOV AX , 1234H,在立即数、寄存器、存储器3种操作数中,寄存器操作数的指令执行最快,立即数次之,存储器操作数的指令执行最慢。,17,23001A 80 C2 37 add dl,37h ;4T 24001D EB 03 jmp short p2 ;15T 25001F 80 C2 30 p1: add dl,30h ;4T 260022 B4 02 p2: mov ah,2 ;4T 270024 CD 21 int 21h ; 28 290026 FE CD dec ch 300028 75 E4 jnz p3 31 32002A B4 4C mov ah,4ch 33002C CD 21 int 21h 34 35002E CB ret,8088/8086的指令长度在17个字节之间。,第1个字节通常为操作码。执行时间为数个周期。,举例:某程序片段的指令、代码、执行时间,18,一条指令的执行时间=,3.1.2 指令的执行时间,取指令取操作数执行指令传送结果,单位:时钟周期数,附录E 常用指令执行时间,结论: 1)尽量使用寄存器作为操作数 2)若有可能,用移位代替乘除法 3)尽量使用简单的寻址方式,19,3.1.3 CISC和RISC指令系统,、复杂指令集计算机(CISC),通过不断增加可实现复杂功能的指令和多种灵活的编址方式, 被称为复杂指令集计算机(Complex Instruction Set Computer-CISC)结构。,缺点:(1)各种指令的使用率相差悬殊:一个典型程序的运算过程所使用的80指令,只占一个处理器指令系统的20。,(2)复杂的指令系统必然带来结构的复杂性,这不但增加了设计的时间与成本还容易造成设计失误。,20,指令系统只包含那些使用频率很高的少量指令,并提供一些必要的指令以支持操作系统和高级语言。称为精简指令集计算机(Reduced Instruction Set Computer-RISC)结构,简称RISC 。,RISC计算机结构被应用在许多服务器与专用芯片中。,目前CISC与RISC正在逐步走向融合,下一代的CPU将融合CISC与RISC两种技术,从软件与硬件方面看二者会取长补短。,2、精简指令集计算机(RISC),节,21,寻找操作数的地址(一般指源操作数) 寻找要执行的下一条指令的地址 在8086指令系统中,操作数的寻址方式分为8种:,3.2 8086的寻址方式, 立即寻址 寄存器相对寻址 直接寻址 基址-变址寻址 寄存器寻址 相对的基址-变址寻址 寄存器间接寻址 隐含寻址,22,操作数(为一常数)直接由指令给出(立即数) 立即寻址只能用于源操作数,3.1.2 立即寻址,例: MOV AX, 1C8FH MOV BYTE PTR2A00H, 8FH 错误例: MOV 2A00H, AX ; 错误!,若立即数开头为字符(A、B、C、D、E、F),需在前面加0,例如:MOV AX, 0F123H,23,指令操作例:MOV AX,3102H ; AX 3102H 执行后,(AH) = 31H,(AL) = 02H,24,3.2.2 直接寻址,指令中直接给出操作数的16位偏移地址 偏移地址也称为有效地址(EA, Effective Address),默认的段寄存器为DS,但也可以显式地指定其他段寄存器称为段超越前缀,偏移地址也可用符号地址来表示,如ADDR、VAR 例:MOV AX , 2A00H MOV DX , ES: 2A00H MOV SI , TABLE_PTR,25,指令操作例:MOV AX,3012H,如果(DS)=2000H, (23012H)=CDH, (23013H)= ABH则操作数的物理地址为: 20000H+3012H = 23012H,指令执行后:(AX) = ABCDH,26,3.2.3 寄存器寻址,操作数放在某个寄存器中 源操作数与目的操作数字长要相同 寄存器寻址与段基址无关,例: MOV AX, BX MOV 3F00H, AX MOV CL, AL 错误例: MOV AX, BL ; 字长不同MOV ES: AX, DX ; 寄存器与段无关,27,AX,SI,2233H,2233H,指令操作例:MOV SI,AX ; SI (AX) 指令执行前:(AX)=2233H,2233H,指令执行后:(AX)=2233H,(SI)=2233H,28,3.2.4 寄存器间接寻址,操作数的偏移地址(有效地址EA)放在寄存器中 只有SI、DI、BX和BP可作间址寄存器,例: MOV AX, BXMOV CL, DI错误例 :MOV AX, DXMOV CL, AX,29,指令操作例:MOV AX,SI。(DS)=6000H, (SI)=1200H, (61200H)=44H, (61201H)=33H,指令执行后,(AX)=3344H。,30,3.2.5 寄存器相对寻址,EA=间址寄存器的内容加上一个8/16位的位移量,寄存器相对寻址常用于存取表格或一维数组中的元素把表格的起始地址作为位移量,元素的下标值放在间址寄存器中(或反之),31,例: MOV AX, BX+8 MOV CX, TABLESI MOV AX, BP+200 ; 默认段寄存器为SS,指令操作例:MOV AX,DATABX 若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A01H)=55H 则物理地址 = 60000H + 1000H + 2A00H = 63A00H 指令执行后:(AX)=5566H,TABLE、DATA为符号地址。,32,操作码,00 偏移量低,2A 偏移量高,DS 6000,BX 1000,+ DATA 2A00,63A00,63A00H,AH,AL,AX,代码段,数据段,.,.,.,66H,55H,MOV AX,DATABX,33,MOV CX, TABLESI,MOV CX, SI TABLE,MOV CX, SI +TABLE,MOV CX, TABLE+ SI ,MOV CX, SI +TABLE,MOV CX, TABLE + SI,下面写法等价:,34,3.2.6 基址-变址寻址,若操作数的偏移地址: 由基址寄存器(BX或BP)给出 基址寻址方式 由变址寄存器(SI或DI)给出 变址寻址方式,由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。,同一组内的寄存器不能同时出现。,35,例: MOV AX, BX SI MOV AX, BX+SI MOV AX, DS: BP DI,错误例: MOV AX, BX BP MOV AX, DI SI,使用相对的基址-变址寻址方式时,只要有BP寄存器,则段寄存器默认为SS。,36,指令操作例:MOV AX,BXSI假定:(DS)=8000H, (BX)=2000H, (SI)=1000H,指令执行后: (AL)=83000H (AH)=83001H,37,3.2.7 相对的基址-变址寻址,在基址-变址寻址的基础上再加上一个相对位移量 注意事项同基址-变址寻址,例:,MOV AX,BASE SI BXMOV AX,BX+BASE SIMOV AX,BX+SI+BASEMOV AX,BX BASE SIMOV AX,BX+SI BASE,38,指令操作例:MOV AX,DATADIBX若(DS)=8000H, (BX)=2000H, (DI)=1000H, DATA=200H则指令执行后(AH)=83021H, (AL)=83020H,39,3.2.8 隐含寻址,指令操作数在指令中未显式地指明。 例:MUL BL (AL)(BL)AX 指令隐含了被乘数AL及乘积AX 类似的指令还有:DIV、CBW、MOVS等,40,41,42,5、寄存器相对寻址 MOV AX,BX+200H,43,寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较: 寻址方式 指令操作数形式 寄存器间接 只有一个寄存器(BX/BP/SI/DI之一); 寄存器相对 一个寄存器加上位移量; 基址变址 两个不同类别的寄存器; 相对基址-变址 两个不同类别的寄存器加上位移量。,节,44,44,3.3 8086/8088指令系统,可分成如下6类: 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 程序控制指令 处理器控制指令,45,45,mem 存储器操作数 acc 累加器操作数 dest 目标操作数 src 源操作数 disp 8位或16位偏移量,可用符号地址表示 DATA 8位或16位数据 port 输入输出端口 ( ) 表示寄存器的内容 表示存储器的内容或偏移地址,指令介绍中采用符号的含义,46,第3.3节 小节 目 录,3.3.1 数据传送指令3.3.2 算术运算指令3.3.3 逻辑运算和移位指令3.3.4 串操作指令3.3.5 程序控制指令3.3.6 处理机控制指令,节,47,47,3.3.1 数据传送指令,可实现 存储器 寄存器 I/O,数据传送指令又可分为如下四种:通用数据传送指令输入输出指令取偏移地址指令其他传送指令,48,48,一、通用数据传送指令,最基本的传送指令(MOV) 堆栈操作指令(PUSH, POP)数据交换指令(XCHG) 查表换码指令(XLAT),标志:所有通用传送指令都不影响标志位。,49,(1) 最基本的传送指令MOV,指令格式:MOV dst, src; 操作:dest src,例: MOV AL, BL; MOV DI, AX; MOV CX, 1000H; MOV BL, 40 MOV WORD PTRSI, 01H;,WORD PTR 字长度标记 BYTE PTR 字节长度标记 DWORD PTR 双字长度标记 (伪指令),50,MOV指令使用规则:,1) IP不能作目的寄存器;2) 不允许 mem2 mem1(存储器);3) 不允许 segreg segreg(段寄存器);4) 立即数不允许作为目的操作数;5) 不允许 segreg 立即数;6) 源操作数与目的操作数类型要一致。,51,几种不允许传送的解决办法:用寄存器如AX作桥梁。存储器存储器:MOV AX,MEM1MOV MEM2,AX段寄存器段寄存器:MOV AX,DSMOV ES,AX段寄存器立即数:MOV AX,DATAMOV DS,AX,MOV AX , 100MOV AX , 100H的区别?,52,什么是堆栈? 按“后进先出(LIFO/FILO)”方式工作的存储区域。堆栈以字为单位进行压入/弹出操作。,(2) 堆栈操作指令,为什么要设置堆栈? 为什么要按 “后进先出”方式工作?,53,54,由SS指示堆栈段的段基址; 堆栈指针SP始终指向堆栈的顶部; SP的初值规定了所用堆栈区的大小; 堆栈的最高地址叫栈底。,55, 压栈指令 PUSH src ; src为16位操作数,PUSH reg ; PUSH mem/reg PUSH segreg例如: PUSH AX; PUSH BX; PUSH DS ;,PUSH AX;将AX内容压栈 执行操作: (SP)-1高字节(AH) (SP)-2低字节(AL) (SP) (SP) - 2,56,设(AX)=1020H,PUSH AX指令执行示意图,57, 弹出指令 POPdest,例:POPBX;将栈顶内容弹至BX 执行操作:(BL) SP (BH) (SP)+ 1 (SP) (SP) + 2,58,POP BX 的执行示意图,59,PUSH 1020HPUSH 3040HPOP AXPOP BX,低地址,存储区,20,10,高地址,AX,40,30,BX,栈底,PUSH AXPUSH BXPOP BXPOP AX,60,堆栈指令使用时应注意几点: 堆栈操作总是按字进行; 不能从栈顶弹出一个字给CS; 堆栈指针为SS:SP,SP永远指向栈顶; SP自动进行增减量(-2,+2)。,61,格式:XCHG reg,mem/reg功能:交换两操作数的内容。 要求:两操作数中必须至少有一个在寄存器中; 操作数不能为段寄存器和立即数; 源和目地操作数类型要一致。,(3)交换指令XCHG,举例: XCHG AX,BX XCHG 2000,CL,62,(4)查表换码指令XLAT,执行的操作:AL(BX)+(AL) 又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。,63,例:内存数据段有一张16进制数的ASCII码表,设其首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。,64,则可用如下几条指令实现:,MOV BX,2000H ;(BX)表首地址MOV AL,0BH ;(AL)序号XLAT ; 查表转换 ; AL(BX)+(AL)执行后得到:(AL)= 42H = B,注意:转换表长度最大为256个表项(1字节)。,65,二、 输入输出(I/O)指令,只限于用累加器AL或AX来传送信息。功能: (累加器)I/O端口,例: IN AL,80H ;(AL)(80H端口) IN AL,DX ;(AL)(DX) IN AX,DX ; (AL)(DX),(AH)(DX+1),(1)输入指令IN格式: IN acc, port ;port端口号0255H IN acc, DX;DX表示的端口范围达64K,66,例:OUT 68H,AX ;(68H)(AL) ;(69H)(AH) OUT DX,AL ;(DX)(AL),(2) 输出指令OUT格式:OUT port, acc OUT DX, acc,在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如: MOV DX,220H IN AL,DX ;将220H端口内容读入AL,67,三、取偏移地址指令,用途:用于传送操作数的偏移地址 传送偏移地址:LEA reg,mem ;将指定内存单元的偏移地址送到指定寄存器,要求: 1) 源操作数必须是一个存储器操作数; 2) 目的操作数必须是一个16位的通用寄存器。,设:(SI)=1000H则执行该指令后,(BX)=1010H,例:LEABX,SI+10H,68,注意以下指令差别: LEA BX,2000H ;将存储单元的偏移地址取到 BX MOV BX, 2000H ;将存储单元中的内容取到 BX,BX,低地址,存储区,高地址,BX,40,30,42000H,42001H,(DS) = 4000H,执行LEA指令时,执行MOV指令时,69,其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。二者都可用于取存储器单元的偏移地址。,下面两条指令等效: LEA BX,BUFFER MOV BX, OFFSET BUFFER,70,四、其他传送指令,字位扩展指令: CBW、 CWD 远地址传送指令: LDS REG , mem32; (LES) 标志位传送指令: 读标志指令:LAHF 设置标志指令:SAHF 把标志寄存器推入栈顶指令:PUSHF 从栈顶弹出标志寄存器指令:POPF,小节,71,(1) 不带进位的加法指令ADD 格式: ADD acc, data ADD mem/reg, data ADD mem/reg1, mem/reg2 实例: ADD AL,30H ADD SI,BX+20H ADD CX,SI ADD DI,200H,(一) 加法指令,3.3.2 算术运算指令,72,ADD指令对6个状态标志均产生影响。 例:已知(BX)=E75FH,指令 ADD BX, 8046H 执行后,状态标志各是多少? E75FH = 1 1 1 0 0 1 1 1 0 1 0 1 1 1 1 1 8046H = 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0 1 0 0 1 0 1,结果:CF=1, ZF=0, PF=1, AF=1, OF=1, SF=0,PF:低8位中1的个数是否为偶数!,73,(2) 带进位位的加法指令ADC,ADC指令在形式上和功能上与ADD类似,只是相加时还要包括进位标志CF的内容,例如: ADC AL,68H ;AL(AL)+68H+(CF) ADC AX,CX ;AX(AX)+(CX)+(CF) ADC BX,DI ; BX(BX)+DI+1DI+(CF),74,例:有两个4字节的无符号数相加: 2C56F8ACH + 309E47BEH=? 设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区。(见下页图) 因CPU只能进行8位或16位的加法运算,为此可将两数分成低字和高字分别相加。,ADC指令用于多字节加法运算中,75,56H,2CH,BEH,47H,BUFFER1,BUFFER2,ACH,F8H,9EH,30H,被加数,加数,数据段,多字节加法示意图,.,.,程序段如下: CLC ;清除进位位 MOV AX,BUFFER2 ADD BUFFER1,AX ;低字相加 MOV AX,BUFFER2+2 ADC BUFFER1+2,AX ;高字相加,包括低字的进位,76,ADD/ADC对条件标志位的影响:,CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。,77,格式:INC reg/mem功能:类似于C语言中的+操作:对指定的操作数加1。,(3) 加1指令INC(单操作数指令),例: INC AL INC SI INC BYTE PTRBX+4注:本指令不影响CF标志。,78,(1) 不带借位的减法指令SUB 格式: SUB dest, src 操作: dest(dest)-(src)注:1.源和目的操作数不能同时为存储器操作数 2.立即数不能作为目的操作数,(二)减法指令,例: SUB AL,60H SUB BX+20H,DX SUB AX,CX,79,SBB指令主要用于多字节的减法。格式: SBB dest, src操作: dest(dest)-(src)-(CF)例: SBB AX,CX SBB WORD PTRSI,2080H SBB SI,DX,(2) 带借位的减法指令SBB,80,作用类似于C语言中的”操作符。格式:DEC opr 操作:opr(opr)-1例: DEC CL DEC BYTE PTRDI+2 DEC SI,(3) 减量指令DEC,81,格式: NEG opr ;补码表示的带符号数操作: opr 0-(opr),(4) 求补(负)指令NEG,对一个操作数取补码相当于用0减去此操作数,故利用NEG指令可得到负数的绝对值。例:若(AL)=0FCH( -4的补码),则执行 NEG AL, (AL)=04H,CF=1。 即得到4(-4的绝对值)。,82,SUB/SBB对标志位(CF/OF/ZF/SF)的影响,NEG指令对CF/OF的影响: CF:操作数为0时,求补的结果使CF=0;否则CF=1。 OF:字节运算对-128求补或字运算对-32768求补时OF=1; 否则OF=0。,CF=1表示无符号数减法溢出。OF=1表示带符号数减法溢出。,83,格式: CMP dest, src操作: (dest)-(src)CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。例: CMP AL,0AH CMP CX,SI CMP DI,BX+03,(5) 比较指令CMP,84,根据标志位来判断比较的结果,2) 若两个数不相等,则分两种情况考虑:比较的是两个无符号数 若CF=0,则destsrc;若CF=1,则destsrc。 比较的是两个有符号数若OFSF=0,则destsrc;若OFSF=1,则destsrc。,1) 根据ZF判断两个数是否相等。若ZF=1,则两数相等。,85,比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向。举例:比较AL、BL、CL中带符号数的大小,将 最小数放在AL中。,程序: CMP AL,BL ;AL和BL比较 JNG BBB ;若ALBL,则转 XCHG AL,BL ;若ALBL,则交换 BBB: CMP AL,CL ;AL和CL比较 JNG CCC ;若ALCL,则转 XCHG AL,CL ;若ALCL,则交换 CCC: HLT,86,进行乘法时:8位 8位16位乘积 16位 16位32位乘积(1) 无符号数的乘法指令MUL(mem/reg)格式: MUL src;src的长度确定乘法类型操作:字节操作数 (AX) (AL) (src) 字操作数 (DX, AX) (AX) (src)指令例子: MUL BL ;(AL)(BL),乘积在AX中 MUL CX ;(AX)(CX),乘积在DX,AX中 MUL BYTE PTRBX,(三) 乘法指令,87,乘法指令对CF/OF的影响:,例:(AL) = A5H,(BL) = 11H (1) MUL BL ; (AX) (AL)(BL) ; A511= 0AF5 ; (AX) = 0AF5H CF=OF=1,88,(四) 除法指令,进行除法时:16位/8位8位商 32位/16位16位商,89,指令例子: DIV CL DIV WORD PTRBX,(1) 无符号数除法指令DIV,格式: DIV src; src的长度确定除法类型操作:字节操作 (AL) (AX) / (SRC) 的商 (AH) (AX) / (SRC) 的余数,字操作 (AX) (DX, AX) / (SRC) 的商 (DX) (DX, AX) / (SRC) 的余数,注:若除数为零或AL中商大于FFH,(或AX中商大于FFFFH),则CPU产生一个类型0的内部中断。,90,除法运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展,否则产生错误。对于无符号数除法扩展,只需将AH或DX清零即可。,关于除法操作中的字长扩展问题,例: 84H75H。,MOV AL,84HMOV BL,75HMOV AH,0 ; 清AH为0DIV BL ; 0084H75H,结果为 ; (AH)=0FH(余数), (AL)=01H(商),91,(五)其他算术运算指令,有符号数的乘除运算指令:IMULIDIV BCD码调整指令加:AAA,DAA减:AAS,DAS乘:AAM除:AAD,小节,92,3.3.3 逻辑运算和位移指令,(一)逻辑运算指令 运算规则:按位操作,无进/借位 对标志位的影响(除NOT指令外):,93,(1) 逻辑”与” AND,对两个操作数进行按位逻辑“与”操作。格式:AND dest, src用途:保留操作数的某几位,清零其他位。,例1:保留AL中低4位,高4位清0。 AND AL, 0FH例2:AL中有字符az, 将其转换成大写。 AND AL, 01011111B ;,94,例3:测试AL的bit7, bit5, bit2是否都是1。,AND AL, 10100100BCMP AL, 10100100B JZ YES ;不全为1时的处理YES:,95,对两个操作数进行按位逻辑”或”操作。格式:OR dest, src用途:对操作数的某几位置1; 对两操作数进行组合。,(2) 逻辑”或” OR,例:把AL的第5位置为1 OR AL, 00100000B,96,对操作数进行按位逻辑”非”操作。格式:NOT mem/reg例:NOT CX NOT BYTE PTRDI,(3) 逻辑“非”(取反) NOT,97,例1:把AX寄存器清零。 例2:把DH的bit4,3变反 XOR AX, AX XOR DH,18H MOV AX, 0 AND AX, 0 SUB AX, AX,(4) 逻辑”异或” XOR,对两个操作数按位进行”异或”操作。格式:XOR dest, src用途:对reg清零(自身异或) 把reg/mem的某几位变反(与1异或),98,操作与AND指令类似,但不将”与”的结果送回,只影响标志位。TEST指令常用于位测试,与条件转移指令一起用。,(5) 测试指令TEST,例:测试AL的内容是否为负数。 TEST AL, 80H ;检查AL中D7=1? JNZ MINUS ;是1(负数),转MINUS ;否则为正数MINUS: ,99,(二)移位指令,(1)非循环移位指令 算术左移指令 SAL(Shift Arithmetic Left) 算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Left) 逻辑右移指令 SHR(Shift Right)这4条指令的格式相同,以SAL为例:,100,移位指令执行的操作如下图所示:,非循环移位指令功能示意图,101,算术移位把操作数看做有符号数; 逻辑移位把操作数看做无符号数。移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中。例如: MOV CL, 4 SHR AL, CL ;AL中的内容右移4位 影响C, P, S, Z, O标志。 结果未溢出时: 左移1位操作数2 右移1位操作数 / 2,102,例:把AL中的数x乘10因为10=8+2=23+21,所以可用移位实现乘10操作。,SAL AL, 1 ; 2xMOV BL, AL MOV CL, 2 SAL AL, CL ; 8x ADD AL, BL,SAL AL, 1 ; 2xMOV BL, AL SAL AL, 1 ; 4xSAL AL, 1 ; 8xADD AL, BL ; 8x+2x = 10x,并不是所有的除法都可用移位实现!,103,格式同非循环移位指令。 移位位数放在CL寄存器中,如果只移1位, 也可以直接写在指令中。 循环移位指令只影响标志位CF和OF。,(2)循环移位指令,不含进位位的循环左移指令 ROL 不含进位位的循环右移指令 ROR 含进位位的循环左移指令 RCL 含进位位的循环右移指令 RCR,104,这4条指令的功能如下图示:,最低位,最高位,CF,(a) ROL,最低位,最高位,CF,(c) RCL,最低位,最高位,CF,(b) ROR,最低位,最高位,CF,(d) RCR,循环移位指令功能示意图,105,循环移位举例:,例1:将AL的高4位与低4位互换。 MOV CL, 4 ROL AL, CL,小节,106,3.3.4 串操作指令,串:顺序放在内存中的一组相同类型的数据。串操作:对串中的元素进行相同的操作。串操作的寻址方式:源操作数指针DS:SI(DS可超越)目的操作数指针ES:DI每次串操作后:串操作指令自动修改SI和DI字节:1,字:2。DF标志决定。注意:退出串操作后,指针指向最后操作的元素的下一个元素。,107,可完成存储单元到存储单元的传送、比较(也仅是串指令可以) 有的串操作指令前面可加重复前缀。当使用重复前缀时,操作重复次数由CX决定(CX自动减量)。该指令重复执行,直至(CX)=0为止。 执行串指令之前,应先进行如下设置: 源串首地址(末地址) SI 目的串首地址(末地址) DI 串长度 CX 建立方向标志(CLD使DF=0(增),STD使DF=1 (减) ),108,重复前缀,REP ;无条件重复REPE/REPZ ;当相等/为零时重复REPNE/REPNZ ;当不相等/不为零时重复,109,指令执行的操作为:MOVSB ; (ES):(DI)(DS):(SI) SI1, DI1 MOVSW ; (ES):(DI+1)(DI)(DS):(SI+1)(SI) SI2, DI2,1、串传送指令MOVSB / MOVSW,注意: src用DS:SI寻址, dest用ES:DI寻址,110,写指令的操作为: 对字节:(ES):(DI)(AL) DI1 对字:(ES):(DI+1)(DI)(AX) DI2,2、串存储指令STOSB / STOSW,本指令用于把一块存储区域填充成某一 初始值(即对存储区进行初始化)。,111,例1:把从A000H开始的2KB内存单元清零。程序段如下:,MOV AX, 0 MOV CX, 1024 MOV DI, 0A000H CLD REP STOSW,112,例2:把1000H开始的100个存储单元填入 ASCII码2AH(*)。,程序段如下: MOV DI, 1000H ; 首地址 MOV AL, 2AH ; * MOV CX, 100 ; 重复执行100次 CLD ; 增量修改DI REPSTOSB,113,执行的操作为: 对字节:(AL)(DS):(SI) SI1 对字:(AX)(DS):(SI+1)(SI) SI2,3、串读取指令LODSB / LODSW,串读取指令通常不加重复前缀。LODSB等价于: LODSW等价于: MOV AL,SI MOV AX,SI INC SI INC SI INC SI,114,4、串比较指令CMPSB / CMPSW,指令执行的操作为:CMPSB ;(DS):(SI)-(ES):(DI) SI1, DI1 CMPSW ;(DS):(SI+1)(SI)-(ES):(DI+1)(DI) SI2, DI2,比较的结果只反映在标志位上,串本身无变化。本指令可用来检查两个串是否相等。与重复前缀REPZ/REPE、REPNZ/REPNE结合使用。,115,5、串扫描SCASB / SCASW,搜索指令执行的仍是比较(减法)操作,结果只影响标志位。要搜索的关键字放在AL(字节)或AX(字)中。本指令用于在串中查找指定的信息。与重复前缀REPZ/REPE、REPNZ/REPNE结合使用。,执行的操作: 对字节:(AL)(ES):(DI) DI1 对字: (AX)(ES):(DI1)(DI) DI2,116,SCAS指令加上重复前缀后,可对串进行连续扫描比较: 若前缀为REPZ,则表示比较结果相等(ZF=1)且串未结束(CX0),则继续比较。 若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0),就继续比较。,117,例:在ES段的偏移1000H处开始存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。(见右图)在屏幕上显示一个字符的指令段如下: MOV DL, MOV AH,2 INT 21H 实现题目要求的程序段见下页:,118,MOV DI,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025除尘器配套设备采购合同范本
- 常州期末考试化学试题及答案
- 2025高考英语试题分类汇编:动词的时态、语态、情态动词、虚拟语气含解析
- 常德初三历史中考试卷及答案
- 2025简易货物运输合同范本
- 现代汉语语汇题目及答案
- 2025年高考化学试题分类汇编:物质结构与性质晶胞的分析与计算(含解析)
- 葡萄沟课件教学课件
- 2025购销合同终止协议示范文本
- 2025年3月生物技术习题库+答案
- 酒店开业客房筹备倒计时模板
- 2024中国保险发展报告-中南大风险管理研究中心.燕道数科
- 会计基础(中职)教学教案教学案例
- ASTM 标准中文版 A和B系列2021
- GB/T 43681-2024生态系统评估区域生态系统调查方法
- 大学英语3词汇表
- 公共政策导论全套教学课件
- 饮料风味稳定性与感官评价
- 充电宝市场调研报告
- 后端开发入门课件
- 高职应用写作课件
评论
0/150
提交评论