微机原理及应用PPT教学课件-第3章 80868088指令系统.ppt_第1页
微机原理及应用PPT教学课件-第3章 80868088指令系统.ppt_第2页
微机原理及应用PPT教学课件-第3章 80868088指令系统.ppt_第3页
微机原理及应用PPT教学课件-第3章 80868088指令系统.ppt_第4页
微机原理及应用PPT教学课件-第3章 80868088指令系统.ppt_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

,第3章 8086/8088指令系统,主要内容 8080/8086的寻址方式 8088/8086的指令系统,指令的意义,指令是计算机能够识别和执行的操作命令;它描述的cpu应进行的某种确定的操作 机器指令指令的二进制代码形式 例如: cd21h 汇编指令助记符形式的指令 例如:mov ax, bx 指令系统是cpu所有指令及其使用规则的集合,指令的基本构成,操作的类型执行什么操作(加、减、传送、比较等),操作对象操作数的来源与结果的去向 可以有0个、1个(单操作数指令)或2个(双操作数指令) 执行过程中原值不变的操作数称为源操作数(src source),不保留原值的操作数称为目的操作数(dst destination),一条指令应包含两个基本信息,操作码和操作数,add ax,si+6,mov ax , bx,操作码 (两个)操作数,inc bx,xlat,指令的例,3.1 8086/8088的寻址方式,确定指令或操作数的存放地址的过程,称为寻址(寻找地址) 指令寻址 顺序存放 以后讨论 操作数寻址 寻找确定指令所需操作数的过程称为操作数寻址 寻找确定指令所需操作数的方式称为寻址方式 不同“来源”的操作数的寻址方式不同,8088/8086的操作数来源类型,1. 立即数:操作数位于指令存储的区段;即操作数包含在指令中,只要取出该指令,就自然会寻到紧随其后的操作数;称为立即数 2. 寄存器操作数:操作数位于cpu 的某一个内部寄存器中;指令中给出了存放该数据的寄存器名;根据寄存器名,就可寻到操作数;称为寄存器操作数,8088/8086的操作数来源类型,3. 存储器操作数;操作数位于存储器数据区或堆栈区的某个单元中;指令中以不同的方式给出了存储单元的逻辑地址;需要计算出存储单元的地址才可以最终寻到该操作数;称为存储器操作数 4. io端口操作数:操作数位于i/o 端口中;指令中以直接或间接的方式给出i/o 端口的地址;只要知道i/o端口的地址,就可以寻到i/o 端口操作数,8086/8088的操作数的来源不同(4种) 8086/8088提供了多种不同的寻址方式(7种) 立即数寻址 寄存器相对寻址 寄存器寻址 基址加变址寻址 直接寻址 相对基址加变址寻址 寄存器间接寻址,8086/8088的操作数寻址方式,1.立即数寻址,操作数直接出现在指令中,紧跟在操作码之后,并作为指令的一部分放在代码段中 例:mov al,12h ;al23h mov ax,1234h ;ax1234h 立即数只能为整数 立即数只能做源操作数,34h,12h,地址增加,存储器,代码段,ax,al,ah,立即数寻址示意,mov ax,1234h,op,操作数存放在cpu的某个内部寄存器中 根据给出寄存器名,寻找操作数 例:inc cx ;将cx的内容加1 mov ax,bx ;将bx中的值送入ax中,2.寄存器寻址,假设 ax=39a6h bx=69edh cx=40d9h 之后 ax=69edh bx不变 cx=40dah,寄存器寻址图示,存储器操作数寻址的问题,存储器操作数是存放在存储器的某个存储单元中 存储器存储单元的物理地址都是20位的;用pa表示 指令中给出的偏移地址(也称为有效地址)都是16位的;用ea表示 必须结合段寄存器的值并通过运算得到实际的物理地址 根据ea数据的给出和确定方式不同,形成了5种不同的存储器数据的寻址方式,3.直接寻址,存储器操作数的偏移地址(即ea),以数值形式,直接包含在指令中,出现在操作码之后,并与指令代码一起,存放在代码段 物理地址的计算方法 pa=(ds*10h)+数值型ea 例:mov ax,2000h 设(ds)=3000h 则物理地址 pa=30000h+2000h=32000h,op,68,50,存储器,数据段,ax,68,50,代码段,00,20,32000,30000,直接寻址图示,为了区分与立即数寻址,该数值形式表示的有效地址必须应用方括号“ ”括起来 不标记段寄存器时,默认操作数是在数据段(ds)中;否则应使用“段超前”指定段寄存器 例:mov ax,es:2000h 此时应根据es段的基址计算物理地址(即pa=(es*10h)+ea) 并从附加数据段中,取出相应的数据送 ax,直接寻址的使用说明,直接寻址的使用说明,在汇编语言中,可以用“符号地址”代替“数值地址”,称为“符号地址” 若存放着操作数的内存单元的地址,以符号地址buffer1的形式给出,则 mov ax buffer1 mov ax buffer1 mov ax 1134h,4.寄存器间接寻址,操作数的有效地址ea存放在bx、bp、si和di之中的某一个中;称为寄存器间接寻址 区分两种情况计算物理地址: 使用bp 时,操作数通常位于堆栈段,即隐含段寄存器为ss 物理地址计算: pa=(ss*16)+(bp) 使用 bx、si、di 时,操作数通常位于数据段,即隐含段寄存器为ds 使用di多用于存放目标操作数的偏移地址 使用si-多用于存放源操作数的偏移地址,也可用段超级,确定非默认的段寄存器 如果 mov bx,es:bx 那么 pa=(es*10h)+(bx),(bx) pa=(ds*10h)+ (di) (si),寄存器间接寻址,例:mov ax,bx 设(ds)=3000h,(bx)=5000h 该指令将35000h和35001h两存储单元中的内容送 ax,与寄存器间接寻址相似 只是操作数的有效地址ea等于指定寄存器中的 内容再加上一个给定的位移量d ea=bx、di、si、bp寄存器+位移量d 更多的应用是di或si,故也称为“变址寻址” 注意遵守与段寄存器的对应关系;允许“段超前” pa=(段寄存器)*10h+ea,5. 寄存器相对寻址,例:mov ax,2040h bp 若(ss)=5000h, (bp)=3000h, 则:物理地址为: 5000h*16+3000h+2040h=55040h,关于位移量的问题,位移量是一个在指令中直接给出的立即数 位移量的取值范围为; -32768+32767 (即以寄存器存储的偏移地址为基点,向“上”位移32k,向“下”位移32k) 该立即数可用“符号名”定义并表示 该寻址方式下,ea由两个地址分量共同决定,符号名方式的例,mov cx,1050h+bx mov cx,bx+count 是等价的!,若已经定义: count=1050h,6. 基址加变址寻址,操作数的有效地址是一个基址寄存器(bx或bp)内容加上一个变址寄存器(si或di)内容 根据bx或bp的引用,确定数据段还是堆栈段 默认的段寄存器关系同前所述 ea由两个地址分量共同决定,08,2a,存储器,数据段,ax,al,ah,基址加变址寻址示意图,55000,582ea,pa=5500h*10h+0256h+3094h=582eah,例:mov ax,bx+si 若(ds)=5500h (bx)=0256h (si)=3094h,7. 相对基址加变址寻址,与基址加变址寻址方式相似 只是操作数的有效地址ea等于在指定的基址寄存器内容加变址寄存器内容之后,再加上一个给定的位移量d ea=基址寄存器的内容+变址寄存器内容+位移量d pa=(段寄存器)*16+ea 位移量d 的意义同前;ea由三个地址分量共同决定,例; mov ax,bx+di+mask 设:ds=5000h,bx=1256h di=1500h,mask=1f34h 则:pa=5468ah,寻址方式的书写格式问题, 在方括号内部允许有一个或两个寄存器的名字;若有两个,使用“”作为连接符号 在方括号内部允许有位移量,使用+号或-号作为连接符号 在方括号外部允许有位移量,可以在左边或右边 mov ax,bx+si+6 mov ax,bx+si6 mov ax,6bx+si mov ax,bxsi6 mov ax,bx+6si,存储器数据寻址小结,参与存储器寻址的参量包括: 位移量 基地址,通用寄存器中的值 (相对基地址的)索引,通用寄存器中的值 均可为空,但不能同时为空;通过“相加”的运算得到偏移地址;均可正可负(补码) 他们的不同组合,形成不同的寻址方式 参量不同,寻址方式不同,应用目的也不同 多参量的寻址方式,适用于数组、表、记录、字段等更复杂的数据结构,存储器操操作数5种寻址方式,判断寻址方式,计算出ea,3.2 8086/8088指令系统,8086/8088指令系统包含6类指令: 数据传送指令 算术运算指令 逻辑运算指令与 位移指令 串操作指令 程序控制指令 处理器控制指令,部分8086/80888指令,3.2.2 数据传送类指令,数据传送是一种最基本、最主要的操作 数据传送指令应用最频繁,涉及的寻址方式最丰富,指令数量最多 8086cpu数据传送类指令共14 条,通用传送指令 (movement),指令基本格式 mov oprd1,oprd2 作用:将源操作数oprd2传送给目的操作数oprd1 指令说明: 实现字数据或字节数据的传送(复制) 传送的是字节数据还是字数据取决于指令中涉及的寄存器是8位还是16位,通用传送指令的使用格式,通用传送指令的应用例,mov cl,05h 立即数向通用寄存器传送 mov bx,2008h 立即数向存储器单元传送 mov si,bp 通用寄存器之间传送 mov ds,ax 通用寄存器向段寄存器传送 mov bx,es 段寄存器向通用寄存器传送 mov ds, si+bx 存储单元向段寄存器传送 mov bp,es 段寄存器向存储单元传送 mov ax,2008h 存储单元向通用寄存器传送 mov 1234h,bx 通用寄存器向存储单元传送,对mov指令的约定, mov是双操作数指令;源和目的操作数的数据类型必须一致;同为字数据或同为字节数据 源操作数和目的操作数不能同为内存操作数 cs和ip不能作为目的操作数 段寄存器之间不能直接传送数据 立即数不能作为目的操作数 立即数不能直接传送给段寄存器,几种“不能传送问题”的解决办法: mov al,mem1 ;通过寄存器al作桥梁 mov mem2,al ; 用来解决:存存 mov ax,ds ;通过ax解决:段寄段寄 mov es,ax mov ax,data ;通过ax解决:段寄立即数mov ds,ax,对mov指令的约定,分析错误的指令例,交换指令格式为:xchg reg,mem/reg 功能:将源操作数(字或字节)与目的操作数交换 要求两操作数中必须有一个在寄存器中 不允许使用段寄存器;不允许使用立即数; 例: xchg ax,bx xchg 2000h,cl,交换指令xchg (exchange),地址传送指令,作用:传送地址码;将存储某数据的存储单元的段基地址或偏移(有效)地址传送到指定的寄存器中 在该类指令中,源操作数一定是存储器操作数 共有三条指令;只介绍lea,取有效地址指令 load effective address,指令格式: lea reg,mem 将指定存储器操作数mem的16位偏移地址传送到指定的寄存器reg 指令要求源操作数必须是一个存储器操作数;传送的是它的偏移地址;目的操作数必须是一个16位的通用寄存器,例,lea bx,si+0500h 假设 (ds)=3000h,(si)=0100h 执行结果为 (bx)=0600h,执行:lea bx,si+0500h 后: (bx)=0600h ;是一个偏移地址 执行: mov bx,si+0500h 后:(bx)=1234h ;是一个操作数,特别注意,堆栈是按“后进先出“原则定义在存储器中的用来存储数据的特殊的数据存储区域: 堆栈在存储器中的位置由堆栈段段基址ss(起始位置)和堆栈栈顶指针sp确定 堆栈按“后进先出”方式工作,只有一个出入口;出入口称为栈顶 堆栈操作总是字操作;操作包括入栈和出栈,堆栈及堆栈操作指令,堆栈段段基址存放在ss确定了起始位置 堆栈指针sp 始终指向堆栈的栈顶(需对其进行初始化赋值;之后它总指向最后压栈数据的地址) 堆栈指针自动修正 入栈时:sp-2 sp 出栈时:sp+2 sp,sp,段基址ss,堆栈图示,(ss):0000h,(ss):(sp)h,(初始的)sp,堆栈的作用,堆栈是一种特殊的数据结构;专门存放和处理需要按“后进先出”原则存取的数据;如: 在调用子程序时,保存“现场”-原执行程序的ip 在执行具有多重循环语句结构的程序时,保存外循环的循环次数计数寄存器cx的数据,而进入内循环 在响应中断时,保存中断断点处的数据及状态 ”保存“使用入栈指令 push ”恢复“使用出栈指令 pop,主程序,继续执行,主程序,执行子程序,转子程序,压栈,弹出,返回主程序,主程序,继续执行,主程序,转子程序1,返回主程序,执行子程序 2,转子程序2,返回子程序1,执行子程序1,继续执行,子程序1,(a)主程序调子程序,(b)子程序嵌套示意图,保存和恢复ip,多重调用时必然需要多重保存各调用点的ip;为了防止返回错误,恢复的原则制定是“后进先出”,压栈指令 push (push word into stack),压栈指令格式 push oprd 源操作数可以是cpu内部的16位通用寄存器、段寄存器和内存操作数 例:push ax ;将ax内容压栈 执行操作的过程: sp=sp-1; sp=操作数高8位; sp=sp-1; sp= 操作数低8位,(sp),低地址,存储区 (ss段),执行前 (bx)=1020h,(sp),低地址,存储区 (ss段),进栈方向,执行后,20,10,bl,bh,push bx 指令执行示意图,(sp)-1,(sp)-2,弹出指令格式 pop oprd 目的操作数可以是cpu内部的16位通用寄存器、段寄存器(但cs除外)或内存操作数 例: pop bx ;将栈顶内容弹至bx 执行操作的过程: 操作数低8位 = sp; sp=sp1; 操作数高8位 = sp; sp=sp1,弹出指令 pop (pop word off stack),(sp),低地址,存储区 (ss段),出栈方向,执行前,20,10,pop bx 指令执行示意图,(sp),低地址,存储区 (ss段),执行后 (bx)=1020h,20,10,(sp)+1,(sp)+2,例,设当前ssc000h,sp2000h,ax2355h,bx2122h,cx8788h,则当前栈顶的物理地址是多少? sp的物理地址为: c000h*10h+2000h=c2000h 若连续执行 push ax,push bx,pop cx 3 条指令后,堆栈指针的内容发生什么变化?ax、bx、cx 、sp中的内容是什么? (ss)=c000h,(sp)=1ffeh (ax)=2355h,(bx)=2122h,(cx)=2122h,例,已知 ss=01f00h,sp=0000h,试编写程序片段将两个 16 位数 1122h 和 3344h 先后压入堆栈,并画出堆栈区和 sp 内容变化的过程示意图,mov ax, 1122h push ax mov ax, 3344h push ax,01f00:0ffffh,01f00:0fffeh,01f00:0fffdh,01f00:0fffch,01f00:0000h,sp,在计算机中负数以补码的表示 (-1)的补码是0ffffh,标志传送指令,指令的基本功能:将标志寄存器各标志位的内容传送到ah或压入堆栈 传送和压入堆栈的目的是为了对标志位的状态取值进行保存、设置、更新 传送是双向的 共涉及4条指令,与ah的传送指令,(1)读标志指令:lahf (load ah from flags) 本指令把标志寄存器低8位中的5个标志位传送到ah中的指定位 (2)写标志指令:sahf (stroe ah into flags) sahf指令的功能与lahf的功能正好相反,(3)把标志寄存器压入堆栈指令:pushf 执行操作的结果: (sp)-1标志寄存器高8位 (sp)-2标志寄存器低8位 (sp) (sp)-2 (4)从栈顶弹出标志寄存器指令:popf 执行操作的结果:标志寄存器低8位(sp) 标志寄存器高8位(sp)+1 (sp)(sp)+2 pushf和popf指令用于保护和恢复标志寄存器内容,与堆栈的传送指令, cli push ax push cx 内层循环时,将要用到 ax,cx以 pushf 及标志位,故需要保护起来 sti 进入内循环程序 cli popf ; 恢复时,后入栈先弹出 pop cx pop ax sti ,程序例 (进入内层循环时,保护外循环的“现场”),累加器专用传送指令, 所谓专用,只限于用累加器al或ax与i/o端口之间实现数据传送,即cpui/o端口 i/o端口寻址范围:8086/8088采用16位地址线寻址8位i/o端口;寻址范围为 64k 端口地址范围为: 0000h0ffffh 共计2条:in 指令、out指令,i/o端口数据的寻址问题,直接寻址(立即数寻址) 访问端口地址为0000h00ffh(即前256个端口)时,地址直接以立即数形式给出 间接寻址(寄存器寻址) 访问端口地址为0100h0ffffh(即端口地址超过255)时,地址需使用16位寄存器dx寻找,(1) 输入指令 in (input byte or word),指令功能:将端口操作数传送给累加器ax 指令格式: in al,n ; aln in ax,n ; axn+1n in al,dx ; aldx in ax,dx ; axdx+1,dx 例: in al,80h ; (al)(80h) in ax,dx ; (ax)((dx)+1,(dx)),指令功能:将累加器ax中的数据内容传送到端口 指令格式: out n,al ; aln out n,ax ; axn+1,n out dx,al ; aldx out dx,ax ; axdx+1,dx 例: out 68h,ax ;端口(68h+1,68h)(ax) out 30h,al ;端口30h(al) out dx,al ;端口(dx)(al) out dx,ax ;端口(dx+1), (dx)(ax),(2) 输出指令 out (out byte or word),特别提醒,使用dx寄存器间接寻址方式,执行in/out指令之前,应先用传送指令将端口号传送到对dx寄存器 mov dx,0220h in al,dx ;将0220h端口内的字节数据读入al累加器,3.2.3 算术运算指令,算术运算指令涉及两种类型数据,即无符号数和有符号数 对加法指令和减法指令而言,无符号和有符号数可采用同一套指令,其先决条件有两个: 一是参加的操作数必须同为无符号数或同为有符号数 二是要采用不同标志位分别检查无符号数和有符号数的运算结果是否溢出,是否正确 而乘除运算指令则需要区分无符号数和有符号数,1000 1000 136 -120 +1111 0111 +247 +(-9) 1 0111 1111 383 -129 cf=1 of=1 有进位 有溢出,cf 标志可用来判断无符号数运算结果的正确性;如cf=1, 则进行加cf修正后,结果正确 of 标志可用来判断有符号数运算结果的正确性;如of=1, 有溢出即是错误,必须在运算中避免,基本格式:add dst, src 基本功能: dst (dst+src) 基本要求: dst存储器或通用寄存器; src-存储器或通用寄存器,还可以是立即数 例:add al,30h add ax,bx+0020h add cx,si add di,0200h 注:add不考虑cf位的状态(即不考虑有无进位),不带进位的加法指令add (addition),带进位位的加法指令adc(addition with carry),adc 指令在形式上和功能上都有与add类似 只是在相加时要把进位标志的现行值cf加到计算结果的和之中 例如: adc al,68h ;68h+(al)+cf 送 al adc ax,cx adc bx,di,adc主要用于由于数据较大,需要多次运算的加法运算中 例3-28: 有两个4字节的无符号数相加: 2d568f8ch+3c9e489bh=? 设被加数存放在偏移地址为buf1开始的存储区内 加数存放在偏移地址为buf2开始的存储区内 要求和放回buf1开始的存储区,adc指令的使用例,使用16位运算器: lea si,buf1 lea di,buf2 mov ax,si add ax,di mov buf1,ax mov ax,si+2 adc ax,di+2 mov buf1+2h,ax,程序代码例,指令格式:inc reg inc reg/mem 例: inc al ;(al)+1 再送回 (al),加1指令inc (increment by 1),(1) 不考虑借位的减法指令sub (binary subtraction) 基本格式:sub dst, src 基本功能: dst (dst-src) 基本要求: dst存储器数或通用寄存器数 src-存储器数或通用寄存器数,或是立即数 例: sub al,60h sub bx+20h,5678h sub ax,cx,2. 减法指令,下周开始到16周,每周周二晚上6:308:30,微机原理课程 安排答疑。地点:逸夫楼102,本指令在形式上和功能上都和sub类似,只是相减时还应减去cf的现行值 例:sbb ax,cx ;ax ax -cx-cf sbb si,2080h sbb指令主要用于需要多次进行减法运算的计算 被减数不够减而产生借位时,进位标志 cf=1,(2) 考虑借位的减法指令sbb (subtraction with borrow),指令格式:dec reg dec mem 例: dec cl dec di+02h,(3) 减1指令dec (decrement by 1),cmp的实质是执行两个操作数相减,但不送回运算的结果;其结果只反映在标志位上;根据对标志位影响,判断两个操作数的大小关系 例:cmp al,0ah ;al与0ah比较 cmp cx,si ;cx与si比较 cmp di,bx+03 ;di与存储器数比较,(5) 比较指令cmp,若两个所比较的数相等,则zf=1,否则zf=0 这样就可以: 根据zf就可判断两个数是否相等,比较结果两数相等,比较结果无符号数的大小,比较的是两个无符号数 若cf=0,则被减数大,因大数减小数无须借位 若cf=1,则被减数小,故对带符号数进行比较时,比较结果可归纳为: ofsf=0时(或sf=of),被减数大 ofsf=1时(或 sfof),减数大,比较结果带符号数的大小,比较的是两个有符号数例,比较指令的应用问题,比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向 例如有符号数比较结果的条件转移指令: jg;“大于”时转移,条件是: ofsf=0 jng;“不大于”时转移,条件是: ofsf=1,或zf=1,举例:比较al、bl、cl中带符号数的大小,将 最小数放在al中(三数选小问题) 程序段如下: cmp al,bl ;al和bl比较,测试标志位 jng bbb ;若albl,则转 xchg al,bl ;若albl,则交换 bbb: cmp al,cl ;al和cl比较 jng ccc ;若alcl,则转 xchg al,cl ;若alcl,则交换 ccc: int 20h ;返回dos,乘法指令的目的操作数是隐含的 若是字节数相乘,被乘数将被固定在al中 若是字数据相乘,被乘数将被固定在ax中 进行乘法时: 8位*8位16位的乘积固定地放在ax中 16位*16位32位的乘积 高16位放在dx中,低16位放在ax中 乘法运算共有三条指令,只要求一条,3. 乘法指令,执行乘法指令对被乘数和乘积的存放地方的规定: 被乘数存放地方 乘积存放地方 对字节数据乘 al ax 对字数据乘 ax dx,ax,图示,无符号数的乘法指令,指令格式: mul mem/reg 将操作数(字或字节)与累加器(ax/al)中的数都看作是无符号数,相乘之后,积存放在dx和ax或ax中 操作数不可以是立即数,例:mul bl ;al* bl,乘积在ax中 mul cx ;ax* cx,乘积在dx和ax中,4. 除法指令,8086/8088 cpu执行除法运算,指令要求被除数字长为除数字长的两倍 参加运算的被除数、商及余数存放地方如下规定: 被除数 商 余数 字节除法 ax al ah 字除法 dx:ax ax dx,图示,指令格式: div mem/reg 例: div cl ;ax除以cl 例: ax=2000h,dx=0200h,bx=1000h 则 div bx 执行后 ax=2002h ,dx=0000,无符号数除法指令,除法运算的特殊问题,若除数为零或(由于除数很小或被除数很大,如ffffh/01h,使得)al中商大于ffh,或ax中商大于ffffh,就会产生溢出,此时则cpu将产生一个类型0的除法出错中断,进行处理,3.2.4 逻辑运算与位移指令,逻辑运算包括逻辑与、逻辑或、逻辑非、逻辑异或4条指令以及一条tset测试指令 逻辑运算均为“按位运算” 操作数可以是字节数也可以是字数据 操作数不能同为存储器操作数,指令格式: and dest ,src 指令功能:对两个指定的操作数,按位进行逻辑“与”,运算结果存放在目的操作数中 例:and al,0fh ;保留al中低4位 and si,0 ; 将si清0 and al, 11010101b ; 将al的d1、d3、d5位清0,其余位不变,(1) 逻辑“与”指令and,指令格式: test dest ,src 指令功能:本指令完成and指令类似操作,但不将与运算的结果送回,只影响标志位 例:test al,80h ;若al中d7=1,则zf=0, 否则zf=1 test cx,0ffffh ;cx内容不为0,则zf=0,(2) 测试指令test,例:test al,80h ;检查al中d7=1? jnz aaa ;如果是1,则与运算结果非0,说明 al中的内容为一个负数,则转 ;否则不转,al中的内容为一个正数 aaa: ,指令格式: or dest ,src 指令功能:对两个指定的操作数按位进行逻辑”或” 运算结果存放在目的操作数中 例:or al,80h ;al与立即数”或” or al, 00101010b ; 将al的d1、d3、d5位置1,其余位不变,(3) 逻辑”或”指令or,指令格式: xor dest ,src 指令功能:对两个指定的操作数按位进行”异或” 运算结果存放在目的操作数中 异或运算的结果是: 与0“异或”,该位不变; 与1“异或”,该位取反 例:xor al,0fh ;al“异或”立即数 xor al, 00101010b ; 将al的d1、d3、d5位 取反,其余位不变 xor ax,ax ;清零ax,(4) 逻辑”异或”指令xor,指令格式:not oprd (mem/reg) 指令功能:单操作数指令;取反后再送回该操作数 例:not cx ;cx取反 not ax ;执行前 ax=0503h, 执行后 ax=0fafch,(5) 取反指令not,(非循环)位移指令,8086/8088 cpu有4条非循环移位指令: 算术左移指令sal 逻辑左移指令shl 算术右移指令sar 逻辑右移指令shr 这4条指令的格式相同,以sal为例: sal oprd cl/1,最低位,最高位,cf,0,(a) 算术左移sal,最低位,最高位,cf,0,(b) 逻辑左移shl,最低位,最高位,cf,(c) 算术右移sar,最低位,最高位,cf,(d) 逻辑右移shr,0,指令执行的操作功能,sal与shl在形式上和功能上都完全一样 sar与shr的功能不同 执行算术移位时,右移前后符号位肯定不变,故可把操作数看做有符号数, 逻辑右移位时,将有可能改变符号位,故多把操作数看做无符号数 指令执行时,如果只移1位,在指令中用1表示,若移位数多于1,则必须在cl中指定,如: shl dx,1 sal al,cl ;cl中的值需预先指定,移位指令的应用价值,非循环移位 左移指令shl执行一次移位,相当于无符号数的乘2 逻辑右移指令shr执行一位移位,相当于无符号数除以2,商在目的操作数中,余数由cf标志位反映,例:计算 dx3ax7bx,假设为无符号数运算(不考虑进位) mov si,ax shl si,1 ;si2ax add si,ax ;si3ax mov dx,bx mov cl,03h shl dx,cl ;dx8bx 左移3次 sub dx,bx ;dx7bx 减去一个 bx add dx,si ;dx7bx3ax,例:说明逻辑运算指令和移位指令的应用方法 bcd码ascii码 设在1000h开始存有四个组合的

温馨提示

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

评论

0/150

提交评论