王爽《汇编语言》第三版 第三章 内存访问

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。

参考资料:《小甲鱼汇编零基础入门》

     《汇编语言》第三版

时间: 2024-08-02 15:13:37

王爽《汇编语言》第三版 第三章 内存访问的相关文章

最强大的王爽汇编语言学习环境使用教程

最强大的王爽汇编语言学习环境使用教程 一.前言 这是采用VMwere Workstation 12 pro虚拟机软件,搭建的MS-DOS学习环境,在windowsXP/8/10及linux中均可以使用,在这个环境中,我集成了CCDOS中文系统,pdos中文系统,使用这些系统,可以进行中文输入与显示.还集成了,十分著名的汇编语言调试工具TR,它比debug更加强大.并且集成了适合王爽汇编语言学习的微软汇编语言编译器masm5和dos中最强大的文本编辑器 vim73 for DOS,这是一个支持彩色

Java 线程第三版 第四章 Thread Notification 读书笔记

一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(long timeout) throws InterruptedException 等待条件的发生.如果通知没有在timeout指定的时间内发生,它还是会返回. public final void wait(long timeout, int nanos) throws InterruptedException

Java 线程第三版 第六章 高级同步议题 读书笔记

多线程数据同步错误比较难检测,因为通常是与事件的特定发生顺序有关. 一.同步术语 Barrier(屏障) barrier是多个Thread的集合点:所有的Thread都应该到齐在这个barrier之后才能允许它们继续下去. Condition variable(条件变量) 实际上不是变量,而是与某个lock有关联的变量. Event variable(事件变量) 条件变量的另一个名称. Critical section(临界区) 临界区是synchronized方法或者block. Lock(锁

Java 线程第三版 第三章数据同步 读书笔记

多线程间共享数据问题 一.Synchronized关键字 atomic一词与"原子"无关,它曾经被认为是物质的最小的单元,不能再被拆解成更小的部分. 当一个方法被声明成synchronized,要执行此方法的thread必须先取得一个token,我们将它称为锁.一旦该方法取得(或者说是获得)锁,它将运行此方法然后释放掉(或者返回)此锁.不管方法时怎样返回的(包括通过异常)该锁会被释放. 二.Volatile关键字 如果变量被标示为volatile,每次使用该变量时都必须从主寄存器中读出

Java 线程第三版 第五章 极简同步技巧 读书笔记

一.能避免同步吗? 取得锁会因为以下原因导致成本很高: 取得由竞争的锁需要在虚拟机的层面上运行更多的程序代码. 要取得有竞争锁的线程总是必须等到锁被释放后. 1. 寄存器的效应 计算机有一定数量的主寄存器用来存储与程序有关的数据. 从逻辑上的观点来看,每个Thread都有自己的一组寄存器.当操作系统将某个Thread分配给CPU时,它会把该Thread特有的信息加载到CPU的寄存器中.在分配不同的Thread给CPU之前,它会将寄存器的信息存下来.所以Thread间绝不会共享保存在寄存器的数据.

王爽汇编语言(第三版)环境搭建(附PDF及工具下载)

一.前言 最近在学习汇编语言,使用的是读者评价非常高的王爽老师写的<汇编语言>(第三版),为了适应现在各个版本的windows操作系统,所以采用VMWare虚拟机来搭建纯DOS环境. 二.需要的工具 VMware-workstation-12.DOS系统镜像文件.汇编编译器masm和连接器link 百度云下载链接:https://pan.baidu.com/s/1gfz4N67 密码:02y1 三.安装VMware-workstation-12 傻瓜式安装,一直点击下一步就可以(虽然网上也可以

王爽《汇编语言》第三版 第五章 [BX]和loop指令

5.1 [bx] mov ax,[bx]功能:bx 中存放的数据作为一个偏移地址EA ,段地址SA 默认在ds 中,将SA:EA处的数据送入ax中. 5.2 Loop指令 指令的格式是:loop 标号,CPU 执行loop指令的时候,要进行两步操作: 1.(cx)=(cx)-1: 2.判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行. 通常我们用loop指令来实现循环功能,cx 中存放循环次数. 5.3 在Debug中跟踪用loop指令实现的循环程序 5.4 Debug和汇编编译器

王爽《汇编语言》第三版 第六章 包含多个段的程序

6.1 在代码段中使用数据 "dw"的含义是定义字型数据.dw即define word. 由于它们在代码段中,程序在运行的时候CS中存放代码段的段地址,所以我们可以从CS中得到它们的段地址. 因为用dw定义的数据处于代码段的最开始,所以偏移地址为0,这8 个数据就在代码段的偏移0.2.4.6.8.A.C.E处. end 除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方. 6.2 在代码段中使用栈 6.3 将数据.代码.栈放入不同的段 我们用和定义代码段一样的方法来定义多个

【转】apue《UNIX环境高级编程第三版》第一章答案详解

原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此,我要感谢网易的一个工程师朋友和室友,没有他们,我不会开始真正的学习这本书,希望大家以后开始慢慢进步.废话少说,直接上课后习题了. UNIX高级编程第一章习题答案: 1.1在系统上验证,除根目录外,目录l和l l是不同的. 答:这个验证有很多方法可使用命令ls .cd.vim等,目录.指向当前目录,目录..指