zoukankan      html  css  js  c++  java
  • 寄存器(内存访问)

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

    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.

    Looking for a job working at Home about MSBI
  • 相关阅读:
    js手写弹框和按钮显示
    Java类加载机制、双亲委派、Java类加载过程
    Java集合:HashMap必知必会
    查看oracle是否锁表
    消息队列Rabbit MQ 学习第一篇
    数据库blob图片文件,多图片打包下载
    HttpDebug下载
    将博客搬至CSDN
    android事件拦截处理机制详解
    回调函数
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/4379813.html
Copyright © 2011-2022 走看看