汇编的数据段和栈
来源:互联网 发布:提词器软件下载 编辑:程序博客网 时间:2024/05/21 09:29
1.DS和[address]
例如:我们要读取10000H单元的内容可以用如下程序进行
mov bx,1000H
mov ds,bx
mov al,[0]
上面的三条指令是将10000H(1000:0)中的数据读到al中。
[...]表示一个内存单元,[...]中的0表示内存单元的偏移地址。我们知道只有偏移地址是不能定位一个内存单元的,那么内存单元的段地址是多少呢?指令执行时,8086CPU自动获取ds中的数据位内存单元的段地址。
再来看一下,我们如何用mov指令从10000H中读取数据。10000H用段地址和偏移地址表示为1000:0,我们先将1000H放入ds,然后用mov al,[0]完成传送。mov指令中的[]说明操作对象是一个内存单元,[]中的0表示这个内存单元的偏移地址是0,它的段地址默认放在ds中,指令执行时,8086CPU会自动从ds中取出。
如何将一个数据放入ds寄存器呢,直接用mov ds 1000H?现在并非如此,8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器,所以mov ds,1000H这条指令是非法的。那么如果将1000H送入到ds中?只要用一个寄存器来进行中转,即先将1000H送入一个一般的寄存器,如bx,再将bx的内容送入ds。
2.字的传送
前面我们用mov指令在寄存器和内存之间进行字节型数据的传送,因为8086CPU是16位结构,有16根数据线,所以,可以一次传送16位的数据,也就是说可以一次性传送一个字。我们只要在mov指令中给出16位寄存器就可以进行16位数据的传送了。比如:
mov bx,1000H;
mov ds,bx;
mov ax,[0];
mov [0],cx;cx中的16位数据送到1000:0处
3.栈
8086CPU的入栈和出栈操作是以字为单位进行的。注意:字型数据用俩个单元存放,搞地址单元存放高8位,低地址段元放低8位。有俩个问题如下:
1.CPU如何知道一段内存空间被当做栈?
2.执行push和pop时候,如果知道哪个单元是栈顶
答案:SS:SP,段寄存器SS存放栈顶段地址,SP存放栈顶偏移地址。入栈时,栈顶从高地址向低地址方向增长。
- 汇编的数据段和栈
- 16位汇编 数据段 栈段 代码段
- 8086汇编学习之代码段、数据段、栈段与段地址寄存器
- 【汇编】代码段、数据段、堆栈段及向上增长和向下增长
- 【汇编】代码段、数据段、堆栈段及向上增长和向下增长
- BSS段和数据段的区别
- 堆栈,堆栈,堆和栈的区别 BSS段、数据段、代码段、堆与栈
- bss段,数据段,程序段,堆和栈之间的区别
- 代码段、数据段、BSS段、堆和栈之间的区别
- 一段汇编小程序及说明——将数据,代码,栈放入不同的段
- 汇编中将代码,数据,栈放入相同段空间的缺点
- 汇编:段的综述
- 从一个实例的vs2005汇编代码分析变量在段上的分配--数据段,代码段,BSS段
- BSS段,数据段,代码段,堆内存和栈
- BSS段,数据段,代码段,堆内存和栈
- BSS段,数据段,代码段,堆内存和栈
- BSS段,数据段,代码段,堆和栈
- BSS段,数据段,代码段,堆内存和栈
- VelocityTracker入门认识
- ubuntu截图方法
- Linux内核代码笔记6----网络模型
- 删除数组元素
- CSDN编程挑战——《-3+1》
- 汇编的数据段和栈
- 安家落户CSDN
- 为何 Emacs 和 Vim 被称为两大神器
- 企业最关注应届毕业生的两个方面
- 1013.开门人和关门人
- EXCEL文本转数值方法---我找的好苦啊
- 常用的正则表达式
- C++primer plus第六版课后编程题答案17.1
- 访问https 绕过证书验证的方法