《汇编语言(第三版)》王爽笔记(3)寄存器(内存访问)

第三章 寄存器(内存访问)

使用0、1内存单元存放数据0420H, 则低地址单元0存放低位字节20,高地址单元存放高位字节04。
字单元:即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成,高地址存放高位字节,低地址存放低位字节。
将起始地址为N的字单元叫做 N地址字单元。(区分N地址单元)
DS寄存器通常存放要访问数据的段地址
MOV指令:可以将数据送入寄存器,可以将一个寄存器内容送入另一个寄存器,还可以将一个内存单元的内容送入另一个寄存器
实现上述加粗的操作:MOV 寄存器名,内存单元地址
内存单元地址用[…]表示,…为偏移地址,段地址默认为DS中的数据。
[]表示操作对象是一个内存单元
如何将段地址送入段寄存器DS? 8086不支持数据直接送段寄存器,MOV DS,1000 是非法指令,应该先将1000送入一个通用寄存器,如BX。
MOV BX,1000
MOV DS,BX
PS:使用MOV […], 寄存器名 还可以实现寄存器内容传递给内存单元。

由于8086有16根数据线,可以一次性传递一个字型数据(两个内存单元):
MOV BX,1000
MOV DS,BX
MOV AX,[0] \将10000H处的字型数据传递给AX

参考代码段定义数据段:长度小于64KB,地址连续、起始地址为16倍数的一组内存单元,用于存放数据。
访问数据段方式:DS存放数据段段地址,再用具体指令访问具体单元。

检测点3.1

1.2662 E626 E626 2662 D6E6 FD48 2C14 0000 00E6 0000 0026 000C
2.在这里插入图片描述
内存中数据和程序指令没有区别,都是二进制形式,关键在于CPU如何解读。

栈:一种具有特殊访问形式的存储空间,数据“后进先出”LIFO last in first out
栈有两种基本操作:入栈(将一个新的元素放在栈顶)、出栈(从栈顶取出一个元素)。
8086提供相关指令以栈的形式访问内存空间,PUSH(入栈)和POP(出栈)。push ax表示将ax中数据送入栈中,pop ax表示从栈顶取出数据送入ax,push和pop操作均以字为单位进行。示例如下:
在这里插入图片描述
为了放入和取出元素,CPU必须知道栈顶位置,SS:SP(段地址:偏移地址)在任意时刻指向栈顶元素。设置SS时要用一般寄存器传递值,设置SP则可以直接使用MOV指令。
下图为push指令执行过程(先改变SP再传数据至SS:SP)(pop为先传数据至SS:SP再改变SP值):
在这里插入图片描述
Attention:如果将10000H~1000FH看做栈空间,初始状态为空,此时SS=1000H,则SP=0010H
8086没有防止栈顶超界的功能,所以要特别注意栈空间的安排,防止入栈数据过多以及栈空后继续出栈。
栈段:长度小于64KB的一组地址连续,起始地址为16倍数的内存单元,当做栈空间。

各种“段”:
在这里插入图片描述
一段地址,可以既是代码存储空间又是数据存储空间,还可以是栈空间,也可以什么都不是,关键在于CPU中寄存器的设置(CS\IP\SS\SP\ DS)。

检测点3.2

1.MOV AX,2000H
MOV SS,AX
MOV SP,0010H
2.MOV AX,1000H
MOV SS,AX
MOV SP,0

实验2

debug中T指令(一般一次执行一条指令)在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。(涉及中断机制)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值