版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.概述
8086/8088的指令系统中共有133条基本指令。可以分成6个功能组:数据传送(Datatransfer)
算术运算(Arithmetic)逻辑运算和移位指令(Logic&Shift)
串操作(Stringmanipulation)
控制转移(ControlTransfer)处理器控制(ProcessorControl)第四节8086/8088的指令系统11.指令助记符表232.学习指令的要点从以下几个方面来掌握一条指令:
指令的助记符
指令的格式:操作数的个数、类型(B,W,DW)
执行的操作:指令执行后的结果包括:哪些寄存器、内存单元的值发生了变化对标志位有无影响,哪些受影响
特点及注意事项
43.指令中操作数的表示符号表示内容data立即数操作数reg通用寄存器操作数8位:AH、AL、BH、BL、CH、CL、DH、DL16位:AX、BX、CX、DX、BP、SP、SI、DISegreg或seg段寄存器CS、DS、SS、ESmem或[]存储器操作数(5种寻址方式)src源操作数dst目的操作数
(
)注释时表示寄存器、存储器、端口的内容oprd1oprd2两操作数54.书写指令注意事项:不区分字母的大小写。下列写法表示同一条指令:MOVAX,1ABDHmov
ax,1abdh注意操作数的范围对字节操作指令0~FFH0~255对字操作指令0~FFFFH0~65535
对无操作数指令,不添加操作数。
STCAL
对单操作数指令,操作数不能是立即数。IMUL66
对双操作数指令①不能两个同为存储器操作数
MOV[DI],[SI]
②目的操作数不能是立即数
ADD3,AL
③
两个操作数的类型应相同
SUBAX,BL
若value定义为字类型存储器变量:
MOVCL,value[BX]7
内存操作数的属性应明确。
MOV[BX],0MOVbyteptr[BX],0MOVwordptr[BX],0MOV[BX],ALMOV[BX],AX
A、B、C、D、E、F开头的十六进制数前面加0,与H结尾的标识符区别。如寄存器名:AH、BH、CH、
DH
变量名:abcdH
等例
movAL,0AH
movAL,AH
movBX,0abcdH8
CS和IP的值只在控制转移指令中修改。对非控制转移指令,取完指令后IP值自动+1,指向下条指令。段寄存器CS的值,只在MOV、PUSH中可作操作数,且这两条指令执行结果不改变CS值。MOVAX,CSPUSHCSIP、PSW两个寄存器不能作为操作数在指令中出现。movIP,1234HmovPSW,0F0FHPSW状态寄存器的值由指令执行后确定,不同的指令对各标志的影响不同。9二.数据传送指令地址总线AB存储器I/O接口输入设备I/O接口数据总线DB控制总线CB输出设备CPU寄存器,存储器,I/O端口10
按传送内容,可分为四类:1.通用数据传送MOV,PUSH,POP,XCHG2.
累加器专用传送
IN,OUT,XLAT3.
地址传送LEA,LDS,LES4.
标志传送PUSHF,POPF,LAHF,SAHF
特点:
1.除POPF、SAHF外,其他传送指令对标志位均无影响
2.唯一允许以段寄存器做操作数的指令且只有MOV、PUSH、POP这三条允许11reg/mem/segreg←regreg/segreg
←
memreg/mem
←
segregreg/mem
←data
可实现(1)MOV传送指令格式
MOVdst,src执行
(dst)←(src)12MOV指令特点及注意事项:
双操作数指令(注意双操作指令的特点)可进行字节或字传送不允许存储器传送到存储器MOV[BX],[value]MOV[DI],[SI]MOVAX,valueMOV[BX],AXMOVAL,[SI]MOV[DI],AL13
可对DS、ES、SS赋值但不允许立即数直接传送给段寄存器MOVDS,AXMOVES,[BX]MOVDS,1000HMOVAX,1000HMOVDS,AX
CS不能做目的操作数,不能通过传送指令改变CS的值
MOVCS,AXMOVAX,CS
不允许段寄存器传送到段寄存器
MOVES,DS14例编程将CL寄存器的内容传送到200:100H单元中。MOVAX,200HMOVDS,AX;(DS)=200HMOV[100H
],CL;(02100H)=(CL)编程1:MOVAX,200HMOVDS,AX;(DS)=200HMOVDI,100H;(DI)=100HMOV[DI
],CL;(02100H)=(CL)编程2:MOV[200:100H],CL15
MOV指令应用例:实现将AREA1开始的100个数据传送到AREA2开始的单元。……AREA1:AREA2:100个数据16分析题意:
①可以用200条MOV指令来完成100个数据传送,指令操作重复,每个数据传送后的地址是变化的。
②可以利用循环, 但每循环一次要修改地址(源地址和目的地址),必须把地址放在寄存器当中,用寄存器间接寻址来寻找操作数.17得到如下程序:
…
MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL
INCSI
;修改地址指针
INCDI ;修改地址指针
DECCX ;修改个数
JNZAGAIN
…18
PUSH(Pushwordontostack)POP(Popwordoffstack)
这是两条堆栈操作指令。先介绍一下什么是堆栈,为什么需要堆栈?堆栈是按照先进后出原则组织的一段内存区域。通常用于存放一些重要数据,
如:程序的地址、或是需要恢复的数据。为方便数据的存放和恢复,设置专门的指针,指向堆栈中要操作的单元。段值由SS给出,偏移地址由SP给出
SS→堆栈段寄存器(stacksegment)SP→堆栈指针寄存器(stackpoint)SS:SP
特点:下推式的(规定堆栈设置在堆栈段内)改变SP的内容,随着推入堆栈内容增加,SP的值减少。先进后出工作原则(LastInFirstOut简称LIFO)19堆栈在内存中的情况:
可以用一条立即数传送指令给SP赋值,确定SP在SS段中的初始位置。例:设:(SS)=9000H,堆栈段为64KBMOVSP,0E200H ;(SP)=0E200H则:
整个堆栈段的物理地址范围为:
90000H~9FFFFH
栈顶的物理地址为
9E200H
堆栈在内存中的情况20(2)堆栈操作指令
(堆栈操作指令有两条):
入栈指令格式:PUSHsrc ;(SP)
(SP)-2 ((SP)+1,(SP))
(src)
把一个字从源操作数(src)
由SP指向堆栈顶部。
出栈指令格式:POPdest ;(dest)
((SP)+1,(SP)) (SP)
(SP)+2把现行SP所指向堆栈顶部的一个字
指定的目的操作数(dest),同时进行修改堆栈指针的操作。SS:SP
SS:SP
(src)SS:SP
SS:SP
(dst)21
PUSH入栈操作格式
PUSHsrc
执行(SP)←(SP)-2
(SS:SP)←(src)特点:
单操作数指令操作数为16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:CS,DS,ES,SSmem:字类型SS:SP
SS:SP
(src)22例:
PUSHAX若执行前:
(SS)=2000H(SP)=1002H(SS:SP)=
2010H
(AX)=1234H3B2A10低高20地址SS:SP2000:1002指令执行前(AX)=1234h则执行PUSHAX后:
(SS)=2000H(SP)=1000H(SS:SP)=1234H(AX)=1234H123410低高20地址SS:SP2000:1000指令执行后(AX)=1234h不变减2变不变
23特点:单操作数指令操作数为16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:DS,ES,SS,不允许是CSmem:字类型
POP出栈操作SS:SP
SS:SP
(dst)格式
POPdst
执行(dst)←(SS:SP)(SP)←(SP)+224若执行前:
(SS)=2000H(SP)=1000H(SS:SP)=1234H
(BX)=5678H123410低高20SS:SP2000:1000指令执行前地址(BX)=5678h例:
POPBX123410低高20SS:SP2000:1002指令执行后地址(BX)=1234h则执行POPBX后:
(SS)=2000H(SP)=1002H
(SS:SP)=2010H(BX)=1234H
不变加2变
变
25堆栈使用的场合用堆栈保存恢复信息
子程序的调用、返回以及中断调用、返回
用堆栈传送数据(程序设计中介绍)26注意事项
堆栈是一重要数据结构,使用堆栈应有明确目的。不乱用堆栈操作,不乱修改堆栈内容。PUSH、POP、PUSHF、POPF、CALL、RET、INT、IRET
乱修改SS和SP的内容包括乱用BP参与的存储器操作数
乱用指令27
PUSH和POP指令只能对字操作。
PUSHALPOPBYTEPTR[BX]
可以对段寄存器操作但POP不能对CS操作
PUSHDSPUSHCSPOPES
POPCS28(3)XCHG交换指令
格式
XCHGoprd1,oprd2执行
(oprd1)(oprd2)reg
regreg
memmem
reg
可实现29例
XCHGAX,BX字操作执行前(AX)=1122H(BX)=3344H
执行后(AX)=3344H(BX)=1122H
例
XCHGAH,BL字节操作执行前(AX)=1122H(BX)=3344H
执行后(AX)=4422H(BX)=3311H30XCHGoprd1,oprd2注意事项:
双操作数指令可进行字或字节操作,不影响标志位。不允许对立即数、段寄存器做操作数
XCHGAX,4
XCHGBX,DS
存储器之间不能交换,两个操作数中必须有一个在寄存器中;
XCHG[BX],[DI] (错)31输入输出指令(InputandOutput)
输入输出指令共两种:
(1)、IN
(Inputbyteorword)(2)、OUT(Outputbyteorword)
输入指令用于CPU从外设端口接受数据,
输出指令用于CPU向外设端口发送数据。无论接收还是发送数据,必须通过累加器AX(字)或AL(字节),又称累加器专用传送指令。
输入、输出指令不影响标志位。32每个外设要占几个端口:数据口,状态口和控制口。33
CPU与I/O设备进行信息交换要通过端口:
在IBMPC机里,可以配接许多外部设备,每个外设与CPU之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。端口数:外部设备最多有65536个I/O端口。由A0~A15译码形成。端口号:端口号(即外设端口地址)为0000H~FFFFH。
PC机端口数:仅使用A0~A9译码形成I/O口地址即1024H个口地址
PC机端口号:0000H~03FFH
其中:A9=1,表示扩充槽上的口地址。34(1)、IN(Inputbyteorword)输入指令格式:INacc,port;(acc)
(port)具体形式有四种:直接寻址方式:I/O端口地址用8位立即数表示
INAL,data8;端口地址8位,输入一个字节
INAX,data8;端口地址8位,输入一个字间接寻址:将16位地址号送入DX,再对[DX]进行I/O操作
INAL,DX ;端口地址16位,输入一个字节
INAX,DX ;端口地址16位,输入一个字必须通过累加器AX(字)或AL(节)输入数据。35(2)、OUT(Outputbyteorword)输出指令格式:OUTport,acc ;(port)
(acc)具体形式有四种:直接寻址方式:
OUTdata8,AL;端口地址8位,输出一个字节
OUTdata8,AX;端口地址8位,输出一个字间接寻址方式:
OUTDX,AL;端口地址16位,输出一个字节
OUTDX,AX;端口地址16位,输出一个字必须通过累加器AX(字)或AL(节)输出数据。36例1:实现(29H)(28H)→(DATA_WORD)
INAX,28H;对端口号28H、29H的内容进行访问
MOVDATA_WORD,AX例2:从端口3FCH送一个字到AX寄存器
MOVDX,3FCH;通过DX进行间址访问
INAX,DX;例3:实现将(AL)→(05H) OUT5,AL;(05H)←(AL);将(AL)的内容送入端口05H372、XLAT(Translate)字节转换指令(换码指令):
该指令不影响标志位。格式:XLATstr_table
;(AL)←((BX)+(AL))
或XLAT
str_table——表格符号地址(首地址),只是为了提高可读性而设置,汇编时仍用BX。
38XLAT指令使用方法:先建立一个字节表格;表格首偏移地址存入BX;需要转换代码的序号(相对于表格首地址位移量)存入AL;
(表中第一个元素的序号为0)执行XLAT指令后,表中指定序号的元素存于AL中。
(AL)为转换的代码。39XLAT指令应用:若把字符的扫描码转换成ASCII码;或数字0~9转换成7段数码所需要的相应代码(字形码)等就要用XLAT指令。例:内存的数据段中有一张十六进制数字的ASCII码表。
首地址为:Hex_table,欲查出表中第10个元素(‘A’)40执行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假设:(DS)=F000H,
Hex_table=0040H
(AL)=0AH执行XLAT以后:(AL)=41H=(F004AH),
即“A”的ASCII码。30H31H32H...39H41H42H...46H...Hex_tableHex_table+1Hex_table+2Hex_table+0AHHex_table+0BHHex_table+0FH'F''B''A''9''1''2''0'16进制数的ASCII码表413.目的地址传送指令(Address-objecttransfer)8086/8088提供三条:
地址指针写入指定寄存器或寄存器对指令。(1) LEA(LoadEffectiveAddress)(2) LDS(LoadpointerusingDS)(3) LES(LoadpointerusingES)42(1)LEA有效地址传送格式
LEAreg,mem执行(reg)←mem的EA
即寄存器←存储器操作数的偏移地址
43执行后
(BX)=1000H注意:
OFFSET是汇编程序提供的一个操作符,不是CPU的指令.LEABX,buffer例
buffer是一个符号地址表示的内存操作数(变量)。…...12h34h56h…...buffer内存DS:1000h若变量buffer的偏移地址=1000H等价于
MOVBX,OFFSETbuffer44buffer
1A2B3C4D、、、、、、例
将buffer为首的4个字节内存内容相加,存放在AL中。
MOVAX,SEGbufferMOVDS,AX
LEABX,bufferMOVCX,4MOVAL,0exit:ADDAL,[BX]INCBXDECCX;(cx)=(cx)-1JNZexit;ZF≠0,转至exit说明:1)
操作符SEG的作用是取变量的段地址。执行完前两条指令后,(DS)=buffer的段值
2)
操作符OFFSET的作用是取变量的偏移地址执行完LEA
BX,buffer,(BX)为buffer的偏移地址,
3)操作数[BX]是以DS为段值,BX为偏移值的内存单元45
LEAreg,mem特点及注意事项:目的操作数reg应是16位通用寄存器
LEAES,[BX]LEAAL,bufferLEA6,[BX+SI]LEA[DI],buffer
源操作数应是存储器操作数
LEABX,AX
传送的是内存单元的有效地址,与其内容无关。…...12h34h56h…...buffer内存46(2)
LDS(LoadpointerusingDS)格式:LDSreg16,mem32 ;(reg16)←(EA) (DS)←((EA)+2))功能:把源操作数指定的4个相继字节送指令指定的寄存器及DS寄存器中。
前两个单元内容(16位偏移量)装入指定通用寄存器,后两个单元内容(段地址)装入到DS段寄存器。用于写远地址指针。47例:假设:
(DS)=C000H指令: LDSSI,[0010H]执行指令后:(SI)=0180H(DS)=2000H
80H01H00H20HC000H:0010H(DS)C0011HC0012HC0013H......存储器48(3)
LES(LoadpointerusingES)格式:LESreg16,mem32 ;(reg16)←(EA) (ES)←((EA)+2))功能:把源操作数指定的4个相继字节送指令指定的寄存器及ES寄存器中。前两个单元内容(16位偏移量)装入指定通用寄存器,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 婴儿用安抚奶嘴产品供应链分析
- 抽气机产品供应链分析
- 纸礼品袋商业机会挖掘与战略布局策略研究报告
- 药用苯酚项目营销计划书
- 废弃建筑材料回收利用行业市场调研分析报告
- 废纸篮产品供应链分析
- 微生物除臭剂行业营销策略方案
- 增强现实(AR)游戏行业相关项目经营管理报告
- 地板蜡清除剂刷净剂产品供应链分析
- 汽化器产品供应链分析
- 2024年北京海淀区初三九年级上学期期末数学试题
- 中国邮政集团有限公司浙江省分公司招聘笔试题库2024
- 十一届三中全会
- 中华民族发展史智慧树知到期末考试答案章节答案2024年云南大学
- (正式版)SHT 3115-2024 石油化工管式炉轻质浇注料衬里工程技术规范
- 2024年考研英语真题及答案(完整版)
- 2024年四川公路桥梁建设集团有限公司招聘笔试参考题库含答案解析
- 30题纪检监察位岗位常见面试问题含HR问题考察点及参考回答
- 2023年国家公务员考试申论试题(行政执法卷)及参考答案
- 科大讯飞蜻蜓fm合作方案
- 国际人才英语考试官方指南中级样题及解析
评论
0/150
提交评论