微机原理-第3章第4节
合集下载
微机原理第03章4

105 106 107 108 109 10a Jmp Data[si]
例: Jmp data[si] 如果 data=1000 SI=500 (1500)=2000 Ip=2000
1500 1501 1502 1503
2000
第3章:3.6.2 条件转移指令
条件转移指令Jcc根据指定的条件确定程序 是否发生转移。其通用格式为:
;首先CX←CX-1;然后判断;若CX≠0,转移
JCXZ label
;为0循环指令
:如果CX=0,则转移
label操作数采用相对短寻址方式 还 有 LOOPZ/LOOPE 和 LOOPNZ/LOOPNE 两 条 指令 dec cx jnz label
第3章:3.6.3 循环指令(p.78) 指令
LOOP OPRD LOOPZ / LOOPE OPRD
功能
CX-1,计数器不为零循环 CX-1,计数器不为零且相等时 循环
循环条件
CX0 CX 0且 ZF=1
LOOPNZ / LOOPNE OPRD CX-1,计数器不为零且不相等 时循环
ADD BX,0 ;增加一条指令
第3章:例3.23 判断是否为字母Y
;寄存器AL中是字母Y(含大小写),则令AH=0, 否则令AH=-1 cmp al,’y’ ;比较AL与小写字母y je next ;相等,转移 cmp al,’Y’ ;不相等, ;继续比较AL与大写字母Y je next ;相等,转移 mov ah,-1 ;不相等,令AH=-1 jmp done ;无条件转移指令 next: mov ah,0 ;相等的处理:令AH=0 done: ……
第3章:目标地址的寻址范围:段内寻址
段内转移——近转移(near)
例: Jmp data[si] 如果 data=1000 SI=500 (1500)=2000 Ip=2000
1500 1501 1502 1503
2000
第3章:3.6.2 条件转移指令
条件转移指令Jcc根据指定的条件确定程序 是否发生转移。其通用格式为:
;首先CX←CX-1;然后判断;若CX≠0,转移
JCXZ label
;为0循环指令
:如果CX=0,则转移
label操作数采用相对短寻址方式 还 有 LOOPZ/LOOPE 和 LOOPNZ/LOOPNE 两 条 指令 dec cx jnz label
第3章:3.6.3 循环指令(p.78) 指令
LOOP OPRD LOOPZ / LOOPE OPRD
功能
CX-1,计数器不为零循环 CX-1,计数器不为零且相等时 循环
循环条件
CX0 CX 0且 ZF=1
LOOPNZ / LOOPNE OPRD CX-1,计数器不为零且不相等 时循环
ADD BX,0 ;增加一条指令
第3章:例3.23 判断是否为字母Y
;寄存器AL中是字母Y(含大小写),则令AH=0, 否则令AH=-1 cmp al,’y’ ;比较AL与小写字母y je next ;相等,转移 cmp al,’Y’ ;不相等, ;继续比较AL与大写字母Y je next ;相等,转移 mov ah,-1 ;不相等,令AH=-1 jmp done ;无条件转移指令 next: mov ah,0 ;相等的处理:令AH=0 done: ……
第3章:目标地址的寻址范围:段内寻址
段内转移——近转移(near)
微机原理与接口技术课件微机第三章

符号地址:
MOV AX , ES:[3E4CH] MOV AX , RESULT
如何区分RESULT是立即数还是符号地址?
如果 RESULT DW 3E4CH; 符号地址 MOV AX,RESULT
如果 RESULT EQU 3E4CH; 立即数 MOV AX,RESULT
(2)PUSH 进栈指令 指令格式为:PUSH 源(不能是立即数) 其操作过程是: a、SP-2,指示堆栈中可以存放数据的位置 b、存源操作数,完成进栈操作。
(3)POP 出栈指令 指令格式为:POP 目的(不能是CS) 其操作过程是: a、将SS:SP所指示的栈顶处的两个字节的数据,弹到目的操作数中; b、SP+2,指示当前栈顶位置,完成出栈操作。
操作码
0:数据从寄存器传出 1:数据传至寄存器
2.立即数寻址指令的编码
包含段寄存器的指令的编码
段超越前缀指令的编码
3-3 8086的指令集
01
添加标题
02
添加标题
03
添加标题
04
添加标题
05
添加标题
06
添加标题
8086指令系统按功能可分为6大类型:
一、数据传送指令
l 通用数据传送
添加标题
l累加器专用传送指令
目标地址传送指令 这类指令有: LEA 有效地址传送到寄存器 LDS 将双字指针送到寄存器和DS LES 将双字指针送到寄存器和ES Eg:LEA BX,[1000H] LDS SI,[1000H] LES DI,[1000H]
标志寄存器传送指令 LAHF FR寄存器的低8位送AH SAHF AH 送 FR寄存器的低8位 PUSHF FR寄存器推入堆栈 POPF 从栈顶中弹出存入FR寄存器
MOV AX , ES:[3E4CH] MOV AX , RESULT
如何区分RESULT是立即数还是符号地址?
如果 RESULT DW 3E4CH; 符号地址 MOV AX,RESULT
如果 RESULT EQU 3E4CH; 立即数 MOV AX,RESULT
(2)PUSH 进栈指令 指令格式为:PUSH 源(不能是立即数) 其操作过程是: a、SP-2,指示堆栈中可以存放数据的位置 b、存源操作数,完成进栈操作。
(3)POP 出栈指令 指令格式为:POP 目的(不能是CS) 其操作过程是: a、将SS:SP所指示的栈顶处的两个字节的数据,弹到目的操作数中; b、SP+2,指示当前栈顶位置,完成出栈操作。
操作码
0:数据从寄存器传出 1:数据传至寄存器
2.立即数寻址指令的编码
包含段寄存器的指令的编码
段超越前缀指令的编码
3-3 8086的指令集
01
添加标题
02
添加标题
03
添加标题
04
添加标题
05
添加标题
06
添加标题
8086指令系统按功能可分为6大类型:
一、数据传送指令
l 通用数据传送
添加标题
l累加器专用传送指令
目标地址传送指令 这类指令有: LEA 有效地址传送到寄存器 LDS 将双字指针送到寄存器和DS LES 将双字指针送到寄存器和ES Eg:LEA BX,[1000H] LDS SI,[1000H] LES DI,[1000H]
标志寄存器传送指令 LAHF FR寄存器的低8位送AH SAHF AH 送 FR寄存器的低8位 PUSHF FR寄存器推入堆栈 POPF 从栈顶中弹出存入FR寄存器
微机原理课件第4讲

数据寻址方式就是指令中用于说明操作数所 在地址的方法。 MOV AX, 1234H; MOV AX, [1234H]; B8 34 12 A1 34 12
SHENYANG AEROSPACE UNIVERSITY
9
8086的寻址方式说明
有效地址EA(Effective Address) ( ) 当操作数在内存中时,指令的地址码(操作码) 给出所访问的内存单元的逻辑地址(偏移地址)。 在寻址方式中,逻辑地址的形成是由多个分量组 合而成,该组合地址又叫有效地址。
例如:MOV AX , [SI]; 例如: 设DS = 3000H,SI=1200H,[31200H]=52FFH , , 则偏移地址由SI 和方括号[]组成 组成, 则偏移地址由 和方括号 组成, EA= 1200H。 。
10
SHENYANG AEROSPACE UNIVERSITY
8086的寻址方式说明
SHENYANG AEROSPACE UNIVERSITY
21
③直接寻址
其它注意事项 DS:默认的段寄存器; : ; 关于段超越前缀:有效地址前用“:” 修改运算属 “ 性。例:MOV AX , ES : [3000H] ;(物理地址= : ( = 16×ES + 3000H) × )
SHENYANG AEROSPACE UNIVERSITY
SHENYANG AEROSPACE UNIVERSITY
29
⑥基址变址寻址
基址变址寻址( Based Indexed addressing) )
含义 这种寻址方式下,EA是由两部分组成的,基址寄 存器BX或BP的内容加上变址寄存器的内容。 特点 使用的寄存器:基址寄存器BX、BP,变址寄存 、 , 器SI、DI 。 、 操作数的物理地址=16×DS+BX+SI/DI = × + + 或=16×SS+BP+SI /DI = × + +
微机原理第3章课件(全)

比如AL,BX,CX,DS、IP等等。 【例3-4】MOV AX,BX MOV AL,BL 其中,AX,BX是16位寄存器寻址方式;AL,BL是8位寄存器 寻址方式。
第3章 指令系统和寻址方式 3.2.3 存储器寻址方式 当操作数放在存储器中的某个单元时,CPU要访问存储器 才能获得该操作数。如果存储器的存储单元地址是20位,把通 过各种方法算出段内偏移地址(有效地址),结合段地址形成20 位物理地址找到操作数的方法,统称为存储器寻址方式。 1. 直接寻址方式 直接寻址方式是指寻找的操作数的地址在指令中直接给出。 这种寻址方式在汇编格式中表示为 ● 操作码 地址表达式 (或[地址表达式]) ● 操作码 [数字表达式]
第3章 指令系统和寻址方式 【例3-14】 MOV AX,[BX] [SI](或写为MOV AX, [BX+SI]) 若 (DS)=2000H,(BX)=0500H,(SI)=0010H 则 偏移地址=0500H+0010H=0510H 20位物理地址=20000H+0510H =20510H 如(20510H)=12H,(20511H)=34H,操作的示意图如图3.5所示。
指令由两部分组成:操作码字段和地址码字段,格式如图3.1所 示。
第3章 指令系统和寻址方式
操作码
操作数(地址码)
图3.1 指令格式 操作码字段:用来说明该指令所要完成的操作。 地址码字段:用来描述该指令的操作对象。一般是直接给出 操作数,或者给出操作数存放的寄存器编号,或者给出操作数存 放的存储单元的地址或有关地址的信息。
第3章 指令系统和寻址方式 其中,“267”是数字;“10010011B AND 0FEH”是一个数 字表达式;PORT1是一个用EQU定义的变量名,属于常数; DATA1是定义的段名,实际上就是段地址,是一常数。这些都 是立即寻址方式。 汇编立即寻址方式时,汇编程序首先计算出数字表达式的 值,然后将其写入指令的地址码字段,这称为立即数。
微机原理第3章-指令系统

▲按给出偏移地址方式的不同,分为以下5种: 寄存器间接寻址 寄存器相对寻址 基址加变址寄存器 相对基址加变址寄存器 MOV AL, [ BX ] MOV AL, [ BX + 10H ] MOV AL, [ BX + SI ] MOV AL, [ BX + SI + 10H ]
(1)寄存器间接寻址
寄存器寻址方式的操作数是寄存器的值,指令中直接 使用寄存器名,包括8位或16位通用寄存器和段寄存器。可 使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、 BP;其中:AX、BX、CX、DX可分成两8位使用。
例: MOV AX,CX
;(AX)
(CX)
INC CX
;(CX)
(CX)+1
3.直接寻址(Direct Addressing)
0002
AH
AL
默认段寄存器的关系: ① 使用BX、SI、DI,默认段寄存器为DS
(BX)
PA = ( DS )×10H + (SI) (DI)
② 使用BP,默认段寄存器为SS PA = ( SS )×10H + ( BP )
使用BX、SI、DI的寄存器寻址,默认段寄存器为DS
寄存器组 AH AL BH BL CH CL DH DL SI DI BP SP AX BX CX DX DS ES SS CS IP 地 址 加 法 器
运 算 器
控制总线CB
码
器
PSW标志 寄存器
执行部件控制电路
CPU
总线
内存
例: MOV AX , [ BX + SI ]
若 ( DS ) = 4000H
( BX ) = 2000H ( SI ) = 100H 则内存操作数的物理地址为:
微机原理与接口技术(3-4)

直接 立即转移(32位) 间接 存储器(32位)
JMP BX JMP WORD PTR 5[BX]
JMP FAR PTR PROG_F JMP DWORD PTR [DI]
4
§3-3 8086的指令系统 ——控制转移指令
①段内直接转移指令
指令格式:JMP SHORT 标号 JMP NEAR PTR 标号 (或:JMP 标号)
4F0H; 则指令执行后,IP=(20000H十100H十5H)偏移地址为4F0H处执行。
10
§3-3 8086的指令系统 ——控制转移指令
③段间直接(远)转移指令 指令格式:JMP FAR PTR 标号 特点:用远标号直接给出了转向的段地址和偏移量,即 IP 标号的段内偏移量,CS标号所在段的段地址。 例3-72 JMP FAR PTR PROG_F 设 标 号 PROG_F 所 在 段 的 基 地 址 = 3500H , 偏 移 地 址 = 080AH; 则指令执行后,IP=080AH,CS=3500H;
§3-3 8086的指令系统 ——控制转移指令
五、控制转移指令
作用:
改变CS和IP的值,从而改 变指令的执行顺序。
JMP CALL RET
无条件转移和过程调用指令 无条件转移 过程调用 过程返回 条 件 转 移 直接标志转移 间接标志转移
类型:
无条件转移和过程调用指 令
JZ/JE 等10条指令 JA/JNBE 等8条指令
2
§3-3 8086的指令系统 ——控制转移指令
两种提供地址的方式:
直接转移
指令码中直接给出转移的目的地址,目的操作数用一个标 号来表示,它又可分为段内直接转移和段间直接转移。 间接转移 目的地址包含在某个16位寄存器或存储单元中,CPU根据
JMP BX JMP WORD PTR 5[BX]
JMP FAR PTR PROG_F JMP DWORD PTR [DI]
4
§3-3 8086的指令系统 ——控制转移指令
①段内直接转移指令
指令格式:JMP SHORT 标号 JMP NEAR PTR 标号 (或:JMP 标号)
4F0H; 则指令执行后,IP=(20000H十100H十5H)偏移地址为4F0H处执行。
10
§3-3 8086的指令系统 ——控制转移指令
③段间直接(远)转移指令 指令格式:JMP FAR PTR 标号 特点:用远标号直接给出了转向的段地址和偏移量,即 IP 标号的段内偏移量,CS标号所在段的段地址。 例3-72 JMP FAR PTR PROG_F 设 标 号 PROG_F 所 在 段 的 基 地 址 = 3500H , 偏 移 地 址 = 080AH; 则指令执行后,IP=080AH,CS=3500H;
§3-3 8086的指令系统 ——控制转移指令
五、控制转移指令
作用:
改变CS和IP的值,从而改 变指令的执行顺序。
JMP CALL RET
无条件转移和过程调用指令 无条件转移 过程调用 过程返回 条 件 转 移 直接标志转移 间接标志转移
类型:
无条件转移和过程调用指 令
JZ/JE 等10条指令 JA/JNBE 等8条指令
2
§3-3 8086的指令系统 ——控制转移指令
两种提供地址的方式:
直接转移
指令码中直接给出转移的目的地址,目的操作数用一个标 号来表示,它又可分为段内直接转移和段间直接转移。 间接转移 目的地址包含在某个16位寄存器或存储单元中,CPU根据
微机原理-第三章ppt课件

当S= 0 而R= 1 时, Q= 0( Q= 1) 称为复位。R 端称为复位端,
当S=1而R=1时,输出保持
符号:为了作图方便, 用方块来表示。
.
5
改进型式:时标RS 触发器——RS 触发器外 加的时标脉冲, 如图下图 所示。 图中的CLK 即为时标脉冲。
S
&
QS Q
CLK
R&
QR Q
功能:无论是置位还是复位, 都必须在时标脉 冲端为高电位时才能进行。
.
6
3.2.2 D 触发器
基本构成:D 触发器是在RS 触发器的基础上 引伸出来的, 它只需一个输入端口, 下图 为D 触发器的原理。
D
QS Q
QR Q
功能:当D 端为高电位时, S 端为高电位,
称为置位。
当D 端为低电位时, S 端为低电位,
称为复位。
.
7
改进型式:增加两个与门就可以接受 时标脉冲CLK 的控制。
第三章 微型计算机的基本组成电路
3.1 算术逻辑单元(ALU) 3.2 触发器( Trigger ) 3.3 寄存器( Register ) 3.4 三态输出电路 3.5 总线结构 3.6 译码器、数据选择器 3.7 存储器(Memory)
.
1
3.1 算术逻辑单元( ALU)
功能: 二进制数的四则运算, 布尔代数的逻辑运算。
⋯⋯ 第七时钟后沿到 Q= 111 第八时钟后沿到 Q= 000
在第八个时钟脉冲到时, 计数器复位至0, 因 此这个计数器可以计由0 至7的数。
如8 位计数器可计由0至255 的数, 12
位计数器可计由0 至4095 的数, 16 位
则可计由0 至65535 的数。
当S=1而R=1时,输出保持
符号:为了作图方便, 用方块来表示。
.
5
改进型式:时标RS 触发器——RS 触发器外 加的时标脉冲, 如图下图 所示。 图中的CLK 即为时标脉冲。
S
&
QS Q
CLK
R&
QR Q
功能:无论是置位还是复位, 都必须在时标脉 冲端为高电位时才能进行。
.
6
3.2.2 D 触发器
基本构成:D 触发器是在RS 触发器的基础上 引伸出来的, 它只需一个输入端口, 下图 为D 触发器的原理。
D
QS Q
QR Q
功能:当D 端为高电位时, S 端为高电位,
称为置位。
当D 端为低电位时, S 端为低电位,
称为复位。
.
7
改进型式:增加两个与门就可以接受 时标脉冲CLK 的控制。
第三章 微型计算机的基本组成电路
3.1 算术逻辑单元(ALU) 3.2 触发器( Trigger ) 3.3 寄存器( Register ) 3.4 三态输出电路 3.5 总线结构 3.6 译码器、数据选择器 3.7 存储器(Memory)
.
1
3.1 算术逻辑单元( ALU)
功能: 二进制数的四则运算, 布尔代数的逻辑运算。
⋯⋯ 第七时钟后沿到 Q= 111 第八时钟后沿到 Q= 000
在第八个时钟脉冲到时, 计数器复位至0, 因 此这个计数器可以计由0 至7的数。
如8 位计数器可计由0至255 的数, 12
位计数器可计由0 至4095 的数, 16 位
则可计由0 至65535 的数。
微机原理与接口技术——第三章.ppt

常数
出现在汇编源程序中的固定值,即其在运行期间不会变化 字符串常数 是由单引号括起来的一串字符。汇编程序把它们表示成一 个字符序列,一个字节对应一个字符,把引号内的字符翻 译成ASCII码 。 ’218’——32H,31H,38H
11
表达式
由操作数和运算符组合的序列,它在汇编时能产生一个值。 算术运算符 +、-、*、/、MOD
SIZE
DATA5
LENGTH DATA9
SIZE
DATA9
;结果为1000H ;结果为0001H ;结果为1 ;结果为1 ;结果为1 ;结果为3 ;结果为3
24
PTR 运算符
合成运算符PTR可以由已存在的存储器操作数声名一个段和 偏移量相同,而类型不同的新的存储器操作数,格式如下:
类型 PTR 表达式
0123H、0456H、0789H、0ABCH
CODE SEGMENT
程序4.1
ASSUME CS:完CO成D4E个数
MOV AX, 0123H
相加
ADD AX, 0456H
ADD AX, 0789H
ADD AX, 0ABCH
MOV AX, 4C00H
INT 21H
CODE ENDS
END
32
顺序程序设计
2
常数与表达式
3
标识符
4
数据定义
5
与数据相关的操作符
6
符号定义
9
常数
出现在汇编源程序中的固定值,即其在运行期间不会变化
数值常数
按其基数的不同,可以有二进制(B)、八进制(O)、十进 制(D)、十六进制数(H)等不同的表示形式
00101100B 1234D 1234 255O 56H 0BA12H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(Multiply byte or word unsigned)
3.5 算术运算类指令 乘法操作的类型:
①当SRC为字节时,MUL和IMUL为字节运算, 这时表示将AL中的数与(SRC)相乘,其 结果放入(AX)中;
DST(被乘数) SRC(乘数)
字节乘法 AX 积
(AL) × (SRC)
3.5 算术运算类指令 乘法操作的类型:
3.5 算术运算类指令
加减法指令 比较指令 增量减量指令 算术运算指令 乘除法指令 符号扩展指令 BCD数运算调整指令
● 只要ALU涉及到运算,就不能使用段REG;
● 只要ALU涉及到运算,其运算结果会影 响6个状态标志位。
3.5 算术运算类指令
一、加减法指令 (一)加法指令(ADD、ADC) (Add byte or word/ with carry ) 格式: ADD DST, SRC ;(DST) ←(SRC)+(DST) ADC DST, SRC ;(DST) ←(SRC)+(DST)+(CF)
②当SRC为字时,MUL和IMUL为字运算,这 时表示将AX中的数与(SRC)相乘,其结 果的高16位保存在(DX),低16位保存在 (AX)。
字乘法 DX:AX
积
(AX) × (SRC)
3.5 算术运算类指令
MUL和IMUL指令只对PSW的CF、OF位有影响, 其规则为: ①当采用MUL运算时,字运算结果的DX为0 时,CF=0,OF=0,表示两个字相乘其结果 也为一个字;字节运算结果的AH为0时, CF=0,OF=0,表示两个字节相乘其结果也 为一个字节;否则CF=1,OF=1。 CF=0 字节←字节×字节 OF=0表示: 字 ← 字 × 字
3.5 算术运算类指令
(三)取负指令(NEG) Negate byte or word 格式: NEG DST ;(DST) ←0-(DST) 说明: 取负指令NEG为一类特殊的减法运算,其被减数 为0,相减结果存放在DST中。DST可以取通用寄 存器和存储单元。求负数的补码表示可以直接 利用NEG指令完成。 NEG指令将正常影响PSW中的6个状态标志位.
3.5 算术运算类指令
(二)减法指令(SUB、SBB) Subtract byte or word /with borrow 格式: SUB DST, SRC;(DST)←(DST)-(SRC) SBB DST, SRC; (DST)←(DST)-(SRC)-(CF)
指令中DST、SRC的说明与ADD指令相同。
INC
INC
DL
VAR1
;(DL) ← (DL)+1
;(VAR1) ← (VAR1)+1
DEC
WORD PTR [BX];((BX)) ←((BX))-1
3.5 算术运算类指令
四、乘法和除法指令 (一)乘法运算 两个无符号二进制数的乘法运算与十进制 数的乘法类似,可以采用列竖式的方法计 算,只是在相加运算时,按逢二进一的规 则。而两个有符号二进制数进行乘法运算 时,先将负数采用变补的方法变换成正数, 进行两个正数相乘,然后统一考虑符号。
3.5 算术运算类指令
例如,设VAR1为字型变量,则有下列指令:
NEG NEG NEG BX ;(BX)←0-(BX) VAR1 ;(VAR1)←0-(VAR1) BYTE PTR 2[BX] ;((BX)+2)←0-((BX)+2)
3.5 算术运算类指令
二、比较指令CMP Compare byte or word 格式: CMP DST, SRC ;(DST)-(SRC),并 设置PSW中的状态标志位 说明: CMP指令与减法指令类似,完成DST的内容 减去SRC的内容,设置PSW中的状态标志位 (简称FLAG),但其结果不保存到DST。指 令中的SRC、DST的说明与ADD指令相同。
例3.5 两个有符号数-104、-113进行大 小比较。 解:当采用8位补码表示时,这两个有符号 数分别为98H和8FH。程序段为: MOV AL, -104 MOV BL, -113 CMP AL, BL 执行后,OF=0,SF=0,说明-104>-113。
如果采用CMP
113<-104。
BL,AL语句,则OF=0,SF=1,这说明-
3.5 算术运算类指令
CMP指令将正常影响PSW中的6个状态标志位: CF、AF、OF、SF、ZF和PF。 对两个数进行CMP运算,其主要目的是为 了比较两数的大小、相等关系: (1)若两数相减结果为0,即两数相等, 则ZF=1; (2)SF等同于最高位; (3)CF, OF视具体情况而定。
3.5 算术运算类指令
3.5 算术运算类指令
例3.6 两个有符号数57、-113进行大小 比较。 解:当采用8位补码表示时,这两个有符 号数分别为39H和8FH。程序段为: MOV AL, 57 MOV BL, -113 CMP AL, BL 执行后,OF=1,SF=1,说明57>-113。
如果采用CMP BL,AL语句,则OF=1,SF=0, 这说明-113<57。
3.5 算术运算类指令
为完成双字相减运算,应该先利用SUB指令完成低位字的减法
运算,再利用SBB指令完成高位字的带进位减法运算。这样在 代码段中可以编写下列程序,完成题目指定的说明: MOV SUB MOV MOV SBB MOV AX, DVAR1 AX, DVAR2 DVARR, AX AX, DVAR1+2 AX, DVAR2+2 DVARR+2, AX ;取被减数的低位字到(AX) ;低位字相减 ;保存结果的低位字 ;取被减数的高位字到(AX) ;高位字相减(带借位相减) ;保存结果的高位字
3.5 算术运算类指令
算术运算指令可以完成两个操作数的各种算 术运算:加、减、乘、除及其BCD数运算的 调整运算。属于这一类的指令有:ADD、ADC、 SUB、SBB、NEG、CMP、INC、DEC、MUL、 IMUL、DIV、IDIV、CBW、CWD、AAA、DAA、 AAS、DAS、AAM、AAD。它们又可以分成6个 子类:
3.5 算术运算类指令
(二)乘法指令 (Integer multiply byte or word) 格式: MUL SRC ;无符号数相乘 IMUL SRC ;有符号数相乘 说明: MUL为无符号数乘法指令,IMUL为有符号 数乘法指令,指令的目的操作数隐含在AX (或AL)中,SRC可以取通用寄存器和存 储单元,它必须有类型,而且只能是字节 和字,它们决定了乘法操作的类型。
3.5 算术运算类指令
例如,设VAR1为字型变量,VAR2为字节变量,则有 SUB AL, 2CH;(AL)← (AL)-2CH SBB AX, BX;(AX)←(AX)-(BX)-(CF) SUB AX, VAR1 ;(AX)← (AX)-(VAR1) SUB VAR1,2184H ;(VAR1)← (VAR1)-2184H SBB DL, VAR2[SI];(DL)←(DL)-((VAR2)+ (SI))-(CF)
3.5 算术运算类指令
为完成双字相加运算,应该先利用ADD指令完成低 位字的加法运算,再利用ADC指令完成高位字的带 进位加法运算。这样在代码段中可以编写下列程 序,完成题目指定的说明: LEA DI, DVAR; MOV AX, 4[DI]; 取低位字到(AX) ADD AX, [DI]; 低位字相加 MOV WORD PTR DVARC, AX;保存结果的低位字 MOV AX, 6[DI]; 取高位字到(AX) ADC AX, 2[DI]; 高位字相加(带进位) MOV WORD PTR DVARC+2,AX;保存结果的高位字
3.5 算术运算类指令
三、增量减量指令 格式: INC DEC DST DST ; (DST) ← (DST)+1 ; (DST) ← (DST)-1
说明:
INC(Increment byte or word by 1)为增量指 令,每次对DST的内容增加1;DEC(Decrement byte or
本教案内容
第3章 8086CPU指令系统 1. 汇编语言指令 2. 8086指令分类 3. 数据与转移地址的 寻址方式 4. 数据传送类指令 5. 算术运算类指令 6. 逻辑运算类指令 7. 移位类指令 8. 标志位操作指令
9. 10. 11.
12.
13. 14. 15. 16.
转移指令 循环控制指令 子程序调用返回 指令 中断调用返回指 令 字符串操作指令 I/O输入输出指令 其它指令 宏指令
3.5 算术运算类指令
ADD和ADC指令会正常影响PSW中的6个状态标志 位:CF、AF、OF、SF、ZF和PF。
例如,设(AX)=125AH,则执行ADD AX, 78C6H后, (AX)=8B00H,CF=0,AF=1,OF=1,SF=1, ZF=0,PF=1。
3.5 算术运算类指令
例3.2 设在DVAR开始的连续8字节中分别存 放着两个数A和B(每个数为32位),求C=A+B, 并将结果C放到DVARC开始的内存中。 解:设这两个数分别为A=00127654H、 B=00049821H,则在数据段中有变量定义语句: DVAR DD 00127654H DD 00049821H DVARC DD ?
3.5 算术运算类指令
例3.4 两个无符号数(AL)=49H、(BL) =28H进行大小比较。 解:指令段为: MOV AL, 49H MOV BL, 28H CMP AL, BL 执行后,CF=0,说明49H>28H。 如果采用CMP BL,AL语句,则CF=1,说 明28H<49H。
3.5 算术运算类指令
SRC可以取立即数、通用寄存器和存储单元,DST可 以取通用寄存器和存储单元,但SRC和DST不能同时 取存储单元。
3.5 算术运算类指令
3.5 算术运算类指令 乘法操作的类型:
①当SRC为字节时,MUL和IMUL为字节运算, 这时表示将AL中的数与(SRC)相乘,其 结果放入(AX)中;
DST(被乘数) SRC(乘数)
字节乘法 AX 积
(AL) × (SRC)
3.5 算术运算类指令 乘法操作的类型:
3.5 算术运算类指令
加减法指令 比较指令 增量减量指令 算术运算指令 乘除法指令 符号扩展指令 BCD数运算调整指令
● 只要ALU涉及到运算,就不能使用段REG;
● 只要ALU涉及到运算,其运算结果会影 响6个状态标志位。
3.5 算术运算类指令
一、加减法指令 (一)加法指令(ADD、ADC) (Add byte or word/ with carry ) 格式: ADD DST, SRC ;(DST) ←(SRC)+(DST) ADC DST, SRC ;(DST) ←(SRC)+(DST)+(CF)
②当SRC为字时,MUL和IMUL为字运算,这 时表示将AX中的数与(SRC)相乘,其结 果的高16位保存在(DX),低16位保存在 (AX)。
字乘法 DX:AX
积
(AX) × (SRC)
3.5 算术运算类指令
MUL和IMUL指令只对PSW的CF、OF位有影响, 其规则为: ①当采用MUL运算时,字运算结果的DX为0 时,CF=0,OF=0,表示两个字相乘其结果 也为一个字;字节运算结果的AH为0时, CF=0,OF=0,表示两个字节相乘其结果也 为一个字节;否则CF=1,OF=1。 CF=0 字节←字节×字节 OF=0表示: 字 ← 字 × 字
3.5 算术运算类指令
(三)取负指令(NEG) Negate byte or word 格式: NEG DST ;(DST) ←0-(DST) 说明: 取负指令NEG为一类特殊的减法运算,其被减数 为0,相减结果存放在DST中。DST可以取通用寄 存器和存储单元。求负数的补码表示可以直接 利用NEG指令完成。 NEG指令将正常影响PSW中的6个状态标志位.
3.5 算术运算类指令
(二)减法指令(SUB、SBB) Subtract byte or word /with borrow 格式: SUB DST, SRC;(DST)←(DST)-(SRC) SBB DST, SRC; (DST)←(DST)-(SRC)-(CF)
指令中DST、SRC的说明与ADD指令相同。
INC
INC
DL
VAR1
;(DL) ← (DL)+1
;(VAR1) ← (VAR1)+1
DEC
WORD PTR [BX];((BX)) ←((BX))-1
3.5 算术运算类指令
四、乘法和除法指令 (一)乘法运算 两个无符号二进制数的乘法运算与十进制 数的乘法类似,可以采用列竖式的方法计 算,只是在相加运算时,按逢二进一的规 则。而两个有符号二进制数进行乘法运算 时,先将负数采用变补的方法变换成正数, 进行两个正数相乘,然后统一考虑符号。
3.5 算术运算类指令
例如,设VAR1为字型变量,则有下列指令:
NEG NEG NEG BX ;(BX)←0-(BX) VAR1 ;(VAR1)←0-(VAR1) BYTE PTR 2[BX] ;((BX)+2)←0-((BX)+2)
3.5 算术运算类指令
二、比较指令CMP Compare byte or word 格式: CMP DST, SRC ;(DST)-(SRC),并 设置PSW中的状态标志位 说明: CMP指令与减法指令类似,完成DST的内容 减去SRC的内容,设置PSW中的状态标志位 (简称FLAG),但其结果不保存到DST。指 令中的SRC、DST的说明与ADD指令相同。
例3.5 两个有符号数-104、-113进行大 小比较。 解:当采用8位补码表示时,这两个有符号 数分别为98H和8FH。程序段为: MOV AL, -104 MOV BL, -113 CMP AL, BL 执行后,OF=0,SF=0,说明-104>-113。
如果采用CMP
113<-104。
BL,AL语句,则OF=0,SF=1,这说明-
3.5 算术运算类指令
CMP指令将正常影响PSW中的6个状态标志位: CF、AF、OF、SF、ZF和PF。 对两个数进行CMP运算,其主要目的是为 了比较两数的大小、相等关系: (1)若两数相减结果为0,即两数相等, 则ZF=1; (2)SF等同于最高位; (3)CF, OF视具体情况而定。
3.5 算术运算类指令
3.5 算术运算类指令
例3.6 两个有符号数57、-113进行大小 比较。 解:当采用8位补码表示时,这两个有符 号数分别为39H和8FH。程序段为: MOV AL, 57 MOV BL, -113 CMP AL, BL 执行后,OF=1,SF=1,说明57>-113。
如果采用CMP BL,AL语句,则OF=1,SF=0, 这说明-113<57。
3.5 算术运算类指令
为完成双字相减运算,应该先利用SUB指令完成低位字的减法
运算,再利用SBB指令完成高位字的带进位减法运算。这样在 代码段中可以编写下列程序,完成题目指定的说明: MOV SUB MOV MOV SBB MOV AX, DVAR1 AX, DVAR2 DVARR, AX AX, DVAR1+2 AX, DVAR2+2 DVARR+2, AX ;取被减数的低位字到(AX) ;低位字相减 ;保存结果的低位字 ;取被减数的高位字到(AX) ;高位字相减(带借位相减) ;保存结果的高位字
3.5 算术运算类指令
算术运算指令可以完成两个操作数的各种算 术运算:加、减、乘、除及其BCD数运算的 调整运算。属于这一类的指令有:ADD、ADC、 SUB、SBB、NEG、CMP、INC、DEC、MUL、 IMUL、DIV、IDIV、CBW、CWD、AAA、DAA、 AAS、DAS、AAM、AAD。它们又可以分成6个 子类:
3.5 算术运算类指令
(二)乘法指令 (Integer multiply byte or word) 格式: MUL SRC ;无符号数相乘 IMUL SRC ;有符号数相乘 说明: MUL为无符号数乘法指令,IMUL为有符号 数乘法指令,指令的目的操作数隐含在AX (或AL)中,SRC可以取通用寄存器和存 储单元,它必须有类型,而且只能是字节 和字,它们决定了乘法操作的类型。
3.5 算术运算类指令
例如,设VAR1为字型变量,VAR2为字节变量,则有 SUB AL, 2CH;(AL)← (AL)-2CH SBB AX, BX;(AX)←(AX)-(BX)-(CF) SUB AX, VAR1 ;(AX)← (AX)-(VAR1) SUB VAR1,2184H ;(VAR1)← (VAR1)-2184H SBB DL, VAR2[SI];(DL)←(DL)-((VAR2)+ (SI))-(CF)
3.5 算术运算类指令
为完成双字相加运算,应该先利用ADD指令完成低 位字的加法运算,再利用ADC指令完成高位字的带 进位加法运算。这样在代码段中可以编写下列程 序,完成题目指定的说明: LEA DI, DVAR; MOV AX, 4[DI]; 取低位字到(AX) ADD AX, [DI]; 低位字相加 MOV WORD PTR DVARC, AX;保存结果的低位字 MOV AX, 6[DI]; 取高位字到(AX) ADC AX, 2[DI]; 高位字相加(带进位) MOV WORD PTR DVARC+2,AX;保存结果的高位字
3.5 算术运算类指令
三、增量减量指令 格式: INC DEC DST DST ; (DST) ← (DST)+1 ; (DST) ← (DST)-1
说明:
INC(Increment byte or word by 1)为增量指 令,每次对DST的内容增加1;DEC(Decrement byte or
本教案内容
第3章 8086CPU指令系统 1. 汇编语言指令 2. 8086指令分类 3. 数据与转移地址的 寻址方式 4. 数据传送类指令 5. 算术运算类指令 6. 逻辑运算类指令 7. 移位类指令 8. 标志位操作指令
9. 10. 11.
12.
13. 14. 15. 16.
转移指令 循环控制指令 子程序调用返回 指令 中断调用返回指 令 字符串操作指令 I/O输入输出指令 其它指令 宏指令
3.5 算术运算类指令
ADD和ADC指令会正常影响PSW中的6个状态标志 位:CF、AF、OF、SF、ZF和PF。
例如,设(AX)=125AH,则执行ADD AX, 78C6H后, (AX)=8B00H,CF=0,AF=1,OF=1,SF=1, ZF=0,PF=1。
3.5 算术运算类指令
例3.2 设在DVAR开始的连续8字节中分别存 放着两个数A和B(每个数为32位),求C=A+B, 并将结果C放到DVARC开始的内存中。 解:设这两个数分别为A=00127654H、 B=00049821H,则在数据段中有变量定义语句: DVAR DD 00127654H DD 00049821H DVARC DD ?
3.5 算术运算类指令
例3.4 两个无符号数(AL)=49H、(BL) =28H进行大小比较。 解:指令段为: MOV AL, 49H MOV BL, 28H CMP AL, BL 执行后,CF=0,说明49H>28H。 如果采用CMP BL,AL语句,则CF=1,说 明28H<49H。
3.5 算术运算类指令
SRC可以取立即数、通用寄存器和存储单元,DST可 以取通用寄存器和存储单元,但SRC和DST不能同时 取存储单元。
3.5 算术运算类指令