第三章8086指令系统.ppt

上传人:京东小超市 文档编号:5989395 上传时间:2020-08-19 格式:PPT 页数:34 大小:108.50KB
返回 下载 相关 举报
第三章8086指令系统.ppt_第1页
第1页 / 共34页
第三章8086指令系统.ppt_第2页
第2页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第三章8086指令系统.ppt》由会员分享,可在线阅读,更多相关《第三章8086指令系统.ppt(34页珍藏版)》请在三一文库上搜索。

1、第三章 8086 指令系统,每种计算机都有一组指令集提供给用户使用,这组指令集称为该计算机的指令系统。8086微处理器的指令系统具有8位和16位的处理能力。80386、80486等CPU具有32位处理能力。本课程只讲8086指令系统。 CPU只能执行二进制代码形式的机器指令,8086机器指令是变字节指令,一条指令一般由16个字节组成(加上前缀字节,最长的可为7字节指令)。 8086 机器指令代码由操作码和操作数代码两部分组成。 直接用机器指令编写程序是一件十分困难的事。通常是用汇编语言编写程序,输入计算机后,由汇编程序将它翻译成机器语言程序,计算机才能执行。因此这里对8086机器语言格式不作更

2、多的叙述。本课程主要介绍汇编语言格式的8086计算机指令。,登荔傍僻刊藤呢芥捆镐歧胜貌隆执舞包考贾厌起其蹬潍佛泞瓶撑文款轮巢第三章8086指令系统第三章8086指令系统,3.1 8086 指令的寻址方式,一条指令主要包括两方面内容:一是指令进行什么操作,这由指令操作符表明。二是操作涉及的操作数存放在什么地方,操作的结果存放在什么地方(有些指令不涉及操作数)。 8086指令涉及的操作数的存放地点可分为4类: 操作数直接存放在指令中,即指令本身就含有操作数。 操作数在寄存器中,指令中指眀寄存器的名称。 操作数在内存单元中,指令中指明内存单元的地址。 当操作数在内存单元中,寻址所需的偏移地址又叫有效

3、地址,用EA表示,它是一个16位的无符号数。 数据存放在I/O端口中,指令中指明I/O端口的地址。 寻址方式就是指令中用于说明操作数所在地址的方法。8086可采用许多不同的方法来说明操作数所在的地址。,利窃弗溜寡点幅冤缆鞋舒羔育砒二埂文急械援棱悉纺奉媒廓吸倪汪实南识第三章8086指令系统第三章8086指令系统,在后面要用到下列表示方法: DS1000H ,表示DS寄存器的内容为1000H。 (2300H)8CH ,表示物理地址为2300H的内存单元的内容为8CH 。 AX 5000H 表示数值5000H传到AX寄存器中 AX (8000H),表示物理地址为8000H的内存字单元的内容传到AX中

4、。 (8000H) AX,表示AX的内容传到物理地址为8000H的内存字单元中。 AX (DS:5000H),表示逻辑地址为DS:5000H的内存字单元的内容传到AX中。DS内容为段地址,5000H为偏移量) AL(DS:BX),表示逻辑地址为DS:BX的内存单元的内容传到AL中。 AL(DS:BX5),表示逻辑地址为DS:BX5的内存单元的内容传到AL中。,害缚承示灰拘执馅音隧队蜘顺泉奴毁滴漠秉伶盐幻致沧纵辞哟逛倡婶诱尾第三章8086指令系统第三章8086指令系统,寻址方式可分为数据的寻址方式和转移地址的寻址方式两种。,3.1.1 数据的寻址方式,1、立即寻址方式 立即寻址方式即操作数直接存

5、放在指令中,紧跟在操作码以后,作为指令的一部分存放在代码段区域中。这种操作数称为立即数。它只能用于源操作数字段,不能用于目的操作数字段. 【例】MOV AL,42H 指令的执行:AL42H 42H为8位立即数,它是指令的一个组成部分。 指令执行后,AL=42H。 【例】MOV DX,2345H ; 指令的执行:DX2345H 2345H为16位立即数,它是指令的一个组成部分。 指令执行后,DX=2345H。,划猪慑怀逻厅直难箱埋钱龟肄厉漆渗罢韦琅锋暗瑟河套慨领表森圆贮济砷第三章8086指令系统第三章8086指令系统,2、寄存器寻址方式 寄存器寻址方式即操作数在寄存器中,指令中指明寄存器名称;对

6、于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH之一。在这种寻址方式中,寄存器可以用作源操作数,也可以存放目的操作数。 【例】MOV AX,BP 指令的执行:AXBP 如果指令执行前,AX=3664H,BP=2758H,则指令执行后 AX=2758H,BP保持不变。 【例】MOV CH,BL 指令的执行:CHBL 如果指令执行前,CH=64H,BL=58H,则指令执行后 CH=58H,BL保持不变。 立即寻址和寄存器寻址指令,执行速度最快,后面要讲到的存储器寻址指令执行速度较慢。,遍张劳称你衙卯木震湃诡拥咱刀赖赁求蚕蔷饿堡焕只设瘦碧汛拇渝藐津谆第三章8086指令系统第三

7、章8086指令系统,3、直接寻址方式 直接寻址方式中,操作数一般在内存数据段中,而操作数的有效地址直接包含在指令中。 操作数的物理地址是由数据段寄存器DS的值乘以16再加上这16位的有效地址得到。 【例】MOV AX, 2500H 指令的执行:AX(DS:2500H) 该指令默认DS中为数据段的段地址,指令括号指明的偏移量为2500H,从而可计算出字单元的物理地址,指令执行把该单元内容送到AX中。 如果指令执行前DS8000H,(82500H)02, (82501H)03 , 则指令执行后AX0302H,翰污尝疼塑镜旁管茁脐伏涯掘锐涯撇昌搽模宿匀铣呀世蔑宣汲唇酒旱莉霞第三章8086指令系统第三

8、章8086指令系统,通常指令中不出现DS段寄存器名称,这种情况叫做默认段寄存器(或叫缺省段寄存器)。但是也允许段超越,即允许操作数在代码段或堆栈段或附加段中,只是必须在指令中指明。 【例】MOV AX, SS:2500H 指令的执行:AX(SS:2500H) 该指令将SS指明的堆栈段中偏移量为2500H的字单元的内容送到AX中。 直接寻址方式中,存储器操作数的有效地址常常用已经定义的变量名表示,此时指令中可不写括号。 【例】MOV BH,ARRY 指令的执行:BH(DS:ARRY) 指令中ARRY是已经定义的变量名。如果ARRY表示有效地址为3000H的字节变量,则指令执行后,数据段中偏移量为

9、3000H的字节单元的内容送到BH中。,膊墩盟蝶缩议奋钮腹尽勤玉溢联翁功上颠旦绚甜浩搅靛业隘藐趟冀随埃付第三章8086指令系统第三章8086指令系统,4、寄存器间接寻址 操作数的有效地址EA在寄存器中,指令中指明寄存器名称。寄存器可以是下列几个中的一个: BX、BP、SI、DI 如果指令中指定的寄存器是BX,SI,DI,则操作数在数据段中,段地址由DS提供。 如果指令中指定BP寄存器,则操作数在推栈段中,段地址在SS中。 【例】MOV AX, SI 指令的执行:AX(DS:SI) 若初始条件为DS=2000H,SI=1000H,则该指令源操作数的物理地址为: 2000H10H+1000H=21

10、000H,熟滇抿垣览绘酵囊摄乖漏岂厢攫揩班嗓陀甘哈减童谬搭习淳限沃购噪摩探第三章8086指令系统第三章8086指令系统,指令中也可以不使用缺省的段寄存器,而另指定其它的段寄存器,这就是段超越。指令指令中写眀段超越前缀从而指定其它的段寄存器。如指令: MOV AX, ES:BX 原来BX默认的是DS段寄存器,现在用段超越前缀指定ES段寄存器。用ES:BX计算出源操作数的物理地址。 寄存器间接寻址方式中EA可以表示为 BX BP SI DI,EA,稼辰妄疾赂拐厩倦怯捕走育罕基攀酶肥羊禹畴银延来革荧庚拔稼态闭嗣嗓第三章8086指令系统第三章8086指令系统,5、寄存器相对寻址 在寄存器相对寻址中,有

11、效地址EA是位移量值和16位寄存器(BX、BP、SI、DI之一)的内容之和。可表示为: BX BP 8位位移量 SI 或16位位移量 DI 【例】MOV AX, CountBP AX(SS:BPCount) 指令中Count表示8位或16位位移量,如果Count8,BP20H,SS1F00H, 则存储器单元物理地址1F00H10H20H81F028H。 即:AX(1F028H),EA,锡亏菩蚤凉晶衣僻痔鄙感光刀佃嫌承混紊薪浩肥沛炊兔汽欠嫉泄歪狭警尊第三章8086指令系统第三章8086指令系统,寄存器相对寻址指令可以有下面两种形式: 即: MOV AX, Count BP 或: MOV AX,C

12、ount+BP 两种形式等价。,厄惜乾罐忿龟盅酋藐割镇阀淄谁镊堡螺聘拎仙贴边祝嫉大抑职纸虽敞莲岛第三章8086指令系统第三章8086指令系统,6、基址加变址寻址方式 基址加变址寻址方式中,操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和。,由基址寄存器决定哪一个段寄存器作为默认段寄存器。若基址寄存器为BX时,段寄存器使用DS;若基址寄存器为BP时,段寄存器则用SS; 若在指令中规定了段超越,也可用其它段寄存器作地址基准。 【例】MOV CL, BXSI 指令的执行:CL(DS:BXSI) 指令中源操作数有效地址为BX内容与SI内容之和。 上面指令也可以写为

13、: MOV CL,BX+SI,瘸季绽马伴础醒雏吠避蔡臣撕棋轻百虚碴听婚隶票产冒色愈诚府矗舌武妇第三章8086指令系统第三章8086指令系统,7、基址加变址相对寻址方式 这种寻址方式中,操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容再加上指令中指定的8位或16位位移量之和。 由基址寄存器决定哪一个段寄存器作为默认段寄存器。若基址寄存器为BX时,段寄存器使用DS;若基址寄存器为BP时,段寄存器则用SS; 可指定段超越。,EA,BX BP,SI DI,8位位移量或 16位位移量,涡甫戮旱饭福增规掀次笑沤砌梳沮般逊涝腿司亦雾徊勾萧颐儒你尊谜芍易第三章8086指令系统

14、第三章8086指令系统,基址加变址相对寻址方式的例: MOV DX, CountBXSI 这条指令也可以写为: MOV DX,CountBX+SI 或: MOV DX,CountBX+SI 式中 Count 是变量名,即位移量 指令的执行:DX(DS:BXSICount),合愤免茁屉森间澳仕油洼唱外起原驶邪齐自泰酉暑茨拦荧映誓掩咯针诞轮第三章8086指令系统第三章8086指令系统,一般情况下使用默认的段寄存器来寻找操作数,有些情况下允许使用非默认的段寄存器,则在指令中必须写明段寄存器名,这叫作段超越。,戳辑兜卡晚欠坠桌痪猪雇壬践旷树宙报惕埠尺添硫馅涩醋庙份捷汪械邢令第三章8086指令系统第三章

15、8086指令系统,8、访问I/O端口数据的寻址方式 访问I/O端口数据使用输入/输出指令,有两种不同的寻址方式可用。 直接端口寻址方式:端口的号码是8位的立即数,可以访问0255号端口。 【例】OUT 20H,AL 指令的执行:(20H)AL 指令把AL内容输出到地址为20H的端口中。 间接端口寻址方式:端口的编号取自寄存器DX,其访问端口范围为065535。 【例】OUTAL,DX 指令的执行:AL(DX) 若DX3FFH,则指令把地址为3FFH的端口中内容输入到AL。,买睬歪回眺嚣赔羊隶月旨泞附售扦拾怨泪汛拐芯殃仆蹲栈钞返景饯干班搬第三章8086指令系统第三章8086指令系统,8086指令

16、系统关于转移指令和调用指令的寻址方式有4种: 段内直接转移寻址方式 段内间接转移寻址方式 段间直接转移寻址方式 段间间接转移寻址方式 在发生段内转移时,CS的值不变,只是IP的值发生改变。在发生段间转移时,CS和IP的值都发生改变。,3.1.2 转移地址的寻址方式,茵孵贫唬附成辩摄己熄喇破违北麦讯扣苞冷乞煌球启三躬栽搪楞浑笛番评第三章8086指令系统第三章8086指令系统,1、段内直接转移方式 用这种方式时,指令中给出一个相对位移量,有效转移地址为IP的当前内容再加上一个8位或16位的(有符号数)位移量,CS内容不变。因为位移量是相对于IP来计算的,所以段内直接转移寻址也称为相对转移寻址。 段

17、内直接转移方式既可以用在条件转移指令中,也可以用在无条件转移指令中,同样也可以用在调用指令中。但是在条件转移指令中,只能用8位位移量。 【例】请看如下指令。 JMP A2 ;无条件转移到标号A2 指令执行:IPA2 JNZ A3 ;ZF标志为0则转移到A3,否则顺序执行 指令执行:如果ZF标志为0,则 IPA3 否则 IPIP2 ( 条件转移指令是2字节指令),痕奔化钡忻呸络洛订私忠肘臃倦邦怒划霹硫魂跪斤抒特峭瑚奏湾世喀蟹庚第三章8086指令系统第三章8086指令系统,2、段内间接转移方式 用段内间接转移方式时,转移地址(16位)总是在16位通用寄存器中或者在内存单元中,而对内存单元则可以用前

18、面所述的对存储器数据的各种寻址方式进行访问。 段内间接转移寻址方式只适用于无条件转移指令。 【例】请看如下指令。 JMP CX ;把BX内容传给IP,即转移到BX所指出的地址 执行指令:IPCX JMP WORD PTR SI;从DS:SI指定的内存字单元取出转移的有效地址传给IP,实现转移 执行指令:IP(DS:SI),星揪感患絮博樊安砰敢袍底漓华路座擅肮侥鲸俘椽瘦叛嫉膜贬脸宏匀覆兄第三章8086指令系统第三章8086指令系统,3、段间直接转移方式 用段间直接转移方式进行寻址时,指令中要给出转移地址的段值和偏移量,在汇编语言中通常使用 FAR PTR 操作符表明是段间转移。段间转移只能是无条

19、件转移指令。 【例】请看如下指令。 JMP FAR PTR A2 ;转移到另一个代码段中标号为A2的地方 执行指令:CS目标段地址,IP目标偏移地址,驭另佃询垃秸盲蚤洪细贴蛀枕滓鸣隐墩坟稿空柯慎襟硕噎妒雷腰赐泳位怂第三章8086指令系统第三章8086指令系统,4、段间间接寻址方式 使用段间间接寻址方式时,转移的目标地址存放在数据段的双字单元中,可以使用前面所讲的对存储器数据的各种寻址方式来访问。指令执行时把双字单元的内容传送到CS和IP。 【例】 JMP DWORD PTR 1000H ;把数据段中有效地址为1000H的双字单元中的段地址及偏移地址传给CS和IP,产生转移。DWORD PTR是

20、双字操作符,表示传送2个字数据。 执行指令:CS(DS:1002H),IP(DS:1000H),陇粉束馈歪挺订悬拣脱使霞缉掏诈闻作中倔恕迁烁彰卯能毁悼壮刽甲根草第三章8086指令系统第三章8086指令系统,又例,用前面讲到的寄存器间接寻址方式从内存取段间转移的目标地址: JMP DWORD PTR BX 该指令由BX指定数据单元地址,从中取段地址及偏移地址传给CS和IP,产生段间转移。,郝岿铱埔慷衣激丧磋肆锨秦痰面穴溪瞬庶苗坑戚脖涛失扬贰强署雾管杨司第三章8086指令系统第三章8086指令系统,8086的指令可分为以下5类: 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 控制转移

21、指令,3.2 8086 指令系统,凌爽枯泼刊袭厩佣湃印与穆撵膏逆随宙旺性顺活热庞妹铡成锗赁箍蓉留演第三章8086指令系统第三章8086指令系统,数据传送指令又可分为4种: 通用数据传送指令 累加器专用传送(输入/输出数据传送)指令 地址传送指令 标志寄存器传送指令 一、通用数据传送指令 8086有四种通用数据传送指令,即: 传送指令MOVE、堆栈指令PUSH和POP、交换指令XCHG 1、传送指令MOV 例如:MOV AL,20H MOV 2000H,AX MOV DS, AX,3,2.1 数据传送指令,绽泊到壬舵罩圃靳日纸邪罐卒和偏陷唉假缓暗梆燎廊赦怕洲族验城改碑窑第三章8086指令系统第三

22、章8086指令系统,MOV AL,AREAIBP MOV CH,AL 注意:8位操作数只能传送给8位操作数,16位操作数只能传送给16位操作数。 MOV 允许的源操作数和目的操作数的组合见下图,栈蒲哥衫奇稽田赫粗沾淡史乖捏避夫着卢耀码誊锤民哺哆和皋禹染秽硅击第三章8086指令系统第三章8086指令系统,要注意以下几点: 1、这里的寄存器不包括IP。 2、CS段寄存器不能作目的操作数。 3、立即数寻址方式不能作目的操作数。 4、立即数不能直接送至段寄存器,段地址必须通过通用寄存器(如AX)送到段寄存器。 5、8位操作数只能传送给8位操作数,16位操作数只能传送给16位操作数。 6、不能在两个存储

23、单元之间直接传送数据,只能间接通过CPU内部寄存器来实现。,魄准凯獭朝醚比文霉团俱示霓挠鸯弃奖帅溢英指喀赌铣砌饵滨起袜襄杀芳第三章8086指令系统第三章8086指令系统,【例】请看如下指令。 MOV AX,0200H ;立即数传送到AX MOV DS,AX ;AX内容传送到DS 不允许用MOV指令在两个存储单元之间直接传送数据,而应间接通过CPU内部寄存器来实现。 【例】要把AREA1地址单元的内容传送到AREA2单元: MOV AL,AREA1 MOV AREA2,AL 访问存储器操作数时,只有使用BP为指针时默认的段寄存器是SS,其它情况默认段寄存器为DS。,窃娥提溺裤连稼董揖主韶允神奖织

24、块博论给皿咳抢律沫呸揖腹省慑蛤玖隙第三章8086指令系统第三章8086指令系统,2、堆栈操作指令PUSH和POP 在子程序调用和中断处理过程时,分别要保存返回地址和断点地址;子程序返回和中断处理返回时,则要恢复通用寄存器的值,子程序返回或中断返回时地址或断点地址恢复到指令指针寄存器中。这些功能都要通过堆栈指令来完成。 这就是推入堆栈指令PUSH和弹出堆栈指令POP。 【例】推入堆栈指令PUSH: PUSH AX ;SP的值先减2,再将AX的内容传到SP指到的单元(栈顶),叫作推入堆栈。 PUSH DS ;将DS的内容推入堆栈 PUSH CS ;将CS的内容推入堆栈 PUSH BX+DI ;将B

25、X+DI所指的内存字单元的内容推入堆栈。 【例】弹出堆栈指令POP: POP BX ;将栈顶字单元内容传到BX,然后SP的值加2,叫作弹出堆栈 POP ES ;将栈顶字单元内容弹出送ES,歼倍队争血懦自撞匠山花祈了姿疼磨擅办考座亡锚吞哎危虐宋斩扯锈潘勾第三章8086指令系统第三章8086指令系统,堆栈是以“先进后出”方式工作的一个存储区,它必须存在于堆栈段中,堆栈段首址由段寄存器SS的值所确定。 堆栈有一个堆栈指针寄存器SP,SP的内容在任何时候都指向当前的栈顶。 使用时堆栈操作指令有几点必须注意: 8086的堆栈操作总是按字进行的,也就是说,没有PUSH AH、POP BL这样的字节操作指令

26、。也不能把立即数推入堆栈,没有PUSH 2000H这样的指令。 执行弹出指令时,正好相反,先把栈顶数据取出,然后栈顶指针SP的值加2。 CS寄存器的值可以推入堆栈,但反过来,不能从堆栈中弹出1个值到CS寄存器。 每执行一条推入堆栈指令,堆栈地址指针SP先减2,再把数据传送到堆栈指针指到的栈顶。弹出堆栈指令的操作则刚好相反。 如下面的示例:,俏栖票啸皋桥峭雏柳提陈蒋岭贪没梁撕殴幽米肝栅杂邵讹黑驮吹登烽螺气第三章8086指令系统第三章8086指令系统,物理地址 23000H 24000H,SS2300H SP1000H,设SP初始值为1000H,AX1234H,幢副操垃恕羽严载思妙淫晶但膳喊惮粹降

27、猜冤雍波囤指汇没淡寻协冰症乙第三章8086指令系统第三章8086指令系统,物理地址 23000H 23FFEH 24000H,SS2300H SP0FFEH,执行指令 PUSH AX后, 堆栈如下:,34H 12H,PUSH AX 指令执行过程: SPSP2 (SS:SP)AX,诣彤躲帕磕遮壹杂蹬丛蜀作驯励见大涝钙绎匙矾澡贩谎剐县跃尧翔积回扒第三章8086指令系统第三章8086指令系统,除了SAHF和POPF这两条指令之外,数据传送指令的操作对标志位都没有影响。,附叹疹拨廉沦谰刽订拜邦怒督次峰醋闸匈芽死纬纷逞蓄督饶肾耘巫盾俗鱼第三章8086指令系统第三章8086指令系统,除了SAHF和POPF这两条指令之外,数据传送指令的操作对标志位都没有影响。,濒似棉差类翌甥避媒简存闸成压顶沙纪糯讶窖闺蛀豹碗庞蹬骸墙者户徐拭第三章8086指令系统第三章8086指令系统,除了SAHF和POPF这两条指令之外,数据传送指令的操作对标志位都没有影响。,编谋溜熄组瓤吸筑衰疼苑战叶罕垂趟促悦侵俱挺朗亢劈私胯偿蚂统汲欺咒第三章8086指令系统第三章8086指令系统,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1