《汇编语言》寄存器物理地址(第二章第二节)解析

合集下载

汇编语言寄存器和指令操作的整理

汇编语言寄存器和指令操作的整理
l DI 目的变址寄存器
与DS联用, 指示数据段中某操作数的偏移量, 或与某一位移量共同构成操作数的偏移量. 串处理操作时, DI指示附加段中目的地址, 并有自动增量或减量的功能
段寄存器l CS 代码段
存放当前程序的指令代码
l DS 数据段
存放程序所涉及的源数据或结果
l SS 堆栈段
当运算结果的最高位为1时, SF为1, 否则为0. 最高位表示符号数的正和负
6. TF 跟踪标志位
用于调试程序时进入单步方式工作. TF=1时, 每条指令执行完后产生一个内部中断, 让用户检查指令运行后寄存器, 存储器和各标志位的内容. TF=0时, CPU工作正常, 不产生内部中断
7. IF 中断允许标志位
l POP DST ;出栈指令: 弹出栈顶元素, 后将栈顶指针向栈底方向移动一个字
l XCHG OPR1, OPR2 ;交换指令: 将这两个操作数交换
地址传送指令:
l LEA DST, SRC ;装载有效地址指令: 该指令将源操作数的偏移量OA装载到目的操作数中
算术运算指令加法指令:
l ADD DST, SRC ;DST+SRC的和存放到DST中去
l ADC DST, SRC ;带进位加法指令, DST+SRC+CF
l INC DST ;增1指令
减法指令:
l LOOPZ/LOOPE, LOOPNZ/LOOPNE ;前者用于找到第一个不为0的事件, 后者用于找到第一个为0的事件
子程序调用指令:
l imme: 立即数
l DST: 目的操作数
l SRC: 源操作数
l mem: 存储器操作数

《汇编语言》寄存器物理地址(第二章第二节)

《汇编语言》寄存器物理地址(第二章第二节)

DS ES SS CS 地 址 加 法 IP 器 地 址 总 线 AB
本课件由汇编网()制作提供
物理地址PA = 段地址 + 偏移地址 = ( 段寄存器 ) × 10H + 偏移地址 或段寄存器的内容左移4位,加上偏移地址
例:某内存单元的段地址由DS、偏移地址由BX给出。
2.5 16位结构的CPU

概括的讲,16位结构描述了一个CPU具有 以下几个方面特征:

1、运算器一次最多可以处理16位的数据。 2、寄存器的最大宽度为16位。 3、寄存器和运算器之间的通路是16位的。


2.6 8086CPU给出物理地址的方法


8086有20位地址总线,可传送20 位地址,寻址能力为1M。 8086内部为16位结构,它只能传送 16位的地址,表现出的寻址能力却 只有64K。
2.7 “段地址×16+偏移地址=物理地址” 的本质含义

两个比喻说明:

说明“基础地址+偏移地址 = 物理地址” 的思想:第一个比喻 说明“段地址×16+偏移地址=物理地址” 的思想:第二个比喻 8086CPU就是这样一个只能提供两张3位 数据纸条的CPU。

2.8 段的概念

错误认识:

内存被划分成了一个一个的段,每一个 段有一个段地址。
通用寄存器
数据寄存器(AX,BX,CX,DX) 地址指针寄存器(SP,BP) 变址寄存器(SI,DI)
5
2.1 通用寄存器



8086CPU所有的寄存器都是16位的, 可以存放两个字节。 AX、BX、CX、DX 通常用来存放一般 性数据被称为通用寄存器。 下面以AX为例,我们看一下寄存器的 逻辑结构。

汇编语言入门汇编指令及寄存器详解教程

汇编语言入门汇编指令及寄存器详解教程

汇编语⾔⼊门汇编指令及寄存器详解教程⽬录前⾔什么是汇编语⾔汇编语⾔产⽣的原因汇编与⼆进制的关系寄存器寄存器作⽤存取速度⽐较寄存器分类常⽤寄存器⽤途寄存器EAX、AX、AH、AL的关系汇编语⾔指令数据传送指令算术运算指令逻辑运算指令循环控制指令转移指令linux 和 windows 下汇编的区别总结前⾔我们⼤都是被⾼级语⾔惯坏了的⼀代,源源不断的新特性正在逐步添加到各类⾼级语⾔之中,汇编作为最接近机器指令的低级语⾔,已经很少被直接拿来写程序了,不过我还真的遇到了⼀个,那是之前的⼀个同事,因为在写代码时遇到了成员函数权限及可见性的问题,导致他⽆法正确调⽤想执⾏的函数,结果他就开始在C++代码⾥嵌⼊汇编了,绕过了种种限制终于如愿以偿,但是读代码的我们傻眼了…因为项⽬是跨平台的,代码推送的 Linux 上编译的时候他才发现,汇编代码的语法在 Linux 和 Windows 上居然是不⼀样的,结果他⼜⽤⼀个判断平台的宏定义“完美”的解决了,最终这些代码肯定是重写了啊,因为可读性太差了,最近在学习左值、右值、左引⽤和右引⽤的时候,总是有⼈⽤程序编译⽣成的中间汇编代码来解释问题,看得我迷迷糊糊,所以决定熟悉⼀下简单的汇编指令,边学习边记录,⽅便今后忘记了可以直接拿来复习。

什么是汇编语⾔汇编语⾔是最接近机器语⾔的编程语⾔,引⽤百科中的⼀段话解释为:汇编语⾔(assembly language)是⼀种⽤于电⼦计算机、微处理器、微控制器或其他可编程器件的低级语⾔,亦称为符号语⾔。

在汇编语⾔中,⽤助记符代替机器指令的操作码,⽤地址符号或标号代替指令或操作数的地址。

汇编语⾔⼜被称为第⼆代计算机语⾔。

汇编语⾔产⽣的原因对于绝⼤多数⼈来说,⼆进制程序是不可读的,当然有能⼈可以读,⽐如第⼀代程序员,但这类⼈快灭绝了,直接看⼆进制不容易看出来究竟做了什么事情,⽐如最简单的加法指令⼆进制表⽰为00000011,如果它混在⼀⼤串01字符串中就很难把它找出来,所以汇编语⾔主要就是为了解决⼆进制编码的可读性问题。

汇编语言知识大全

汇编语言知识大全

汇编语言知识大全第一章基础知识:一.机器码:1.计算机只认识0,1两种状态。

而机器码只能由0,1组成。

故机器码相当难认,故产生了汇编语言。

2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。

每一总CPU都有自己的指令集;注意学习的侧重点。

二.存储器:1.存储单元中数据和指令没任何差别。

2.存储单元:Eg:128个储存单元(0~127)128byte。

线:1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。

据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。

3.控制总线:cpu对元器件的控制能力。

越多控制力越强。

四.内存地址空间:1.由地址总线决定大小。

2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总线连接起来。

3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的RAMCPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。

自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。

所以一些地址的功能是对应一些芯片的。

第二章寄存器引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。

而寄存器是可以用来指令读写的部件。

8086有14个寄存器(都是16位,2个存储空间)。

一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位注意1.范围:16位的2^16-1,8位的2^8-12.进行数据传送或运算时要注意位数对应,否则会报错二.字:1. 1个字==2个字节。

2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元数制,16进制h,2进制b三.20根数据总线的16位cpu--8086给出物理地址的方法:根数据总线(稍外):寻址能力为1M位的cpu(内部):一次能处理的数据位2^16。

汇编语言之寄存器(CPU工作原理)

汇编语言之寄存器(CPU工作原理)

汇编语言之寄存器(CPU工作原理)1、介绍一个典型的CPU,由运算器、控制器、寄存器等器件组成,对于游戏修改者来说,重点学习寄存器,其它不必管。

不同的CPU,寄存器的个数、结构是不相同的,8086CPU有14个寄存器,每个寄存器有一个名称,我们对它进行分类:1.通用寄存器:AX、BX、CX、DX2.段寄存器:CS、SS、DS、ES3.指针寄存器:SP、BP4.变址寄存器:SI、DI5.指令指针寄存器:IP6.标志寄存器:FR2、通用寄存器AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。

以AX为例,寄存器的逻辑结构图如下:字在寄存器中的存储字在寄存器中的存储3 字在寄存器中的存储4、物理地址存储单元又叫内存单元,以后我们多数用内存单元这一名称。

所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。

CPU通过地址总线送入内存的,必须是一个内存单元的物理地址,在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址,不同的CPU可以有不同的形成物理地址的方式,我们现在讨论8086CPU是如何在内部形成内存单元的物理地址的。

5、 8086CPU给出物理地址的方法8086CPU有20位地址总线,可以传送20位地址,而8086CPU 内部结构是16位的,一次性只能传送16位的地址,怎么解决20位地址与16位地址不一致的问题呢?8086CPU采用一种在内部用2个16位地址合成的方法来形成一个20位的物理地址。

当8086CPU要读写内存时,怎样在CPU内部形成物理地址的呢?1:CPU中的相关部件提供2个16位的地址,一个称为段地址,另一个称为偏移地址。

2:段地址和偏移地址通过内部总线送入一个称为地址加法器的部件。

3:地址加法器将这两个16位地址合成为1个20位的物理地址。

地址加法器采用“段地址×16+偏移地址”的方法合成物理地址。

汇编语言寄存器详解

汇编语言寄存器详解

汇编语言寄存器详解汇编语言是一种底层程序设计语言,与高级语言相比,汇编语言更接近于计算机硬件层面。

在汇编语言中,寄存器是一种非常重要的概念,它们用于存储数据和指令,以及进行计算和操作。

在本文中,我们将详细介绍汇编语言中常用的寄存器及其作用。

1. 通用寄存器通用寄存器是汇编语言中最基本的寄存器,它们可以用于存储数据、指针和地址等信息。

在x86架构中,通用寄存器有8个,分别为:AX,BX,CX,DX,SI,DI,BP和SP。

其中,AX,BX,CX和DX是16位寄存器,也就是说它们可以存储16位的数据。

SI和DI是用于存储指针和地址的寄存器,BP和SP 则是用于存储栈指针的寄存器。

2. 段寄存器在汇编语言中,除了通用寄存器以外,还有一种特殊的寄存器,叫做段寄存器。

段寄存器用于存储内存中某个段的起始地址,它们可以帮助程序员在内存中定位某个数据或指令。

在x86架构中,有4个段寄存器,分别为:CS,DS,SS和ES。

其中,CS用于存储代码段的地址,DS用于存储数据段的地址,SS用于存储堆栈段的地址,ES则可以用作附加段寄存器。

3. 标志寄存器标志寄存器是一种特殊的寄存器,它们用于存储程序运行中的各种状态信息。

在x86架构中,有一个标志寄存器,叫做FLAGS寄存器,它包含了各种标志位,用于表示程序运行中的各种状态信息。

其中,比较常用的标志位有:ZF(零标志位),CF(进位标志位),OF(溢出标志位)等。

这些标志位可以帮助程序员判断程序运行中的各种状态,从而进行相应的处理。

总的来说,寄存器是汇编语言中非常重要的概念,程序员需要熟练掌握各种寄存器的作用和用法,才能够编写出高效、正确的汇编程序。

汇编语言学习笔记之物理地址

汇编语言学习笔记之物理地址

汇编语⾔学习笔记之物理地址物理地址CPU访问内在单元时,要给出内存单元的地址。

所有的内存单元构成的存储空间是⼀个⼀维的线性空间,每⼀个内存单元在这个空间中都有惟⼀的地址,我们将这个惟⼀的地址称为物理地址。

CPU通过地址总线送⼊存储器的必须是⼀个内存单元的物理地址。

在CPU向地址总线上发出物理地址之前,必须在内部先形成这个物理地址。

不同的CPU可以有不同的形成物理地址的⽅式。

下⾯讨论8086CPU是如何在内部形成内存单元的物理地址的。

8086CPU16位结构的CPU,具有下⾯⼏⽅⾯的结构特性:运算器⼀次最多可以处理16位的数据;寄存器的最⼤宽度为16位;寄存器和运算器之间的通路为16位。

8086CPU读写内存的过程:1. CPU中的相关部件提供两个16位的地址,⼀个称为段地址,另⼀个称为偏移地址;2. 段地址和偏移地址通过内部总线送⼊⼀个称为地址加法器的部件;3. 地址加法器将两个16位地址合成为⼀个20位的物理地址;4. 地址加法器通过内部总线将20位物理地址送⼊输⼊输出控制电路;5. 输⼊输出控制电路将20位物理地址送上地址总线;6. 20位物理地址被地址总线传送到存储器。

地址加法器采⽤物理地址=段地址*16+偏移地址的⽅法⽤段地址和偏移地址合成物理地址。

CPU可以⽤不同的段地址和偏移地址形成同⼀个物理地址。

例如:CPU要访问21F60H单元,则它给出的段地址SA和偏移地址EA满⾜SA*16+EA=21F60H即可。

如果给定⼀个段地址,仅通过变化偏移地址来进⾏寻址,最多可定位多少内存单元?偏移地址16位,变化范围为0~FFFFH,仅⽤偏移地址来寻址最多可寻64KB个内存单元。

⽐如给定段地址1000H,⽤偏移地址寻址,CPU的寻址范围为:10000H~1FFFFH。

“数据在21F60H内存单元中”对于8086CPU的意思是:数据存在内存2000:1F60单元中;或者,数据存在内存的2000段中的1F60单元中。

汇编语言第二章 寻址方式

汇编语言第二章 寻址方式

第二章寻址方式在8086微处理器中,一条指令通常由操作码加上操作数构成。

指令形式为:操作码[操作数1], [操作数2]; 注释其中,操作码指明执行的动作,操作数指明操作的对象。

由于寄存器数量有限,操作数不可能都放在寄存器中,实际上,操作数既可以放在寄存器中,也可以放在主存贮器中,这样就涉及到操作数的寻址问题。

我们将寻址操作数存放地址的方式称为寻址方式。

本章的内容包括:主存储器和物理地址的形成寻址方式常量与变量的定义2.1 主存贮器和物理地址的形成一、主存贮器计算机存贮系统分为:主存贮器(内存)、辅助存贮器(外存)。

●主存容量小、存取速度快、价格高;●辅存容量大、存取速度慢、价格低。

主存贮器的基本存贮单位是“位”(bit ),每8位组合成一个“字节”;每相邻的两个字节称为“字”;相邻的四个字节称为“双字”。

为了区别各个存贮单元,给每个单元编号,称为地址。

地址:字节单元的编号,也称为物理地址。

低字节放低位,高字节放高位。

例如:0004单元存放内容为1234H 。

0 10FFFFFH 低地址 高地址 从0~0FFFFFH ,共有220个单元,20根地址线。

表示:(0004)字=1234H二、存储器物理地址的形成早期的8086微处理器,有20根地址线,寻址范围2^20 = 1M 字节。

但是,8086内部为16位结构,与地址相关的寄存器均为16位,从而导致可寻址范围为64K。

因此,设计成为将主存分段使用,每段最大为64K字节。

用CS、DS、SS、ES保存当前可用段的段首地址。

规定:段首地址只能从任一“小段”的首地址开始,也就是必须最低4位为0,如果所有的段首地址都是这样,则可以忽略最低4位,而只将高16位放到段寄存器中。

因此,计算物理地址时,应将段寄存器内容左移4位,恢复段首址原值,然后再与本段中待访问单元的偏移地址相加,得到访问单元的物理地址。

因此,被访问单元物理地址PA = 段首址*16+偏移地址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

标志名
进位标志 符号标志 零标志 溢出标志 辅助进位 标志 奇偶标志
标志
CF SF ZF OF AF
值为1
CY NG ZR OV AC
值为0
NC PL NZ NV NA
PF DF
IF
PE DN
EI
PO UP
DI
方向标志
中断标志
2.4 物理地址

CPU访问内存单元时要给出内存单元 的地址。所有的内存单元构成的存储 空间是一个一维的线性空间。 每一个内存单元在这个空间中都有唯 一的地址,这个唯一的地址称为物理 地址。
CPU概述



一个典型的CPU由运算器、控制器、寄 存器等器件组成,这些器件靠内部总线 相连。 内部总线实现CPU内部各个器件之间的 联系。 外部总线实现CPU和主板上其它器件的 联系。
寄存器概述

含14个16位寄存器,按功能可分为三类

8个通用寄存器 4个段寄存器 2个控制寄存器 它们的名称为: AX、BX、CX、DX、SI、DI、SP、BP、 IP、CS、SS、DS、ES、PSW。
2.1 通用寄存器


一个16位寄存器可以存储一个16位的数 据。(数据的存放情况) 一个16位寄存器所能存储的数据的最大 值为多少? 答案:216-1。
2.1 通用寄存器


8086上一代CPU中的寄存器都是8位的; 为保证兼容性,这四个寄存器都可以分 为两个独立的8位寄存器使用。 AX可以分为AH和AL; BX可以分为BH和BL; CX可以分为CH和CL; DX可以分为DH和DL。 8086CPU的8位寄存器存储逻辑
2.6 8086CPU给出物理地址的方法

8086CPU采用一种在内部用两个16位 地址合成的方法来形成一个20位的物 理地址。 8086CPU相关部件的逻辑结构

地址加法器

地址加法器合成物理地址的方法: 物理地址=段地址×16+偏移地址 物理地址=段地址×10H+偏移地址 例如: 8086CPU访问地址为123C8H的内存单元
2.3 几条汇编指令
1
汇编指令不区分大小写
2.3 几条汇编指令

CPU执行下表中的程序段的每条指令后, 对寄存器中的数据进行的改变。
2.3 几条汇编指令
地址寄存器

包括指针和变址寄存器SI、DI、SP、 BP四个16位寄存器。顾名思义,它们 可用来存放存储器的偏移地址。另外, 它们也可以作为通用寄存器用。严格 地说,用来存放存储器偏移地址的寄 存器都应该叫地址寄存器,如BX基址 寄存器、IP指令指针寄存器等。
2.5 16位结构的CPU

概括的讲,16位结构描述了一个CPU具有 以下几个方面特征:

1、运算器一次最多可以处理16位的数据。 2、寄存器的最大宽度为16位。 3、寄存器和运算器之间的通路是16位的。


2.6 8086CPU给出物理地址的方法


8086有20位地址总线,可传送20 位地址,寻址能力为1M。 8086内部为16位结构,它只能传送 16位的地址,表现出的寻址能力却 只有64K。
通用寄存器
数据寄存器(AX,BX,CX,DX) 地址指针寄存器(SP,BP) 变址寄存器(SI,DI)
5
2.1 通用寄存器



8086CPU所有的寄存器都是16位的, 可以存放两个字节。 AX、BX、CX、DX 通常用来存放一般 性数据被称为通用寄存器。 下面以AX为例,我们看一下寄存器的 逻辑结构。

由段地址×16引发的讨论

溢出标志
方 向 标 志
中断标志 跟踪标志 符号标志 零标志 奇偶标志 进位标志 辅助进位标志


例1 两个二进制数相加运算,有关标志 位自动发生变化。 10011010 + 01001011 11100101 CPU会自动地把标志位设为:CF=0, SF=1,ZF=0,OF=0,即无进位,结 果为负数,结果不为0,没有溢出。



控制寄存器
IP 指令指针寄存器:用来存放代码段中的偏移地址, 指出当前正在执行指令的下一条指令所在单元的偏 移地址。 FLAGS标志寄存器:其中的某位代表CPU的一个标 志,最低位为D0,最高位为D15。8086CPU的标 志寄存器共有9个标志,分别为6个条件码标志和3 控制标志。其含义如下:
2.2 字在寄存器中的存储

一个字可以存在一个 16 位寄存器中, 这个字的高位字节和低位字节自然 就存在这个寄存器的高 8 位寄存器 和低8位寄存器中。
关于数制的讨论


由于一个内存单元可以存放 8位数据, CPU中的寄存器又可存放 n 个 8位数据。 也就是说,计算机中的数据大多 是由1~N个8位数据构成的。 用十六进制来表示数据可以直观的看 出这个数据是由哪些8位数据构成的。
2.1 通用寄存器

以AX为例,8086CPU的16位寄存器分 为两个8位寄存器的情况:
2.1 通用寄存器



AX 的低 8 位( 0 位 ~7 位)构成了 AL寄存 器,高 8 位( 8 位 ~15 位)构成了 AH 寄 存器。 AH和AL寄存器是可以独立使用的8位寄 存器。 8086CPU的8位寄存器数据存储情况 一个 8 位寄存器所能存储的数据的最大 值是多少? 答案:28-1。
《汇编语言》课件
第2章 寄存器(CPU工作原理)





2.1 通用寄存器 2.2 字在寄存器中的存储 2.3 几条汇编指令 2.4 物理地址 2.5 16位结构的CPU 2.6 8086CPU 给出物理地址 物理地址”的本质含义 2.8 段的概念 2.9 段寄存器 2.10 CS和IP 2.12 代码段

SI 源变址寄存器,可用于存放源缓 冲区的偏移地址。 DI 目的变址寄存器,可用于存放目 的缓冲区的偏移地址。

SP 堆栈指针寄存器,用于指出堆栈
区的栈顶的偏移地址。
BP 基址指针寄存器,用于指出堆栈
区的某个单元的偏移地址。
段寄存器

CS 代码段寄存器,用于指出存放程 序的代码段的段地址。 DS 数据段寄存器,用于指出存放数 据的数据段的段地址。 ES 附加段寄存器,用于指出存放附 加数据的附加段的段地址。 SS 堆栈段寄存器,用于指出堆栈区 的堆栈段的段地址。
相关文档
最新文档