汇编语言第三章——寄存器(内存访问)

1.内存中字的存储

  高位字节存放在高地址单元中,地位字节存放在低地址单元中。

  将起始地址为N的字单元简称为N地址字单元。

2.DS和【address】

  8086CPU自动取DS中的数据为内存单元的段地址。

  8086CPU不支持将数据直接送入段寄存器的操作。

3.字的传送

  mov ax,[0]:字型数据传送

  mov al,[0]:字节数据传送

  原因:高位字节存放在高地址单元中,地位字节存放在低地址单元中。

4.mov,add,sub指令

  mov指令的几种形式:

  mov 寄存器,数据

  mov 内存单元,寄存器

  mov 寄存器,寄存器

  mov 段寄存器,寄存器

  mov 内存单元,常数

  mov 内存单元,段寄存器

  mov 寄存器,段寄存器

  mov 段寄存器,内存单元

  mov 内存单元,数据

  sub 寄存器,数据

  sub 寄存器,寄存器

  sub 寄存器,内存单元

  sub 内存单元,寄存器

  add和sub可操作类型差不多

  mov [1],byte ptr 3和mov byte ptr [1],3

  因为数据3占用的字节数不确定,而计算机系统只执行确定的东西,用btye ptr 确定占用的字节数。

  jmp是具有一个操作对象的指令。

JMP 1000H 段内直接转移,转移地址的偏移量由指令给出
JMP CX
段内间接转移,转移地址的偏移量由CX指出
JMP 1000H:2000H
段间直接转移,段码和偏移量由指令给出
JMP DWORD PTR [SI] 段间间接转移转移地址在SI所指地址开始的4个单元中

  注意:1、常数不能作为目的操作数。

2、作为源操作数时,若最高位是16进制的A~F,前加0。

3、两个操作数长度要一致。

4、两个内存单元之间不能直接传送数据。(eg:mov [1], [2] ×)

5、不能使用mov指令修改CS和IP的值。

6、两个段寄存器之间不能直接传送;不能把常数送到段寄存器。

6.CPU提供的栈机制

注:8086CPU中栈以字为单位。

引入指令:PUSH(入栈:把数据存入栈)和POP(出栈:从栈取出数据)

栈顶:最后入栈的字数据所对应的地址单元。

栈底:固定的一端,栈区最高地址单元的前一个单元。

栈为空时,栈顶指向栈底+2

    寄存器:SS和SP。

SS:栈段段寄存器,用于存放栈段的「段地址」

SP:栈指针寄存器,用于存放栈顶的偏移地址。

  任一时刻,ss:sp指向栈顶元素。

  进栈: 栈顶上移两个单元,即: 栈顶-2 → 栈顶 ,存入数据。

出栈: 栈顶下移两个单元,即: 栈顶+2 → 栈顶 ,取出数据。

  栈顶低地址,栈顶高地址。

7.越界的问题

当栈满的时候,再使用push指令入栈; 当栈空的时候,再使用pop指令出栈。

编程时要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作也要注意,以防栈空的时候继续出栈而导致的超界。

8.push、pop指令

  形式:push 寄存器

push 段寄存器

push 内存单元

     pop亦同。

注:1、栈的操作都是以字为单位。

2、操作对象不能是常数。

3、pop 段寄存器中,段寄存器不能是CS和SS。

    4.push,pop实质上是内存传送指令,与mov指令不同的是,push,pop访问的内存单元地址不是在指令中给出的,而是由ss:sp决定,同时push,pop还是改变sp中的内容,即在执行push,pop指令时cpu进行了两步操作:先读取ss:sp的内容,后改变sp,且因为修改的只是sp,所以栈顶变化范围最大只能在0~FFFFH之间

  栈的初始化条件: mov ax,1000H

mov ss,ax

mov sp,0010H

9.栈段

一个栈段的最大容量为64KB。

「段」是一个逻辑上的概念。 编程时,可根据需要指定一段内存区用作数据段、代码段或是栈段。

用作数据段时,要把段地址→DS。

用作栈段时,要把段地址→SS,栈顶偏移地址 → SP。

用作代码段时,段地址→CS,要取的指令偏移地址→IP。但CS和IP的值不能使用mov改变。

原文地址:https://www.cnblogs.com/saudade/p/9813444.html

时间: 2024-10-16 00:10:41

汇编语言第三章——寄存器(内存访问)的相关文章

汇编语言:第三章 寄存器(内存访问)

3.1内存中字的存储 CPU中寄存器是16位的,可以用高低字节存储一个字,但是每个内存单元是8位的,只能存储一个字节, 所以内存中用相邻2个内存单元存储一个字的高低字节 如:20000数值(4E20H)在地址0的内存单元数值为20H,在地址1的内存单元数值为4EH 两个内存单元存储一个字型数据叫做一个字单元, 字单元的起始地址为N就叫N地址字单元,表示一个字的低字节在地址N的内存单元,高字节在地址N+1的内存单元 任意连续的2个内存单元都可以组成一个字单元 3.2 DS和 [address] C

汇编语言 第三章 寄存器(内存访问)

1.字数据在内存中的存储 (1)内存以字节为单位划分为若干个单元. (2)字在储存时要用两个地址连续的内存单元来存放. (3)字数据的存-取原则:高-高,低-低.即小端法,低位字节存放在低地址内存单元,高位字节存放在高地址内存单元,并且取低地址内存单元地址作为字数据地址. (4)在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器.低地址单元和低8为寄存器相对应. 2.数据在内存单元和CPU之间的传送 (1)执行命令时,默认情况下,8086自动取寄存器DS中的值为内存单元的段地址. 1)将

汇编语言(王爽) 第3章寄存器(内存访问)

3.1 内存中的字 内存中的字是16位的,以2个内存单元存储 地址大的存高位(字的左边8位),地址小的存低位(字的右边8位) 字单元:存放1个字形数据的内存单元,由2个内存单元组成,共16位 3.2 DS 一个寄存器的名字,用来放数据段的段地址 mov 指令可以把数据转到寄存器,一个寄存器的内容转到另一个寄存器,内存单元(字单元)转到寄存器 但是一般会mov ax,1000h;mov ds,ax而不是直接mov ds,1000h 因为8086CPU不支持直接把内存单元的东西转到段寄存器上面 3.

汇编语言 第三章 寄存器

3.1 内存中字的存储: 在内存存储时,由于内存单元是字节单元(一个单元存放一个字节),所以一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节则会存放在高地址的单元中. 字单元,即存放一个字型数据的内存单元,由两个地址连续的内存单元组成.高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节. 3.2 Ds和address: CPU想要读取一个内存单元时,必须先给出这个内存单元的地址.8086中有一个DS寄存器,通常用来存放要用的数据的段

《java并发编程的艺术》读书笔记-第三章Java内存模型(二)

一概述 本文属于<java并发编程的艺术>读书笔记系列,第三章java内存模型第二部分. 二final的内存语义 final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.可以参照之前整理的关键字final.这里作者主要介绍final域的内存语义. 对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序. 初次读一个包含final域的对象的引用,与随后初次读这

&lt;java并发编程的艺术&gt;读书笔记-第三章java内存模型(一)

一概述 本文属于<java并发编程的艺术>读书笔记系列,继续第三章java内存模型. 二重排序 2.1数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性.数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置. 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量. 读后写 a = b;b = 1; 读一个变量之后,再写这个变量. 上面三种情况,只要重排序两个操作的执行顺序,

3.寄存器(内存访问)

寄存器(内存访问) 看到标题才发现,第二章是寄存器直接与常量(数字)进行交互 内存中字的存储假设读取字节(流)为从左向右读对字的处理为从又向左正是因为不同,所以才会发问吧 DS与偏移地址:通用的获取地址的方式(CS:IP这个是给程序用的)类似于通用寄存器,但不能使用move ds,1:单纯的说指令太少了的话也对(jmp 不也就省2指令,还多出N多种),应该是跟指令流程相关(intel 指令手册,我的第一反应其实是是使用灵活的方式进行修改还是使用通用的方式进行修改...小学语文学太多了,自动升华)

第三章 寄存器(内存访问)

在第五章的学习之后,因为实验课在老师的抽查之后发现前面的知识很多都忘了,便对之前的知识进行了一遍系统的复习,对汇编的基础知识基本都已经掌握,也有了更加深刻的认识. 在第三章中我们主要从内存访问的角度来继续学习CPU执行指令的原理,并进一步的学习上一章的寄存器. <1>内存中字的存储 字由高位字节和低位字节组成,用16位寄存器来存储.高八位存放高位字节,低八位存放低位字节.字需要两个地址连续的内存单元(一个字节)来存储,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中.如下图,我们想要

汇编学习笔记03(寄存器内存访问)

1. 字在内存中存储时, 要有两个地址连续的内存单元来存放. 字的低位字节存放在低地址单元中, 高位字节存放在高地址单元中. 2. DS: 存放段地址的寄存器, 这个段是存放数据的. [address]: 偏移地址 mov指令在访问内存单元时, 只给出偏移地址, 段地址默认在DS段寄存器中 3. mov ax, 1000 mov ds, ax 8086CPU不支持将数据直接送入段寄存器, 所以只能通过通用寄存器来进行中转. 4. 字的传送 80806CPU是16位结构, 有16根数据线, 所以一