版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章指令系统(2)三、逻辑运算和移位类逻辑运算移位操作与或非异或非循环移位循环移位逻辑移位算术移位不带进位位的移位带进位位的移位1.逻辑运算逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0“与”指令的应用实现两操作数相与的运算AND指令典型用法:用于屏蔽某些位,即使某些位为0.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位.
MOVAL,39H
//AL=00111001B[39H]ANDAL,0FH
//AL=00001001B[09H]
即00111001B[39H]
&
00001111B[0FH]=00001001B[09H]“与”指令应用例MOVAL,06HMOVBL,07HMOVBH,08HANDBL,[BX]ANDAL,0FHANDAX,AX“或”运算指令格式:OROPRD1,OPRD2操作:两操作数相“或”,结果送目标地址“或”指令的应用例ORAX,[DI]ORCL,0FHORAX,AXORAL,ALJPEGOONORAL,80H
GOON:….偶校验转移(PF=1)将一个二进制数9变为字符‘9’?“异或”运算指令格式:XOROPRD1,OPRD2操作:两操作数相“异或”,结果送目标地址两操作数自身相异或,结果XORAX,AX将AL的高4位维持不变,低4位取反:MOVAL,B8H
//AL=10111000B[B8H]XOR
AL,0FH
//AL=10110111B[B7H]即10111000B[B8H]与00001111[0FH]进行异或运算得到:10110111B[B7H]测试某一个操作数是否与另一确定操作数相等:XOR
AX,042EHJZ
....
//如果AX==042EH,则ZF=TRUE(1),执行JZ...“测试”指令格式:TESTOPRD1,OPRD2操作:执行“与”运算,但运算的结果不送回目标地址。应用:常用于测试某些位的状态1.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0,OF=0,而AF位无定义.2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足.只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假.“测试”指令例从地址为38F0H的端口中读入一个字节数,如果该数的bit1位为1,则可从38FEH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。编写相应的程序段。检测某位是否为1:令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JNZ...TESTAL,000000001B
;测试AL最低位是否为1:令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令。
JNZ
THER
;最低位若为1,则ZF=FALSE(0),执行JNZTHER,否则执行下一条指令。“测试”指令例LEASI,DATAMOVDX,38F0HWATT:INAL,DXTESTAL,02HJZWATT;ZF=1转移MOVDX,38FEHMOVAX,[SI]OUTDX,AX2.移位指令
非循环移位指令循环移位指令移动一位时由指令直接给出;移动两位及以上,则移位次数由CL指定。算术左移和逻辑左移格式:SALOPRD,1SALOPRD,CLSHLOPRD,1SHLOPRD,CL有符号数无符号数逻辑左移移动一位后,若CF与最高不相等,则OF=1;否则OF=02.移位指令:逻辑左移SHLOPR,CNT算术左移SALOPR,CNT(同逻辑左移)CF0算术右移格式:
SAROPRD,ISAROPRD,CL有符号数的右移CF非循环移位指令的应用左移可实现乘法运算右移可实现除法运算例:
教材p130循环移位指令不带进位位的循环移位带进位位的循环移位循环移位指令的格式、对操作数的要求与非循环移位指令相同左移ROL右移ROR左移RCL右移RCR带进位位的循环移位CFCF例:(AX)=0012H,(DX)=0034H,把它们装配成(AX)=1234H
movax,0012hmovdx,0034hmovcl,8rolax,claddax,dx循环移位指令的应用用于对某些位状态的测试高位部分和低位部分的交换与非循环移位指令一起组成32位或更长字长数的移位程序例
leaSI,data1 MOVDI,0010 HMOVCX,4 BBB:PUSHCXMOVAL,[SI]MOVBL,ALMOVCL,4 SHRAL,CLANDAL,0FH ORAL,30HMOV[DI],AL
INCDIMOVAL,BLandal,0fhORAL,30HMOV[DI],ALINCDIINCSIPOPCXDECCXJNZBBB程序功能?data1db12h,34h,56h,78h程序例将data1开始存放的四个压缩BCD码转换为ASCII码存放在0010H开始的单元中去┇┇12H34H56H78H┇data10010H四、串操作指令针对数据块或字符串的操作可实现存储器到存储器的数据传送待操作的数据串称为源串,目标地址称为目标串串操作指令的特点源串一般存放在数据段,偏移地址由SI指定。允许段重设目标串必须在附加段,偏移地址由DI指定指令自动修改地址指针,修改方向由DF决定。DF=0增地址方向;DF=1减地址方向数据块长度值由CX指定可增加自动重复前缀以实现自动修改CX内容串操作指令流程取源串地址取目标串地址设串长度传送一个字节或字修改地址指针修改串长度值传送完否?重复前缀REP无条件重复REPE相等重复REPZ为零重复REPNE不相等重复REPNZ不为零重复条件重复CX≠0ZF=1CX≠0ZF=0CX≠0重复串操作指令串传送MOVS串比较CMPS串扫描SCAS串装入LODS串送存STOS串传送指令格式:MOVSOPRD1,OPRD2MOVSBMOVSW串传送指令常与无条件重复前缀连用五、程序控制指令转移指令循环控制过程调用中断控制1.转移指令用例程来说明!无条件转移指令无条件转移到目标地址,执行新的指令有条件转移指令在具备一定条件的情况下转移到目标地址通过修改指令的偏移地址或段地址及偏移地址实现程序的转移无条件转移指令格式:JMPOPRD目标地址与JMP在同一代码段与JMP不在同一代码段原则上可实现在整个内存空间的转移无条件转移指令段内转移转移的目标地址在当前代码段内指令中直接给出目标地址由指令中的寄存器或存储器操作数指出目标地址段内直接寻址段内间接寻址无条件段内转移段内直接寻址JMPLabel近地址标号JMPLabel┇┇┇代码段下一条要执行指令的偏移地址=当前IP+位移量无条件段内转移段内间接寻址JMPBXJMPWORDPTR[BX]JMP┇┇┇代码段数据段BX=1200┇XXHXXHIP指令码无条件转移指令——段间转移转移的目标地址不在当前代码段内指令中直接给出目标地址由指令中的32位存储器操作数指出目标地址段间直接寻址段间间接寻址无条件段间转移段间直接转移JMPFARPTRLabel远地址标号JMPLabel┇┇┇代码段1Label的逻辑地址代码段2XXHXXHXXHXXHIPCS无条件段间转移段间间接转移JMPDWORDPTR[BX]XXHXXHXXHXXH[BX]IPCSJMP┇┇┇┇指令码代码段1代码段2数据段最终的转移目标地址条件转移指令在满足一定条件下,程序转移到目标地址继续执行条件转移指令均为段内短转移,只能寻址8位位移量(-128~127)
p142条件转移指令根据单个条件标志的设置情况转移:格式测试条件JZ(JE)OPRZF=1
JNZ(JNE)OPRZF=0
JSOPRSF=1
JNSOPRSF=0
JOOPROF=1
JNOOPROF=0
JPOPRPF=1
JNPOPRPF=0
JCOPRCF=1
JNCOPRCF=0
比较两个无符号数,并根据比较结果转移:*
格式测试条件>JA(JNBE)OPR CF=0且ZF=0≥JAE(JNB)OPR CF=0≤JB(JNAE)OPR CF=1<JBE(JNA)OPR CF=1或ZF=1适用于地址或双精度数低位字的比较below
比较两个带符号数,并根据比较结果转移:*
格式测试条件>JG(JNLE)OPR(SF=OF)且ZF=0≥JGE(JNL)OPRSF=OF<JL(JNGE)OPR (SFOF)且ZF=0≤JLE(JNG)OPR (SFOF)
或ZF=1*
适用于带符号数的比较返回2.循环控制指令控制程序在以当前IP为中心的-128~+127范围内循环执行循环次数由CX寄存器指定
LOOPLOOPZLOOPNZ无条件循环指令格式:LOOPLABEL循环条件:CX≠0操作:DECCXJNZ符号地址条件循环指令格式:LOOPZLABELLOOPELABEL循环条件:CX≠0ZF=1格式:
LOOPNZLABELLOOPNELABEL循环条件:
CX≠0ZF=03.过程调用和返回段内调用段间调用段内直接调用段内间接调用段间直接调用段间间接调用调用指令与转移指令的比较用于调用一个子过程调用前须保护断点地址子过程执行结束后要返回原调用处继续执行原程序断点恢复调用指令的执行过程将调用指令的下一条指令的地址(断点)压入堆栈获取子过程的入口地址(子过程第1条指令的偏移地址)(执行子过程,含相应参数的保存及恢复)将断点偏移地址由堆栈弹出,返回原程序段内调用子过程与原调用程序在同一代码段,在调用之前只需保护断点的偏移地址格式:
CALLNEARPTRPROC近过程名断点入口地址段内调用例CALLTIMRECALLWORDPTR[SI]直接调用间接调用段间调用子过程与原调用程序不在同一代码段,在调用之前需保护断点的段基地址和偏移地址。先将断点的CS压栈,再压入IP格式:CALLFARPTRPROC段间调用例CALLFARPTRTIMRECALLDWORDPTR[SI]返回指令从堆栈中弹出断点地址,返回原程序格式:
RETRET指令一般位于子程序的最后4.中断指令中断与过程调用:中断是随机事件或异常事件引起,调用则是事先已在程序中安排好响应中断请求不仅要保护断点地址,还要保护FLAGS内容调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中.中断指令格式:INTn说明:
nх4=存放中断服务子程序入口地址的单元地址中断类型码n=0〜255nх4
XXHXXHXXHXXH入口偏移地址IP入口段地址CS中断向量表中断向量:中断例行程序的入口地址,存放于中断向量表。
类型0的(IP)
类型0的(CS)
类型1的(IP)
类型1的(CS)
类型N的(IP)
类型N的(CS)
类型255的(IP)
类型255的(CS)00000000044*N003FC中断指令操作:将FLAGS压入堆栈将INT指令下一条指令的CS、IP压栈取中断服务程序入口地址
中断指令:INTn执行操作:(SP)←(SP)-2((SP)+1,(SP))←(FLAGS)
(SP)←(SP)-2((SP)+1,(SP))←(CS)(SP)←(SP)-2((SP)+1,(SP))←(IP)
(IP)←(n*4)(CS)←(n*4+2)中断指令例INT21HIPLIPHCSLCSHSP=1200FLAGSLFLAGSHSP=11FA执行INT指令后保护断点的过程中断指令例执行INT21H指令后IP=?CS=?21Hх4=0084H23H11H00H20HIP
CS中断返回指令格式:IRET中断服务程序的最后一条指令,负责恢复断点恢复标志寄存器内容从中断返回指令:IRET执行操作:(IP)←---((SP)+1,(SP))(SP)←---(SP)+2
(CS)←---((SP)+1,(SP))(SP)←---(SP)+2
(FLAGS)←((SP)+1,(SP))(SP)←---(SP)+2注意:*TYPE(0~255)是中断类型号。*INT(INTO)指令执行后,把IF和TF置0,但不影响其它标志位。
*IRET指令执行后,标志位由堆栈中取出的值确定。六、处理器控制指令对标志位的操作与外部设备的同步说明见p151表3.3.6处理机控制指令
标志处理指令:
CLCCF←0CMCCF←CFS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年通信运营工业互联网合同
- 2025年河北唐山市初二学业水平地生会考试题题库(答案+解析)
- 外贸合同风险防控实务操作指南
- 家具制造安全管理办法
- 日用百货购销合同及清单
- 排污口规范化建设管理办法
- 无籽西瓜嫁接育苗技术标准
- 动物买卖合同法律风险及纠纷预防指南
- 预制空心板梁现场施工安全管理方案
- 西方现代主义绘画鉴赏对高中生创新思维的启迪
- 2026年中考历史考前冲刺:小论文 满分方法指导讲义
- 2026年中职舞蹈教师考试试题
- 2025年新课标卷高考理科综合试卷真题答案详解(精校打印版)
- 2025年北京第二次高中学业水平考试化学试卷真题(含答案详解)
- 《新能源汽车整车控制技术》课件-项目1 整车控制器系统概述
- 市2026年党员发展对象培训班测试题及参考答案
- 2026年贵州省公安厅招聘警务辅助人员笔试试题(含答案)
- 微创神经外科手术的护理配合技巧
- DB33∕T 1430-2025 海塘安全监测技术规程
- 水泥搅拌桩施工质量标准
- 多模态影像评估脑卒中
评论
0/150
提交评论