第3章 80x86的指令系统和寻址方式2

合集下载

80X86寻址方式和指令系统

80X86寻址方式和指令系统
P52表2.1 段寄存器使用的一些基本约定 存储器操作数的偏移地址(也称有效地址)可以通过不同
的寻址方式由指令给出。 例如,若(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指令系统

第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寻址方式和指令系统第三章 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的寻址方式与指令系统 微机基础与接口技术 教学课件

第三章   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指令系统

第三章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指令系统

微机原理与接口技术第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段的0100H单元,而目前没有一个段寄存的
值是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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
相关文档
最新文档