第三章-80X86的寻址方式和指令系统-1.
第3章 80x86 指令系统和寻址方式
MOV EAX,12345678H EAX,
需要注意的问题: 需要注意的问题:
需要注意的问 题!!
操作数直接出现在指令中, 1)操作数直接出现在指令中,但不能作为目的操作数出现在指令 这与高级语言中, 中 , 这与高级语言中, 赋值语句的左边不能是常量的要求是相 同的。 同的。 立即数可以写成:10进制(D) 进制( 进制(D 进制( 16进 2 )立即数可以写成 : 10 进制 (D) ,2 进制 (B ) ,8 进制( O ) ,16进 制(H)。 要注意立即数的表示范围: 3)要注意立即数的表示范围: 位带符号数表示范围: 127( FH) 128(80H 8位带符号数表示范围: 127(7FH)~ -128(80H) 16位带符号数表示范围 32767( FFFH) 位带符号数表示范围: 32768(8000H 16位带符号数表示范围:32767(7FFFH)~ -32768(8000H) 位无符号数表示范围: 255(OFFH) 8位无符号数表示范围: 0 ~ 255(OFFH) 16无符号数位表示范围 无符号数位表示范围: 65535( FFFFH) 16无符号数位表示范围:0 ~65535(0FFFFH) 16位带符号数表示范围 32767( FFFH) 位带符号数表示范围: 32768(8000H 16位带符号数表示范围:32767(7FFFH)~ -32768(8000H)
【例3பைடு நூலகம்3】判断下列指令的寻址方式: 判断下列指令的寻址方式:
EAX, MOV EAX,EBX ;源操作数和目的操作数均为寄存器寻址 MOV ADD AX,1234H;目的操作数为寄存器寻址, AX,1234H;目的操作数为寄存器寻址,源操作数是立即数寻址 X, X, AX ;源操作数为寄存器寻址,目的操作数为存储器寻址 源操作数为寄存器寻址, ;将DS的内容压栈指令,源操作数为寄存器寻址 DS的内容压栈指令, 的内容压栈指令 ;将标志寄存器的内容压栈指令,源操作数是寄存器寻址 将标志寄存器的内容压栈指令, ;置标志寄存器DF=1, 目的操作数是寄存器寻址 置标志寄存器DF=1, DF=1
80X86寻址方式和指令系统
的寻址方式由指令给出。 例如,若(BX)=2000H, (SI)=0A00H, (DI)=2A00H,则以下指令 的结果是一样的:
MOV AL, [2A00H] MOV AL, [BX+0A00H] MOV AL, [BX][SI] MOV AL, [DI]
MOV AX , [2A00H] MOV DX , ES: [2A00H] MOV SI , TABLE_PTR
80X86寻址方式和指令系统
第3章 80X86寻址方式和指令系统
执行指令:A10231 MOV AX,[3102H] 后
AL (3102H) , AH (3103H) 如果(DS)=2000H, (23012H) = CDH, (23013H) = ABH
EA =
(BX) + (SI) + 8位
(BP)
(DI)
16位
例如:
MOV AX,BASE [SI] [BX] MOV AX,[BX+BASE] [SI] MOV AX,[BX+SI+BASE] MOV AX,[BX] BASE [SI] MOV AX,[BX+SI] BASE
“相对的基址变址寻址”方式主要用于对二维数组的访问。
错误例:
× MOV 2A00H, AX ; 错误!
80X86寻址方式和指令系统
第3章 80X86寻址方式和指令系统
例如: B80231 MOV AX,3102H 执行后,(AH) = 31H,(AL) = 02H
立即寻址指令在 存储器中的存放 形式
AX AH AL
存储器
X86的寻址方式和指令系统1.ppt
在存储器中。
16位寻址,可用的寄存器是BX、BP、SI、DI,其物理地址为:
(SI)
16x(Ds)+ (DI)
16x(SS)+(BP) 可以进行段超越。
(BX)
Ex: MOV AX,SS:[BX]
物理地址=16X(SS)+(BX) 操作数在SS段,采用段超越。
32位寻址: EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI 8 个通用寄存器,ESP、EBP默认段为SS段。
AH AL
CS段
Im:立即数, 可以是8位 或16位。
OP
4C
CS段
B3
注意! 立即数以A~F开头的十六进制数,必须 在字母前加数字0。
32位寻址时: ex3.3 MOV EAX,12345678H
(EAX)=12345678H
立即数寻址的功能
立即数寻址的执行
2.寄存器寻址(速度快)
(1)操作数包含在CPU内部寄存器中, 寄存器可以 是8位或16位,也可以是32位。
操作数的地址)。 指令的一般格式:操作码、操作数… (操作数字段可以有一个或两个,称为一地址、二地
址或三地址指令。) 如何寻找操作数就是寻址方式。
3.2 寻址方式
有效地址EA和段超越 有效地址EA、段超越
与数据有关的寻址方式 立即寻址、寄存器寻址、直接寻址、 寄存器间接寻址、寄存器相对寻址 基址变址寻址、相对基址变址寻址 比例变址寻址、基址比例变址寻址、 相对基址比例变址寻址
与转移有关的寻址方式 段内直接、间接寻址 段间直接、间接寻址
3.2.1有效地址EA和段超越
1.有效地址(EA)
当操作数存在mem中,其物理地址由段地址和偏移地址 组成。其中偏移地址称EA。 EA由以下四部分组成: (1)位移量:存在指令中的一个8位/16位、32位的数,不是
第3章 80X86的指令系统和寻址方式
通用寄存器 ;
(3)变址:其值存放在变址寄存器中。SI、DI 、除ESP外的 32位通用寄存器 ; (4)比例因子:是386及后继机型中新增寻址方式中的术语。 其值可为1、2、4、8。
寻址方式
立即数寻址 寄存器寻址 存储器寻址
直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址
练习
MOV AX, ARRAY[4]
MOV AX, [BX] MOV AX, [BX+2] ;直接寻址,偏移地址= ARRAY+4 ;寄存器间接寻址
;寄存器相对寻址 MOV AX, ARRAY [BX] ;寄存器相对寻址
MOV AX, [BX+SI] MOV AX, [BX+DI+2]
;基址(BX)变址(SI)寻址 ;相对基址变址寻址
;(BX)←1234H ;(AX)←(BX)
4)寄存器间接寻址方式
有效地址包含在基址寄存器或变址寄存器中;
寄存器可以是BX、BP、SI、DI之一。
(1) 以BX、SI、DI进行寄存器间接寻址,隐含的段
寄存器为数据段寄存器DS 。
MOV AX, [BX]
;物理地址=DS×16+BX ;物理地址=DS×16+SI ;物理地址=DS×16+DI
2)立即数(常数)到存储单元的数据传输
例 3.18 MOV MEM_BYTE, 20H ;将立即数20H送到MEM_BYTE存储单元 MOV DS:[0005H], 4500H ;立即数4500H送到DS:0005H的存储单元中
3)立即数到通用寄存器的数据传输 例 3.19 MOV AL, 20H MOV SP, 2000H ;将立即数20H送到AL寄存器 ;将立即数2000H送入SP寄存器
第3章 80x86指令系统和寻址方式
三、学习指令的注意事项 指令的功能——该指令能够实现何种操作。通常指令助 指令支持的寻址方式——该指令中的操作数可以采用何
记符就是指令功能的英文单词或其缩写形式。
种寻址方式。
指令对标志的影响——该指令执行后是否对各个标志位
其他方面——该指令其他需要特别注意的地方,如指令
有影响,以及如何影响。 执行时的约定设置、必须预置的参数、隐含使用的寄存器等。
+DI:2345H 12345H
~
~ ~
BX
DS→ 10000H 12345H … 54H 43H
43 54
在不使用段超越前缀的情况下,有下列规定:
若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存 器为DS;
若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆
栈段)。 该寻址方式物理地址的计算方法如下: BX 物理地址PA=16×DS + SI DI 或 物理地址PA=16×DS+ BP
功 能:操作数存放在存储器,寄存器R存放操作数的偏移 地址EA。
图形表示:
段基地址
指令 基址或变址寄存器 寄存器 EA + 存储器 操作数
【例3.4】假设有指令:MOV BX, [DI],在执行时,(DS) =1000H,(DI)=2345H,存储单元12345H的内容是4354H。问 执行指令后,BX的值是什么? 解:寄存器DI的值不是操作数,而是操作数的地址。 该操作数的物理地址应由DS和DI的值形成,即: CS→ PA=(DS)*16+DI=1000H*16+2345H=12345H。 … OP 所以,该指令的执行效果是: … 把从物理地址为12345H开始的 DS:1000H 一个字的值传送给BX。 ~
第3章 80x86的寻址方式与指令系统分类
MOV AX,[2000] ; MOV buffer[SI],AX
• 操作数在I/O端口中—— 这时指令中的操作数场包含着此操作数的端口号。
IN AL, DX; OUT 83H, AL
(四)寻址方式
1.立即寻址方式 2.寄存器寻址 3.存储器寻址方式
1)直接寻址方式 2)寄存器间接寻址 3)寄存器相对寻址 4)基址加变址寻址 5)相对基址加变址寻址 4.I/O寻址方式
DEC OPRD CMP DST,SRC NEG OPRD MUL SRC IMUL SRC DIV SRC IDIV SRC
CBW CWD
功能
OSZ APC
加法(字、字节) 带进位加法(字、字节) 加 1(字、字节) 减法(字、字节)
OSZ APC OSZ APC OSZ AP OSZ APC
带借位减法(字、字节)
65 First F3 02 00 24 Second E0 05 00 89 Third D3 08 00
逻辑运算类指令
分类
名称
格式
功能
逻辑与指令
逻辑 运算 指令
逻辑或指令 逻辑非指令 逻辑异或指令
AND DST, SRC OR DST, SRC NOT OPRD XOR DST, SRC
与(字、字节) 或(字、字节) 非(字、字节) 异或(字、字节)
AND通常用于使某些位置0, 其它位不变的情况。
11111111
使一
∧ 0 0111111
立 即 数的
0 0111111
该位为 0 即可
例:使某数的第4、5位置1。
MOV AL,03H OR AL,30H
00000011 ∨ 00110000
00110011
80x86寻址方式和指令系统
80x86寻址方式和指令系统第三章 80x86寻址方式和指令系统3.1 80x86 寻址方式3.1.1数据寻址方式通常指令分为操作码和操作数两部分,表示指令中操作数所在的方法称数据寻址方式。
一、立即寻址操作数包含在指令中,作为指令的一部分,存放在代码段中。
操作数(又称立即数)存放形式为,数据高位存放在地址高位存储单元,数据低位存放在地址低位存储单元。
例3.1·MODEL tiny;选择单个段模式地址·586;586实方式CS:EA 机器码·CODE;代码段开始·STARTUP;程序开始1D24:0100 B83412 MOV AX,1234H ;AX←1234H1D24:0103 66BB00000000 MOV EBX,0;EBX←01D24:0109 B155 MOV CL,55H;CL←55H·EXIT;返回DOSEND;文件结束例3.1中指令MOV AX,1234H,其源操作数为立即数1234H,目的操作数为寄存器AX。
存放该指令的地址为1D24:0100,执行该指令,从代码段取出立即数1234H送寄存器AX中。
图3.1为立即寻址过程示意图。
../../../flash/t3.1.swf图3.1 立即寻址过程示意图二、寄存器寻址操作数在寄存器中,操作数可以是8位、16位或32位通用寄存器、16位段寄存器。
例3.2·MODEL TINY·586·CODE地址机器码·STARTUP1D24:0100 8BC3 MOV AX,BX;AX←BX1D24:0102 8ACA MOV CL,DL;CL←DL1D24:0104 668BF7 MOV ESI,EDI;ESI←EDI·EXITEND上例中指令MOV AX,BX,其源操作数为BX,目的操作数为AX。
存放该指令的地址为1D24:0100,执行该指令,将BX内容复制到AX中。
第三章 80x86的寻址方式与指令系统 微机基础与接口技术 教学课件
MOV AX,[BX][SI]
2020/6/16
七、相对基址加变址寻址方式 MOV AX, TABLE[BX][SI]
3.2
2020/6/16
3.3 80x86的指令系统
包括数据传送、算术运算、逻辑运算、程序 控制、处理器控制、串操作六种类型的指令 。 *共115个助记符,91种操作, 功能上能够满足基本编程的需要。
JMP EXIT
;跳转到EXIT
BIG: JE ZERO ;=0转ZERO
MOV AL,01H ;大于0,则赋值1
JMP EXIT
ZERO:MOV AL,0 ;等于0,则赋值0
EXIT:MOV RES,AL ;把结果存入RES
2020/6/16
3. 循环指令LOOP
3.3
LOOP指令借助默认的CX循环计数器, 可以在 -128---127范围内实现程序有规律的循环, 类似指令还有: LOOPZ/LOOPE、LOOPNZ/LOOPNE。
默认DS:SI→ES/DS:DI,地址变化方向由DF决定: DF=0/1,地址增大/减小; 并且结合重复前缀REP/REPE/REPNE, 实现重复传送,重复次数必须由CX指定。
2020/6/16
LEA SI,SRC LEA DI,DST MOV BX,100 CLD L: MOVSB DEC BX JNZ L
ESC 存储器寻址方式;为协处理器提供操作码,数据总线把存储单元内容 送出并开始协处理器指令的执行;当遇到协处理器助记指 令码,汇编程序把它转换为ESC指令的机器码,表示此处 为协处理器的操作码。
2020/6/16
六、字符串操作指令
第三章80x86指令系统
DX 0120H
AX 10F0H
0000H 0001H
接口 端口0 端口1
…
0120H 10F0H端 口 288
…
FFFFH
端 口 65535
第三章 80x86 指 令 系 统
2)地址寻址方式
找出程序转移的地址。转移地址可以在段内(段内转移); 转移地址也可以跨段(段间转移)。仅更改IP的内容。
(1)段内直接寻址方式(相对寻址方式)
第三章 80x86 指 令 系 统
MOV [SI+10H],AX MOV CX,[BX+COUNT]
若(DS)=3000H,(SI)=2000H, (BX)=1000H,COUNT=1050H, (AX)=4050H
(DS)×10H=30000H
(SI)= 2000H
+
10H
32010H
存储器 操作码 操作码
MOV AL,[Value] 或 MOV AL,value
第三章 80x86 指 令 系 统
②寄存器间接寻址方式
操作数位于存储器中,该存储器的地址存放于指令指定的寄存器中, 指令对存储器中的内容进行运算。若无特殊说明,隐含的段地址由DS提供, 只有BP做间接寻址的时候,隐含的段地址为SS。
(SI) 源变址寄存器 (DI)目的变址寄存器 EA= (BX)基址寄存器 (BP)基地址指针寄存器
基址寄存器和变址寄存器存放数组的行、列下标,指明元素在数组中的位置。
指令书写形式:MOV AX,[BX+SI+COUNT] MOV AX,[BX][SI+COUNT] MOV AX,[BX+SI]COUNT MOV AX,[BX][SI]COUNT MOV AX,COUNT[BX][SI]
第三章-80X86的寻址方式和指令系统-1
6. 基址加变址寻址方式 (Based indexed addressing)
操作数的有效地址是一个基址寄存器和一个变址寄存器的 内容之和,基址寄存器名和变址寄存器名均有指令指定。 除有段跨越前缀之外,形成物理地址有二种方式:
PA=16d×(DS )+(BX)+
(SI)
(DI)
PA=16d×(SS)+(BP)+
小结:三种类型操作数
综观8086/ 8088寻址方式,其操作数有三种类型:
立即操作数、寄存器操作数、存储器操作数。
三种类型操作数特点:
(1)立即操作数 • 可以使用立即操作数指令有: 数据传送指令、算术运算指令(乘、除运算指令除外)、
逻辑运算指令等。
• 立即数只能作为源操作数,不能作为目标操作数。
存储器
... 32000H ... ... 334EAH 67H 45H ... 数 据 段
基址加变址寻址方式 MOV AX,[BX+SI]
用途:这种寻址方式同样适用于数组或表格处理。
表格首地址基址寄存器中,用变址寄存器来访问 数组中的元素。二个寄存器都能修改,所以比直接 变址方式更灵。
存储器
ARRAY+5
指令执行后:EA=5040H PA=55040H (55040H)=5548H (AX)=5548H
寄存器相对寻址方式 MOV AX,COUNT[BP]
用途:这种寻址方式同样用于表格处理。 表格首地址COUNT 修改基址或变址寄存器来取得表格中的值。 例:某数据表的首地址为COUNT 欲读取表中第10个数据,存放到(AL)中。 第10个数据的有效地址: EA= COUNT + 9 MOV SI , 09H MOV AL , [SI+COUNT]
80x86的指令系统和寻址方式(1).ppt
• 指令系统
一组指令的集合
指令
操作码 操作数 ... 操作数
• 寻址方式
与数据有关的寻址方式 与转移地址有关的寻址方式
物理地址的形成
3.1.1 8086中数据寻址方式
以 MOV 指令为例
• 立即寻址
MOV AX , 3069H
• 寄存器寻址
MOV AL , BH
JMP
目标地址的范围:段内
• 段内转移——近转移(near)
– 在当前代码段64KB范围内转移
代
( ±32KB范围)
码 段
– 不需要更改CS段地址,只要改变IP偏
移地址
• 段内转移——短转移(short)
代 码
– 转移范围可以用一个字节表达,在段
段
内-128~+127范围的转移
目标地址的范围:段间
• 段间转移——远转移(far)
– 从当前代码段跳转到另一个代码 段,可以在1MB范围
代 码
– 需要更改CS段地址和IP偏移地址
段
– 目标地址必须用一个32位数表达,
叫做32位远指针,它就是逻辑地
代
址
码
段
实际编程时,汇编程序会根据目标地址的距离, 自动处理成短转移、近转移或远转移
程序员可用操作符short、near ptr 或far ptr 强制
假设(35000H)=1234H, 那么 (AX)=1234H
* 适于数组、字符串、表格的处理
(6) 基址变址寻址方式*
有效地址 =
(BX) +
(SI)
(BP) (DI)
指令格式:
MOV MOV MOV
AX, [BX] [DI] AX, [BX+DI] AX, ES:[BX] [SI]
第三章 80x86指令系统
(3) CPUID读取CPU的标识等有关信息 获得Pentium处理器的类型等有关信息。
二 80x86的指令系统
(4) RDMSR读取模式专用寄存器的指令 Pentium模式专用寄存器中的值。 (5) WRMSR 写入模式专用寄存器的指令
将EDX∶EAX中64位数写入模式专用寄存器。
(6) RSM 复位到系统管理模式
二 80x86的指令系统
(3)PUSH
还可将立即数推入堆栈 (4)PUSHAD 将EAX、ECX、EDX、EBX、ESP、 EBP、ESI、EDI推入堆栈
二 80x86的指令系统
(2) 累加器传送指令 包括: IN OUT XLAT XLATB
二 80x86的指令系统
(3) 标志传送指令
在 LAHF 、 SAHF 、 PUSHF 、 POP 基 础上,增加了: PUSHFD POPFD
(2) CMPXCHG r/m, r 32位比较指令 将目的寄存器或存储器中数和累加器中数比较, 如等则ZF为1,并将源操作数送目的操作数;否 则ZF为0,并将目的操作数送累加器。
二 80x86的指令系统
(3) XADD r/m, r 字交换加法指令 将源操作数和目的操作数相加,结果 送目的操作数处,而目的操作数送源 操作数处。 (4) INVD Cache清除指令
一 80x86的寻址方式
(3) 基址寻址方式
如: MOV
ECX,[EAX+24]
;由EAX中内容加24组成有效地址
(4) 变址寻址方式
如: ADD EAX,[ESI],5
;ESI的内容加5组成有效地址
一 80x86的寻址方式
(5) 带比例因子的变址寻址方式 如: IMUL EBX,[ESI*4+7] (6) 基址变址寻址方式 如: MOV EAX,[ESI][EBX]
第三章 80x86的寻址方式与指令系统
第三章80x86的寻址方式与指令系统3.1 指令系统概述3.2 80x86的寻址方式3.3 80x86的指令系统3.1 指令系统概述计算机的指令系统是计算机指令的集合,是计算机硬件的语言系统,程序员通过计算机指令使用计算机的硬件,按指令系统提供的指令有序地组成程序,完成特定的功能。
指令包括操作码和操作数两大部分操作码目的操作数(地址),源操作数(地址)如:MOV AX, 012FDH3.1用符号化的汇编语言指令编写的程序输入计算机后,由“汇编程序”把它翻译成二进制机器语言形式,才能在机器上执行。
机器语言指令格式如下:OP MOD DISP(低)DISP(高)DATA(低)DATA(高)OP代表操作码,MOD表示寻址方式,DISP代表位移量,DATA代表数据。
3.1OP 字段的具体信息:OP d/swd/s 位使用在双操作数指令中,因为80x86/88规定双操作数指令的两个操作数必须有一个操作数放在寄存器中:d 位指定所用寄存器用于目的操作数(d=1)还是源操作数(d=0);对于指令中有立即数,s=1表示把8位立即数扩展为16位。
w 位用于表示指令对字(w=1)还是字节(w=0)操作。
OP 字段是指令的第一个字节,8位不够时,还可占用第二个字节的3位,除指定操作功能外,还包含操作对象的特征信息。
MOD字段表示指令寻址方式,占1个字节。
MOD字段的具体信息:MOD REG R/MMOD占2位,用于区分寄存器寻址和存储器寻址,以及使用多少字节的偏移量。
00=存储器寻址方式,无偏移量;01=存储器寻址方式,使用1个字节偏移量(-128≤DISP≤127);10=存储器寻址方式,使用2个字节偏移量(0≤DISP≤65535);11=寄存器寻址方式,R/M表示寄存器,并与OP字段的w位一起决定寄存器是8位还是16位。
REG用于选择寄存器,并与OP字段的w位一起决定寄存器是8位还是16位。
MOD中寄存器的选择:REG或MOD=11的R/M w=0w=1000AL AX001CL CX010DL DX011BL BX100AH SP101CH BP110DH SI111BH DI3.1 R/M对有效地址形成的规定MOD R/M 00011011默认段寄存器w=0w=1000(BX)+(SI)(BX)+(SI)+DISP8(BX)+(SI)+DISP16AL AX DS001(BX)+(DI)(BX)+(DI)+DISP8(BX)+(DI)+DISP16CL CX DS010(BX)+(SI)(BX)+(SI)+DISP8(BX)+(SI)+DISP16DL DX SS011(BX)+(DI)(BX)+(DI)+DISP8(BX)+(DI)+DISP16BL BX SS100(SI)(SI)+DISP8(SI)+DISP16AH SP DS101(DI)(DI)+DISP8(DI)+DISP16CH BP DS110直接地址(SP)+DISP8(SP)+DISP16DH SI SS111(BX)(BX)+DISP8(BX)+DISP16BH DI DS3.1默认段寄存器是没有段跨越前缀时隐含的段寄存器,但如果在指令前指定了段跨越前缀,则使用指定段寄存器。
第三章 80X86寻址方式和指令系统
例3.6 寄存器相对寻址
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
寄存器相对寻址过程示意
第三章 80x86寻址方式和指令系统
4、基址变址寻址
操作数在存储单元中,其有效地址EA可表示为
EA=
(BX) (BP)
(SI) (DI)
例1 MOV AX,[BX+SI] 或写成:MOV AX,[BX][SI] 例2 MOV AX,[BX+DI] 例3 MOV AX,[BP+SI] 例4 MOV AX,[BP+DI]
寄存器间接寻址 基址变址寻址
第三章 80x86寻址方式和指令系统
1、直接寻址
操作数在存储器单元中。 操作数所在的有效地址EA直接由指令指出。
例1 MOV AX,[3000H] 例2 MOV BL,BLOCK 例3 MOV BX,DATA1
例3.3 直接寻址
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
例2 MOV AX,[BP+DI+1000H]
例3.8 相对基址变址寻址 第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
相对基址变址寻址过程示意
第三章 80x86寻址方式和指令系统
(二)32位指令模式下的存储器寻址
32位指令模式寻址结构由5部分组成: 段址+基址+变址﹡比例因子+偏移量
例3.1 立即寻址
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
立即寻址过程示意
第三章 80x86寻址方式和指令系统
二、寄存器寻址
操作数在寄存器中。 32位寄存器:EAX、EBX、ECX、EDX、ESP、EBP、
80X86的指令系统和寻址方式
- 字串:一串连续的字。
- 双字串:一串连续的双字。
3.2 80X86的寻址方式
• 数据寻址方式:是指获取指令所需的操 作数或操作数地址的方式
• 程序寻址方式:是指程序中出现转移和 调用时的程序定位方式
3.2.1 80X86的数据寻址方式 (共十种)
1、立即寻址方式
操作数作为指令的一部分,在直接指令中给出。
3.2.3操作数宽度和寻址宽度的确定
• 操作数宽度也称为“操作尺寸” • 寻址宽度也称为“寻址尺寸” • 实际上指的是操作数二进位数和可寻址的二进位数。 • 8086和80286的操作数宽度和寻址宽度都是16位的。 • 而32位处理器的操作数宽度和寻址宽度可以是16位的,
也可以是32位的,涉及到W域、缺省段属性及指令前缀 等概念。
按指令码中规定的寻址方式给出。此时,寻址所得到的不 是操作数,而是转移地址,用来更新IP内容。
JMP BX
..
2000:0FFFH
操作码
.. ..
2000:4000H
操作码
CS + BX(新 IP)
2000 4000
24000
..
(3)段间直接寻址 在段间直接寻址方式中,指 令码中将直接给出16位的段 地址和16位的段内偏移地址, 用来更新CS和IP内容。
汇编语言指令要解决的两个问题: 要指出进行什么操作——操作符; 要指出操作数和操作结果放在何处——寻址方式。
指令的基本构成:
目的
源
说明要执行的 操作对象,可以 是什么操作 有0个、1个或2个
指令举例: MOV AX , BX
操作码 操作数 ADD AX,[SI+6] INC BX NOP
第三章 80x86 的指令系统和寻址方式
是硬件设计人员和程序员能见到的机器的主要属性,
是硬件构成的计算机系统向外部世界提供的直接界面。
3
一个CPU的指令系统是固定的, 不同类型的CPU其指令系统不同; 同一系列向上兼容。 程序是为要解决的问题编写出来的指令集合。 用户为解决自己的问题所编写的程序称为源程序。
4
2. 8086/8088指令格式简介
立即数可以是8位或16位(16位的立即数是高位字节放在高地址,低位字节放在低地址) 。 应用场合: 立即数常用来给寄存器或内存单元赋初值。 注意:只能用于源操作数字段,不能用于目的操作数字段。 例1 MOV AX , 2056H 结果 ( AH ) = 20H
低地址
内存
操作码 操 作 数
高地址
6
操作数个数
按指令格式中,操作数个数的多少分为三类:
无操作数: 指令只有一个操作码,没有操作数
单操作数: 指令中给出一个操作数
双操作数: 指令中给出两个操作数。
7
① 无操作数: 指令只有一个操作码,没有操作数。
有两种可能: ▲ 有些操作不需要操作数。 如 HLT,NOP等处理机控制指令。 ▲ 操作数隐含在指令中。 如 STC , CLC等处理机控制命令。
MOV DS: [ DI ] , CL
功能:将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中
例
编程将CL寄存器的内容传送到21000H单元中。 地址 21000H=2000:1000H 编程时, DS 存放段地址2000H DI 存放偏移地址1000H MOV MOV MOV MOV AX, 2000H DS, AX DI, 1000H DS: [ DI ], CL
快
慢
第3章 80x86指令系统与寻址方式1精品PPT课件
第3章 80x86指令系统与寻址方式
3.2 寻址方式
寻址方式 分类
与数据有关的寻址方式 与转移地址有关的寻址方式
next
第3章 80x86指令系统与寻址方式
对源操作数分别使用7 种寻址方式: (1)立即掌寻握址寻方址式方(式Im的m要edi点ate:Addressing ) (2)寄存❖器特寻点址(方区式别(于R其eg他iste寻r A址dd方re式ssin)g ;) (3)直接❖寻使址用方方式法((D语ir法ect形Ad式dr)ess;ing ) (4)寄存❖器用间途接(寻什址么方情况式下(使Re用gis)ter Indirect Addressing ) (5)寄存器相对寻址方式 ( Register Relative Addressing ) (6)基址变址寻址方式( Based Index Addressing ) (7)相对基址变址寻址方式( Relative Based Index Addressing )
next
第3章 80x86指令系统与寻址方式
例如: MOV AX,[BX] ;PA=(DS) ×16+(BX) 特点: (寄存器) = 操作数的偏移地址 用途: 可用于处理数组
next
第3章 80x86指令系统与寻址方式
(5)寄存器相对寻址方式 ( Register Relative Addressin
限制:只能用于源操作数
next
第3章 80x86指令系统与寻址方式
(2)寄存器寻址方式(Register Addressing ) 例如: MOV SI, CX
特点:操作数存在寄存器中。 用途:用寄存器提供操作数时存取速度快。
第三章 80x86的指令系统和寻址方式
有效地址的计算:
EA = 基址 + 变址 + 位移量
15
第三章 80x86的指令系统和寻址方式
段跨越
在存储器内进行寻址时,不同的寻址方式 会对应不同的默认段。 如果需要改变默认段,则需使用段跨越前 缀。如: mov ax,es:[2000H] 以下三种情况不允许段跨越:
– 串处理指令的目的串必须用ES段 – PUSH指令的目的和POP指令的源必须用SS段 – 指令必须存放在CS段中
AH AL
30
50 50 30 32000 32001
(AX) = 3050H
操作数地址也可由变量(符号地址)表示
等价
MOV AH, VALUE
MOV AH, [VALUE]
( VALUE DB 10 )
17
第三章 80x86的指令系统和寻址方式
直接寻址方式* * 隐含的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES :[2000H] * 使用变量时,要注意变量的属性
第三章 80x86的指令系统和寻址方式
3.1 80x86的寻址方式 3.2 程序占有的空间和执行时间 3.3 80x86的指令系统
1
第三章 80x86的指令系统和寻址方式
教学重点 第 3 章是本课程的一个关键内容,是程序设计的 基础
基础是熟悉寄存器组
难点是各种寻址方式
重点是掌握8086常用指令的功能及应用
5
第三章 80x86的指令系统和寻址方式
3.1 IBM PC机的寻址方式
与数据有关的寻址方式
与转移地址有关的寻址方式
3.1.1 与数据有关的寻址方式
以 MOV 指令为例 操作码
操作数1,操作数2
汇编语言:第3章80x86的指令系统和寻址方式I
MOV AH, 2
MOV AH, 4CH
被编译成二进制代码 B402
被编译成二进制代码 B44C
MOV CX,2A50H
注意
下列指令错 • MOV AH,500 • MOV 50,AL • 不能直接给段寄存器和标志寄存器赋予 立即数。下面的指令是错误的: MOV DS, 1250H
2.寄存器寻址
(EAX)=87654321H
• 物理地址=16dx 段基地址+(寄存器)
练 习
如 果 (DS)=4000H , (SS)=3000H , (BP) = 2000H , (32000H)=1234H , (42000H) =5678H,(ES)=5000H, 执行 MOV AX,[BP] 结果为: (AX)=?
• 操作码(操作的性质) – 表示指令应完成的具体操作 – 以助记符的形式表示 • 操作数(操作的对象) – 表示指令的操作对象(参与操作的对象) – 源操作数、目的操作数
操作数字段
• 指令分类:(按操作数分) – 单操作数指令:OPR DEST – 双操作数指令:OPR DEST, SRC – 三操作数指令:OPR DEST,SRC,SRC1 – 无操作数: OPR (隐含操作数) • 指令的操作码字段和操作数字段的表示 • 每个操作用确定的二进制代码表示 • 操作数字段:情况很多,也很复杂 • 汇编用助记符表示操作码,用符号或符号地址 表操作数
指令、程序初步-1
• 从键盘输入一个字符,然后从屏幕输出 CODE SEGMENT ASSUME CS:CODE START: MOV AH,1 INT 21H MOV DL,AL MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START