- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;ax=4652h ;ax=3742h,CF=1 ;dx=0234h ;dx=f325h,CF=0 0234 4652H
本节要求
LOGO
2.3节要求
❖ 数据传送是计算机中最基本、最重要的一种操作。 传送指令也是最常使用的一类指令。
❖ 传送指令把数据从一个位置传送到另一个位置。 ❖ 除标志寄存器传送指令外,均不影响标志位
重点掌握: MOV PUSH POP 特别熟悉: XCHG XLAT LEA 一般了解: LAHF SAHF PUSHF POPF LDS LES 以后展开: IN OUT
例2.14
LOGO
例2.14:地址指针的传送
操作 mov word ptr [3060h],0100h mov word ptr [3062h],1450h lds si,[3060h] ;ds=1450h,si=0100h les di,[3060h] ;es=1450h,di=0100h ;mem指定主存的连续4个字节作为逻辑地址(32位的地
址指针),送入DS:reg或ES:reg。
LOGO
输入输出指令
8086通过输入输出指令与外设进行数据传送
IN AL/AX,i8/DX ;AL/AX←I/O端口 ❖ 输入IN指令将外设数据
传送给CPU内的AL/AX
OUT i8/DX,AL/AX ; I/O端口← AL/AX ❖ 输出OUT指令将CPU内的
❖ 堆栈常用来
临时存放数据 传递参数 保存和恢复寄存器
例2.11
LOGO
标志低字节出入AH指令
LAHF
;AH←FLAGS的低字节
❖ LAHF指令将标志寄存器 的低字节送寄存器AH
❖ SF/ZF/AF/PF/CF状态标 志位分别送入AH的第 7/6/4/2/0位,而AH的 第5/3/1位任意
SAHF
ADC mem,imm/reg ;mem←mem+imm/reg+CF
ADC指令主要与ADD配合,实现多 精度加法运算。
ADC指令的相关指令:ADD SBB
双字加法
LOGO
例2.18a:无符号双字加法运算
mov ax,4652h add ax,0f0f0h mov dx,0234h adc dx,0f0f0h ;DX.AX = ; + F0F0 F0F0H ; = F325 3742H
第 2 章 8086指令系统
2.1 8086的寄存器组 2.2 8086的寻址方式 2.3 数据传送类指令 2.4 算术运算类指令 2.5 位操作类指令 2.6 串操作类指令 2.7 控制转移类指令 2.8 处理机控制类指令
LOGO
指令操作数的表达
❖ r8 —— 任意一个8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL r16 —— 任意一个16位通用寄存器AX/BX/CX/DX/SI/DI/BP/SP reg —— 代表r8或r16 ❖ seg —— 段寄存器CS/DS/ES/SS ❖ m8 —— 一个8位存储器操作数单元(包括所有主存寻址方式) m16 —— 一个16位存储器操作数单元(包括所有主存寻址方式) mem —— 代表m8或m16 ❖ i8 —— 一个8位立即数 i16 —— 一个16位立即数 imm —— 代表i8或i16 ❖ dest —— 目的操作数 src —— 源操作数
▪ 进一步解释
LOGO
非法传送种种
两个操作数的类型不一致
实例
例如源操作数是字节,而目的操作数是字;或相反
两个操作数不能都是存储器
实例
传送指令很灵活,但主存之间的直接传送却不允许
段寄存器的操作有一些限制 段寄存器属专用寄存器,对他们的操作能力有限
实例
LOGO
交换指令XCHG(exchange)
把两个地方的数据进行互换
加法实例
LOGO
例2.17a:加法运算
mov al,0fbh
;al=0fbh
add al,07h
;al=02h
mov word ptr [200h],4652h
;[200h]=4652h
mov bx,1feh
;bx=1feh
add al,bl
;al=00h
add word ptr [bx+2],0f0f0h
操作
• 换码指令没有显式的操作数,但使用了BX和AL; 因为换码指令使用了隐含寻址方式。
• 隐含寻址方式——采用默认操作数的寻址方式。
LOGO
堆栈操作指令
PUSH r16/m16/seg ;进栈指令: ;SP←SP-2 ;SS:[SP]←r16/m16/seg
POP r16/m16/seg ;出栈指令: ;r16/m16/seg←SS:[SP] ;SP←SP+2
POPF ;FLAGS←SS:[SP] ;SP←SP+2 ❖ POPF指令将栈顶字单元
内容送标志寄存器, 同时栈顶指针SP加2
例2.12
LOGO
有效地址传送指令LEA(load EA)
将存储器操作数的有效地址传送至指定寄存器中
LEA r16,mem ;r16←mem的有效地址
例2.13:有效地址的获取 mov bx,0400h mov si,3ch lea bx,[bx+si+0f62h] ;BX=139EH ;BX得到的是主存单元的有效地址, ;不是物理地址,也不是该单元的内容
执行时的约定设置、必须预置的参数、隐含使用的寄存器 等。
LOGO
2.3 数据传送类指令
❖ 把数据从一个位置传送到另一个位置 ❖ 14条指令分5组
1、通用数据传送: MOV XCHG XLAT 2、堆栈操作: PUSH POP 3、标志寄存器传送: LAHF SAHF PUSHF POPF 4、地址传送: LEA LDS LES 5、输入输出: IN OUT
mov word ptr [si+2],0bh
;ds:[si+2] ←0bh,word ptr 说明是字操作
注意:立即数是字节量(byte)还是字量(word), 也就是明确指令是字节操作还是字操作。
▪ 进一步解释
LOGO
例2.2:寄存器传送
mov ax,bx mov ah,al mov ds,ax mov [bx],al
LOGO
堆栈的操作
堆栈只有两种基本操作:进栈和出栈, 对应两条指令PUSH和POP。
进栈指令PUSH:
进栈指令先使堆栈指针 SP减2,然后把一个字 操作数存入堆栈顶部
出栈指令POP:
出栈指令把栈顶的一个 字传送至指定的目的操 作数,然后堆栈指针SP 加2
• 请参看实例2.9和例2.10 • 请对照图2.6(b)和图2.6(c)
操作
LOGO
指针传送指令
LDS r16,mem
;r16←mem,
;DS←mem+2
❖ LDS指令将主存中mem指 定的字送至r16,并将 mem的下一字送DS寄存 器
LES r16,mem
;r16←mem,
;ES←mem+2
❖ LES指令将主存中mem指 定的字送至r16,并将 mem的下一字送ES寄存 器
;ax=1234h ;bx=5678h ;ax=5678h,bx=1234h ;ax=7856h
操作
LOGO
例2.7:寄存器与存储器数据交换
xchg ax,[2000h] xchg al,[2000h]
LOGO
换码指令XLAT(translate)
将BX指定的缓冲区中、 AL指定的位移处的一个字节数据取出赋给AL
❖ 堆栈的概念 ❖ 堆栈的操作:进栈和出栈 ❖ 堆栈的特点
LOGO
什么是堆栈
❖ 堆栈是一个“先进后 出”的主存区域,位 于堆栈段中,使用SS 段寄存器记录其段地 址。
❖ 堆栈只有一个出口, 即当前栈顶。栈顶是 地址较小的一端(低 端),它用堆栈指针 寄存器SP指定。
❖ 图2.6a中,堆栈没有 数据、是空的。
;[200h]=3742h
操作
减法运算
LOGO
带进位加法指令ADC(add with carry)
ADC指令将源与目的操作数相加,再加上当前进位 CF标志,结果送到目的操作数。
ADD指令按状态标志的定义相应设置0或1 。
ADC reg,imm/reg/mem ;reg←reg+imm/reg/mem+CF
LOGO
学习指令的注意事项
❖ 指令的功能——该指令能够实现何种操作。通常指令
助记符就是指令功能的英文单词或其缩写形式。
❖ 指令支持的寻址方式——该指令中的操作数可以采用
何种寻址方式。
❖ 指令对标志的影响——该指令执行后是否对各个标志
位有影响,以及如何影响。
❖ 其他方面——该指令其他需要特别注意的地方,如指令
;段寄存器送寄存器或主存:例2.5
传送指令不是万能的,有不少非法传送的情况。 看一看吧 !
LOGO
例2.1:立即数传送
mov al,4
;al←4,字节传送
mov cx,0ffh ;cx←00ffh,字传送
ຫໍສະໝຸດ Baidu
mov si,200h ;si←0200h,字传送
mov byte ptr [si],0ah
;ds:[si] ←0ah,byte ptr 说明是字节操作
LOGO
例2.3:存储器传送
mov al,[bx] mov dx,[bp] mov es,[si]
;dx←ss:[bp] ;es←ds:[si]
注意:不存在存储器向存储器的传送指令
▪ 进一步解释
LOGO
例2.5:段寄存器传送
mov [si],ds mov ax,es mov ds,ax
注意:对段寄存器的操作有一些限制
AL/AX数据传送给外设
输入输出指令将在第4章详述
LOGO
2.4 算术运算类指令
❖ 实现二进制(和十进制)数据的四则运算
1、加法运算: ADD ADC INC 2、减法运算:SUB SBB DEC NEG CMP 3、乘法运算:MUL IMUL 4、除法运算:DIV IDIV 5、符号扩展:CBW CWD 6、十进制调整:DAA DAS AAA AAS AAM AAD
LOGO
堆栈的实例和图例
push ax push [2000h]
pop ax 操作 pop [2000h]
LOGO
堆栈的特点
❖ 堆栈操作的单位是字,进栈和出栈只对字量 ❖ 字量数据从栈顶压入和弹出时,都是低地址字节
送低字节,高地址字节送高字节
❖ 堆栈操作遵循先进后出原则 ❖ 可用存储器寻址方式随机存取堆栈中的数据
本节要求
LOGO
2.4节要求
❖ 四则运算是计算机经常进行的一种操作。算术运 算指令也是经常使用的一类指令。
❖ 请注意算术运算指令对标志的影响
重点掌握:ADD/ADC SUB/SBB INC/DEC CMP 比较熟悉: NEG MUL/IMUL DIV/IDIV 一般了解: CBW CWD 认真理解:DAA DAS AAA AAS AAM AAD
LOGO
传送指令MOV(move)
把一个字节或字的操作数从源地址传送至目的地址
MOV reg/mem,imm
;立即数送寄存器或主存:例2.1
MOV reg/mem/seg,reg ;寄存器送(段)寄存器或主存:例2.2
MOV reg/seg,mem
;主存送寄存器:例2.3
MOV reg/mem,seg
XCHG reg,reg/mem ; reg←→reg/mem
交换指令可以在寄存器与寄存器之间对换数据 例2.6 交换指令可以在寄存器与存储器之间对换数据 例2.7 交换指令不能在存储器与存储器之间对换数据 Why
LOGO
例2.6:寄存器与寄存器数据交换
mov ax,1234h mov bx,5678h xchg ax,bx xchg ah,al
LOGO
加法指令ADD(add)
ADD指令将源与目的操作数相加,结果送到目的操作 数。
ADD指令按状态标志的定义相应设置0或1。
ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem
ADD mem,imm/reg ;mem←mem+imm/reg
ADD指令的相关指令:ADC SUB
XLAT ;al←ds:[bx+al]: 例2.8
• 换码指令执行前:
在主存中建立一个字节表格,内容是要转换成的目的代码, 表格的首地址存放于BX,AL存放相对表格首地址的位移量
• 然后,执行换码指令:
将AL寄存器的内容转换为目标代码 隐含寻址方式
LOGO
例2.8:代码转换
mov bx,100h mov al,03h xlat
;FLAGS的低字节←AH
❖ SAHF将AH寄存器内容送 FLAGS的低字节
❖ 用AH的第7/6/4/2/0位 相应设置 SF/ZF/AF/PF/CF标志
LOGO
标志寄存器出入堆栈指令
PUSHF ;SP←SP-2 ;SS:[SP]←FLAGS ❖ PUSHF指令将标志寄存
器的内容压入堆栈, 同时栈顶指针SP减2