码迷,mamicode.com
首页 > 其他好文 > 详细

寄存器(内存访问)

时间:2015-03-31 08:58:27      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

节选自王爽《汇编语言》第三章内容

CPU中用16位寄存器来存储一个字,但内存单元是字节单元,一个单元存储一个字节,需要两个地址连接的内存单元来存放。字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。

CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086PC中,内存地址由段地址和偏移地址组成。

Mov 寄存器名称 [内存地址偏移量]

默认段地址存放在DS中。

8086CPU不支持直接将数据送入段寄存器的操作。所以一般是需要把数据送到通用寄存器ax,bx,然后再送入到DS,

问题:将al中的数据送入内存单元10000h

Mov bx,1000H;

Mov ds,bx;

Mov [0], al

写几条指令,累加数据段中前三个字型数据

Mov ax ,123bh

Mov ds,ax

Mov ax,0

Add ax,[0]

Add ax,[2]

Add ax[4]

一个字型数据占两个内存单元,所以偏移地址是0,2,4.

现今的CPU中都有栈的设计,有专门的指令访问栈空间,因此在基于8086CPU编程的时候,可以将一段内存当作 栈使用。

两个基本指令是PUSH(入栈)和出栈(POP)。

8086CPU的入栈和出栈都是以字为单位进行的。

栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP指向栈顶元素。

8086CPU不保证我们对栈的操作不会超界,它只知道栈顶在何处,而不知道用户安排的栈空间有多大。(后来的CPU设计解决评这个问题了吗?)

PUSH POP指令在执行的时候只修改SP,所以栈顶的变化范围是0~FFFFH,栈空的时候,SP=0,一直压栈,直到栈满时SP=0,如果再次

压栈,栈顶将环绕,覆盖原来的内容,一个栈段最大的容量64KB.

寄存器(内存访问)

标签:

原文地址:http://www.cnblogs.com/huaxiaoyao/p/4379813.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!