第3章 寄存器(内存访问)小结

内存中字的存储

字单元,即存放一个字形数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。我们将起始地址为N的字单元简称为N地址字单元。

DS和[address]

“[...]”表示一个内存单元,“[...]”中的0表示内存单元的偏移地址。8086CPU自动取ds中的数据为内存单元的段地址。8086CPU不支持将数据直接送入段寄存器的操作,只能用一个寄存器来进行中转,即先将1000H送入一个一般的寄存器,如bx,再将bx中的内容送入ds。

mov、add、sub指令

mov指令可以有以下几种形式:

mov        寄存器,数据

mov        寄存器,寄存器

mov        寄存器,内存单元

mov        寄存器,段寄存器

mov        内存单元,寄存器

mov        内存单元,段寄存器

mov        段寄存器,寄存器

mov        段寄存器,内存单元

add指令可以有以下几种形式:

add         寄存器,数据

add         寄存器,寄存器

add         寄存器,内存单元

add         内存单元,寄存器

sub指令可以有以下几种形式:

sub          寄存器,数据

sub          寄存器,寄存器

sub          寄存器,内存单元

sub          内存单元,寄存器

CPU提供的栈机制

后进先出的操作规则

push  ax表示将寄存器ax中的数据送入栈中,pop   ax表示从栈顶取出数据送入ax。8086CPU的入栈和出栈操作都是以字为单位进行的。

8086CPU中,有两寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP指向栈顶元素。

Push、Pop指令

执行push时,CPU的两步操作是:先改变SP,后向SS:SP处传送。执行pop时,CPU的两步操作是:先读取SS:SP处的数据,后改变SP。

原文地址:https://www.cnblogs.com/547hh/p/9885959.html

时间: 2024-10-08 01:46:29

第3章 寄存器(内存访问)小结的相关文章

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

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

汇编语言(王爽) 第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.寄存器(内存访问)

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

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

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

寄存器(内存访问)

1.内存访问 CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086CPU中,内存地址由段地址和偏移地址组成.8086中有一个DS寄存器,通常用来存放要访问数据的段地址.例如我们要读取10000H单元的内容,可以用如下的程序段进行. mov bx,1000H mov ds,bx mov al,[0] [...]表示一个内存单元,其中的0表示内存单元的偏移地址.段地址从ds中获取. 8086CPU不支持将数据直接送入段寄存器的操作,所以使用寄存器bx作个中转. 2.几个指令 mo

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

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

汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈

疯狂的暑假学习之  汇编入门学习笔记 (二) 参考:<汇编语言> 王爽  第三章 一.寄存器(内存访问) 1.DS和[address] DS 数据段寄存器,用来存放数据段地址 [address] 用来表示数据段的偏移地址 同样跟CS一样,不可以通过 mov ds, 1000 给ds赋值 要通过通用寄存器ax等. 例如: mov ax, 1000 mov ds, ax mov al, [0] 把1000:0的内容存进al mov bx, 1000 mov ds, bx mov [0], al 把

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

内存访问首先要有地址,8086pc中的段地址存放在 ds 寄存器中(ds 和 cs是不一样的,cs是定位地址用于读取内存中的指令或者数据,而ds是读取内存中的数据时使用,下面我们会明白区别) 将内存中的数据写入寄存器: mov bx,1000H mov ds,bx mov al,[0] 第一句是把1000H给bx(寄存器),第二句把bx中的值给ds(段地址寄存器),第三句从1000:0H中读取数据给al(寄存器ax的低8位):至于为什么不直接把段地址1000H给ds,这是8086硬件设计的问题,

访问内存过程小结

     本文总结一下,Linux下面几种访问内存的方式方法.相关资料转载自:Linux 内存与I/O访问      X86体系结构下,内存空间分为I/O空间和内存空间,I/O空间通过特定的指令in.out来访问,内存空间采用mov等指令访问.      arm体系结构下,内存空间和I/O空间统一划分,他们在一个地址空间内.       在处理器和真实的内存空间之间,还有MMU这一神奇的部件存在,它辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射关系转换.内存访问权限保护和cache缓存控

(第三章)Java内存模型

一.java内存模型的基础 1.1 并发编程模型的两个关键问题 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递. 在共享内存的模型里,线程之间共享程序的公共状态,通过读-写内存中的公共状态来进行隐式通信.在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显示进行通信. 同步是指程序中用于控制不同线程间操作发生相对顺序