汇编语言学习(四)~寄存器(内存访问)

内存中字的存储

字单元:存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成

高地址内存单元存放字型数据的高位字节,低地址内存单元存放字型数据的低位字节

起始地址为N的字单元称为N地址字单元

DS和[address]

8086PC中,内存地址由段地址和偏移地址组成,存储在DS寄存器中

下面三条指令将10000H(1000:0)中的数据读到al中

mov bx,1000H
mov ds,bx
mov al,[0]

解析:
使用mov指令将一个内存单元中的内容送进一个寄存器中:mov 寄存器名,内存单元地址

[...]表示一个内存单元,上述例子中的0表示内存单元的偏移地址,执行指令时8086CPU自动读取ds中的数据为内存单元的段地址

8086不支持将数据直接送入段寄存器的操作,如ds,所以必须用一个寄存器(bx)来进行中转

例题:

47134DB285A9E3777EE7FDD6F8BC5F2F.png

mov、add、sub指令

mov:

mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器

a命令写入指令,t命令执行

  • mov 寄存器,寄存器

image-20220217150103251.png

ds中的值送入到了寄存器ax中

数据段

这个就相当于计算题,看内存单元存储的数据,下题为例

image-20220227193416391.png

栈是一种具有特殊的访问方式的存储空间:后进先出(LIFO)

CPU提供的栈机制

8086CPU提供入栈、出栈指令:PUSH、POP,以字为单位进行

段寄存器SS:存放栈顶段地址;SP:存放栈顶偏移地址 任何时刻,SS:SP指向栈顶元素

入栈时,栈顶从高地址向低地址方向增长

PUSH:先改变SP,后向SS:SP处传送

F0C881C5DBC480AC50ACFBBA84233E99.png

POP:先读取SS:SP处数据,后改变SP

FEEEE2D638BD297D1C9FDE97B229667A.png

5495F977EC3A716D1852736EBD7F52CC-16459685400671.png

注意:SS:SP指向新的栈顶后,pop前的栈顶元素仍然存在

栈顶超界问题

自己注意……,8086CPU没有能帮你的

栈顶超界很危险:比如在你规定的这段栈空间外存放了其他重要数据和代码,可能会由于入栈出栈时不小心意外改写这些数据

注意:SS属于段寄存器,不能直接送入数据,需要其他寄存器作为中转站

最后修改:2022 年 02 月 28 日
如果觉得我的文章对你有用,请随意赞赏