《计算机接口技术及应用》课件-5.20逻辑运算指令之与指令_第1页
《计算机接口技术及应用》课件-5.20逻辑运算指令之与指令_第2页
《计算机接口技术及应用》课件-5.20逻辑运算指令之与指令_第3页
《计算机接口技术及应用》课件-5.20逻辑运算指令之与指令_第4页
《计算机接口技术及应用》课件-5.20逻辑运算指令之与指令_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理及应用第五章8086指令系统第二十讲逻辑运算指令之与指令下面我们来学习逻辑与指令,逻辑与指令是双操作数指令,它的操作码是AND,逻辑运算指令之与指令双操作数指令操作码:ANDdest,src它的功能是计算两个操作数之间按位相与的结果,并将结果送入目的操作数中逻辑运算指令之与指令双操作数指令操作码:ANDdest,src功能计算两个操作数之间按位相与的结果将结果送入目的操作数中双操作数指令操作码:ANDdest,src功能计算两个操作数之间按位相与的结果将结果送入目的操作数中它可以实现两个八位操作数之间的相与运算或是两个16位操作数之间的相与运算,两个八位操作数之间的相与运算两个十六位操作数之间的相与运算结果没有进位或借位,但是两个操作数的字长必须要相等进位借位两个八位操作数之间的相与运算两个十六位操作数之间的相与运算双操作数指令字长相等与运算指令主要有三种应用场景,应用场景1,计算两个操作数按位相与的结果,比如ANDBL,[si],这条指令是计算BL与SI指向的两个连续的内存单元构成的16位数据相与的结果应用场景1计算两个操作数按位相与的结果ANDBL,[SI]两个内存单元构成16位数据相与第二个应用场景是保留操作数的某几位将其他位清0,这里基于的原理就是一个数跟1相与,结果还是它自己,跟0相加,结果为0所以,在这种应用场景下,只需要设计一个立即数,这个立即数在想要清零的那些位上为0,在其他的位上都为1应用场景2保留操作数的某几位,清零其他位一个数跟1相与,结果等于1一个数跟0相加,结果等于0立即数清零的位为0,其他位为1例如,ANDAL,0fh这条指令将AL的高四位清0,低四位保留ANDAL,0FH应用场景2高四位清0,低四位保留保留操作数的某几位,清零其他位,第三个应用场景是在操作数不变的情况下使CF和OF位清零,这个应用场景利用的是,与运算的结果不管结果如何都会使CF和OF位清0应用场景3操作数不变下使CF和OF位清零运算结果:CF和OF位都会清0例如,ANDAX,AX,这条指令是求AX自己跟自己相与的结果,那就是0和0相与,1和1相与,结果保持不变,但是在计算完成后,CF和OF为0ANDAX,AX应用场景30和0相与1和1相与结果不变操作数不变下使CF和OF位清零下面我们通过一个具体的例子来看一下,与运算指令如何应用,题目要求从地址为3f8h这个端口读入一个字节,如果这个数的比特一位为一,则可以从38h这个端口将data为首地址的一个字输出“与”指令应用从地址为3F8H端口中读入一个字节数,如果该数bit1位为1,则可从38FH端口将DATA为首地址的1个字输出,否则就不能进行数据传送,请编写相应的程序段。这个题目是,输入输出指令和与运算指令的应用其中,输入数据是用输入指令获取的,获取到数据以后,输入指令输出指令与运算指令输入数据“与”指令应用从地址为3F8H端口中读入一个字节数,如果该数bit1位为1,则可从38FH端口将DATA为首地址的1个字输出,否则就不能进行数据传送,请编写相应的程序段。要用与运算指令来判断一下这个数据是否满足条件,输入指令输出指令与运算指令输入数据是否满足条件“与”指令应用从地址为3F8H端口中读入一个字节数,如果该数bit1位为1,则可从38FH端口将DATA为首地址的1个字输出,否则就不能进行数据传送,请编写相应的程序段。,如果不能满足条件的话,就再去这个端口取数据,如果能满足条件的话,就按题目的意思用输出指令将一个数据输出输入指令输出指令与运算指令

不满足条件:端口取数据满足条件:输出指令将数据输出“与”指令应用从地址为3F8H端口中读入一个字节数,如果该数bit1位为1,则可从38FH端口将DATA为首地址的1个字输出,否则就不能进行数据传送,请编写相应的程序段。基于这个思路,我们可以画一下流程图,流程图画好以后,我们将指令填写在相应的流程处,即可完成这个程序分析题目

画流程图

写程序分析题目

画流程图

写程序流程思路下面我们来画一下这个程序的流程图,首先,是要从指定的端口读入数据拿到数据以后,要判断一下它的bit1位是否为1,其次,如果为1,从另一个指定的端口输出数据,如果不为1,就重新读数据,这就是整个流程

画流程图开始从3F8H端口读入数据此数据的bit1是否为1从38FH端口将DATA为首地址的字输出YN超过FFHIN指令流程画完了,我们来看一下,第一步读入数据,要用IN指令,由于给定的端口是3F8H,超过了FFH,因此要先把这个端口传送到DX中,再从DX中读入数据

画流程图开始从3F8H端口读入数据此数据的bit1是否为1从38FH端口将DATA为首地址的字输出YN端口:3F8H传送DX读入数据OUT指令最后一步是输出数据,要用OUT指令,同样,由于给定的端口也超过了FFH,因此也要先把端口号传送到DX中,再从DX中输出数据中间判断条件这一步,是判断数据的bit1位是否为1,我们要知道最低位是比特0位,所以bit1位其实就是次最低位,IN指令

画流程图开始从3F8H端口读入数据此数据的bit1是否为1从38FH端口将DATA为首地址的字输出YN超过FFH端口:3F8H传送DX输出数据最低位:比特0位次最低位:比特1位AND指令OUT指令最后一步是输出数据,要用OUT指令,同样,由于给定的端口也超过了FFH,因此也要先把端口号传送到DX中,再从DX中输出数据中间判断条件这一步,是判断数据的bit1位是否为1,我们要知道最低位是比特0位,所以bit1位其实就是次最低位,IN指令

画流程图开始从3F8H端口读入数据此数据的bit1是否为1从38FH端口将DATA为首地址的字输出YNAND指令那么与次数据相与的立即数,我们可以设计成02H,当两者相与的结果为0时,说明数据的bit1位为0,当两者相与的结果为1时,说明数据的bit1为1IN指令

画流程图开始从3F8H端口读入数据此数据的bit1是否为1从38FH端口将DATA为首地址的字输出YN次数据立即数结果为0时,bit1位为0结果为1时,bit1位为1好,下面我们来看具体的程序是怎么写的,一般程序会有初始化的部分,用来设置内存单元中存储的初值等等具体程序一般程序的初始化部分具体程序一般程序的初始化部分向下箭头内存单元中存储的初值1小时前回复(0)

内存单元中存储的初值但是这个程序中没有设置初始值的要求,那么初始化的部分就可以不写具体程序一般程序的初始化部分内存单元中存储的初值程序没设置初始值要求,初始化部分可不写下面来填写读入数据的部分,先用MOV指令将3F8h传送到DX中,再用IN指令从DX读入数据到AL中,因为题目要求对入一个字节,所以读入到AL中即可。程序编写初始化部分读入数据部分判断数据部分输出数据部分MOVDX,3F8HWAIT:INAL,DXMOV指令将3F8h传送到DX中IN指令从DX读入数据到AL中下面来填写判断的部分,将AL跟02H相与,如果结果为零,就重新读入数据,如果结果不为0,就继续执行。程序编写初始化部分读入数据部分判断数据部分输出数据部分MOVDX,3F8HWAIT:INAL,DXANDAL,02HJZWAIT相与结果为0,重新读入数据结果不为0,继续执行这里的JZ是跳转指令,判断运算结果是否为0,如果为0的话,就跳转到WAIT的位置,开始执行。如果运算结果不为0,就继续执行下一条指令程序编写初始化部分读入数据部分判断数据部分输出数据部分MOVDX,3F8HWAIT:INAL,DXANDAL,02HJZWAIT跳转指令结果为0,跳转到WAIT位置,开始执行

结果不为0,继续执行下一条指令下面来填写输出的部分,用MOV指令将38Fh传送到DX中,再用MOV指令DATA开始的两个连续单元的内存传送到AX中,最后用OUT指令将AX的内容输出到DX指示的端口中。程序编写初始化部分读入数据部分判断数据部分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论