8086指令系统
04 8088(8086)的指令系统

INC OPRD
操作数:通用寄存器、存储器 (不能是段寄存器或立即数) 执行的操作:OPRD OPRD + 1
功能: 用于在循环中修改地址指针及循环次数等。
注:该指令影响标志位
例: INC BX INC byte ptr [SI]
1. 先将SP所指单元内容 送至AL, 然后 SP+1SP ;
2. 再SP所指单元内容送 至AH, 然后 SP+1 SP
例:MOV AX,5678H POP AX
(3) 交换指令 XCHG OPRD1, OPRD2
在寄存器间或寄存器与存储器间交换信息(不允许使用段寄存器)。
源操作数: 寄存器、存储器 目的操作数:寄存器、存储器 执行的操作:( OPRD1) (OPRD2 )
DS=1000h
buffer 10100h 00 02 00 20
0100h BX
(2) LDS 把源操作数指定的内存的4个相继字节的内容送至指定寄存器及DS中
LDS REG, SRC
(REG) (SRC)
(DS) (SRC+2)
目的操作数
源操作数
(16位通用寄存器) (内存操作数)
• 该指令完成一个32位地址指针的传送; • 该指令通常指定 SI 作寄存器 REG。
• CPU内部寄存器之间的数据传送(除CS,IP外) MOV AL,BL MOV DX, DI MOV SI, BP MOV DS, BX MOV AX,DX
• 立即数传送到CPU内部通用寄存器组(AX,BX,CX,DX,BP,SP,DI,SI)
MOV CL, 4 MOV DX, 03FFH MOV DI, 04BFH
DST+SRC+C
8086CPU指令系统

3.3.2 算术运算类指令
1.加法指令
(2)带进位加法指令ADC
【指令格式】ADC dst,src 【指令功能】(dst) ← (dst)+(src)+(CF) ADC指令在格式和功能上都与ADD指令类似,只是相加时要 把进位标志CF的当前值加到和中,结果送到目的操作数中。 【用途】ADC指令主要用于多字节加法运算。 例如,有两个4字节的无符号数相加,由于8086加法指令最 多只能进行16位的加法运算,我们可将加法分两次进行,先 进行低16位相加,然后再进行高16位相加,在完成高16位 相加时,注意要把低16位相加时可能出现的进位位加进去。
•堆栈操作指令PUSH和POP
由于堆栈顶部是浮动的,为了指示现在堆栈中存放数据的位 置,通常设置一个指针,即堆栈指针SP,始终指向堆栈的顶部。 这样,堆栈中数据的进出取决于SP。当将数据(1个字节)推 入堆栈时,SP自动减1,向上浮动而指向新的栈顶;当将数据 从堆栈弹出时,SP自动加1,向下浮动而指向新的栈顶。 堆栈有建栈、进栈和出栈3种基本操作。 ⑴建栈
出栈操作都是以字为单位的,即每次在堆栈中存取数据均是两 个字节(先存入高字节,再存入低字节,仍然遵循“高字节在 高地址,低字节在低地址”的原则)。
【指令格式】PUSH opr 【指令功能】PUSH指令将16位的源操作数推入堆栈,而目标
地址为当前栈顶,即由SP指示的单元。PUSH指令操作如下: ①(SP)←(SP)-2 ②((SP)+1: (SP) ) ← opr
③代码段寄存器CS和指令指针寄存器IP不能作为目的 操作数,但CS可以作为源操作数.
④立即数不能作为目的操作数. ⑤不能用立即寻址方式给段寄存器传数. ⑥段寄存器之间不能用MOV指令直接传送. ⑦在传送字单元时,遵循“高字节在高地址,低字节在 低地址”的原则。
第6章 8086指令系统与汇编基础

第13页
2013年8月1日星期四
第6章
8086指令系统与汇编基础 3.段地址寄存器
有 CS、DS、ES、SS 四 个 , 分 别 表 示 程 序 码 ( code segment register)、 数 据 ( data segment register)、附加(extra segment register)、堆栈 (stack segment register)段地址用。在 DOS 系统 中,每一个段地址容量只有 64KBytes。 当数据段地址不够用时,就可以用附加数据段地址 来补足,例如想要将一个段地址的某些内容复制到 另一段地址中,就可以同时指定 DS、ES 分别表示 这两个段地址。
第17页 2013年8月1日星期四
第6章
6.2.4
8086指令系统与汇编基础
寄存器间接寻址(Register Indirect Addressing) 寄存器间接寻址方式中,操作数存放在存储器 中,但操作数的有效地址EA在基址寄存器BX、BP或 变址寄存器SI、DI中。操作数的物理地址为: 物理地址=16(段寄存器)+(寄存器)
执行结果为:(AX)=8060H 指令中也可指定段跨越前缀以取得其它段中的 数据。如:MOV AX,ES:[BX]指令,则从附加段中 取得数据。
操作码
DS 3000 0 BX + 200 0
代 码
段
30000 32000 AH AL
60 80
3200 0
数 据
段
图 6- 2- 2
例 6 - 5 的执行过程
第3页 2013年8月1日星期四
第6章
8086指令系统与汇编基础
计算机只能识别二进制代码,因此计算机能执行 的指令必须以二进制代码的形式表示,这种以二进制 代码形式表示的指令称为指令的机器码(Machine Code)。 2.汇编指令格式 一条指令一般包含操作码和操作数两部分。
8086指令系统总结

8086指令系统总结8086是一种x86架构的微处理器,由Intel公司于1978年推出。
它是16位的,拥有20位的物理寻址能力,可以访问1MB的内存空间。
8086指令系统是其所支持的一系列指令集合,下面将对8086指令系统进行详细总结。
数据传输指令是8086指令系统中的基础指令之一,用于将数据从一个位置传输到另一个位置。
其中包括mov指令、xchg指令、push指令和pop指令等。
mov指令用于将数据从一个存储位置复制到另一个存储位置;xchg指令用于交换两个存储位置中的数据;push指令用于将数据压入栈顶;pop指令用于将栈顶的数据弹出。
算术运算指令是用于进行各种算术运算的指令。
8086支持包括加法、减法、乘法和除法等多种算术运算指令。
例如,add指令用于将两个操作数相加,sub指令用于将第二个操作数从第一个操作数中减去,mul指令用于将两个操作数相乘,div指令用于将第一个操作数除以第一个操作数,并将结果保存在指定的寄存器中。
逻辑运算指令用于进行逻辑运算,包括与、或、非、异或等运算。
例如,and指令用于对两个操作数进行按位与运算,or指令用于对两个操作数进行按位或运算,not指令用于对一个操作数进行按位非运算,xor指令用于对两个操作数进行按位异或运算。
控制转移指令用于控制程序的执行流程。
包括无条件转移指令、条件转移指令和循环指令。
无条件转移指令用于无条件地跳转到指定的地址,例如jmp指令;条件转移指令用于根据一些条件是否成立来进行跳转,例如je指令(跳转到指定地址,如果上一次比较操作相等);循环指令用于循环执行指定的指令块,例如loop指令。
I/O指令用于进行输入输出操作,包括从外部设备读取数据和将数据写入外部设备。
例如,in指令用于将输入端口的数据读取到指定的寄存器中,out指令用于将指定的寄存器中的数据写入到输出端口。
此外,8086还支持一些特殊的指令,如访问标志寄存器的指令,控制指令(如hlt指令、nop指令)和字符串指令(如movsb指令、cmpsb指令)等。
微机原理5_8086指令系统08

• 指令中的操作数:
– 可以是一个具体的数值 – 可以是存放数据的寄存器 – 或指明数据在主存位置的存储器地址
6
双操作数指令
MOV dst, src ; (dst) (src) ↑ ↑ ↑ 助记符 目的 源操作数 操作数 例: MOV AH,BL MOV AX,1234H
ADD dst, src ; (dst) (dst)+(src) ↑ ↑ ↑ 助记符 目的 源操作数 操作数 例: ADD AL,36H ADD BX,CX 大多数运算型指令都是双操作数指令,对这种指令, 有的机器(大中型)使用“三地址”指令:除给出参加 运算的两个操作数外,还要指出运算结果的存放地址 7
18
寄存器寻址
19
特 点
(1) 操作数就在寄存器中,不需要访问存
储器来取得操作数(指令执行时,操作就在 CPU的内部进行),因而执行速度快。
(2)寄存器号比内存地址短 * 在编程中,如有可能,尽量使用这种寻址 方式的指令。 * 寄存器寻址方式既可用于源操作数,也可 用于目的操作数,还可以两者都用于寄存器寻 址方式(如 MOV BX , AX )
物理地址 = 16d (DS) +
BP (SS)
(SI)
(DI)
28
物理地址 = 16d (SS) + (BP)
例:
MOV AX, [BX] MOV ES:[BX] , AX MOV DX, [BP] • MOV AX , [BX] ;
设 ( DS) = 2000H ,(BX) = 1000H PA =20000H + 1000H =21000H 指令的执行结果为: (AX) = 50A0H *指令中也可以通过“段跨越前缀”取 得其他段中的数据, 例如: MOV AX,ES: [BX] PA = 16d (DS) + (BX) PA = 16d (ES) + (BX) PA = 16d (SS) + (BP)
微机原理与接口技术 (第三版)电子工业出版社 第03章 8086的指令系统

4、寄存器间接寻址(Register indirect addressing) 内存单元的逻辑偏移地址通过寄存器 间接给出。 例: MOV SI , 61A8H MOV DX , [SI]
5、基址/变址寻址(Based/Indexed addressing) 位移量是一带符号的16位16进制数。当 使用BX或BP寄存器时,称基址寻址;使用SI 或DI寄存器时,称变址寻址。 例: MOV CX , 36H[BX] MOV -20[BP] , AL
2、MOV数据传送指令 其格式为: MOV 目的操作数,源操作数 • 目的操作数和源操作数均可采用不同的寻 址方式, • 两个操作数的类型必需一致。
二、寻址方式介绍பைடு நூலகம்
1.立即寻址(Immediate addressing) 操作数就在指令中,紧跟在操作码后面, 作为指令一部分存放在内存的代码段中,这 种操作数称为立即数。 例: MOV AX , 34EAH MOV BL , 20H
3)、段间直接转移 JMP far PTR 目标地址 4)、段间间接转移 JMP WORD PTR[BX][SI]
2、条件转移指令
1)、单条件转移指令 ① JC ② JNC ③ JE/JZ ④ JNE/JNZ ⑤ JS ⑥ JNS ⑦ JO ⑧ JNO ⑨ JP/JPE ⑩ JNP/JPO ;CF标志为1,则转移 ;CF标志为0,则转移 ;ZF标志为1,则转移 ;ZF标志为0,则转移 ;SF标志为1,则转移 ;SF标志为0,则转移 ;OF标志为1,则转移 ;OF标志为0,则转移 ;PF标志为1,则转移 ;PF标志为0,则转移
3、目标地址传送指令
这类指令有: 1)LEA 有效地址传送到寄存器 2)LDS 装入一个新的物理地址 3)LES 装入一个新的物理地址
8086指令系统一览表
RCR op1, 1 带进位位的循环右移 RCR op1, CL
reg mem reg mem
串 MOVSB 操 作 MOVSW 类
((DI)) ← ((SI)) (SI) ← (SI)±1, (DI) ← (DI)±1 ((DI)) ← ((SI)) (SI) ← (SI)±2, (DI) ← (DI)±2
SAR op1, 1 算术右移 SAR op1, CL
ROL op1, 1 循环左移 ROL op1, CL
ROR op1, 1 循环右移 ROR op1, CL
reg mem mem, reg reg, mem reg, reg reg, imm mem, imm acc, imm reg, mem reg, reg reg, imm mem, imm acc, imm reg mem reg mem
9+22/rep 不重复:15 1 重复:
9+15/rep 1 不重复:15 重复:
9+15/rep
2
1
2
1
REPNE/REP (CX)=0 或(ZF)=1 退出重复,否则
NZ
(CX)←(CX)-1 并执行其后的串指令
ቤተ መጻሕፍቲ ባይዱ
string_instruc
控 JMP SHORT 无条件转移 制 op1 转 JMP NEAR 移 PTR op1 类 JMP FAR
reg mem
PTR op1
JMP WORD
PTR op1
JMP DWORD
PTR op1 JZ/JE op1 JNZ/JNE op1 JS op1
ZF=1 则转移 ZF=0 则转移 SF=1 则转移
JNS op1
003_微机原理-指令系统_2
MOV DS, AX
不影响标志位
3.3 指令系统—换码指令
指令书写格式: XLAT
指令执行的操作:
(AL)←((DS:BX+AL)) 查表操作,将BX指定的缓冲区中、AL指定的位移处的一个字节数 据取出赋给AL
指令说明
操作数隐含使用基地址寄存器BX与AL寄存器 换码指令执行前,在主存建立一个字节量表格,内含要转换的目 的码字,表格首地址存放于BX,AL存放相对表格首地址的位移量 换码指令执行后,指令将AL寄存器的内容转换为目标码字,因为 偏移量AL为8位,表格长度≤256字节 不影响标志位
数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令
控制转移指令
处理器控制指令
3.3 指令系统-通用数据传送指令
指令书写格式: MOV dst, src
指令执行的操作:(dst)←(src) 指令说明
操作数类型:立即操作数,寄存器操作数,存储器操作数 立即操作数不能作为目的操作数DST 错误:MOV 30H, AL 两个操作数也不能同时为存储器操作数 错误: MOV [DI+100H], [SI+200H]
dst为目的操作数,操作数类型可为寄存器操 作数或存储器操作数 cnt为移位次数,可为立即数1,或由寄存器 CL指定 SHL、SHR和SAL指令影响标志位CF和OF, cnt=1时,SHL与SAL移位后的最高位和CF不 同,则OF=1;SHR,OF=移位前最高位 SAR指令影响标志位CF、OF、PF、SF、ZF, AF不确定;
; 测试AL中数据的奇、偶
3.3 指令系统-移位指令
逻辑左移指令: SHL dst, cnt 算术左移指令: SAL dst, cnt
8086指令系统总结
8086指令系统总结学习微处理器及其程序设计,必须掌握微处理器的指令系统。
本章以 8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。
要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。
能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。
本章的重点难点内容是: 8086 的指令格式及寻址方式, 8086 的常用指令和8086 指令前缀的使用。
下面我们分别进行总结:一.8086寻址方式(1)操作数是数字,指令中立即写出数字------------立即数寻址MOV AX,1234H 解释此句意义(2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址MOV AX,BX(3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址MOV AX,[1234H]MOV AX,ES:[1234H](4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX]MOV AX,ES:[SI]MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI]二.8086指令系统1.数据传送指令(一)通用传送指令(1)MOV指令指令格式:MOV 目,源功能:将源操作数传送给目标操作数。
(2)堆栈操作指令进栈指令:PUSH格式:PUSH 源功能:将源操作数压入堆栈。
例:用堆栈指令完成上例的功能。
MOV AX,3000HMOV DS,AX ;段寄存器填充MOV SI,0100H ;基本指令执MOV DI,2000H ;行前的初值MOV CX,50NT:PUSH [SI] ;程序从这POP [DI] ;开始设计INC SIINC SIINC DIINC DILOOP NTMOV AH,4CHINT 21H(3)交换指令 XCHG格式:XCHG 目,源功能:源和目标中的内容交换。
第3章 8086指令系统(最后有练习题)
开 始
8086CPU的指令系统的基本指令
包括数据传送类指令、算术运算类指令、 位操作类指令、串操作类指令、控制转移 类指令、处理机控制类指令。后几节将分 别介绍这些指令的语句格式和功能。
3.1 8086的寻址方式
3.1.1 数据的寻址方式 3.1.2 程序转移地址的寻址方式 3.1.3 对端口的寻址方式
3.1.2 程序转移地址的寻址方式
用来确定转移指令及CALL指令的转向地址。
段内寻址
段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址
段间寻址
段内:转移指令与转向的目标指令在同一代码段 中,(CS)不变。
段间:转移指令与转向的目标指令在两个代码段中, (CS) 变化。
表示转移距离(称为位移量)的操作符:
返回本节
2 . 寄存器寻址
寄存器寻址方式的操作数在指令指明的寄 存器中。 汇编格式:R ,其中R表示寄存器名。 功能:操作数直接存放在寄存器R中。 例如:MOV AL,BL
【例3-2】下列程序执行后,(AX)=?,
(BX)=?
MOV AX,1234H
MOV BX,5678H
ADD AX,BX 执行:1234H→AX 5678H→BX (AX)+(BX)→AX 执行后:(AX)=68ACH,(BX)=5678H
3 . 直接寻址
特点:操作数在内存中。 汇编格式:①含有变量的地址表达式。 ②段寄存器名:[EA] 。 功能:指令下一字单元的内容是操作数的偏 移地址EA。 图形表示:
【例3-3】
寄存器和存储器内容为:(AX)=1212H, (DS)=3000H,(32000H)=45H, (32001H)=46H。 执行指令:MOV AX ,[2000H] 问执行后:(AX)=? Step1:计算地址DS*16+2000H=32000H Step2:找内容(32000H),(32001H) 所以执行后:(AX)=4645H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 存储器寻址
这类情形最为复杂, 我们需要讨论以下三个问题: 1) 缺省的段寄存器 2) 段超越问题 3) 不同的存储器寻址方式 我们以 mem 表示存储器寻址
1)
缺省的段寄存器
8086采用段,偏移的地址转换方式,即 物理地址=段始址+段内偏移 其中,段始址20位,高16位保存在某个段寄存器 中,低4位为0,通常在指令中出现的地址为偏 移地址,而段始址可以通过缺省的段寄存器内 容(*16)求得。缺省得段寄存器究竟是哪一个, 取决于指令,寻址方式及涉及的寄存器。
•直接寻址
不涉及寄存器,操作数有效地址直接出现在指令中。例 如: 1. MOV AX, [1234] 2. MOV AX, x[1234] 缺省的段寄存器为 DS,例1 源操作数的 物理地址=(DS)*16+1234 例2 源操作数的 物理地址=(DS)*16+x+1234 这里x为符号地址,可以理解为变量
本章内容: 3.1 8086 的寻址方式 3.2 8086 的指令概况 3.3 8086 的指令系统
3.1 8086 的寻址方式
理解寻址方式,对于学习汇编语言至关重要.所谓 寻址方式就是确定操作对象的方式.依据操作对 象的不同性质,寻址方式可以分为: 3.1.1 与数据有关的寻址方式 3.1.2 与转移有关的寻址方式
而执行一条转移指令,意味着需要修改下一条指令 的地址,也就是,要根据转移指令的要求,修改CS和IP的内 容.
段内转移 转移的目标地址在当前代码段内,CS的内容不必修 改,需要将IP的内容修改为目标地址 段间转移 转移的目标地址未必在本段,CS和IP的内容都需要 修改.
段内转移 又分为段内直接转移与段内间接转移
CPU在程序运行过程中,利用内部寄存器记载下一 条指令的地址.8086采用段-偏移的地址转换方式,因此用 代码段寄存器CS和指令指针寄存器IP保存即将执行的 指令地址.其中CS保存段地址, IP保存段内偏移地址. 下一条指令的物理地址=(CS)*16+(IP).
顺序执行情形,IP的内容随指令的执行自动取得增量 (当前机器指令占据的字节数).CS的内容不发生改变.
段间转移分为段间直接转移和段间间接转移 段间直接转移的汇编指令一般要求在指令中写明 远跳转,指令格式一般是 JMP FAR PTR 〈标号〉 执行这样的指令,(IP)将取得标号的段内偏移地址, 而(CS)将取得标号所在段的段地址。汇编程序自动 将这些地址填入机器指令。例5 段间间接转移,只能是存储器寻址,存储器中连 续两个字,高位字存放新的代码段段址,低位字存放 指令指针。指令格式一般是 JMP DWORD PTR 〈存储器地址〉 存储器地址可以采用五种存储器寻址中的任何一种。 例6
例4:段内间接寻址,存储器寻址 JMP WORD PTR [TBL] JMP WORD PTR [BX+TBL] JMP WORD PTR [BP+SI+TBL] 指令执行的结果, (IP)取得指定的存储单元内容 返回
例5 段间直接转移 JMP FAR PTR LBL 其中FAR PTR 是操作符,表示直接远转移,指令执行 的操作是把 LBL 所在段地址送CS,LBL的偏移地址 送IP。 例6 段间间接转移,只能用存储器寻址 JMP DWORD PTR [TBL] JMP DWORD PTR [TBL+BP] JMP DWORD PTR [TBL+BX+DI] 指令执行的操作是,指定存储单元(双字)的高位 字送CS,低位字送IP。 返回
•基址变址相对寻址 涉及两个寄存器,其中之一为基址寄存器,另一 个为变址寄存器,带8位或16位位 移量,操作 数的有效地址等于两个寄存器内容与位移量之 和,缺省的段寄存器以及段超越的规定与基址 变址寻址相同。例 1 MOV AX, x[BX][DI] 2 MOV AX, BP[SI+x+5]
3.1.2 与转移地址有关的寻址方式
0P
s
w
如立即数为8位,但要求扩展成16位数(高位字 节按低位字节的最高有效位作符号扩展)时,s 位 为1。因此,当指令作字节操作时,sw=00;当指 令有16位立即数且作字操作时sw=01;而 当指令 有8位立即数但需要经符号扩展成16位立即数作字 操作时,则sw=11。 由于IBM PC的指令格式很多, 这里我们只作一些基本情况介绍,必要时读者可通 过查手册来了解详细情况。
间接转移 转移的目标地址在寄存器或存储器中保存,注意 间接远转移地址只能保存在寄存器中。 返回
3.2 1BM PC机的机器语言指令概况
我们用汇编语言编写的汇编语言程序输入计算机 后,由机器提供的“汇编程序”将它翻译成由机器指 令组成的机器语言程序.,才能由计算机识别并执行 。因此汇编语言程序是由汇编程序翻译成可执行的机 器语言程序的,一般说来,这一过程不必由人来干预 。我们这里只介绍一下基本原理,以便在必要时也可 完成类似的工作。 机器语言指令由操作码和地址码两部分组成,下 面分别加以说明。
3.2.1 操作码的机器语言表示 ·
IBM PC机的银器语言指令是多字节指令,一条指令 可以由1—7个字节组成。指令的操作码(用OP表示)采 用二进制代码表示本指令所执行的操作,在IBM PC机 中,它通常用指令的第一个字节表示,有时由于用8位 还不够,因此在指令的第二个字节中还可能有3位操作 码,除此以外的其他字节则用来表示地址码。在多数 操作码中,常使用某些位来指示某些信息。例如
3,2.2 寻址方式的机器语言表示 IBM PC机用一个寻址方式字节表示操作数的寻址方 式,它通常是机器指令的第二个字节。寻址方式字节 可表示如下:
mod
reg
r/m
•寄存器间接寻址
涉及一个寄存器,没有位移量,寄存器中保存操作数地 址,允许使用的寄存器为 BX, BP, SI, DI,例如: 1 MOV AX, [BX] 2 ES: MOV AX, [SI] 3. MOV AX, [BP] 用BX,SI,DI 间接寻址时,缺省的段寄存器为DS,用BP间接 寻址时,缺省的段寄存器为SS,允许段超越. 物理地址=(段寄存器)*16+(寄存器)
汇编语言中,直接转移的指令格式如下: jmp [〈类型操作符〉] 〈转移目标〉 其中类型是可选项,类型缺省时,汇编程序将根据实际情 况决定形成的指令.类型不缺省,则取值可以是 short, near ptr, far ptr
分别表示直接短,近,远转移.转移目标应该是汇编语言 源程序中某一条指令的标号.
第 3 章 8086 的指令系统
8086 的指令由操作码和操作数组成,操作码指定 进行的操作,操作数指定操作对象.有以下三种 格式: 1. 〈操作码〉 无操作数指令 2. 〈操作码〉〈操作数〉 单操作数指令 3. 〈操作码〉 〈操作数1〉 ,〈操作数2〉 两操作数指令, 最为常见, 通常操作数1为目 的操作数,操作数2为源操作数,分别简记为 DST和 SRC.
程序保存在内存中,多数情况下,按照指令在内存中 的位置,从低地址到高地址,逐条顺序执行,但循环,分支, 子程序等结构在计算机程序中是不可缺少的,使用这些 结构势必要破坏程序的自然执行顺序.于是产生一个问 题:如何决定下一条指令的位置?即与转移地址有关的寻 址方式. 8086 与转移有关的指令有无条件转移(jmp),过程调 用(call),循环(loop),条件转移和中断(int),后三种指令寻 址方式有严格规定,比较简单.前两种指令的寻址方式比 较丰富.本节以jmp为例,介绍各种寻址方式.
•段内直接转移 转移的目标地址可以直接从指令中求 得, 相当于与数据有关的寻址方式中的立即寻址 •段内间接转移 的目标地址保存在寄存器或存储器中 从指令中可以得到寄存器名或保存目标地址的 存储器地址,
段内直接转移 在汇编语言源程序中,直接转移指令是在jmp后写 跳转目标的标号.汇编程序自动计算该标号代表的地 址. 将汇编的跳转指令转换成相应的机器指令. 段内直接转移又分为直接短转移和直接近转移, 取决于目标地址与IP内容(下一条指令地址)之差(称为 位移量,位移量将出现在机器指令中).例1 位移量在字节整数范围之内(两地址之差在 -128~127字节范围内)时,位移量为8位,形成短转移, 否则,位移量为16位,形成近转移. 例2
返回
段内间接转移
跳转目标地址在寄存器或存储器中 如果是在寄存器中,则指令格式为 JMP 〈寄存器名〉 可以取八个通用16位寄存器中的任何一个,其内容 是转移目标的段内偏移地址,这种方式与数据寻址 中的寄存器寻址对应. 例3 如果是在存储器中, 则指令格式为 JMP [WORD PTR] [存储器地址] 与数据寻址中,操作数在存储器中的寻址方式对 应,可以采用五种接短转移 JMP SHORT PTR LBL LBL为标号,位移量8位,指令执行后,(IP)变为 LBL
例2:段内直接近转移 JMP NEAR PTR LBL1 LBL1为标号,位移量16位,指令执行后,(IP)变为 LBL1 返回
例3:段内间接转移,寄存器寻址 JMP AX JMP SP 指令执行的结果, (IP)取得指定的寄存器内容
1 立即寻址
操作数出现在指令中,例如 MOV AX, 256 源操作数 256 直接出现在指令中,这样的源操作数 叫做立即数. 注意:立即数不能是目的操作数,只 能是源操作数. 此后,讲解具体指令的寻址方式时,我们将以 data 表示立即寻址.
2. 寄存器寻址
操作数在寄存器中,例如: MOV AX, BX 源操作数保存在寄存器BX中,这种情况叫做寄存器寻址.注 意寄存器寻址中所说的寄存器是指8个通用寄存器.虽然 某些指令允许使用段寄存器,但那不算是寄存器寻址.此 后讲解具体指令时,遇到允许使用段寄存器寻址的情形, 我们会特别说明. 我们以 reg, segreg 分别表示寄存器寻址和段寄存器寻址
3.1.1 与数据有关的寻址方式
操作对象是数据的指令, 数据可能出现在指令中, 可能保存在寄存器中,还可能保存在存储器中, 总之有以下三类不同的寻址方式: 1. 立即寻址 操作数在指令中 2. 寄存器寻址 操作数保存在寄存器中 3. 存储器寻址 操作数保存在存储器中 我们将以两操作数指令 MOV 的源操作数寻址方 式为例解释这三类不同的寻址方式.