博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
寄存器(内存访问)
阅读量:4326 次
发布时间:2019-06-06

本文共 802 字,大约阅读时间需要 2 分钟。

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

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.

转载于:https://www.cnblogs.com/huaxiaoyao/p/4379813.html

你可能感兴趣的文章
Http协议的学习
查看>>
【转】轻松记住大端小端的含义(附对大端和小端的解释)
查看>>
设计模式那点事读书笔记(3)----建造者模式
查看>>
ActiveMQ学习笔记(1)----初识ActiveMQ
查看>>
Java与算法之(2) - 快速排序
查看>>
Windows之IOCP
查看>>
机器学习降维之主成分分析
查看>>
CTP2交易所成交回报
查看>>
WebSocket & websockets
查看>>
openssl 升级
查看>>
ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
查看>>
CVE-2010-2883Adobe Reader和Acrobat CoolType.dll栈缓冲区溢出漏洞分析
查看>>
使用正确的姿势跨域
查看>>
AccountManager教程
查看>>
Android学习笔记(十一)——从意图返回结果
查看>>
算法导论笔记(四)算法分析常用符号
查看>>
ultraedit激活
查看>>
总结(6)--- python基础知识点小结(细全)
查看>>
亿级曝光品牌视频的幕后设定
查看>>
ARPA
查看>>