汇编指令之数据传送指令续集(三)

4、堆栈指令

在8086/8088系统中,堆栈实际是一段随机访问RAM区域。

称为栈底的一端地址较大,称为栈顶的一端地址较小。

堆栈的段值在堆栈寄存器SS中

堆栈的指针寄存器SP始终指向栈顶

堆栈是以“后进先出”方式工作

堆栈的存取必须以字为单位(16bit = 2Btye)

堆栈的指令分为如下两种:

(1)进栈指令PUSH

格式如下:PUSH SRC(源操作数)

该指令把源操作数SRC压栈。

执行过程是:先把栈顶指针SP值减2,SP = SP-2

再把SRC中的值放入SP所指的栈顶中即 [SS*16+SP] = [SRC]

SRC可以是通用寄存器和段寄存器,也可以是字存储单元

(2)出栈指令POP

格式如下:POP DST(目的操作数)

该指令把栈顶的元素放到DST中,然后把SP加2

执行过程如下:先把堆栈指针SP指的数据放到DST中,【DST】=【SS*16+SP】

再使SP = SP + 2

DST可以是通用寄存器和段寄存器(但是CS除外),也可以是字存储单元。

 

注意:

(1)上面两条指令PUSH和POP只能是字操作

(2)可以使用除立即寻址外的其他任何方式

(3)POP指令不允许使用CS寄存器

此两条指令不影响FLAG标志位

 

利用这两条指令可以是实现两个段寄存器的数据交换

例如:实现DS、ES的数据交换

PUSH DS

PUSH ES

POP DS

POP ES

在汇编的过程中,堆栈操一般实现“现场保存”和“现场恢复”,作为参数的传递缓冲区等。

 

 

汇总:

数据交换有三种方式:

传送指令、交换指令、堆栈指令

举例:交换DS、AX的数据

利用传送指令

MOV BX,AX

MOV AX,DS

MOV DS,BX

利用交换指令

XCHG AX,DS<不能同时是段寄存器>

利用堆栈操作指令如上面的示例。

 

5、标志操作指令

(1)标志传送指令

1、LAHF(Load AH Flags)

把FLAG寄存器的低八位送到AH,即把CF PF AF ZF SF送到AH中。

不影响标志寄存器。

2、SAHF(Store AH into Flags)

把AH寄存器的八位传送到FLAG寄存器的低八位中,刚好和上面的指令作用相反。

影响标志寄存器。但是不影响8-15中的标志位。

3、PUSHF和POPF

把FLAG的标志寄存器压入和压出。

可以通过他们的操作来改变FLAG中的标志位的值。主要可以改变TF标志。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值