




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上一讲内容回顾上一讲内容回顾 十进制算术指令十进制算术指令v 移位和循环移位指令移位和循环移位指令and、test、or、xor、notshl/sal、shr、sarrol、ror、rcl、rcr0cfdestshl/sal:destcf0shr:dsetcfsar:cfdestrol:cfdestror:cfdestrcl:cfdestrcr:第三章第三章 8086的通用指令的通用指令要求:掌握所学要求:掌握所学8086指令的格式、操作、功能和使用指令的格式、操作、功能和使用方法,达到灵活使用各指令编程的要求。方法,达到灵活使用各指令编程的要求。 2010-04-133.4.6 控制传送指令
2、控制传送指令所有的程序控制转移类指令均不影响标志位所有的程序控制转移类指令均不影响标志位jmp ll64kb内内段内转移:段内转移:目标指令与目标指令与转移指令在转移指令在同一代码段同一代码段中,只改变中,只改变ip的值的值ll:新新cs :ip分为两种情况:分为两种情况:段内转移和段间段内转移和段间转移转移cs:ipjmp ll可以超过可以超过64kb段间转移,目标指令段间转移,目标指令与转移指令分别在不与转移指令分别在不同的代码段,转移时同的代码段,转移时需要改变需要改变cs和和ip的值的值cs:ipll:新新cs:ip1、无条件转移指令、无条件转移指令格式:格式:jmp oprd功能:程
3、序转向由功能:程序转向由oprd指向的位置执行指向的位置执行分为两种情况:直接转移和间接转移分为两种情况:直接转移和间接转移(1)直接转移,)直接转移,分为三种情况:分为三种情况: 短转移:短转移:jmp short oprd 近转移:近转移:jmp near ptr oprd 远转移:远转移:jmp far ptr oprdoprd通常以标号形式出现,通常以标号形式出现,near为默认值为默认值可以省略。可以省略。jmp againjmp far ptr datchgjmp ll -128127-3276832767短程、近程:短程、近程:差别在于转差别在于转移的距离不移的距离不同,其位移同
4、,其位移量一个是量一个是8位,一个是位,一个是16位。位。ll:新新cs :ip短转移与近转移属段内转移,远转移属段间转移。短转移与近转移属段内转移,远转移属段间转移。cs:ip近转移、短转移时,近转移、短转移时,cs不变,不变,ip=ip+位移量位移量远转移时,新的远转移时,新的cs和和ip由由oprd指向位置的段地址和指向位置的段地址和段内地址决定。段内地址决定。(2)间接转移)间接转移 操作数一般是一个存储器操作数,真正的转操作数一般是一个存储器操作数,真正的转移地址在内存中。移地址在内存中。(操作数是寄存器时例外)(操作数是寄存器时例外) 分为两种情况:分为两种情况: 段内间接转移和段
5、间间接转移段内间接转移和段间间接转移1)段内)段内间接间接转移:转移:格式:格式:jmp word ptr oprd转移地址存放在内存单元中,转移指令后给出的是内存转移地址存放在内存单元中,转移指令后给出的是内存单元的地址。单元的地址。格式:格式:jmp oprd ;oprd为寄存器名为寄存器名 jmp bx; (bx)ipjmp word ptrsi; ds:si+1ds:siipds:siip2)段间)段间间接间接转移:转移:格式:格式:jmp dword ptr oprd转移地址存放在内存单元中,一般用寄存器间接转移地址存放在内存单元中,一般用寄存器间接寻址。寻址。jmp dword p
6、tr si; ds:si+3si+2cs ds:si+1siipds:sicsip2、条件转移指令:、条件转移指令:功能:根据条件来判断程序是否转移。功能:根据条件来判断程序是否转移。 满足条件时程序转向指定位置执行,满足条件时程序转向指定位置执行,否则,程序顺序执行。否则,程序顺序执行。 (注意:此时程序出现分支)(注意:此时程序出现分支) 只能转移到距当前指令只能转移到距当前指令-128127字节的范围内,字节的范围内,即一个字节的补码范围;即一个字节的补码范围;jnz ll127128按转移条件不同,条件转移指令可以分为四大类:按转移条件不同,条件转移指令可以分为四大类: 以单个状态标志
7、作为转移条件助记符以单个状态标志作为转移条件助记符 转移条件转移条件 以以cx的值为的值为0作为转移条件作为转移条件jcxzcx=0根据根据5个标志位来判断个标志位来判断判断循环用判断循环用见教材见教材p75p757777ja/jnbecfzf=0高于高于/jae/jnb/jnccf=0 高于或等于高于或等于/无进位无进位jb/jnae/jccf=1 /不高于等于不高于等于/有进位有进位jbe/jnacfzf=1 /不高于不高于以两个无符号数比较的结果作为转移条件以两个无符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件jg/jnle(sf o
8、f)zf=0大于大于/jge/jnl sf of=0 大于或等于大于或等于/jl/jnge sf of=1 /不大于等于不大于等于jle/jng(sf of)zf=1/不大于不大于见教材见教材p77p777878注意几点注意几点所有条件转移指令都是相对转移形式,所有条件转移指令都是相对转移形式,范围(范围(-128+127)。)。当需往一个较远地方进行条件转移时,当需往一个较远地方进行条件转移时,选用条件转移转到附近一个单元,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。然后,再用无条件转移转到较远的目的地。 条件转移指令中,相当一部分指令是在比较完二个数大小条件转移指令
9、中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,后,根据结果而决定是否转移,条件转移指令不影响标志位条件转移指令不影响标志位条件转移指令常用来进行判断,以实现程序分条件转移指令常用来进行判断,以实现程序分支:支: cmp al, 0 jae al,nn mov dl, 1 jmp done nn: mov dl, 0done: 程序执行完以后,若程序执行完以后,若al的值小于的值小于0则则dl1,反之则反之则dl0 。条件转移指令应用条件转移指令应用 例:比较二个数是否相等例:比较二个数是否相等 如相等做动作如相等做动作1 否则做动否则做动作作2cmp ax,bxaction
10、_2: 或或 cmp ax,bx action_1: 下面程序段在什么情况下执行的结果是下面程序段在什么情况下执行的结果是al=0begin: in al, 5fh test al, 80h jz a1 xor al, al jmp stopa1: mov al, 0ffhstop: hlt当从当从5fh端口读到的数据的最高位为端口读到的数据的最高位为1时时从数据区从数据区bcdbuf开始存放着开始存放着10个用非压缩个用非压缩bcd码表示码表示的十进制数,要求把它们分别转换成的十进制数,要求把它们分别转换成ascii码后存入另一码后存入另一缓冲区。缓冲区。 lea si , bcdbuf l
11、ea di, asibuf mov cx, 10again: mov al, si ;取;取bcd码码 or al, 30h ;转换;转换 mov di, al ;存;存 inc si inc di dec cx jnz again 分析:分析:bcd码转换码转换成成ascii码的码的方法是:方法是:bcd码码30h3、循环控制指令、循环控制指令编程时,可以用条件转移指令控制循环,编程时,可以用条件转移指令控制循环,如:如: mov cx, 10 again: add ax, 1 dec cx jnz again也有专用的循环控制指令也有专用的循环控制指令(3条条)。v 3条指令控制转移范围均
12、在条指令控制转移范围均在-128127字节内;字节内;v 循环前必须将循环次数赋值给循环前必须将循环次数赋值给cx。 1) 格式:格式:loop 标号标号cx-1cx, 若若cx不为不为0,转移到标号处继续循环,转移到标号处继续循环2) 格式:格式:loopz/loope 标号标号cx-1cx, 若若cx0且且zf=1时转到标号处继续循环时转到标号处继续循环cx为为0并不影响标志位并不影响标志位zf,zf是否为是否为1是由循环指令是由循环指令前面的指令决定的。前面的指令决定的。3) 格式:格式: loopnz/loopne 标号标号cx-1cx, 若若cx0且且zf=0时转到标号处继续循环时转
13、到标号处继续循环 下面程序段执行后,下面程序段执行后,ax=? mov ax,0ffffh mov cx, 4lop1: shl ax, 1 loop lop1 ; ax: 1111 1111 1111 1111; ax: 1111 1111 1111 1110; 循环循环4次次结果:结果:ax 0fff0h其中其中loop lop1 相当于相当于 dec cx jnz lop1 这两条指令这两条指令 mov cx, 40 lea si, tablenext: cmp byte ptrsi , 0 jnz okk inc si loop nextokk: call display2 下面的程序
14、段用于在下面的程序段用于在40个元素构成的数组中寻找第一个个元素构成的数组中寻找第一个非非0元素,数组元素从数据段的元素,数组元素从数据段的table处开始存放。处开始存放。 ; 设置循环次数设置循环次数; 设置地址指针设置地址指针; 与与0比较比较; cx-1且且cx 0 继续循环继续循环; 若若zf 1,说明找到了退出循环,说明找到了退出循环; 找到后,调用显示信息找到后,调用显示信息; zf=1,说明未找到修改地址指针,说明未找到修改地址指针如果要求寻找第一个为如果要求寻找第一个为0的元素,程序该如何修改?的元素,程序该如何修改?与条件转移指令不同的是:与条件转移指令不同的是:循环指令隐
15、含循环指令隐含 ( cx ) 减操作。减操作。例:用循环指令将例:用循环指令将bl寄存器的内容按二进制形式显示出来寄存器的内容按二进制形式显示出来mov cx , 8 next: rol bl , 1 mov dl , bl and dl , 0000 0001b add dl , 0011 0000b mov ah , 2 int 21h dec cx jnz nextloop next循环指令说明:循环指令说明: loop退出循环条件是(退出循环条件是(cx)=0 loopz和和loopnz提供了提前结束循环的可能提供了提前结束循环的可能, 不一定要等到不一定要等到(cx)=0才退出循环。
16、才退出循环。 在串中查找字符,查到了,就可退出,在串中查找字符,查到了,就可退出,可用可用loopnz,不相等时继续查找。,不相等时继续查找。比较两串时,当有字符不等,就可退出,说明两字符串不等。比较两串时,当有字符不等,就可退出,说明两字符串不等。可用可用loopz,当相等时继续比较。,当相等时继续比较。执行完执行完 loopnz或或loopz后,根据后,根据zf标志的值判断结果标志的值判断结果对查找字符,对查找字符,zf=1,说明找到;否则没有找到。说明找到;否则没有找到。 对串比较,对串比较,zf=1, 说明两串相等;否则不等。说明两串相等;否则不等。4、子程序调用和返回指令、子程序调用
17、和返回指令call tret调用处调用处子程序首子程序首地址地址:t子程序子程序返回处返回处返回指令返回指令call near ptr oprdcall far ptr oprd功能:调用子程序功能:调用子程序ret 功能:返回主程序功能:返回主程序 同样分段内调用和段间调同样分段内调用和段间调用,一般为直接调用用,一般为直接调用如:如:call t其中其中t为子程序入口标号为子程序入口标号1)段内调用:)段内调用:子程序距调用语句不超过子程序距调用语句不超过64kb,在同一,在同一个代码段内,调用时,只改变个代码段内,调用时,只改变ip即可。即可。 如执行如执行call aa, aa标号的偏
18、移地址是标号的偏移地址是8050hcallaa ret3010h8050hsscssp1. 将将3010h入栈,保护入栈,保护 返返回地址回地址sp30h10hsp2. 将将8050h赋给赋给ip3. 执行子程序执行子程序4. 执行执行ret, 栈顶内容弹栈顶内容弹出送出送ip5. 继续运行主程序继续运行主程序spcall near_proc call执行时,它首先将ip内容压栈,然后把指令中给出的位移量加到ip上。 (sp) (sp) -2 (sp) (ip) (ip) near_proc2)段间调用:)段间调用:子程序距调用语句可以超过子程序距调用语句可以超过64kb,不在同一代码段,不在
19、同一代码段,调用时,调用时,需要同时改变需要同时改变cs和和ip。callret调用指令调用指令2000h:1500h3400h:2460hss20h00hsp15h00h原原cs原原ip3400hcs2460hip1500hip2000hcs执行执行call next, next指向的地址是指向的地址是 3400h:2460h段间调用步骤:段间调用步骤:1. 将调用指令后的第一条指令地址的将调用指令后的第一条指令地址的cs入栈;入栈;2. 将调用指令后的第一条指令地址的将调用指令后的第一条指令地址的ip入栈;入栈;3. 将将调用目的地调用目的地地址的段地址赋值地址的段地址赋值cs;4. 将将
20、调用目的地调用目的地地址的偏移地址赋值地址的偏移地址赋值ip;5. 执行子程序,直至遇到执行子程序,直至遇到ret指令;指令;6. 将栈顶当前内容赋值将栈顶当前内容赋值ip;7. 将栈顶当前内容赋值将栈顶当前内容赋值cs;8. 返回主程序。返回主程序。call call far_proc ;far_procfar_proc ;far_proc为远过程的地址为远过程的地址指令的操作为:指令的操作为: sp(sp)-2sp(sp)-2 (sp)(cs) ;cs (sp)(cs) ;cs压栈压栈 sp(sp)-2sp(sp)-2 (sp)(ip) ;ip (sp)(ip) ;ip压栈压栈 cscs段
21、地址段地址 ipip偏移地址偏移地址例:call 2000h:1000h3)返回指令:)返回指令:ret将当前堆栈内容返回到将当前堆栈内容返回到ip(段内调用段内调用)或或ip,cs(段间调段间调用用),具体是段内调用还是段间调用由定义子程序的语句具体是段内调用还是段间调用由定义子程序的语句决定的决定的。ret n:从栈顶弹出返回地址后,从栈顶弹出返回地址后,sp+nsp,n为偶数,为偶数,即栈顶位置跳过即栈顶位置跳过n个字节个字节。返回地址后返回地址后spret 4sp+4sp4段内段内返回指令返回指令retret的操作为:的操作为: ip(sp) ;ip(sp) ;栈顶内容弹出到栈顶内容弹
22、出到ipip sp(sp)+2 sp(sp)+2段间段间返回指令返回指令retret的操作为:的操作为: ip(sp) ;ip(sp) ;栈顶内容弹出到栈顶内容弹出到ipip sp(sp)+2 sp(sp)+2 cs(sp) ; cs(sp) ;栈顶内容弹出到栈顶内容弹出到cscs sp(sp)+2 sp(sp)+2 4)软件中断指令、溢出中断指令软件中断指令、溢出中断指令 中断(中断(interrupt):): 有时当系统运行或程序运行期间遇到某些特殊情况,有时当系统运行或程序运行期间遇到某些特殊情况, 需要计算机自动执行一组专门的例行程序来进行处理。需要计算机自动执行一组专门的例行程序来进
23、行处理。 中断例行程序(或中断子程序)中断例行程序(或中断子程序)(interrupt routine):所所执行的这组程序就称为中断子程序。执行的这组程序就称为中断子程序。 种类:种类: 中断分为内部(软)中断和外部(硬)中断两种。中断分为内部(软)中断和外部(硬)中断两种。 内部中断内部中断如除法运算中除数为如除法运算中除数为0、中断指令引起的中断。、中断指令引起的中断。 外部中断外部中断处理处理i/o设备与设备与cpu之间的通信。之间的通信。见教材见教材p80p80q cpu响应一次中断自动完成三件事情:响应一次中断自动完成三件事情:(psw)入栈)入栈 保护现场,保护现场,(cs),(
24、),(ip)保存入栈)保存入栈 保留断点,保留断点, 转中断例行程序去执行。转中断例行程序去执行。q 中断返回时:中断返回时: 恢复(恢复(ip)、()、(cs)及()及(psw)中断向量:中断例行程序入口地址。中断向量:中断例行程序入口地址。ibm-pc中,存储器的最底地址中,存储器的最底地址00000h003ffh为中断向量区,为中断向量区, 存放存放256种类型中断例行程序入口地址种类型中断例行程序入口地址, 每个中断向量占每个中断向量占4个单元个单元。中断指定类型号中断指定类型号n 4取得指定类型的中断向量地址。取得指定类型的中断向量地址。例:中断类型例:中断类型9, 9 4=36 0
25、0024h00027h单元中放中断向量。单元中放中断向量。 格式: int n ;n=0255,为中断类型号本指令的操作步骤为:(sp)(sp)(flagsflags) ),sp(sp)-2 sp(sp)-2 ; flag flag 入栈入栈 if0,tf0if0,tf0 中断服务程序中禁止外部intr中断和单步中断(sp)(sp)(cscs) ),sp(sp)-2sp(sp)-2,cs(ncs(n* *4+2)4+2) 中断服务程序的段地址送入cs。n*4为向量地址。该向量 地址中的内容即为中断服务程序入口地址。(sp)(sp)(ipip) ),sp(sp)-2sp(sp)-2,ip(nip
26、(n* *4)4) 中断服务程序的偏移地址送ip。int指令只影响if和tf, 对其余标志位无影响。int指令可用于调用系统服务程序,如int 21hmov ah,2int 21 int软件中断软件中断into检查溢出标志of,如果of=1,则启动一个类型4的中断过程;如果of=0,不做任何操作。通常into指令安排在有符号数算术运算指令后面。如imul dxinto ;若溢出,则启动int 4,否则继续mov result,axmov result+2,dx into溢出中断溢出中断用于从中断服务程序返回被中断的程序。用于从中断服务程序返回被中断的程序。任何中断服务程序不管是外部中断引起的任
27、何中断服务程序不管是外部中断引起的, ,还是内部中断引还是内部中断引起的起的, ,最后都要用最后都要用iretiret返回返回。 该指令执行的操作为:该指令执行的操作为: ip(sp) ;ip(sp) ;栈顶内容弹出到栈顶内容弹出到ipip sp(sp)+2 sp(sp)+2 cs(sp) ; cs(sp) ;栈顶内容弹出到栈顶内容弹出到cscs sp(sp)+2 sp(sp)+2 flags(sp) ; flags(sp) ;栈顶内容弹出到栈顶内容弹出到flagflag sp(sp)+2 sp(sp)+25) 5) 中断返回指令中断返回指令iretiret见教材见教材p80p805. 过程指
28、令过程指令(1)bound(2)enter(3)leave自学自学见教材见教材p80p80 用一条指令实现对一串数据或字符的操作,字符或数用一条指令实现对一串数据或字符的操作,字符或数据的个数在据的个数在cx中,每执行一次中,每执行一次cx自动减自动减1,直至减,直至减到零串操作自动停止;到零串操作自动停止; 源操作数在源操作数在ds:si中,目的操作数在中,目的操作数在es:di中;中; 源操作数和目的操作数都在内存中,是唯一一条从内源操作数和目的操作数都在内存中,是唯一一条从内存到内存的指令;存到内存的指令; df=1,地址自动由高至低减量,进行串运算;,地址自动由高至低减量,进行串运算;
29、df=0,地址自动由低至高增量,进行串运算。地址自动由低至高增量,进行串运算。3.4.7 串操作指令串操作指令执行串指令之前,应先进行如下设置:执行串指令之前,应先进行如下设置:源串首地址(或末地址)源串首地址(或末地址) si目的串首地址(或末地址)目的串首地址(或末地址) di串长度串长度 cx建立方向标志(建立方向标志(cld使使df=0,std使使df=1) 建立方向标志介绍两条指令建立方向标志介绍两条指令: cld(clear direction flag) 功能:功能:df=0,执行串处理指令时,执行串处理指令时 可以使地址可以使地址自动自动+1或或+2。 std(set dire
30、ction flag)功能:功能:df=1,执行串处理指令时可以使地址,执行串处理指令时可以使地址自动自动-1或或 -2。 8086有有7种基本串操作:种基本串操作: 1、 movs(move string) 串传送指令串传送指令 2、cmps(compare string) 串比较指令串比较指令 3、scas(scan string) 串扫描指令串扫描指令 4、lods(load from string) 从串取指令从串取指令 5、stos (store in to string) 存入串指令存入串指令 6、ins串输入指令串输入指令 7、outs串输出指令串输出指令1、串传送指令、串传送指令 movsb:每次传送一个字节;:每次传送一个字节;movsw:每次传送一个字;:每次传送一个字; 将位于将位于ds段,由段,由si
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脊柱裂解症患者心理干预研究-洞察及研究
- 圆通客服考试试题及答案
- 2025年会计培训考试试题及答案
- 复杂网络动态优化机制-洞察及研究
- 2024-2025学年四川省绵阳市高一下学期期末测试英语试题
- 2025年容忍与自由考试题及答案
- 2025年心电图阅图考试题及答案
- 网络拓扑优化与可视化-洞察及研究
- 碳中和政策与产业转型-洞察及研究
- 2025年张家界市公务员招聘考试备考试题附答案解析
- 第三单元第2课时儿童乐园(教学设计)数学北师大版二年级上册2025
- 有害物质管理培训课件
- GB/T 33363-2016预应力热镀锌钢绞线
- GB/T 23510-2009车用燃料甲醇
- 做新时代马克思主义的信仰者与实践者课件
- 实用英语口语900句
- 食品安全事故流行病学个案调查表
- 保健食品安全知识培训
- 风机运行记录表
- 2021新高考语文Ⅰ卷现代文阅读Ⅱ小说《石门阵》赏析及试题详细解析
- 法律谈判实务完整版课件全套教学ppt教程
评论
0/150
提交评论