您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《微机原理与接口技术》第三章PPT(第二部分)
18086指令系统(2)2三、逻辑运算和移位类逻辑运算移位操作非循环移位循环移位31.逻辑运算与或非异或四种逻辑运算:4逻辑运算逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数;除“非”运算指令外,其余指令的执行都会使标志位OF=CF=05“与”指令:格式:ANDOPRD1,OPRD2操作:两操作数相“与”,结果送目标地址。6“与”指令的应用实现两操作数按位相与的运算ANDBL,[SI]使目标操作数的某些位不变,某些位清零ANDAL,0FH在操作数不变的情况下使CF和OF清零ANDAX,AX7“与”指令应用例从地址为3F8H的端口中读入一个字节数,如果该数的bit1位为1,则可从38FH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。编写相应的程序段。8“与”指令应用例开始取待输出数的偏移地址读入状态字测试bit1位状态Bit1=1?取输入口地址取输出口地址输出一个字NY9“与”指令应用例LEASI,DATAMOVDX,3F8HWATT:INAL,DXANDAL,02HJZWATT;ZF=1转移MOVDX,38FHMOVAX,[SI]OUTDX,AX10“或”运算指令格式:OROPRD1,OPRD2操作:两操作数相“或”,结果送目标地址11“或”指令的应用实现两操作数相“或”的运算ORAX,[DI]使某些位不变,某些位置“1”ORCL,0FH在不改变操作数的情况下使OF=CF=0ORAX,AX12“或”指令的应用例ORAL,ALJPEGOONORAL,80HGOON:….PF=1转移13“或”指令的应用将一个二进制数9变为字符‘9’如何实现?14“非”运算指令格式:NOTOPRD操作:操作数按位取反再送回原地址注:指令中的操作数不能是立即数指令的执行对标志位无影响例:NOTBYTEPTR[BX]15“异或”运算指令格式:XOROPRD1,OPRD2操作:两操作数相“异或”,结果送目标地址例:XORBL,80HXORAX,AX两操作数自身相异或,结果16“测试”指令格式:TESTOPRD1,OPRD2操作:执行“与”运算,但运算的结果不送回目标地址。应用:常用于测试某些位的状态17例:从地址为3F8H的端口中读入一个字节数,当该数的bit1,bit3,bit5位同时为1时,可从38FH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。编写相应的程序段。18源程序代码:LEASI,DATAMOVDX,3F8HWATT:INAL,DXMOVDX,38FHMOVAX,[SI]OUTDX,AXANDAL,2AHCMPAL,2AHJNZWATTTESTAL,02HJZWATT;ZF=1转移TESTAL,08HJZWATTTESTAL,20HJZWATTANDAL,2AHXORAL,2AHJNZWATT192.移位指令非循环移位指令循环移位指令注:移动一位时由指令直接给出;移动两位及以上,则移位次数由CL指定。20非循环移位指令逻辑左移算术左移逻辑右移算术右移21算术左移和逻辑左移算术左移指令:SALOPRD,1SALOPRD,CL逻辑左移指令:SHLOPRD,1SHLOPRD,CL有符号数无符号数移动一位后,若CF与最高不相等,则OF=1;否则OF=022逻辑右移格式:SHROPRD,ISHROPRD,CL0CF无符号数的右移移动一位后,若次高位与最高位不相等,则OF=1;否则OF=023逻辑右移例:MOVAL,68HMOVCL,2SHRAL,CL0CF011010AL00000110100ALCF0000011010ALCF00移动1次移动2次24算术右移格式:SAROPRD,ISAROPRD,CL有符号数的右移CF25非循环移位指令的应用左移可实现乘法运算右移可实现除法运算教材p130例26循环移位指令不带进位位的循环移位带进位位的循环移位左移ROL右移ROR左移RCL右移RCR指令格式、对操作数的要求与非循环移位指令相同27不带进位位的循环移位CFCF28带进位位的循环移位CFCF29循环移位指令的应用用于对某些位状态的测试;高位部分和低位部分的交换;与非循环移位指令一起组成32位或更长字长数的移位。30程序例MOVSI,1000HMOVDI,3000HMOVCX,4BBB:MOVAL,[SI]MOVBL,ALANDAL,0FHORAL,30HMOV[DI],ALINCDIMOVAL,BLPUSHCXMOVCL,4SHRAL,CLORAL,30HMOV[DI],ALINCDIINCSIPOPCXDECCXJNZBBBHLT程序功能?31程序功能将1000H开始存放的四个压缩BCD码转换为ASCII码存放在3000H开始的单元中去。┇┇12H34H56H78H┇1000H3000H32四、串操作指令针对数据块或字符串的操作;可实现存储器到存储器的数据传送;待操作的数据串称为源串,目标地址称为目标串。33串操作指令的特点源串一般存放在数据段,偏移地址由SI指定。允许段重设;目标串必须在附加段,偏移地址由DI指定;指令自动修改地址指针,修改方向由DF决定。DF=0DF=1数据块长度值由CX指定可增加自动重复前缀以实现自动修改CX内容。增地址方向;减地址方向;34重复前缀无条件重复REP条件重复REPE相等重复REPZ为零重复REPNE不相等重复REPNZ不为零重复CX≠0ZF=1CX≠0ZF=0CX≠0重复35串操作指令流程取源串地址取目标串地址设串长度传送一个字节或字修改地址指针修改串长度值传送完否?NY36串操作指令串传送MOVS串比较CMPS串扫描SCAS串装入LODS串送存STOS37串传送指令格式:MOVSOPRD1,OPRD2MOVSBMOVSW串传送指令常与无条件重复前缀连用38串传送指令对比用MOV指令和MOVS指令实现将200个字节数据从内存的一个区域送到另一个区域的程序段。39串传送指令例用串传送指令实现200个字节数据的传送:LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPMOVSBHLT40串比较指令格式:CMPSOPRD1,OPRD2CMPSBCMPSW串比较指令常与条件重复前缀连用,指令的执行不改变操作数,仅影响标志位。前缀的操作对标志位不影响41串比较指令例测试200个字节数据是否传送正确:LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPECMPSBTESTCX,00FFHJZSTOPDECSIMOVAL,[SI]MOVBX,SISTOP:HLT42串扫描指令格式:SCASOPRDSCASBSCASW执行与CMPS指令相似的操作,只是这里的源操作数是AX或AL目标操作数43串扫描指令的应用常用于在指定存储区域中寻找某个关键字。44串装入指令格式:LODSOPRDLODSBLODSW操作:对字节:AL对字:AX源操作数[DS:SI][DS:SI]45串装入指令用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口。LODS指令一般不加重复前缀。46串送存指令格式:STOSOPRDSTOSBSTOSW操作:对字节:AL对字:AX目标操作数[ES:DI][ES:DI]47串送存指令例内存某个区域清零设计思想:区域首地址送ES:DI串长度送CX置方向标志DF0送累加器AL执行串送存指令p13948五、程序控制指令转移指令循环控制过程调用中断控制491.转移指令无条件转移指令无条件转移到目标地址,执行新的指令有条件转移指令在具备一定条件的情况下转移到目标地址通过修改指令的偏移地址或段地址及偏移地址实现程序的转移50无条件转移指令格式:JMPOPRD目标地址与JMP在同一代码段与JMP不在同一代码段原则上可实现在整个内存空间的转移51无条件段内转移转移的目标地址在当前代码段内,段地址不改变。即:目标地址是16位偏移地址。指令中直接给出目标地址由指令中的寄存器或存储器操作数指出目标地址段内直接转移段内间接转移52段内直接转移段内直接转移转移的目标地址由指令直接给出格式:JMPLabel近地址标号53段内直接转移示图JMPLabel┇┇┇代码段位移量下一条要执行指令的偏移地址=当前IP+位移量54段内间接转移段内间接转移转移的目标地址存放在某个16位寄存器或存储器的某两个单元中例:JMPBX若:BX=1200H则:转移的目标地址=1200HJMP┇┇代码段1200HMOV55段内间接转移例JMPWORDPTR[BX]设:BX=1200HJMP┇┇┇代码段数据段BX=1200┇XXHXXHIP指令码56无条件段间转移转移的目标地址不在当前代码段内。目标地址为32位,包括段地址和偏移地址。指令中直接给出目标地址由指令中的32位存储器操作数指出目标地址段间直接转移段间间接转移57段间直接转移段内直接转移转移的目标地址由指令直接给出格式:JMPFARLabel远地址标号58段间直接转移示图JMPLabel┇┇┇代码段1Label与JMP之间的位移量代码段2XXHXXHXXHXXHIPCS59段间间接转移段内间接寻址转移的目标地址由指令中的32位操作数给出例:JMPDWORDPTR[BX]XXHXXHXXHXXHBXIPCSJMP┇┇┇┇指令码代码段1代码段2数据段60条件转移指令在满足一定条件下,程序转移到目标地址继续执行条件转移指令均为段内短转移,即转移范围为:-128------+127p14261条件转移指令的应用几种条件转移指令的应用62转移指令例统计内存数据段中以TABLE为首地址的100个8位符号数中正数、负数和零元数的个数。63转移指令例(流程图)将存放各元素个数的单元清零设串长度取一个字节数正数个数加1零元素加1为负?为零?负数个数加1NYNYp144642.循环控制指令循环范围:以当前IP为中心的-128~+127范围内循环。循环次数由CX寄存器指定。循环指令:LOOP*LOOPZ*LOOPNZ无条件循环指令条件循环指令65无条件循环指令格式:LOOPLABEL循环条件:CX≠0操作:DECCXJNZ符号地址66条件循环指令格式:LOOPZLABELLOOPELABEL循环条件:CX≠0ZF=1格式:LOOPNZLABELLOOPNELABEL循环条件:CX≠0ZF=0673.过程调用和返回用于调用一个子过程;子过程由程序员预先设计并装入内存子过程执行结束后要返回原调用处调用程序断点入口地址入口地址断点地址子程序68调用指令的执行过程保护断点;将调用指令的下一条指令的地址(断点)压入堆栈获取子过程的入口地址;子过程第1条指令的偏移地址执行子过程,含相应参数的保存及恢复;恢复断点,返回原程序。将断点偏移地址由堆栈弹出69过程调用段内调用段间调用段内直接调用段内间接调用段间直接调用段间间接调用70段内调用被调用程序与调用程序在同一代码段调用前只需保护断点的偏移地址格式:CALLNEARPROC执行过程:近过程名代码段1调用程序被调用程序代码段1将断点的偏移地址压入堆栈根据过程名找子程序入口71段内调用例(1)CALLTIMRE(2)CALLWORDPTR[SI]直接调用间接调用44H33HCALL代码段数据段┇设:SI=1200HCS=6000H1200H执行第(2)条指令后:6000HCS=3344HIP=72段间调用子过程与原调用程序不在同一代码段先将断点的CS压栈,再压入IP。调用前需保护断点的段基地址和偏移地址73段间调用例格式:CALLFARPROC格式例:CALLFARTIMRECALLDWORDPTR[SI]XXHXXHCALL代码段数据段┇SIXXHX
本文标题:《微机原理与接口技术》第三章PPT(第二部分)
链接地址:https://www.777doc.com/doc-3907983 .html