汇编语言内存单元地址的算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言内存单元地址的算法相关的知识,希望对你有一定的参考价值。
首先要了解的是CPU要处理的数据是存在内存中的,当CPU要处理某些数据时首先要将数据从内存中读取到CPU的寄存器中。内存的结构是以8个位(bit)为一个单元,由许多这样的单元组成了内存。就像一栋大楼是有许多个房间组成,每个房间的空间就是8个位。而数据存在内存的某一个或某一段单元中,CPU要读取怎么才能从这么多单元中找到呢,就是靠内存地址。内存地址就像我们的门牌号。有了这个,只要告诉CPU地址是多少,CPU就会从这段地址中读取数据。我们将内存中的一个单元的地址编为1,那么只要按顺序就会有2,3,4,5。。。。等等每个内存都会有个明确的地址编号。寻址范围,就是指CPU所能查找到的最小地址和最大地址。假如CPU的地址线是8位的,那么用二进制表示就是11111111。也就是说CPU访问内存从最小的0000
0000这个单元,一直到1111
1111这个单元。这是二进制,转换成十进制就是255.也就是说,CPU可以访问的内存地址编号从0~255.这就是CPU的寻址范围。
你的串号我已经记下,采纳后我会帮你制作 参考技术A
对于 80x86 的汇编语言来说,内存单元的物理地址,是:
段寄存器的内容 × 16 + 指针寄存器的内容
对于 MCS-51 的汇编语言来说,内存单元的地址,取决于硬件的连线。
每个存储单元的地址,究竟是多少? 这是要看电路图的。
硬件连线,这可是高技术!即使跟你讲上几句话,你也难以理解的。
王爽《汇编语言》第三版 第三章 内存访问
3.1 内存中字的存储
在0地址处开始存放20000(4E20H):
注意:0号单元是低地址单元,1号单元是高地址单元。
任何两个地址连续的内存单元,N号单元和 N+1号单元,可以将它们看成两个内存单元 ,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
3.2 DS和[address]
在8086PC中,内存地址由段地址和偏移地址组成,8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址。
执行指令时,8086CPU自动取DS中的数据为内存单元的段地址。
3.3 字的传送
3.4 mov、add、sub指令
已学mov指令的几种形式:
1.mov 寄存器,数据
2.mov 寄存器,寄存器
3.mov 寄存器,内存单元
4.mov 内存单元,寄存器
5.mov 段寄存器,寄存器
mov 寄存器,段寄存器 与 mov 内存单元,段寄存器 是正确的指令。
3.5 数据段
我们可以将一组长度为N(N≤64K)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。
3.6 栈
栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。
栈的操作规则:LIFO(Last In First Out,后进先出)。
任意时刻,SS:SP指向栈顶元素。
3.7 CPU提供的栈机制
我们在基于8086CPU编程的时候,可以将一段内存当作栈来使用。
8086CPU的入栈和出栈操作都是以字为单位进行的。
push ax
1.SP=SP–2;
2.将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。
pop ax
1.将SS:SP指向的内存单元处的数据送入ax中;
2.SP = SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。
3.8 栈顶超界的问题
8086CPU不保证对栈的操作不会超界。
3.9 push、pop指令
push和pop指令是可以在寄存器和内存之间传送数据的。
栈空间当然也是内存空间的一部分,它只是一段可以以一种特殊的方式进行访问的内存空间。
3.10 栈段
对于8086PC机,在编程时,我们可以根据需要 ,将一组内存单元定义为一个段。
一个栈段的容量最大为64KB。
参考资料:《小甲鱼汇编零基础入门》
《汇编语言》第三版
以上是关于汇编语言内存单元地址的算法的主要内容,如果未能解决你的问题,请参考以下文章