《第3章指令系统2.pptx》由会员分享,可在线阅读,更多相关《第3章指令系统2.pptx(100页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1指令类型逻辑运算与,或,非,异或移位操作非循环移位,循环移位第1页/共100页2 一、逻辑运算逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数;“非”指令对状态标志寄存器没有影响除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0第2页/共100页31.“与”指令:格式:AND OPRD1,OPRD2操作:dst(dst)(src)两操作数相“与”,结果送目标地址。第3页/共100页4“与”指令的应用实现两操作数按位相与的运算AND BL,SI使目标操作数的某些位不变,某些位清零AND AL,0FH在操作数不变的情况下使CF和OF清零AND AX,
2、AX第4页/共100页5“与”指令应用例从地址为3F8H的端口中读入一个字节数,如果该数的bit1位为1,则可从38FH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。编写相应的程序段。第5页/共100页6“与”指令应用例开开 始始取待输出数的取待输出数的偏移地址偏移地址读入状态字读入状态字测试测试bit1位状态位状态Bit1=1?取输入口地址取输入口地址取输出口地址取输出口地址 输出一个字输出一个字NY第6页/共100页7“与”指令应用例 LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX AND AL,02H JZ WATT ;ZF=1转移 MOV DX,
3、38FH MOV AX,SI OUT DX,AX第7页/共100页82.“或”运算指令格式:OR OPRD1,OPRD2操作:dstdst(src)两操作数相“或”,结果送目标地址第8页/共100页9“或”指令的应用实现两操作数相“或”的运算OR AX,DI使某些位不变,某些位置“1”OR CL,0FH在不改变操作数的情况下使OF=CF=0OR AX,AX第9页/共100页10“或”指令的应用例例例3-27(书)(书)OR AL,AL JPE GOON OR AL,80H GOON:.第10页/共100页11“或”指令的应用将一个二进制数9变为字符9如何实现如何实现?第11页/共100页123
4、.“非”运算指令格式:NOT OPRD操作:操作数按位取反再送回原地址注:指令中的操作数不能是立即数指令的执行对标志位无影响例:NOT BYTE PTRBX第12页/共100页134.“异或”运算指令格式:XOR OPRD1,OPRD2操作:dstdst(src)两操作数相“异或”,结果送目标地址例:XOR BL,80H XOR AX,AX两操作数自身相异或,结果为零两操作数自身相异或,结果为零第13页/共100页14“异或”指令应用XOR 指令的用途是将寄存器或存储器中某些特定的位“求反”,而使其余位保持不变。例如,若要使AL 寄存器中第1、3、5、7 位取反其他位不变。XOR 指令的另一个
5、用途将寄存器内容清零,例如:XOR AX,AX;AX 清零 XOR CX,CX;CX 清零而且,上述指令和AND、OR 等指令一样,也将进位标志CF 清零。XOR 指令的这种特性在多字节的累加程序中十分有用,它可以在循环程序开始前的初始化过程中使用。第14页/共100页155.“测试”指令格式:TEST OPRD1,OPRD2操作:执行“与”运算,但运算的结果不送回目标地址。应用:常用于测试某些位的状态第15页/共100页16例3-28(书)XOR DX,DXMOV SI,4000HMOV CX,20HAGAIN:MOV AL,SIINC SITEST AL,80HJZ NEXTINC DXN
6、EXT:DEC CXJNZ AGAINMOV BUFFER,DX第16页/共100页17例:从地址为3F8H的端口中读入一个字节数,当该数的bit1,bit3,bit5位同时为1时,可从38FH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。编写相应的程序段。第17页/共100页18源程序代码:LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX MOV DX,38FH MOV AX,SI OUT DX,AXAND AL,2AHCMP AL,2AHJNZ WATTTEST AL,02HJZ WATT ;ZF=1转移转移TEST AL,08HJZ WATTTEST
7、 AL,20HJZ WATTAND AL,2AHXOR AL,2AHJNZ WATT第18页/共100页19二、移位指令 非循环移位指令 循环移位指令注:注:n 移动一位时由指令直接给出;移动一位时由指令直接给出;n 移动两位及以上,则移位次数由移动两位及以上,则移位次数由CL指定。指定。第19页/共100页201.非循环移位指令逻辑左移算术左移逻辑右移算术右移第20页/共100页21算术左移和逻辑左移算术左移指令:SAL OPRD,1 SAL OPRD,CL逻辑左移指令:SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号数移动一位后,若移动一位后,若CF与最高不相等,
8、则与最高不相等,则OF=1;否则否则OF=0第21页/共100页22逻辑右移格式:SHR OPRD,I SHR OPRD,CL0CF移动一位后,若次高位与最高位不相等,则移动一位后,若次高位与最高位不相等,则OF=1;否则否则OF=0第22页/共100页23逻辑右移例:MOV AL,68HMOV CL,2SHR AL,CL0CF0 1 1 0 1 0 AL0 0 0 0 0 1 1 0 1 0 0ALCF0 00 0 0 1 1 0 1 0 AL移动移动1次次移动移动2次次第23页/共100页24算术右移格式:SAR OPRD,I SAR OPRD,CLCF第24页/共100页25非循环移位指
9、令的应用左移可实现乘法运算右移可实现除法运算 第25页/共100页262.循环移位指令不带进位位的循环移位带进位位的循环移位左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同第26页/共100页27不带进位位的循环移位CFCF第27页/共100页28带进位位的循环移位CFCF第28页/共100页29循环移位指令的应用用于对某些位状态的测试;高位部分和低位部分的交换;与非循环移位指令一起组成32位或更长字长数的移位。第29页/共100页30程序例将1000H开始存放的四个压缩BCD码转换为ASC
10、II码存放在3000H开始的单元中去。12H34H56H78H 1000H3000H第30页/共100页31程序例 MOV SI,1000H MOV DI,3000H MOV CX,4BBB:MOV AL,SI MOV BL,AL AND AL,0FH OR AL,30H MOV DI,AL INC DI MOV AL,BLPUSH CXMOV CL,4SHR AL,CLSHR AL,CLOR AL,30HOR AL,30HMOV DI,ALMOV DI,ALINC DIINC DIINC SIINC SIPOP CXPOP CXDEC CXDEC CXJNZ BBBJNZ BBBHLTHLT
11、第31页/共100页32例:计算2658+3619=?结果存放在SUM单元说明:被加数和加数的每一位都以ASCII码形式存放在内存中,低位在前,高位在后。36H32H39H31HSTRING1STRING238H35H36H33H数数据据段段SUM.第32页/共100页33代码1 LEA SI,STRING1 ;取偏移地址 LEA DI,STRING2 LEA BX,SUM MOV CH,4 ;设循环次数 CLC ;使CF清零A:AND BYTE PTRSI,0FH ;将ASCII转换为二进制数 AND BYTE PTRDI,0FH MOV AL,SI ;两字节数求和 ADC AL,DI第33
12、页/共100页34代码1(续)MOV DL,AL AND AL,0FHOR AL,30HMOV BX,ALINC BXMOV AL,DLMOV CL,4SHR AL,CLSHR AL,CLOR AL,30HOR AL,30HMOV BX,ALMOV BX,ALINC SIINC DIINC BXDEC CH JNZ AHLT第34页/共100页35代码2 LEA SI,STRING1 LEA DI,STRING2 LEA BX,SUM MOV CX,4 CLCNEXT:MOV AL,SI ADC AL,DI AAA MOV BX,ALINC SIINC DIINC BXDEC CXJNZ NE
13、XTHLT第35页/共100页36串操作指令第36页/共100页37串操作指令说明针对数据块或字符串的操作;可实现存储器到存储器的数据传送;待操作的数据串称为源串,目标地址称为目标串。第37页/共100页38串操作指令的特点源串一般存放在数据段,偏移地址由SI指定。允许段重设;目标串必须在附加段,偏移地址由DI指定;指令自动修改地址指针,修改方向由DF决定。DF=0 DF=1数据块长度值由CX指定可增加自动重复前缀以实现自动修改CX内容。增地址方向;增地址方向;减地址方向;减地址方向;第38页/共100页39重复前缀无条件重复REP条件重复REPE 相等重复REPZ 为零重复REPNE 不相等
14、重复REPNZ 不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复第39页/共100页40串操作指令流程取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向第40页/共100页41串操作指令串传送 MOVS串比较 CMPS串扫描 SCAS串装入 LODS串送存 STOS第41页/共100页421.串传送指令格式:MOVS OPRD1,OPRD2 MOVSB MOVSW串传送指令常与无条件重复前缀连用第42页/共100页43串传送指令对比用MOV指令和MOV
15、S指令实现将200个字节数据从内存的一个区域送到另一个区域的程序段。第43页/共100页44串传送指令例用串传送指令实现200个字节数据的传送:LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT第44页/共100页452.串比较指令格式:CMPS OPRD1,OPRD2 CMPSB CMPSW串比较指令常与条件重复前缀连用,指令的执 行不改变操作数,仅影响标志位。前缀的操作对标志位不影响第45页/共100页46P130例3-37LEA SI,M1LEA DI,M2MOV CX,200CLDREPE CMPSBJZ STOPDEC SIMOV
16、 BX,SIMOV AL,SISTOP:HLT第46页/共100页47串比较指令例测试200个字节数据是否传送正确:LEA SI,MEM1LEA DI,MEM2MOV CX,200CLD REPE CMPSB TEST CX,00FFH JZ STOP DEC SI MOV AL,SI MOV BX,SISTOP:HLT 第47页/共100页483.串扫描指令格式:SCAS OPRD SCASB SCASW执行与CMPS指令相似的操作,只是这里的源 操作数是AX或AL目 标操作数第48页/共100页49串扫描指令的应用常用于在指定存储区域中寻找某个关键字。第49页/共100页50P131例3-
17、38MOV DI,2000HMOV BX,DIMOV CX,0AHMOV AL,ACLDREPNZ SCASBJZ FOUNDMOV DI,0JMP DONEFOUND:DEC DIMOV DATA2,DIINC DISUB DI,BXDONE:MOV DATA1,DI第50页/共100页51串装入指令格式:LODS OPRD LODSB LODSW操作:对字节:AL对 字:AXDS:SIDS:SIDS:SIDS:SI第51页/共100页524.串装入指令用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口。LODS指令一般不加重复前缀。第52页/共100页53P132例3-39LE
18、A SI,MEMMOV CX,10CLDMOV AH,02HNEXT:LODSBADD AL,30HMOV DL,ALINT 21HDEC CXJNZ NEXTHLT第53页/共100页545.串存储指令格式:STOS OPRD STOSB STOSW操作:对字节:AL对 字:AX目 标操作数ES:DIES:DI第54页/共100页55串存储指令例 内存某个区域清零设计思想:区域首地址送区域首地址送ES:DI串长度送串长度送CX置方向标志置方向标志DF0送累加器送累加器AL执行串送存指令执行串送存指令p132第55页/共100页56P132 例3-40MOV AX,6000HMOV ES,AX
19、MOV DI,1200HMOV CX,100CLDMOV AX,0REP STOSWHLT第56页/共100页57程序控制指令n转移指令n循环控制n过程调用n中断控制第57页/共100页58一、转移指令无条件转移指令 无条件转移到目标地址,执行新的指令有条件转移指令 在具备一定条件的情况下转移到目标地址通过修改指令的通过修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址实现程序的转移实现程序的转移第58页/共100页591.无条件转移指令格式:JMP OPRD目标地址目标地址与与JMP在同在同一代码段一代码段与与JMP不在同不在同一代码段一代码段原则上可实现在整个内存空间的转移原则
20、上可实现在整个内存空间的转移第59页/共100页60无条件段内转移转移的目标地址在当前代码段内,段地址不改变。即:目标地址是16位偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的寄存器或由指令中的寄存器或存储器操作数指出目存储器操作数指出目标地址标地址段内直接转移段内直接转移段内间接段内间接转移转移第60页/共100页61段内直接转移段内直接转移转移的目标地址由指令直接给出格式:JMP Label近地址标号第61页/共100页62段内直接转移示图JMPLabel 代代码码段段位移量下一条要执行指令的偏移地址下一条要执行指令的偏移地址=当前当前IP+位移量位移量JMP Label
21、第62页/共100页63段内间接转移段内间接转移转移的目标地址存放在某个16位寄存器或存储器 的某两个单元中例:JMP BX若:BX=1200H则:转移的目标地址=1200HJMP 代代码码段段1200HMOV第63页/共100页64段内间接转移例JMP WORD PTRBX 设:BX=1200HJMP 代代码码段段数数据据段段BX=1200 XXHXXHIP指令码指令码第64页/共100页65无条件段间转移转移的目标地址不在当前代码段内。目标地址为32位,包括段地址和偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的由指令中的32位存储器位存储器操作数指出目标地址操作数指出目标
22、地址段间直接转移段间直接转移段间间接转移段间间接转移第65页/共100页66段间直接转移段内直接转移转移的目标地址由指令直接给出格式:JMP FAR Label远地址标号第66页/共100页67段间直接转移示图JMPLabel 代代码码段段1代代码码段段2XXHXXHXXHXXHIPCS第67页/共100页68段间间接转移段内间接寻址转移的目标地址由指令中的32位操作数给出 例:JMP DWORD PTRBXXXHXXHXXHXXHBXIPCSJMP 指令码指令码代代码码段段1代代码码段段2数数据据段段第68页/共100页692.条件转移指令在满足一定条件下,程序转移到目标地址继续执行;根据前
23、一条指令执行后,标志位的状态来决定程序是否转移;条件转移指令均为段内短转移,即转移 范围为:-128-+127p136第69页/共100页70条件转移类指令:指令名称助记符测试条件无符号数高于/不低于也不等于高于或等于/不低于低于/不高于也不等于低于或等于/不高于转移转移转移转移JA/JNBEJAE/JNBJB/JNAEJBE/JNA目标标号目标标号目标标号目标标号CF=0 AND ZF=0CF=0 CF=1CF=1 OR ZF=1带符号数单标志位条件转移大于/不小于也不等于大于或等于/不小于小于/不大于也不等于小于或等于/不大于等于/结果为0不等于/结果不为0有进位/有借位无进位/无借位溢出
24、不溢出奇偶性为1/偶状态奇偶性为0/奇状态符号位为1符号为为0转移转移转移转移转移转移转移转移转移转移转移转移转移转移JG/JNLEJGE/JNLJL/JNGEJLE/JNGJE/JZJNE/JNZJCJNCJOJNOJP/JPEJNP/JPOJSJNS目标标号目标标号目标标号目标标号目标标号目标标号目标标号目标标号目标标号目标标号目标标号目标标号目标标号目标标号(SF XOR OF)=0ANDSF XOR OF=0 SF XOR OF=1 AND(SF XOR OF)=1ORZF=1ZF=0CF=1CF=0OF=1OF=0PF=1PF=0SF=1SF=0ZF=0ZF=0ZF=1192第70页
25、/共100页71转移指令例统计内存数据段中以TABLE为首地址的100个8位符号数中正数、负数和零元数的个数。第71页/共100页72转移指令例(流程图)将存放各元素个将存放各元素个数的单元清零数的单元清零取首地址取首地址设串长度设串长度取一个字节数取一个字节数正数个数加正数个数加1零元素加零元素加1为负?为负?为零?为零?负数个数加负数个数加1NYNYp144第72页/共100页73P136 例3-43START:XOR AL,ALMOV PLUS,ALMOV MINUS,ALMOV ZERO,ALLEA SI,TABLEMOV CL,100CLDCHECK:LODSBOR AL,ALJS
26、X1JZ X2INC PLUSJMP NEXTX1:INC MINUSJMP NEXTX2:INC ZERONEXT:DEC CLJNZ CHECKHLT第73页/共100页74二、循环控制指令循环范围:以当前IP为中心的-128+127范围内循环。循环次数由CX寄存器指定。循环指令:LOOP *LOOPZ *LOOPNZ无条件循环指令无条件循环指令条件循环指令条件循环指令第74页/共100页75无条件循环指令格式:LOOP LABEL循环条件:CX 0操作:DEC CX JNZ 符号地址第75页/共100页76条件循环指令格式:LOOPZ LABEL LOOPE LABEL循环条件:CX 0
27、 ZF=1n格式:LOOPNZ LABEL LOOPNE LABELn循环条件:CX 0 ZF=0第76页/共100页77P138例3-44START:LEA SI,DATAMOV CX,200CLDLODSWMOV MAX,AXMOV MIN,AXDEC CXNEXT:LODSWCMP AX,MAXJG LARGERCMP AX,MINJL SMALLJMP GOONLARGER:MOV MAX,AXJMP GOONSMALL:MOV MIN,AXGOON:LOOP NEXTHLT第77页/共100页78P139例3-45MOV DX,MAIN_PORTMOV BX,REDUNDANT_PO
28、RTTOP:IN AX,DXXCHG AX,BPIN AX,DXINC DXXCHG BX,DXCMP AX,BPLOOPE TOPJNZ PORT_ERRORPORT_ERROR第78页/共100页79三、过程调用和返回用于调用一个子过程;子过程由程序员预先设计 并装入内存 子过程执行结束后要返回 原调用处调用程序调用程序入口地址入口地址入口地址断点地址断点地址子程序子程序第79页/共100页80调用指令的执行过程保护断点;将调用指令的下一条指令的地址(断点)压入堆栈获取子过程的入口地址;子过程第1条指令的偏移地址执行子过程,含相应参数的保存及恢复;恢复断点,返回原程序。将断点偏移地址由堆栈
29、弹出第80页/共100页81过程调用段内调用段间调用段内直接调用段内直接调用段内间接调用段内间接调用段间直接调用段间直接调用段间间接调用段间间接调用第81页/共100页821.段内调用被调用程序与调用程序在同一代码段调用前只需保护断点的偏移地址格式:CALL NEAR PROC执行过程:近过程名近过程名代码段1调用程序调用程序被调用程序被调用程序代码段1n 将断点的偏移地址压入堆栈将断点的偏移地址压入堆栈n 根据过程名找子程序入口根据过程名找子程序入口第82页/共100页83段内调用例(1)CALL TIMRE(2)CALL WORD PTRSI直接调用直接调用间接调用间接调用44H33HCA
30、LL代代码码段段数数据据段段 设:设:SI=1200H CS=6000H1200H执行第(执行第(2)条指令后:)条指令后:6000HCS=3344HIP=第83页/共100页842.段间调用子过程与原调用程序不在同一代码段先将断点的CS压栈,再压入IP。调用前需保护断点的段基地址和偏移地址调用前需保护断点的段基地址和偏移地址第84页/共100页85段间调用例格式:CALL FAR PROC格式例:CALL FAR TIMRECALL DWORD PTRSIXXHXXHCALL代代码码段段数数据据段段 SIXXHXXHCSIP第85页/共100页863.返回指令功能:从堆栈中弹出断点地址,返回
31、原程序格式:RETRET指令一般位于子程序的最后。第86页/共100页87四、中断指令中断中断源中断的类型中断指令引起CPU产生一次中断的指令第87页/共100页88中断与过程调用:中断是随机事件或异常事件引起,调用则是事 先已在程序中安排好;响应中断请求不仅要保护断点地址,还要保护 FLAGS内容;调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向 量码指向的内存单元中。第88页/共100页891.中断指令格式:INT n说明:n4中断类型码n=0 255n 4 XXHXXHXXHXXH入口的入口的段段地址地址入口的入口的偏移偏移地址地址存放中断服务子程序入口地
32、址存放中断服务子程序入口地址的单元的偏移地址和段地址的单元的偏移地址和段地址代代码码段段00000H003FFH 第89页/共100页90中断服务程序的地址叫做中断矢量,将全部中断矢量集中在一张表中,即中断矢量表。第90页/共100页91中断指令的执行过程将FLAGS压入堆栈;将INT指令的下一条指令的CS、IP压栈;由n4得到存放中断向量的地址;将中断向量(中断服务程序入口地址)送CS和IP寄存器;转入中断服务程序。第91页/共100页92中断指令的执行过程n4 22H11H00H67HIPCS68122HMOV代代码码段段 堆堆栈栈段段SPFLAGSHFLAGSLIPHCSLCSHIPL
33、SPSPSP00000H003FFH第92页/共100页93中断指令例执行程序段:CS IP 6200H:0110H INT 21H6200H:0112H MOV AX,BX 12H01H00H62HSP=1200FLAGSLFLAGSHSP=11FA堆堆栈栈段段SP=11FESP=11FC第93页/共100页94中断指令例执行INT 21H指令后 IP=21H4 CS=(21H4)+20084H 23H11H00H20HIP CS数数据据段段 代代码码段段XX21123H 中断服务子程序中断服务子程序第94页/共100页952.中断返回指令格式:IRET中断服务程序的最后一条指令,负责恢复断点恢复断点恢复标志寄存器内容恢复标志寄存器内容第95页/共100页96六、处理器控制指令对标志位的操作与外部设备的同步说明见说明见p143表表第96页/共100页97本章课外自学内容:BCD码调整指令远地址指针指令LDS,LES条件循环指令LOOPZ,LOOPNZPentium新增指令第97页/共100页98结束语:掌握:指令的格式及意义;指令对操作数的要求及对标志位的影响;指令的应用。第98页/共100页99第3章作业作业请从服务器上下载本章书后全部题目均可作为思考题第99页/共100页100感谢您的观看!第100页/共100页
限制150内