Intel汇编:寄存器与内存访问

文章目录

DS寄存器

通常用来存储要访问的地址所在的段地址
如欲将CS:IP = 1000:0即10000H的位置的数据读入al中,如下:

; 将1000这个数值送入bx
mov bx, 1000H
; 将bx的内容送入ds
; 不能直接将数据送入ds,硬件设计如此
mov ds, bx
; [0]给出内存单元的偏移地址,执行mov指令时cpu自动取ds的内容作为段地址。
mov al, [0]

将ax中的16位内容送入10000H单元的代码如下:

; 1000H送到bx
mov bx, 1000H
; 送到ds
mov ds, bx
; 将ax中的内容mov到段地址为1000H,内存偏移为0的位置
mov [0], ax

8086CPU提供入栈和出栈指令,最基本的两个是push和pop,入、出栈时均以字节为操作单位。

CPU中有两个寄存器SS:SP来指示栈顶地址,供出入栈时使用,

入栈指令push ax可将ax的内容入栈,其实际可分为以下两步:

  1. SP = SP - 2,执行后,SS:SP指示的栈顶从高地址向低地址方向增长了2B。
  2. 将ax的内容送入SS:SP所指的内存单元
    在这里插入图片描述

出栈指令pop ax用于将栈顶的16位内容出栈送入ax中,其执行过程与入栈指令相反,不再赘述。

栈空的表示:若将10000H~1000FH这段空间当作栈,则栈底的字单元地址为1000EH,即若当前栈中只有一个元素,则SS:SP = 1000H:000EH,将此元素出栈后,SP = SP + 2,有SS:SP = 1000H:0010H

栈顶越界:若栈满时执行入栈,栈空时执行出栈,则分别会使栈顶超过栈空间上界和下界,8086CPU并未提供保护机制。

栈顶的表示范围:因为栈操作指令如push、pop只能改变sp的内容,因此其可变化的范围是0~FFFFH。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值