您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 微型计算机原理与接口技术 第3章2
第3章指令系统(2)三、逻辑运算和移位类逻辑运算移位操作与或非异或非循环移位循环移位逻辑移位算术移位不带进位位的移位带进位位的移位1.逻辑运算逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0(1)“与”指令AND格式:ANDOPRD1,OPRD2操作:两操作数相“与”,结果送目标地址“与”指令的应用实现两操作数相与的运算使目标操作数的某些位不变,某些位清零在操作数不变的情况下使CF和OF清零源操作数可以是立即数、寄存器或存储器目标操作数可以是寄存器或存储器“与”指令应用例ANDAL,0FHANDCX,0FF00HANDAX,BXANDAX,[BX]DATAANDAX,AX;AX不变,CF=OF=0(2)“或”运算指令OR格式:OROPRD1,OPRD2操作:两操作数相“或”,结果送目标地址ORAL,20HORAX,00FFHOR[BX],AL“或”指令的应用实现两操作数相“或”的运算使某些位不变,某些位置“1”在不改变操作数的情况下使OF=CF=0“或”指令的应用例ORAX,[DI]ORCL,0FHORAX,AXORAL,ALJPEGOONORAL,80HGOON:….偶校验转移(PF=1)将一个二进制数9变为字符‘9’?(3)“非”运算指令NOT格式:NOTOPRD操作:操作数按位取反再送回原地址指令中的操作数不能是立即数指令的执行对标志位无影响例:NOTWORDPTR[SI]NOTAXNOTCL(4)“异或”运算指令XOR格式:XOROPRD1,OPRD2操作:两操作数相“异或”,结果送目标地址两操作数自身相异或,结果XORAX,AXXORAX,1122HXORAL,[BX](5)“测试”指令TEST格式:TESTOPRD1,OPRD2操作:执行“与”运算,但运算的结果不送回目标地址。应用:常用于测试某些位的状态TESTAL,02HTESTAX,8000H2.移位指令非循环移位指令循环移位指令移动一位时由指令直接给出;移动两位及以上,则移位次数由CL指定。1)非循环移位指令逻辑左移算术左移逻辑右移算术右移(1)算术左移和逻辑左移SAL/SHL格式:SALOPRD,1SALOPRD,CLSHLOPRD,1SHLOPRD,CL有符号数无符号数逻辑左移移动一位后,若CF与最高不相等,则OF=1;否则OF=0算术左移160操作数区别:SHL将操作数视为无符号数,SAL将操作数视为有符号数。OF=1对SHL指令不表示左移溢出,对SAL指令表示左移后超出了符号数的表示范围。[例]MOVAL,41HSHLAL,1(AL)=82H,CF=0,OF=1。CF17[例]把以DATA为首址的两个连续单元中的16位无符号数乘以10。LEASI,DATA;(SI)=DATAMOVAX,[SI];(AX)←被乘数SHLAX,1;(AX)=DATA*2MOVBX,AX;MOVCL,2;(CL)=2次数SHLAX,CL;(AX)=DATA*8ADDAX,BX;(AX)=DATA*10HLT(2)逻辑右移SHR格式:SHROPRD,ISHROPRD,CL0CF无符号数的右移移动一位后,若次高位与最高位不相等,则OF=1;否则OF=019SHR指令影响标志位CF和OF。如果移动次数为1,且移位之后新的最高位和次高位不相等,则标志位OF=1,否则OF=0。若移位次数不为1,则OF状态不定。SHR相当于无符号数整除以2iSHRAL,1SHRBX,CLSHRBYTEPTR[SI],CL(3)算术右移SAR格式SAROPRD,1SAROPRD,CL有符号数的右移CF21SARAL,1SARSI,CLSARWORDPTR[BX],1SAR指令影响标志位:CF、OF、PF、SF和ZF,AF值不变。SHR相当于有符号数整除以2i2)循环移位指令不带进位位的循环移位带进位位的循环移位循环移位指令的格式、对操作数的要求与非循环移位指令相同左移ROL右移ROR左移RCL右移RCR23(1)不带进位位的循环左移指令ROL指令格式:ROLOPRD,1ROLOPRD,CLCF24ROL指令影响标志位CF和OF。如果移动次数为1,且移位之后新的最高位和次高位不相等,则标志位OF=1,否则OF=0。若移位次数不为1,则OF状态不定。ROLCH,1ROLBX,CLROLBYTEPTR[BX],125(2)不带进位位的循环右移指令ROR指令格式:ROROPRD,1ROROPRD,CLCF26ROR指令影响标志位CF和OF。如果移动次数为1,且移位之后新的最高位和次高位不相等,则标志位OF=1,否则OF=0。若移位次数不为1,则OF状态不定。RORCH,1RORBL,CLRORWORDPTR[SI],127(3)带进位位的循环左移指令RCL指令格式:RCLOPRD,1RCLOPRD,CLCFCF28ROL指令影响标志位CF和OF。如果移动次数为1,且移位之后新的最高位和次高位不相等,则标志位OF=1,否则OF=0。若移位次数不为1,则OF状态不定。RCLAX,1RCLBL,CLRCLBYTEPTR[SI]DATA,129(4)带进位位的循环右移指令RCR指令格式:RCROPRD,1RCROPRD,CLCF30RCR指令影响标志位CF和OF。如果移动次数为1,且移位之后新的最高位和次高位不相等,则标志位OF=1,否则OF=0。若移位次数不为1,则OF状态不定。RCRAX,1RCRBL,CLRCRWORDPTR[DI]DATA,1循环移位指令的应用用于对某些位状态的测试高位部分和低位部分的交换与非循环移位指令一起组成32位或更长字长数的移位程序例MOVSI,1000HMOVDI,3000HMOVCX,4BBB:MOVAL,[SI]MOVBL,ALANDAL,0FHORAL,30HMOV[DI],ALINCDIMOVAL,BLPUSHCXMOVCL,4SHRAL,CLORAL,30HMOV[DI],ALINCDIINCSIPOPCXDECCXJNZBBBHLT程序功能?程序例将1000H开始存放的四个压缩BCD码转换为ASCII码存放在3000H开始的单元中去┇┇12H34H56H78H┇1000H3000H四、串操作指令针对数据块或字符串的操作可实现存储器到存储器的数据传送待操作的数据串称为源串,目标地址称为目标串串操作指令的特点源串一般存放在数据段,偏移地址由SI指定。允许段重设目标串必须在附加段,偏移地址由DI指定指令自动修改地址指针,修改方向由DF决定。DF=0增地址方向;DF=1减地址方向数据块长度值由CX指定可增加自动重复前缀以实现自动修改CX内容串操作指令流程取源串地址取目标串地址设串长度传送一个字节或字修改地址指针修改串长度值传送完否?重复前缀REP无条件重复REPE相等重复REPZ结果为零重复REPNE不相等重复REPNZ不为零重复条件重复CX≠0∧ZF=1CX≠0∧ZF=0CX=0串操作指令串传送MOVS串比较CMPS串扫描SCAS串装入LODS串送存STOS(1)串传送指令格式:MOVSOPRD1,OPRD2MOVSB;传送一个字节MOVSW;传送一个字串传送指令常与无条件重复前缀REP连用串传送指令例对比用MOV指令和MOVS指令实现将200B数据从内存的一个区域送到另一个区域的程序段串传送指令例将2000H:1200H地址开始的100字节传送到6000H:0000H开始的内存单元中。MOVAX,2000HMOVDS,AXMOVAX,6000HMOVES,AXMOVSI,1200HMOVDI,0MOVCX,100CLDREPMOVSB(2)串比较指令格式:CMPSOPRD1,OPRD2CMPSBCMPSW串比较指令常与条件重复前缀(REPE、REPZ、REPNE、REPNZ)连用,指令的执行不改变操作数,仅影响标志位。串比较指令例比较两个字符串是否相同,并找出其中第一个不相同字符的地址,将该地址送BX,不相同字符的送AL。两个字符串的长度均为200B,M1、M2分别为源串、目标串的首地址。LEASI,M1LEADI,M2MOVCX,200CLDREPECMPSBTESTCX,00FFHJZSTOPDECSIMOVAL,[SI]MOVBX,SISTOP:HLT(3)串扫描指令格式:SCASOPRD(目的串)SCASBSCASW执行与CMPS指令相似的操作,只是这里的源操作数是AX或AL(目的串由ES:DI所指向)目标操作数串扫描指令的应用常用于在指定存储区域中寻找某个关键字46串扫描指令例在ES段中从2000H单元开始存放了10个字符,寻找其中有无字符“A”。若有则记下搜索次数(放在DATA1单元),并记下存放“A”的地址(放在DATA2单元)。MOVDI,2000HMOVDI,0MOVBX,2000HJMPDONEMOVCX,0AHFOUD:DECDIMOVAL,‘A’MOVDATA2,DICLDINCDIREPNZSCASBSUBDI,BXJZFOUDDONE:MOVDATA1,DI(4)串装入指令格式:LODSOPRD(源串)LODSBLODSW操作:对字节:AL([DS:SI])对字:AX([DS:SI])源操作数串装入指令用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口;LODS指令一般不加重复前缀;LODS指令不影响标志位。49[例]以MEM为首地址的内存区域中有10个以非压缩BCD码形式存放的十进制数,它们的值可能是0~9中的任意一个,现编程将这10个数顺序显示在屏幕上。LEASI,MEMMOVCX,10CLDMOVAH,02HNEXT:LODSBADDAL,30HMOVDL,ALINT21HDECCXJNZNEXTHLT(5)串存储指令格式:STOSOPRD(目的串)STOSBSTOSW指令对标志位不影响操作:对字节:AL([ES:DI])对字:AX([ES:DI])STOS指令可以加重复前缀REP,对连续的存储单元存入相同的值;目标操作数串送存指令例将内存某个区域清零设计思想:区域首地址送ES:DI串长度送CX置方向标志DF0送累加器AL执行串送存指令p13952[例]把6000H:1200H单元开始的100个字存储单元内容清零。MOVAX,6000HMOVES,AXMOVDI,1200HMOVCX,100CLDMOVAX,0REPSTOSW五、程序控制指令转移指令循环控制过程调用中断控制1.无条件转移指令无条件转移指令无条件转移到目标地址,执行新的指令有条件转移指令在具备一定条件的情况下转移到目标地址通过修改指令的偏移地址或段地址及偏移地址实现程序的转移无条件转移指令格式:JMPOPRD目标地址与JMP在同一代码段与JMP不在同一代码段原则上可实现在整个内存空间的转移无条件段内转移转移的目标地址在当前代码段内指令中直接给出目标地址由指令中的寄存器或存储器操作数指出目标地址段内直接寻址段内间接寻址(1)无条件段内直接转移JMPLabel近地址标号JMPLabel┇┇┇代码段位移量下一条要执行指令的偏移地址=当前IP+位移量58●段内直接短转移偏移地址为8位,转移范围为–128~+127B,在标号前加运算符SHORT;●段内直接近转移偏移地址为16位,转移范围为–32768~+32767B,在标号前加运算符NEAR,缺省时为近转移。无条件段内间接转移JMPBXJMPWORDPTR[BX+DI]JMP┇┇┇代码段数据段BX=1200┇50H23HIPJMP指令60●指令中的操作数是16位的寄存器或者存储器地址;●可以采用各种寻址方式;●指令的执行是用指定的寄存器内容或者两个存储器单元内容作为目标的偏移地址来代替原来的IP的内容。无条件转移指令——段间转移转移的目标地址不在当前代码段内指
本文标题:微型计算机原理与接口技术 第3章2
链接地址:https://www.777doc.com/doc-3178097 .html