《CH338086的指令系统》由会员分享,可在线阅读,更多相关《CH338086的指令系统(40页珍藏版)》请在金锄头文库上搜索。
1、CH3(3)-8086CH3(3)-8086的指令系统的指令系统2第三章实质 改变IP(或IP和CS)的值,以改变指令的执行顺序。所有转移指令不会影响标志位。所有转移指令不会影响标志位。类型无条件转移和过程调用指令条件转移指令循环控制指令中断指令(自学)四、控制转移指令3第三章无条件转移和过程调用指令JMPCALLRET无条件转移过程调用过程返回条件转移JZ / JE (10条)JA / JNBE (8条)直接标志转移间接标志转移条件循环控制LOOPLOOPE / LOOPZLOOPNE / LOOPNZJCXZCX0 则循环CX0和ZF=1 则循环CX0和ZF=0 则循环CX=0 则转移中
2、断INTINTOIRET中断溢出中断中断返回掌握转移条件转向位置简单应用4第三章格式:JMP目的功能:无条件转移到目的地址分类:根据转移的距离和寻址方式的不同分为4类。段内直接转移段内间接转移段间直接转移段间间接转移1、无条件转移指令5第三章 段内直接转移特点:直接给出转移地址例如:JMP 0100H ;IP0100H JMP SHORT NEXT ;NEXT为标号,符号地址 JMP NEXT 段内间接转移特点:以寄存器或内存单元给出转移地址例如:JMP BX ;IP BX JMP WORD PTR BX ;IP 字内存单元的内容6第三章 段间直接转移特点:转向另一代码段的标号处格式:JMP
3、FAR PTR 标号实质:IP 远标号的偏移地址 CS 远标号的段地址 段间间接转移特点:转向双字内存单元所给定的地址格式:JMP DWORD PTR BX实质:IP 低字内容 CS 高字内容7第三章无条件转移指令 JMP简单应用:一般目的地址采用标号直接给出。例如: JMP ABC ABC:MOV AL,BL 8第三章例:已知:BX=0100H,DS=2000H,CS=0200H,(20100H)=1234H,(20102H)=5678H,标号PROC的地址为:3000H:0300H。求下列转移指令的转向位置(即执行后CS和IP值)。JMP 0700HJMP BXJMP WORD PTR B
4、XJMP DWORD PTR BXJMP FAR PTR PROC; IP=0700H,CS=0200H; IP=0100H,CS=0200H; IP=1234H,CS=0200H; IP=1234H,CS=5678H; IP=0300H,CS=3000H9第三章过程(也称子程序) 可供其它程序调用的公用程序;能完成特定功能而又经常用到的独立的程序模块。特点过程调用时,IP(或IP和CS)的内容入栈。从过程返回时,栈顶的内容被弹出到IP(或IP和CS)。一次定义,多次调用;两条相关指令:过程调用指令 CALL过程返回指令 RET2、过程调用及返回指令10第三章 CALL 过程调用指令段内直接调
5、用 例:CALL NEAR 目标地址段内间接调用例:CALL WORD PTR SI 段间直接调用 例:CALL FAR 目标地址 段间间接调用 例:CALL DWORD PTR SI应用时:CALL 过程名与JMP的不同:CPU会自动保存断点11第三章 RET 过程返回指令格式:RET功能:与CALL指令相对应,通常作为一个子程序的最后一条指令,执行时从栈中弹出返回地址,即:栈顶的内容被弹出到IP(或IP和CS),用以返回到调用这个子程序的断点处。12第三章格式:条件操作符(JXX) 标号功能:条件成立则程序转至标号处执行;常用于比较指令或算术逻辑运算指令之后,以状态标志作为判别测试条件。应
6、用:实现程序的条件分支。条件转移指令共有18条,可以为两类:直接标志转移指令间接标志转移指令3、条件转移指令13第三章 直接标志转移指令特点:根据单个状态标志位的值决定是否转移。JC ;CF=1,即有进位或借位则转移JNC ;CF=0,没有进位或借位则转移JZ/JE ;结果为零(ZF=1),则转移JNZ/JNE ;结果不为零(ZF=0),则转移JS ;SF=1,即,符号位为负则转移JNS ;SF=0,符号位为正则转移JO、JNO、JP/JPE 、JNP/JPO14第三章例1: ADD AL,BL JC NEXT MOV AH,0 JMP EXITNEXT: MOV AH,1EXIT: 功能:
7、AL+BL,有进位则AH置1;否则,AH清015第三章例2: BUF DB 100 DUP(?) MOV BX,OFFSET BUF MOV CL,64H LP: MOV BYTE PTRBX,0 INC BX DEC CL JNZ LP功能:将BUF单元开始的100个存储单元全部清0。16第三章 间接标志转移指令 特点:常放在CMP之后,用来判断两个数的大小。 u 判断无符号数的大小JA ;高于则转移JAE ;高于等于则转移JB ;低于则转移JBE ;低于等于则转移u 判断有符号数的大小JG ;大于则转移JGE ;大于等于则转移JL ;小于则转移JLE ;小于等于则转移17第三章例1: CM
8、P AL,60 JB FAILCMP AL,85 JAE GOOD MOV AL,P JMP PRINT FAIL:MOV AL,F JMP PRINT GOOD:MOV AL,G PRINT:程序功能:判断AL的内容,若AL60, AL=F60AL85,AL=PAL85, AL=G详见:P111 例3-8918第三章例2:TABLE DB 01H,80H,0F5H,32H,86H DB 74H,49H,0AFH,25H,40HPLUS DB 0NEGT DB 0ZERO DB 0 MOV CX,10 MOV BX,0AGAIN:CMP TABLEBX,0 JGE GRET_EQ INC NE
9、GT(转右上) JMP NEXTGRET_EQ:JG P_INC INC ZERO JMP NEXTP_INC: INC PLUSNEXT: INC BX DEC CX JNZ AGAIN 功能:分别统计正数、负数和零的个数。详见:P112 例3-9119第三章特点:一组增强型的条件转移指令,控制程序段的重复执行,用在循环程序中以确定是否要继续循环。循环次数通常置于CX中。循环控制指令均不影响标志。共有4条。4、循环控制指令20第三章 LOOP循环指令格式:LOOP label功能:CX-1CX; 判断若CX0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。LOOP指令与下面
10、的指令段等价: DEC CX JNZ label21第三章例:OLD DB1,2,3,4,5NEW DB 5 DUP(0)MOVCX,5 MOVBX,00H NEXT:MOV AL,OLDBXADDAL,5MOVNEWBX,AL INCBXLOOPNEXT功能:将内存中的5个数据分别加5后,存入新的内存单元。22第三章 LOOPE/LOOPZ 相等或结果为零时循环功能:CX-1CX;若CX0且ZF=1则转移; LOOPNE/LOOPNZ 不相等或结果不为零循环功能:CX-1CX;若CX0且ZF=0则转移; JCXZ 若CX为0跳转功能:判断若CX0则转移;注意:JCXZ指令不对CX的内容进行自
11、动减1操作23第三章一、数据传送指令二、算术运算指令三、逻辑运算与移位指令四、控制转移指令五、字符串处理指令(自学)六、处理器控制指令3.38086的指令系统24第三章特点:对存储器中一串数据进行处理的指令相关概念字符串:一系列存放在存储器中的字或字节数据,不管它们是不是ASCII码。字符串长度可达64K字节。字符串元素:组成字符串的字节或字。每种字符串指令对字符串元素只进行同一种操作。字符串操作指令:对字符串进行的传送、比较、扫描、存储及装入等5种操作。五、字符串处理指令25第三章字符串操作指令的类型和格式字符串操作指令的类型和格式 P96P96表表3-83-8指令名称字节/字操作字节操作字
12、操作字符串传送字符串比较字符串扫描字符串装入字符串存储MOVS 目的串,源串CMPS 目的串,源串SCAS 目的串LODS 源串STOS 目的串MOVSBCMPSBSCASBLODSBSTOSBMOVSWCMPSWSCASWLODSWSTOSW说明:每种指令都有3种格式。有两种方法说明是字节操作还是字操作。一、用指令中的源串和目的串名(即操作数)表明是字节还是字;二、在指令助记符后加B说明是字节,加W说明是字操作。26第三章隐含约定源串:地址为DS:SI;允许用段超越前缀修改段地址。目的串:地址为ES:DI;不允许使用段超越前缀修改ES。若要在同一段内进行串运算,必须使DS和ES指向同一段。指
13、针:每执行一次字符串指令,指针SI和DI会自动修改,以指向下一个待操作单元。DF标志:控制字符串处理的方向。 DF=0为递增方向。每执行一次串操作:字节串操作时,SI、DI分别增1;字串操作时,SI和DI分别增2;DF=1为递减方向。字节串操作时指针减1;字串操作时减指针2。STD使DF置1,CLD将DF清0。串长度:要处理的字符串长度(字节或字数)放在CX中。27第三章重复前缀:功能:在基本指令前加重复前缀,可加快串运算指令的执行速度。每重复执行一次,地址指针SI和DI按方向标志自动修改,CX的值自动减1。类型与格式: REP:无条件重复,常与 (MOVS)连用,连续传送字符串。直到传送完毕
14、,即CX0为止。 REPE/REPZ:相等/结果为零则重复,常与(CMPS)连用,连续比较字符串。当两个字符串对应字符相等(ZF=1)和CX0时,则重复进行比较,直到ZF=0或CX=0为止。 REPNE/REPNZ :不相等/结果非零则重复,常与(SCAS)连用,当结果非0(ZF=0)和CX0时,重复进行扫描,直到ZF=1或CX=0为止。28第三章1、MOVS 字符串传送指令格式:MOVS 目的串,源串功能:SI作指针的源串中的一个字节或字DI作指针的目的串;自动修改指针SI和DI。应用:解决MOV不能直接在存储单元间进行数据传送的问题。若使用重复前缀,还可利用一条指令传送一批数据。29第三章
15、例:要求把数据段中以SRC_MESS为偏移地址的一串字符“HELLO!”,传送到附加段中以NEW_LOC开始的单元中主要程序段: LEA SI,SRC_MESS ;SI指向源串偏移地址LEA DI,NEW_LOC ;DI指向目的串偏移地址MOV CX,6 ;CX作串长度计数器CLD ;清方向标志,地址增量REP MOVSB ;重复传送串中各字节,CX=0其中“REP MOVSB”指令可用以下几条指令代替: AGAIN: MOVS NEW_LOC, SRC_MESS DEC CX JNZ AGAIN30第三章2、CMPS 字符串比较指令格式:CMPS 目的串,源串功能:SI作指针的源串减去DI作
16、指针的目的串数据,结果反映在标志位上;原值不变;源串和目的串指针自动修改,指向下一对待比较的串。加重复前缀:REPE/REPZ CMPS ;直至CX=0(比完了)或ZF=0(两串不相等)时停止操作。REPNE/REPNZ CMPS;直至CX=0(比完了)或ZF=1(两串相等)时停止比较。31第三章例:比较两个字符串,一个是程序中设定的口令串PASSWORD,另一个是从键盘输入的字符串IN_WORD,若输入串与口令串相同,程序将开始执行。否则,程序驱动PC机的扬声器发声,警告用户口令不符,拒绝往下执行。(P98 例3-76) 这可以用CMPS指令来实现,有关程序段如下:32第三章DATA SEG
17、MENT;数据段PASSWORDDB750424LI;口令串IN_WORD DB750424LE;从键盘输入的串COUNTEQU8;串长度DATAENDSCODESEGMENT;代码段LEA SI, PASSWORD;源串指针LEA DI, IN_WORD;目的串指针MOV CX, COUNT;串长度CLD;地址增量REPZ CMPSB;CX0且串相等时重复比较JNE SOUND;若不相等,转发声程序OK: ;比完且相等,往下执行SOUND:;使PC机扬声器发声并退出CODE ENDS33第三章3、SCAS字符串扫描指令格式:SCAS 目的串功能:AL/AX(字节/字操作)内容减去ES:DI中
18、的串元素,结果反映在标志位上,源操作数不变,操作后目的串指针会自动修改,指向下一个待搜索的串元素。应用:利用SCAS指令,可在内存中搜索关键字。指令执行前,必须事先将关键字存在AL(字节)或AX(字)中。SCAS指令可以加重复前缀。34第三章例:在某一字符串中搜寻是否有字符A,若有,则把搜索次数记下来,送到BX寄存器中,若没有查到,则将BX寄存器清0。设字符串起始地址STRING的偏移地址为0,字符串长度为CX。解:MOV DI,OFFSET STRING ;DI字符串偏移地址 MOV CX,COUNT ;CX字符串长度 MOV AL,A ;AL关键字A的ASCII码 CLD ;清标志方向 R
19、EPNE SCASB ;CX0和ZF=0时重复 JZ FIND ;若ZF=1,表示已搜到,转出 MOV DI,0 ;若ZF=0,表示没搜到,DI0FI:MOV BX,DI ;BX搜索次数35第三章4、LODS数据串装入指令格式:LODS 源串功能:DS:SI中的串元素 AL/AX(字节/字操作)中,修改SI,以指向串中的下一个元素,修改量遵守隐含约定。 注意:该指令加重复前缀意义不大,因为重复传送只能保留最后写入的数据。36第三章5、STOS数据串存储指令格式:STOS 目的串功能:AL/AX(字节/字操作)的一个字节或字ES:DI所指的目的串;修改DI以指向串中的下一个单元。重复前缀: 执行
20、REP STOS ,可用累加器中的一个常数,对数据串初始化。例:P100 例3-78 略37第三章1、标志操作指令CF设置指令 CLC 0CF STC 1CF CMC CF变反DF设置指令 CLD 0DF (串操作的指针移动方向从低到高) STD 1DF (串操作的指针移动方向从高到低)六、处理器控制指令38第三章IF设置指令 CLI 0IF (禁止INTR中断) STI 1IF (开放INTR中断) 2、停机指令和空操作指令HLT 停机指令 程序中通常用HLT指令来等待中断的出现NOP 空操作指令 常用于循环操作中增加延时;或用于调试程序39第三章本章小结8086指令的寻址方式类型:一、立即寻址方式二、寄存器寻址方式三、直接寻址方式四、寄存器间接寻址方式五、寄存器相对寻址方式六、基址变址寻址方式七、相对基址变址寻址方式八、其它指令分为以下六类:一、数据传送指令 二、算术运算指令 三、逻辑运算和移位指令 四、字符串处理指令 五、控制转移指令 六、处理器控制指令重点: 寻址方式、指令系统难点: 指令的正确应用结束语结束语谢谢大家聆听!谢谢大家聆听!40