




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 在操作数不变的情
2、况下使CF和OF清零 AND AX,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
3、WATT ;ZF=1转移 MOV DX,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=0 OR AX,AX第9页/共100页10“或”指令的应用例例例3-27(书)(书) OR AL,AL JPE GOON OR AL,80H GOON:.第10页/共100页11“或”指令的应用将一个
4、二进制数9变为字符9如何实现如何实现?第11页/共100页123.“非”运算指令 格式: NOT OPRD 操作: 操作数按位取反再送回原地址 注: 指令中的操作数不能是立即数 指令的执行对标志位无影响 例:NOT BYTE PTRBX第12页/共100页134.“异或”运算指令 格式: XOR OPRD1,OPRD2 操作: dstdst(src) 两操作数相“异或”,结果送目标地址 例: XOR BL,80H XOR AX,AX两操作数自身相异或,结果为零两操作数自身相异或,结果为零第13页/共100页14“异或”指令应用 XOR 指令的用途是将寄存器或存储器中某些特定的位“求反”,而使其
5、余位保持不变。 例如,若要使AL 寄存器中第1、3、5、7 位取反其他位不变。 XOR 指令的另一个用途将寄存器内容清零, 例如: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,
6、4000HMOV CX,20HAGAIN:MOV AL,SIINC SITEST AL,80HJZ NEXTINC DXNEXT: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,2AHCM
7、P AL,2AHJNZ WATTTEST AL,02HJZ WATT ;ZF=1转移转移TEST AL,08HJZ WATTTEST AL,20HJZ WATTAND AL,2AHXOR AL,2AHJNZ WATT第18页/共100页19二、移位指令 非循环移位指令 循环移位指令注:注:n 移动一位时由指令直接给出;移动一位时由指令直接给出;n 移动两位及以上,则移位次数由移动两位及以上,则移位次数由CL指定。指定。第19页/共100页201. 非循环移位指令 逻辑左移 算术左移 逻辑右移 算术右移第20页/共100页21算术左移和逻辑左移 算术左移指令: SAL OPRD,1 SAL OP
8、RD,CL 逻辑左移指令: SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号数移动一位后,若移动一位后,若CF与最高不相等,则与最高不相等,则OF=1;否则否则OF=0第21页/共100页22逻辑右移 格式: SHR OPRD,I SHR OPRD,CL0CF移动一位后,若次高位与最高位不相等,则移动一位后,若次高位与最高位不相等,则OF=1;否则否则OF=0第22页/共100页23逻辑右移例: MOV AL,68H MOV CL,2 SHR 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
9、 0 AL移动移动1次次移动移动2次次第23页/共100页24算术右移 格式: SAR OPRD,I SAR OPRD,CLCF第24页/共100页25非循环移位指令的应用 左移可实现乘法运算 右移可实现除法运算 第25页/共100页262. 循环移位指令 不带进位位的循环移位 带进位位的循环移位左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同第26页/共100页27不带进位位的循环移位CFCF第27页/共100页28带进位位的循环移位CFCF第28页/共100页29循环移位指令的应用 用于
10、对某些位状态的测试; 高位部分和低位部分的交换; 与非循环移位指令一起组成32位或更长字长数的移位。第29页/共100页30程序例 将1000H开始存放的四个压缩BCD码转换为ASCII码存放在3000H开始的单元中去。12H34H56H78H1000H3000H第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,4第31页/共100页32例: 计算2658+3619=? 结果存
11、放在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页/共100页34代码1(续)MOV DL,AL AND
12、 AL,0FHOR AL,30HMOV BX,ALINC BXMOV AL,DLMOV CL,4INC 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 NEXTHLT第35页/共100页36串操作指令第36页/共100页37串操作指令说明 针对数据块或字符串的操作; 可实现存储器到存储器的数据传送; 待操作的数据串称为
13、源串,目标地址称为目标串。第37页/共100页38串操作指令的特点 源串一般存放在数据段,偏移地址由SI指定。允许段重设; 目标串必须在附加段,偏移地址由DI指定; 指令自动修改地址指针,修改方向由DF决定。 DF=0 DF=1 数据块长度值由CX指定 可增加自动重复前缀以实现自动修改CX内容。增地址方向;增地址方向;减地址方向;减地址方向;第38页/共100页39重复前缀 无条件重复 REP 条件重复 REPE 相等重复 REPZ 为零重复 REPNE 不相等重复 REPNZ 不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复第39页/共100页40串操作指令流程取源串地址取源串地址
14、取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向第40页/共100页41串操作指令 串传送 MOVS 串比较 CMPS 串扫描 SCAS 串装入 LODS 串送存 STOS第41页/共100页421. 串传送指令 格式: MOVS OPRD1,OPRD2 MOVSB MOVSW 串传送指令常与无条件重复前缀连用第42页/共100页43串传送指令 对比用MOV指令和MOVS指令实现将200个字节数据从内存的一个区域送到另一个区域的程序段。第43页/共100页44串传送指令例 用串传
15、送指令实现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 BX,SIMOV AL,SISTOP:HLT第46页/共100页47串比较指令例测试200个字节
16、数据是否传送正确: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-38MOV DI,2000HMOV BX,DIMOV CX,0AHMOV AL,ACLD
17、REPNZ 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-39LEA SI,MEMMOV CX,10CLDMOV AH,02HNEXT
18、: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,AXMOV DI,1200HMOV CX,100CL
19、DMOV AX,0REP STOSWHLT第56页/共100页57程序控制指令n 转移指令n 循环控制n 过程调用n 中断控制第57页/共100页58一、转移指令无条件转移指令 无条件转移到目标地址,执行新的指令有条件转移指令 在具备一定条件的情况下转移到目标地址通过修改指令的通过修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址实现程序的转移实现程序的转移第58页/共100页591. 无条件转移指令 格式: JMP OPRD目标地址目标地址与与JMP在同在同一代码段一代码段与与JMP不在同不在同一代码段一代码段原则上可实现在整个内存空间的转移原则上可实现在整个内存空间的转移第59
20、页/共100页60无条件段内转移 转移的目标地址在当前代码段内,段地址不改变。 即:目标地址是16位偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的寄存器或由指令中的寄存器或存储器操作数指出目存储器操作数指出目标地址标地址段内直接转移段内直接转移段内间接段内间接转移转移第60页/共100页61段内直接转移 段内直接转移 转移的目标地址由指令直接给出 格式: JMP Label近地址标号第61页/共100页62段内直接转移示图JMPLabel代代码码段段位移量下一条要执行指令的偏移地址下一条要执行指令的偏移地址=当前当前IP+位移量位移量JMP Label第62页/共100页63
21、段内间接转移 段内间接转移 转移的目标地址存放在某个16位寄存器或存储器 的某两个单元中 例: JMP BX 若:BX=1200H 则:转移的目标地址=1200HJMP代代码码段段1200HMOV第63页/共100页64段内间接转移例 JMP WORD PTRBX 设:BX=1200HJMP代代码码段段数数据据段段BX=1200XXHXXHIP指令码指令码第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=11
25、92第70页/共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 A
26、L,ALJS 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 L
27、OOPE LABEL 循环条件: CX 0 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_
28、PORTMOV BX,REDUNDANT_PORTTOP: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)C
30、ALL WORD PTRSI直接调用直接调用间接调用间接调用44H33HCALL代代码码段段数数据据段段设:设:SI=1200H CS=6000H1200H执行第(执行第(2)条指令后:)条指令后:6000HCS =3344HIP =第83页/共100页842. 段间调用 子过程与原调用程序不在同一代码段 先将断点的CS压栈,再压入IP。调用前需保护断点的段基地址和偏移地址调用前需保护断点的段基地址和偏移地址第84页/共100页85段间调用例 格式: CALL FAR PROC 格式例: CALL FAR TIMRE CALL DWORD PTRSIXXHXXHCALL代代码码段段数数据据段段SIXXHXXHCSIP第85页/共100页863. 返回指令 功能: 从堆栈中弹出断点地址,返回原程序 格式: RET RET指令一般位于子程序的最后。第86页/共100页87四、中断指令 中断 中断源 中断的类型 中断指令 引起CPU产生一次中断的指令第87页/共100页88中断与过程调用: 中断是随机事件或异常事件引起,调用则是事 先已在程序中安排好 ; 响应中断请求不仅要保护断点地址,还要保护 FLAGS内容; 调用指令在指令中直接给出子程序入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 珠宝专业知识试题及答案
- 煤矿提升专业试题及答案
- 湖南省邵阳市2025-2026学年高一上学期9月拔尖创新班联考生物试题(含答案)
- 广东省2025-2026学年高三上学期9月月考英语试题(含答案)
- 生化专业试题及答案
- 河北省唐山市路南区2024-2025学年三年级上学期期末数学试题
- 培训反馈路基施工方案
- 国际友谊庆祝演讲稿模板
- 2025年学情诊断高一年级物理试题(定稿)
- 轿厢装潢施工方案
- 培训反馈意见表
- 商业银行资产管理与负债管理
- 中国消费金融公司发展报告-中国银行业协会
- 电力系统分析孙淑琴案例吉玲power程序实验指导书
- 高标准农田建设项目施工组织设计 (5)
- 根管治疗--ppt课件
- 《毛诗大序》原文及注解
- 轻型动力触探试验记录表
- 特种设备操作人员培训学校项目可行性研究报告模板备案审批
- 桌牌桌签模板正反桌牌会议室三字两字桌牌word版
- 工作餐费用报销审批单
评论
0/150
提交评论