8086指令系统精析解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8086指令系统精析
3.1基本数据类型
1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字
(64位,486中引入的)和双四字(128位,Pentium3中引入的)。
2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1
3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的
地址,双字和四字的自然边界地址要分别能被4和8除尽。
4.数据结构要尽可能在自然边界上对齐
5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访
问,只要进行一次存储访问操作。
6.数字数据类型(学生自学)PPT
3.28086的指令格式
一、指令格式
Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中:
1.标号是一个标识符,后面跟有冒号
2.助记符是一类具有相同功能的指令操作码的保留名
3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取
决于操作码
4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程
序的另一部分声明的赋予数据项的标识符。
5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数
是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。
3.38086/8088指令的操作数寻址方式
寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。
1.立即数
用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。
立即数可以是8位或16
例1 MOV AX , 2056H
结果( AH ) = 20H ( AL ) = 56H
例2 MOV AL , 78 H
结果( AL ) = 78H
2.寄存器操作数
操作数在寄存器中,指令中指定寄存器名
8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL
16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI
CS、DS、SS、ES
例1 MOV AX , 2056H
执行后:(AX)=2056H
例2 MOV BL , AH
执行前:(BL) = 12H, (AH) = 78H
执行后:(BL) = 78H (AH) = 78H
▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。
▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。
3. 内存操作数
▲指令MOV DS: [ DI ] , CL
完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT
地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H
MOV AX, 2000H
MOV DS, AX ; (DS) = 2000H
MOV DI, 1000H ; (DI) = 1000H
MOV DS: [ DI ], CL ;(21000H) = (CL)
结果如图所示:PPT(第一页)
内存单元的地址由段地址和偏移地址构成
▲为减短指令长度
指令中只给出偏移地址的来源,段地址由默认关系给出。
MOV AL,[ 2000H ] PA= ( DS ) ×10H + 2000H
即选择DS寄存器的内容为段地址。
▲CPU根据偏移地址给出的方式,按默认关系自动选择段寄存器,获取段值,由段值、偏移值构成操作数所在内存单元的物理地址。
指令中用[ ] 给出偏移地址。操作数的偏移地址又称有效地址EA ( Efficient Address)
▲按给出偏移地址方式的不同,分为以下5种:
直接寻址MOV AL, [ 1000H ]
寄存器间接寻址MOV AL, [ BX ]
寄存器相对寻址MOV AL, [ BX + 10H ]
基址加变址寄存器MOV AL, [ BX + SI ]
相对基址加变址寄存器MOV AL, [ BX + SI + 10H ]
(1)直接寻址方式-位移量
存储器操作数的有效地址EA在指令中直接给出。
例MOV AL, [ 1000H ]
默认段寄存器为DS。
操作数所在内存单元的物理地址为:PA = ( DS )×10H + EA
例:MOV AX , [ 1000 H]
若( DS ) = 2000H
内存操作数的物理地址为:
PA = ( DS )×10H +EA = 2000H ×10H + 1000H = 21000H 21000
执行后 (AX)= 3040H
在汇编语言程序中,不直接用数值表示偏移地址,用符号代替数值表示地址,称符号地址(变量名)。
例 符号buffer 表示一个地址。 MOV AX , [buffer] 或写成 MOV AX , buffer 源操作数为buffer 指向的内存单元的内容
符号地址( 变量名)经汇编连接后,与一个确定的数值地址相对应,可用操作符Offset 获取变量的偏移地址。 故 PA = ( DS )×10H + Offset buffer
指令执行结果 ( AX ) = 0B0A H
(2) 寄存器间接寻址-基地址
存储器操作数的有效地址EA 由寄存器给出,寄存器的内容为操作数的有效地址。
可用的寄存器有 BX 、SI 、DI 、BP 如: MOV AL, [ BX ] MOV AH, [ SI ] MOV DL, [ DI ] MOV DH, [ BP ] 默认段寄存器的关系:
①使用BX 、SI 、DI ,默认段寄存器为DS PA = ( DS )×10H + (SI)或(BX)或(DI) ②使用BP ,默认段寄存器为SS PA = ( SS )×10H + ( BP ) 例1: MOV AX , [ DI ]
若 ( DS ) = 3000H ,( DI ) = 2000H
则内存操作数的物理地址为:PA = ( DS )×10H + ( DI ) = 32000H