第3章 80x86的指令系统和寻址方式2
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
存储器
第3章 80X86指令系统

程序是使计算机完成一个任务的一组命令或指令序 列。 指令是规定微处理器执行某种特定操作的“命令”。 指令系统是计算机全部的指令的集合。 机器指令由二进制数组成,计算机硬件只能识别﹑ 存储和运行机器指令。机器指令无论是在书写、阅 读和记忆都是非常困难的,为此,产生了符号化的 机器指令,即符号指令。
格式:段寄存器:[间址寄存器] 操作数的有效地址存在于基址或变址寄存器中。 16位寻址时, EA由BX,SI,DI或BP提供。 其中,BX,SI,DI默认使用DS,BP默认使用SS。 32位寻址时, EA由 EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP。 其中,ESP,EBP默认使用SS, 其余默认使用DS
基址寄存器和变址寄存器须为规定的32位寄存器.
小结:
实模式时,段的最大长度为64KB,所以必须保 证CPU最终算出的有效地址不超过0FFFFH,而且 操作数最高字节单元的有效地址也不能超过 0FFFFH,否则执行寻址时系统将要瘫痪。 有效地址表达式中的位移量是无符号整数。 带有比例因子的变址寻址常用于检索一维数组元 素,比例因子的大小常由数组元素大小决定。 带有比例因子的基址加变址寻址常用于检索二维 数组元素。 存储器寻址方式中使用的寄存器和默认访问的逻 辑段间的对应关系如表3-5所示。
表3-4 16/32位寻址时有效地址4种成分的组成
十六位寻址 位移量 基址寄存器 变址寄存器 0,8,16 BX,BP SI,DI 三十二位寻址 0,8,32 任何32位的 通用寄存器 除ESP以外的 32位通用寄 存器 1,2,4,8
比例因子
无
1.
直接寻址方式
直接寻址方式有两种格式。在第一种格式中,有效 地址EA直接出现在指令中,存放在代码段中指令操 作码之后,操作数存放在数据段中,这钟格式中段 超越前缀不能省略,否则会出现寻址错误。在另一 种格式中,EA是用变量来代表的存储单元的有效地 址。因为在一般情况下,直接给出操作数所在单元 的直接地址是很困难的,因此在直接寻址方式的使 用上,第二种格式(用变量来代表操作数的直接地 址)更为常见。
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]
微机原理与接口技术第3章 80x86指令系统

52234H 89H (操作数低8位) 52235H 67H (操作数高8位)
……
运行结果:(AX) = 6789H
图3-11 基址变址寻址
图3-12 DEBUG下基址变址指令的输入、汇编及执行
5、相对基址变址寻址
EA = 基址 + 变址 + 位移量
例如:(DS)=5000H,(BX)=1234H,(SI)=1000H ,则: MOV AX,[BX+SI+2000H]
I/O端口寻址
间接端口寻址:采用这种寻址方式时,端口地址为16 位(0~0FFFFH)。
必须先将端口地址存放到寄存器DX中。
例如:
MOV DX,1000H ;端口地址为1000H OUT DX,AL ;间接端口寻址
小结
1. 立即寻址方式:MOV AX,0FF00H 2. 寄存器寻址方式: MOV DX,AX 3. 直接寻址方式: MOV AX,[2000H] 4. 寄存器间接寻址方式: MOV BX,[SI] 5. 寄存器相对寻址方式: MOV AL,COUNT[BX] 6. 基址变址寻址方式: MOV AX,[BX][SI] 7. 相对基址变址寻址方式:
SS
SP
栈顶(低地址)
堆 栈
已入栈 的数据
……
段
栈底(高地址)
图3-20 堆栈结构
➢ 指令格式:PUSH 16位/32位源操作数 POP 16位/32位目的操作数
源操作数:16位或32位通用寄存器、段寄存器或存储器操作 数
386以上系统允许PUSH指令的源操作数为立即数 目的操作数:16位或32位通用寄存器、段寄存器或存储器操 作数 只有386以上的处理器才能使用32位的操作数
[工学]第三章 80X86的指令系统和寻址方式
值是2000H, 就需要将2000H装入某个段寄存器,如DS,这就是 段更换.
MOV AX,2000H MOV DS,AX MOV BX,0100H MOV AL,[BX] 要寻址的数据在2000H段的0100H单元,而目前CS段寄存的值是 2000H,可在寻址操作数加一段跨越前缀,如CS:,这就是段跨越. MOV BX,0100H MOV AL,CS:[BX]
2)若以BP间接寻址,则操作数在堆栈段中;即物理地 址为:SS*16+BP
3)段地址隐含只有DS,SS.允许段超越如:MOV AX, ES:[SI]
下面的指令不正确: MOV CX, [DX] MOV AL,[BL]
汇编语言程序设计
寄存器相对寻址方式
寄存器相对寻址方式是指操作数的有效地址EA是由一 个基址寄存器或变址寄存器内容和指令中指定的8 位或16位位移量之和.
汇编语言程序设计
寄存器间接寻址举例
例:MOV AX,[BP];等价MOV AX,SS:[BP];假设执 行前SS =3000H, BP =2000H.该指令的执行过程如 图所示.执行后AX=5000H
汇编语言程序设计
需要注意的问题
1)若以SI,DI,BX间接寻址,则操作数在当前数据段中; 即物理地址为:DS*16+SI或DI或BX
需要注意的问题
1、可以用符号地址〔也称为变量)代替数值地址〔偏移地址). 例:在数据段中定义:
X DW 2000H Y DB ‘A’
MOV AX,X MOV AL,Y MOV BX,Y+1 用DEBUG中调试这个程序段时: MOV AX,[000DH] MOV AL,[000FH] MOV BX,[0010H] 值得说明的是:MOV AX,X与 MOV AX,[X]等价 .
第3章80x86的寻址方式与指令系统(自学)
有效地址的计算公式:
EA=基址+(变址×比例因子)+位移量
2020/8/1
汇编语言程序设计
16
3.2 80x86的寻址方式
16/32位寻址时EA四种成分的组成
位移量
0,8,16位 0,8,16,32位
基址寄存器 BX,BP 任何32位通用寄存器
变址寄存器 SI,DI 32位通用寄存器(除ESP)
比例因子
指令的形式有: 双操作数指令 单操作数指令 隐含操作数指令
DEC CX AAA
2020/8/1
汇编语言程序设计
5
3.1 指令系统概述
3. 操作数的种类
(1) 立即数——操作数本身,存放在指令 代码中。 (2) 寄存器操作数——操作数存放在CPU 内部寄存器中。 (3) 内存操作数——操作数存放在内存中, 一般在数据段、附加段、甚至堆栈段。给 出的是操作数的地址。 (4) 端口操作数——在I/O指令中,给出的 端口地址。如
无 1,2,4,8
16位寻址 32位寻址
2020/8/1
汇编语言程序设计
17
3.2 80x86的寻址方式
段 约 定 和 段
在指令中大多隐含 段地址。段地址有个基 本的规定(约定,默 认),也允许超越(可
超 修改),见下表所示:
越
2020/8/1
汇编语言程序设计
18
3.2 80x86的寻址方式
2020/8/1
汇编语言程序设计
11
3.2 80x86的寻址方式
2.寄存器寻址方式(Register addressing) 操作数在寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是AX、BX、 CX、DX、SI、DI、SP、BP;对于8位操作数,寄 存器可以是AH、AL、BH、BL、CH、CL、DH、 DL。对于32位操作数,寄存器可以是EAX、EBX、 ECX、EDX、ESI、EDI、ESP、EBP;
第三章 80X86寻址方式和指令系统
3.3.1
数据传送指令
数据传送指令包括: • • • • • • 通用数据传送指令 堆栈操作指令 地址传送指令 标志寄存器传送指令 查表指令 符号扩展指令
第三章 80x86寻址方式和指令系统
3.3.1
数据传送指令
数据传送指令包括: 通用数据传送指令 堆栈操作指令
地址传送指令
标志寄存器传送指令
查表指令
1、直接寻址
第三章 80x86寻址方式和指令系统
直接寻址过程示意
第三章 80x86寻址方式和指令系统
2、寄存器间接寻址
操作数的有效地址在BX、BP或SI、DI中,EA 可表示为
(BX) EA= (BP) (SI) (DI)
例1 例2
MOV AX,[BX] MOV DL,[SI]
例3.4 寄存器间接寻址
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
2、扩展传送指令(由8位扩展为16位送目的操作数)
MOVSX DEST,SRC MOVZX DEST,SRC 如 MOV BL,80H MOVSX AX,BL;AX=FF80H MOVZX AX,BL;AX=0080H
第三章 80x86寻址方式和指令系统
• 出栈指令 POP DEST 如:POP AX POP DS POP [BX] 操作数类型为字类型(16位):
操作数类型为双字类型(32位): SPSP+4
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
32位指令模式下的存储器寻址方式
第三章 汇编语言80X86的指令系统和寻址方式
第3章 80x86指令系统和寻址方式
《汇编语言》
对同一类型指令,执行速度: 寄存器操作数 立即数操作数 存储器操作数
快
慢
例
mov mov mov
AL , BL AL , 0 AL , [ BX ]
快
慢
17
第3章 80x86指令系统和寻址方式
《汇编语言》
3.2
80x86寻址方式
3.2.1 寻址、寻址方式的概念
18
第3章 80x86指令系统和寻址方式
《汇编语言》
3.2.2 80X86的指令格式
指令助记符 [ 操作数1 [ , 操作数2 [ , 操作数3 ] ] ] [;注释]
指令助记符体现该指令的功能,它对应一条二进 制编码的机器指令。 指令的操作数个数由该指令确定,可以没有操作 数,也可以有一个、二个或三个操作数。
指令系统的基本概念
指令系统
计算机的指令系统就是指该计算机能够执行
的全部指令的集合。 每种计算机都有它支持的指
令集合。 16位8086指令系统是整个Intel 80x86 系列微处 理器指令系统的基础。
2
第3章 80x86指令系统和寻址方式
《汇编语言》
3.1.2
指令格式
指令由操作码和操作数两部分组成。
双操作数: 指令中给出两个操作数。
7
第3章 80x86指令系统和寻址方式
《汇编语言》
① 无操作数: 指令只有一个操作码,没有操作数。
有两种可能: ▲ 有些操作不需要操作数。 如 HLT,NOP等处理机控制指令。 ▲ 操作数隐含在指令中。 如 STC , CLC等处理机控制命令。
AAA , DAA等调整指令。
1) 立即寻址方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:屏蔽AL的第0、1两位 AND AL, 0FCH 例:置AL的第5位为1 OR AL, 20H 例:使AL的第0、1位变反 XOR AL, 3 例:测试某些位是0是1 TEST AL, 1 JZ EVEN
**** **** AND 0 0 0 0 0 0 0 1 0000 000* OR **** **** 0010 0000 **1* **** **** **** AND 1 1 1 1 1 1 0 0 **** **00
例题:逻辑指令应用
;AND指令可用于复位某些位(同0相与),不 影响其他位:将BL中D3和D0位清0,其他位不变 and bl,11110110B ;OR指令可用于置位某些位(同1相或),不影 响其他位:将BL中D3和D0位置1,其他位不变 or bl, 00001001B
;XOR指令可用于求反某些位(同1相异或), 不影响其他位:将BL中D3和D0位求反,其他不变 xor bl, 00001001B
观看动画
移位指令(shift)
将操作数移动一位或多位,分成逻辑移位和
算术移位,分别具有左移或右移操作
演示 SHL reg/mem,1/CL ;逻辑左移,最高位进入CF,最低位补0 SAL与SHL相同 演示 SHR reg/mem,1/CL ;逻辑右移,最低位进入CF,最高位补0 SAL reg/mem,1/CL ;算术左移,最高位进入CF,最低位补0 演示 SAR reg/mem,1/CL ;算术右移,最低位进入CF,最高位不变
逻辑或指令OR
OR
对两个操作数执行逻辑或运算,结果
送到目的操作数
OR reg,imm/reg/mem ;reg←reg∨imm/reg/mem OR mem,imm/reg ;mem←mem∨imm/reg
只要相“或”的两位有一位是1, 结果就是1;否则,结果为0
OR指令设置CF = OF = 0,根据结果设
XOR指令设置CF = OF = 0,根据结果
设置SF、ZF和PF状态,而对AF未定义
逻辑非指令NOT
NOT
对一个操作数执行逻辑非运算
NOT reg/mem ;reg/mem←~reg/mem
按位取反,原来是“0”的位变 为“1”;原来是“1”的位变为“0”
NOT指令是一个单操作数指令
置SF、ZF和PF状态,而对AF未定义
逻辑异或指令XOR
XOR
对两个操作数执行逻辑异或运算,结
果送到目的操作数
XOR reg,imm/reg/mem ;reg←reg⊕imm/reg/mem XOR mem,imm/reg ;mem←mem⊕imm/reg
只有相“异或”的两位不相同, 结果才是1;否则,结果为0
65 23 02 00 24
BCDBUF
35 36 33 32 32 30
ASCⅡBUF
00000101 ∨00110000 00110101
3.2.4 控制转移类指令
控制转移类指令用于实现分支、循环、
过程等程序结构,是仅次于传送指令 的最常用指令
重点掌握:JMP/Jcc/LOOP CALL/RET INT n/IRET 常用系统功能调用 一般了解: LOOPZ/LOOPNZ INTO
循环移位指令(rotate)
将操作数从一端移出的位返回到另一
端形成循环,分成不带进位和带进位, 分别具有左移或右移操作
ROL reg/mem,1/CL ROR reg/mem,1/CL RCL reg/mem,1/CL RCR reg/mem,1/CL ;不带进位循环左移 ;不带进位循环右移 ;带进位循环左移 ;带进位循环右移
移位指令的操作数
移位指令的第一个操作数是指定
的被移位的操作数,可以是寄存 器或存储单元 后一个操作数表示移位位数,该 操作数为1,表示移动一位;当移 位位数大于1时,则用CL寄存器值 表示,该操作数表达为CL
移位指令对标志的影响
按照移入的位设置进位标志CF 根据移位后的结果影响SF、ZF、PF 对AF没有定义
;AH.AL分别存放着非压缩BCD码的两位 ;将它们合并成为一个压缩BCD码存AL and ax,0f0fh ;保证高4位为0 mov cl,4 rol ah,cl ;也可以用shl ah,cl add al,ah ;也可以用or al,ah
综合例题
例5: 在内存某一缓冲区中,存 放着若干用BCD码表示的 十进制数,每一个单元中 存放两位,要求将它们转 换成ASCⅡ码,存放在缓 冲区,高4位的BCD码转换 的ASCⅡ码放在地址较高 的单元。
TEST
例31:测试为0或1
test al,01h ;测试AL的最低位D0 jnz there ;标志ZF=0,即D0=1 ;则程序转移到there ... ;否则ZF=1,即D0=0,顺序执行 there: ...
TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况
例3:请求出AL中“1”的个数,存在AH中。 ① MOV AH, 0 Again: SHL AL, 1 ADC AH, 0 CMP AL, 0 JNZ AGAIN HLT ② MOV AH,0 MOV CL,8 Again: SHL AL,1 JNC Next INC AH Next: DEC CL JNZ Again HLT
演示 演示 演示 演示
循环移位指令对标志的影响
按照指令功能设置进位标志CF 不影响SF、ZF、PF、AF 如果进行一位移动,则按照操作数的
最高符号位是否改变,相应设置溢出 标志OF:如果移位前的操作数最高位 与移位后操作数的最高位不同(有变 化),则OF = 1;否则OF = 0。当移 位次数大于1时,OF不确定
转向的有效地址 = 当前(IP) + 位移量(8bit/16bit)
例: JMP NEAR PTR NEXT 近转移 -32768 ~ +32767
JMP SHORT NEXT 短转移 -128 ~ +127
目标地址的范围:段内
JMP
段内转移——近转移(near) 在当前代码段64KB范围内转移 ( ±32KB范围) 不需要更改CS段地址,只要改 变IP偏移地址 段内转移——短转移(short) 转移范围可以用一个字节表达, 在段内-128~+127范围的转移
NOT指令不影响标志位
例题:逻辑运算
mov al,45h and al,31h mov al,45h or al,31h mov al,45h xor al,31h mov al,45h not al
;逻辑与 al=01h ;CF=OF=0,SF=0、ZF=0、PF=0 ;逻辑或 al=75h ;CF=OF=0,SF=0、ZF=0、PF=0 ;逻辑异或 al=74h ;CF=OF=0,SF=0、ZF=0、PF=1 ;逻辑非 al=0bah ;标志不变
AND
对两个操作数执行逻辑与运算,结果
送到目的操作数
AND reg,imm/reg/mem ;reg←reg∧imm/reg/mem AND mem,imm/reg ;mem←mem∧imm/reg
只有相“与”的两位都是1,结 果才是1;否则,“与”的结果为 0 AND指令设置CF = OF = 0,根据结果 设置SF、ZF和PF状态,而对AF未定义
例34:32位数移位
;将DX.AX中32位数值左移一位 shl ax,1 rcl dx,1
DX
AX 0
CF
例35:位传送
;把AL最低位送BL最低位,保持AL不变 AL、BL ror bl,1 CF
ror al,1
BL
AL之D0
CF
rcl bl,1 rol al,1
CF AL
例36:BCD码合并
流程图
开始 设地址 设转换个数 取数 转换低 4 位 存结果 转换高 4 位 存结果 CX -1-->CX CX=0? 结束
65 23 02 00 24
BCDBUF
35 36 33 32 32 30
ASCⅡBUF
MOV SI, Offset BCDBUF MOV DI, Offset ASCⅡ BUF SI MOV CH, Count Again: MOV AL, [SI] INC SI MOV BL, AL AND AL, 0FH OR AL, 30H MOV [DI], AL DI INC DI MOV AL, BL ; 0 1 1 0, 0 1 0 1 MOV CL, 4 SHR AL, CL ; 0 0 0 0, 0 1 1 0 OR AL, 30H ; 0 0 1 1, 0 1 1 0 MOV [DI], AL INC DI DEC CH 01100101 JNZ Again ∧00001111 HLT 00000101
与转移地址有关的寻址方式: 用来确定转移指令及转子指令的转向地址。
• 段内寻址
段内直接寻址 段内间接寻址 JMP NEAR PTR NEXT JMP TABLE [ BX ]
• 段间寻址
段间直接寻址 段间间接寻址 JMP FAR PTR NEXT JMP DWORD PTR [ BX ]
(1) 段内直接寻址
如果进行一位移动,则按照操作数的
最高符号位是否改变,相应设置溢出 标志OF:如果移位前的操作数最高位 与移位后操作数的最高位不同(有变 化),则OF = 1;否则OF = 0。当移 位次数大于1时,OF不确定
例32:移位指令
mov cl,4 mov al,0f0h ;al=f0h shl al,1 ;al=e0h ;CF=1,SF=1、ZF=0、PF=0,OF=0 shr al,1 ;al=70h ;CF=0,SF=0、ZF=0、PF=0、OF=1 sar al,1 ;al=38h ;CF=0,SF=0、ZF=0、PF=0、OF=0 sar al,cl ;al=03h ;CF=1,SF=0、ZF=0、PF=1