《汇编语言》寄存器物理地址(第二章第二节)解析
汇编语言寄存器和指令操作的整理

与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工作原理)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)通⽤寄存器数据寄存器EAX(32位) AX(16位) AH(8位)(⾼位) AL(8位)(低位)累加器EBX(32位) BX(16位) BH(8位)(⾼位) BL(8位)(低位)基址变址ECX(32位) CX(16位) CH(8位)(⾼位)CL(8位)(低位)计数器EDX(32位) DX(16位) DH(8位)(⾼位) DL(8位)(低位)数据指针或变址寄存器ESP(32位) SP(16位)堆栈指针寄存器EBP(32位) BP(16位)基址指针寄存器EDI(32位) DI(16位)⽬的变址寄存器ESI(32位) SI(16位)源变址寄存器(2)专⽤寄存器EIP(32位) IP(16位)指令指针寄存器EFLAGS(32位) FLAGS(16位)标志寄存器ESP (32位) SP(16位)堆栈指针寄存器2、标志位的符号表⽰、3、段寄存器CS(16位)代码段 DS(16位)数据段SS(16位)堆栈段 ES(16位)附加段4、段寄存器和相应存放偏移地址的寄存器之间的默认组合第三章1、七种寻址⽅式(举例)⽴即寻 MOV AX,3069H寄存器寻 MOV AL,BH在内存中的五种寻址直接寻 MOV AX,[2000H]寄存器间接寻 MOV AX,[BX]寄存器相对寻 MOV AX,COUNT[SI] 或者 MOV AX,[SI+COUNT](不推荐) 基址变址寻址 MOV AX,[BP][DI]相对基址变址寻址 MOV AX,MASK[BX][SI]2、指令系统I.数据传送指令(1)通⽤数据传送指令MOV 传送MOVSX 带符号扩展传送⽤源操作数的符号位来填充⽬的操作数的⾼位数据位。
例:MOVSX EAX,CL把CL寄存器中的8位数,符号扩展为32位数,送到EAX寄存器中。
MOVZX 带零扩展传送恒⽤0来填充⽬的操作数的⾼位数据位例:MOVZX DX,AL把AL寄存器中的8位数,零扩展成16位数,送到DX寄存器中。
图文详解通俗易懂的汇编语言寄存器

图⽂详解通俗易懂的汇编语⾔寄存器⽬录认识寄存器计算机架构中的寄存器通⽤寄存器AX 寄存器BX 寄存器CX 寄存器DX 寄存器索引寄存器状态和控制寄存器物理地址什么是段段寄存器CS 寄存器什么是 Code SegmentDS 寄存器栈栈和 SS 寄存器栈顶越界问题下⾯我们就来介绍⼀下关于寄存器的相关内容。
我们知道,寄存器是 CPU 内部的构造,它主要⽤于信息的存储。
除此之外,CPU 内部还有运算器,负责处理数据;控制器控制其他组件;外部总线连接CPU 和各种部件,进⾏数据传输;内部总线负责 CPU 内部各种组件的数据处理。
那么对于我们所了解的汇编语⾔来说,我们的主要关注点就是寄存器。
为什么会出现寄存器?因为我们知道,程序在内存中装载,由 CPU 来运⾏,CPU 的主要职责就是⽤来处理数据。
那么这个过程势必涉及到从存储器中读取和写⼊数据,因为它涉及通过控制总线发送数据请求并进⼊存储器存储单元,通过同⼀通道获取数据,这个过程⾮常的繁琐并且会涉及到⼤量的内存占⽤,⽽且有⼀些常⽤的内存页存在,其实是没有必要的,因此出现了寄存器,存储在 CPU 内部。
认识寄存器寄存器的官⽅叫法有很多,Wiki 上⾯的叫法是Processing Register,也可以称为CPU Register,计算机中经常有⼀个东西多种叫法的情况,反正你知道都说的是寄存器就可以了。
认识寄存器之前,我们⾸先先来看⼀下 CPU 内部的构造。
CPU 从逻辑上可以分为 3 个模块,分别是控制单元、运算单元和存储单元,这三部分由 CPU 内部总线连接起来。
⼏乎所有的冯·诺伊曼型计算机的 CPU,其⼯作都可以分为5个阶段:取指令、指令译码、执⾏指令、访存取数、结果写回。
取指令阶段是将内存中的指令读取到 CPU 中寄存器的过程,程序寄存器⽤于存储下⼀条指令所在的地址指令译码阶段,在取指令完成后,⽴马进⼊指令译码阶段,在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进⾏拆分和解释,识别区分出不同的指令类别以及各种获取操作数的⽅法。
汇编语言之寄存器(详细介绍)

汇编语言之寄存器(详细介绍)1、寄存器32位寄存器有16个,分别是:4个数据寄存器(EAX、EBX、ECX、EDX)。
2个变址和指针寄存器(ESI和EDI);2个指针寄存器(ESP和EBP)。
6个段寄存器(ES、CS、SS、DS、FS、GS)。
1个指令指针寄存器(EIP);1个标志寄存器(EFlags)。
2、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位通用寄存器:EAX、EBX、ECX和EDX。
对低16位数据的取存,不会影响高16位的数据,这些低16位寄存器分别命名为AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:ah~al、BX:bh~bl、CX:ch~cl:DX:dh~dl)。
每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可合可分”的特性,灵活地处理字/字节的信息。
AX和al通常称为累加器,用累加器进行的操作可能需要更少时间,累加器可用于乘、除、输入/输出等操作,它们的使用频率很高。
BX称为基地址寄存器,它可作为存储器指针来使用。
CX称为计数寄存器,在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用cl来指明位移的位数。
DX称为数据寄存器,在进行乘、除运算时,它可以为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据、保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
3、变址寄存器32位CPU有2个32位通用寄存器ESI和EDI,其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
汇编学习笔记之寄存器

寄存器8086/8088 包括四个16为数据寄存器,两个16为指针寄存器,两个16位变址寄存器,一个16为指令指针,四个16位段寄存器,一个16位标志寄存器,这14个寄存器分为四组通用寄存器:AX BX CX DX 通用寄存器SP 堆栈指针BP 基址指针SI 源地址DI 目的地址SP BP SI DI 也为通用寄存器控制寄存器:IP 指令指针FLAG 标志寄存器段寄存器:CS 代码段寄存器DS 数据段寄存器SS 栈段寄存器ES 附加段寄存器1. 标志寄存器16位的标志寄存器FLAG包含九个标志,分为两组第一组:6个主要受加减运算和逻辑运算结果的影响,成为运算结果标志第二组:3个不受运算结果的影响,称为状态控制标志运算结果标志:1> 进位标志CF (Carry Flag)主要用于反映运算是否产生进位或借位,如果运算结果的最高位(字操作数为第15位,字节操作数为第7位)产生一个进位或借位,则CF被置为1,否则置为0,移位指令把操作数的最高位或最地位移入CF。
在进行多字节数的加减运算时,要使用到该标志。
在比较无符号整数的大小是,要使用到该标志。
2> 零标志ZF (Zero Flag)用于反映运算结果是否为0,如果结果为0 ,则置ZF为1,否则置为0.在判断运算结果是否为0时,用到该标志。
3> 符号标志SF(Sign Flag)用于反映运算结果的符号位,SF与运算结果的最高位相同,如果运算结果的最高位为1,则SF 置为1,否则被清0,在8086/8088中,有符号数采用补码的形式表示,所以SF反映运算结果的符号,如果运算结果为正,则SF为正(补码最高位为0),则被置0,运算结果为负,置为14> 溢出标志OF (OverFlow Flag)反映有符号数加减运算是否溢出,如果运算结果超出了8位或16位有福好的数的表示范围,即在字节运算时大于127或小于-128,在字的运算时大于65535或小于–65536,称为溢出溢出时OF =1;未溢出OF =0;5> 奇偶标志PF (Parity Flag)奇偶标志反映运算结果中1 的个数,如果1的个数为偶数,则PF =1 ,否则PF =0利用奇偶标志可以进行奇偶校验检查。
汇编语言存储及寄存器原理解析

汇编语⾔存储及寄存器原理解析这篇⽂章主要介绍了汇编语⾔存储及寄存器原理解析,⽂中通过⽰例代码介绍的⾮常详细,对⼤家的学习或者⼯作具有⼀定的参考学习价值,需要的朋友可以参考下⼀个16位寄存器可以存放⼀个字(16位)或者⼀个字节(8位),当存放⼀个字节的时候只需要⼀个内存单元(内存单元是以字节为单位的,8位),⽽存放⼀个字需要两个内存单元,这样存放⼀个字就需要两个连续的内存单元,这个16位的字,⾼位存放在⾼地址,低位存放在低地址。
内存地址内存数据20H 14EH 212H 300H对于字来说0就是低地址单元,1是⾼地址单元,则字型数据4E20H 的低地址位20存放在0号单元,⾼地址位4E 存放在⾼地址单元,因为它的起始地址为0,⼜可以称作0地址字单元。
通过前⾯学过的知识我们可以知道当CPU 想要对⼀个内存单元进⾏操作时,必须知道它的地址,要知道内存单元的地址就要知道它的段地址和偏移地址,在8086 CPU 中,DS 寄存器就是⽤来存放段地址的,执⾏指令的时候,CPU 会⾃动读取DS 中的数据为内存单元的段地址,使⽤[偏移地址]来表⽰偏移地址,假设DS 寄存器中此时存放的是1000H ,那么mov al,[0]就表⽰将10000H (物理地址=段地址x16+偏移地址)地址上存放的数据存到al 中。
如果想要修改DS 寄存器中的值,那么直接使⽤mov 指令将数字存到DS 寄存器中是不⾏的,只能先将值存到⼀个寄存器中,再使⽤mov 指令将这个寄存器中的值存到DS 中,例:12mov bx,1000H mov ds,bxmov ax,[0]这样就将地址为10000H 处的值存放到ax 寄存器中了,也就是将下表中的4E20H 存放到ax 中。
(ax 是⼗六位,⼀个字,两个字节)内存地址内存数据20H 14EH 212H 300H所以⼀个内存单元地址的确定可以通过段地址DS+[偏移地址]进⾏确定。
顾名思义,add 指令就是⽤来做加法操作的,sub 指令就是⽤来做减法操作的,例如add ax,8这条指令相当于C 语⾔中的ax =ax + 8,sub ax,8相当于C 语⾔中的ax = ax - 8。
《汇编语言》第二章2

2.8 段的概念
错误认识:
内存被划分成了一个一个的段,每一个段有一 个段地址。
其实:
内存并没有分段,段的划分来自于CPU,由于 8086CPU用“(段地址×16)+偏移地址=物 理地址”的方式给出内存单元的物理地址, 使得我们可以用分段的方式来管理内存。
更多精彩资编程源请关注:
2.12 代码段
对于8086PC机,在编程时,可以根据需 要,将一组内存单元定义为一个段。
可以将长度为 N( N≤64KB )的一组代 码,存在一组地址连续、起始地址为 16 的倍数的内存单元中,这段内存是用来 存放代码的,从而定义了一个代码段。
更多精彩资编程源请关注:
问题分析:CPU运行的流程
内存中存放的机器码和对应汇编指令情况: (初始:CS=2000H,IP=0000H)
更多精彩资编程源请关注:
问题分析结果:
(1)mov ax,6622 (2)jmp 1000:3 (3)mov ax,0000 (4)mov bx,ax (5)jmp bx (6)mov ax,0123H (7)转到第(3)步执行
更多精彩资编程源请关注:
2.10 CS和IP
在任何时候,CPU将CS、IP中的内容当作 指令的段地址和偏移地址,用它们合成 指令的物理地址,到内存中读取指令码, 执行。 如果说,内存中的一段信息曾被CPU执行 过的话,那么,它所在的内存单元必然 被CS:IP指向过。
更多精彩资编程源请关注:
2.9节~2.12节 小结(续)
3、8086CPU的工作过程:
汇编语言-寄存器

汇编语⾔-寄存器2.1 通⽤寄存器AX, BX, CX, DX 这4个寄存器通常⽤来存放⼀般性的数据,被称为通⽤寄存器。
8086CPU这5个寄存器都可以分为两个可以独⽴使⽤的8位寄存器来⽤:AX可分为AH和AL;BX可分为BH和BL;CX可分为CH和CL;DX可分为DH和DL;AX的低8位(0 - 7)构成AL寄存器,⾼8位(8 - 15)构成了AH寄存器。
AH和AL寄存器是可以独⽴使⽤的8位寄存器。
2.2 字在寄存器中的存储考虑兼容性8086CPU可以⼀次性处理⼀下两种尺⼨的数据。
字节:记为byte,⼀个字节由8个bit组成,可以存在8位寄存器中。
字:记为word,⼀个字由俩个字节组成,这两个字节分别称为这个字的⾼位字节和低位字节。
2.3 ⼏条汇编指令汇编指令控制CPU完成的操作⽤⾼级语⾔表述MOV ax,18将18送⼊寄存器ax ax = 18ADD ax,8将寄存器ax中的数值加上8ah = ax + 8注意指令的两个操作对象的位数应当是⼀致的。
例:ax为16位寄存器,只能放4位16进制位数,所以多余的⾼位会丢失。
2.4 物理地址CPU访问内存单元时,要给出内存单元的地址。
所有内存单元构成的存储空间时⼀个⼀维的线性空间,每⼀个内存单元在这个空间中都有唯⼀的地址,我们将这个唯⼀的地址称为物理地址。
CPU通过地址总线送⼊存储器,必须是⼀个内存单元的物理地址。
在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。
不同的CPU可以有不同的形成物理地址的⽅式。
物理地址 = 段地址 × 16 + 偏移地址段地址×16 就是左移4位24 = 16。
4位2进制等于⼀位16进制所以16进制向左移⼀位。
段地址×16必然是16的倍数,所以⼀个段的起始地址也是16的倍数;偏移地址位16位,16位地址的寻址能⼒为64kb,所以⼀个段的最⼤为64kb。
64kb = 216 / 1024; 216 = 65536 byte;2.5 段寄存器8086CPU有4个段寄存器:CS, DS, SS, ES。
《汇编语言第四版笔记》

《汇编语⾔第四版笔记》第⼀章基础知识知识点总线宽度:该总线有N个根线,则可以说这个总线的宽度为N主板:主板上有⼀些重要器件,器件通过总线连接。
这些器件有CPU,存储器,外围芯⽚组,拓展插槽等。
拓展插槽⼀般插有RAM内存条和各类接⼝卡接⼝卡:CPU通过总线向接⼝卡发送命令,接⼝卡根据CPU命令对外设进⾏控制从存储器的功能和连接上,可以分为以下⼏类随机存储器RAM:主随机存储器⼀般由两个位置上的RAM组成:装在主板上的RAM和插在拓展槽的RAM装有BIOS(基本输⼊输出系统)的ROM:BIOS是由主板和各类接⼝卡的⼚商提供的软件系统,可以通过它对硬件系统进⾏基本输⼊输出接⼝卡上的RAM:某些接⼝卡需要存储⼤批量数据,上⾯就装有RAM,⽐如显卡⾥的显存CPU把所有的存储器看作⼀个假想的逻辑存储器(⼜称内存地址空间)去使⽤内存地址空间的⼤⼩受CPU地址总线宽度的限制第⼆章寄存器知识点通⽤寄存器:⽤来存放⼀般数据的寄存器,如AX,BX,CX,DX因为以前的寄存器都是⼋位的,为了保证兼容,8086的16位寄存器可以拆分成两个独⽴的寄存器单独使⽤。
如:AX可以拆分为AH和AL因此8086CPU的寄存器可以⼀次处理两种尺⼨的数据:字节(8位)和字(16位)对于汇编指令 add al,93Hal是当作⼀个单独的寄存器来使⽤的,如果结果溢出,⾼位并不会放⼊ah寄存器⼀个合法的汇编指令,指令的两个操作对象位数应该是⼀致的,以下指令不合法: mov ax,bl (8位寄存器和16位寄存器之间传数据mov al,20000 (8位数据存不了200008086CPU是16位的,但是地址总线是20位的,不能让这16位字长限制了寻址范围,因此8086CPU采⽤两个16位地址合成⼀个20位物理地址的⽅法两个16位地址⼀个是段地址,另⼀个是偏移地址,通过⼀个加法器算出物理地址地址计算公式:段地址*16+偏移地址=物理地址含义:⽤⼀个基础地址(段地址*16(乘16在⼗六进制⾥就是左移⼀位))和⼀个相对于基础地址的偏移地址相加,给出内存单元的物理地址既然是通过相对的关系得出物理地址,所以⼀个物理地址可以有多种表⽰形式CPU可以将若⼲连续的内存单元看作⼀个段。
汇编寄存器功能详解

汇编寄存器功能详解汇编语言是一种底层语言,与计算机硬件直接交互。
在汇编语言中,寄存器是一组特殊的存储单元,用于暂时存储数据或指令。
它们在处理器中的位置较为接近,可以快速访问。
在汇编语言中,寄存器被分为通用寄存器、数据段寄存器、指令指针寄存器、标志寄存器等几个类别,每个寄存器都有特定的功能。
一、通用寄存器通用寄存器是CPU中最常见的寄存器,用于存放临时数据和计算的结果。
通用寄存器是命名的,有固定的用途,分别是AX(累加寄存器)、BX(基址寄存器)、CX(计数寄存器)、DX(数据寄存器)、SI(源变址寄存器)、DI(目的变址寄存器)、SP(堆栈指针寄存器)和BP(基址指针寄存器)。
1. AX寄存器(Accumulator Register):是累加器寄存器,用于存放算术和逻辑运算的结果。
在一些特定指令中,它还可以充当乘法或除法运算的除数或被除数。
2. BX寄存器(Base Register):是基址寄存器,通常用于存放数据内存的基址。
它也可以充当累加器或存放地址偏移量的累加器。
3. CX寄存器(Count Register):是计数寄存器,在一些循环指令中用于记录循环迭代的次数。
此外,它还可以充当数据传输或移位指令的位数计数器。
4. DX寄存器(Data Register):是数据寄存器,通常用于存放数据操作的源数据或目标数据。
它也可以存放除法运算的余数或乘法运算的高位结果。
5. SI寄存器(Source Index Register):是源变址寄存器,用于存放源数据的偏移地址。
在字符串或数组的操作中,它通常与DI寄存器共同使用。
6. DI寄存器(Destination Index Register):是目的变址寄存器,用于存放目标数据的偏移地址。
在字符串或数组的操作中,它通常与SI寄存器共同使用。
7. SP寄存器(Stack Pointer Register):是堆栈指针寄存器,用于指向栈顶位置。
汇编语言之寄存器详解

汇编语⾔之寄存器详解上图是cpu中三个组成部分:寄存器运算器控制器。
其中寄存器是cpu中程序员⽤指令读取的唯⼀部件(调剂界⾯中的寄存器窗⼝)。
如果是16位cpu,就是处理,传输,暂时存储的数据长度都是16位。
所以16位的cpu,寄存器也是16位。
《汇编语⾔》这本书中使⽤的是16位寄存器位例⼦来讲的,所以下⾯的内容也都是16位寄存器的。
ps:查看处理器型号以及⼏核cpu,我现在的电脑4核64位寄存器名字16位的寄存器有:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。
32位寄存器就是前⾯加个E,64位前⾯加个R。
vs中解决⽅案平台选择x86——32位寄存器,可以存数32位⼆进制数据vs中解决⽅案平台选择x64——64位各种类型的寄存器在下⾯介绍各个寄存器的时候,都⽤16位的寄存器作为介绍。
同种类型的32位和64位寄存器功能⼀样,只是处理的数据宽度更⼤了。
同时介绍⼀些汇编指令(汇编指令不区分⼤⼩写)。
1.通⽤寄存器——AX BX CX DX作⽤:存放⼀般性的数据传送指令:movemov 转移指令,⼤部分的寄存器都可以⽤这个指令来改变其值。
常⽤的有:不仅限于下⾯⼏种1.move 某⼀个合法寄存器某⼀个合法寄存器将⼀个寄存器的内容传送到另⼀个寄存器⽐如:move 段寄存器(ds,cs),通⽤寄存器——段寄存器的值不能直接通过数据来设定2.move 某⼀个合法寄存器数据将数据直接传⼊寄存器3.move 某⼀个合法寄存器 [内存单元的偏移地址]将⼀个内存单元中的内容存⼊⼀个寄存器中,后⾯将DS寄存器的时候再讲。
算术运算指令:add,subadd 寄存器,数据/寄存器/内存单元add 内存单元,寄存器(如何记住⼀个⼆进制数据左移1位相当于乘以2,左移n位,相当于乘以2的N倍:⼀个10进制的数左移1位,相当于乘以10,左移n位,相当于乘以10的N倍。
)2.CS,IP——代码段CS(code)IP(instruction pointer)是最关键的两个寄存器,代码段寄存器和指令指针寄存器,他们的内容提供了cpu要执⾏指令的地址。
汇编语言入门汇编指令及寄存器详解教程

汇编语言入门汇编指令及寄存器详解教程汇编语言是一种低级编程语言,与计算机硬件直接相关。
它使用一组基本的指令和寄存器来编写程序。
本篇教程将介绍汇编语言的基本指令和寄存器,帮助读者入门汇编语言编程。
一、汇编语言概述及基本概念汇编语言是机器语言的助记符表示。
它采用英文单词来表示机器指令,以便程序员更容易理解和编写。
汇编语言程序需要通过汇编器将其转换为机器语言,然后可以在计算机上运行。
1.1 汇编指令汇编指令是汇编语言中的基本指令,用于执行计算机的各种操作。
常见的汇编指令包括数据传输指令、算术运算指令、逻辑运算指令和控制转移指令等。
下面介绍几个常用的汇编指令:1.1.1 MOV指令MOV指令用于将数据从一个位置复制到另一个位置。
语法格式如下:MOV 目标操作数, 源操作数其中,目标操作数表示数据的目的位置,源操作数表示数据的来源位置。
例如,MOV AX, BX表示将寄存器BX中的数据复制到寄存器AX中。
1.1.2 ADD指令ADD指令用于实现加法运算。
语法格式如下:ADD 目标操作数, 源操作数其中,目标操作数表示运算结果的存储位置,源操作数表示参与加法运算的数据。
例如,ADD AX, BX表示将AX寄存器中的数据与BX 寄存器中的数据相加,并将结果存储在AX寄存器中。
1.1.3 JMP指令JMP指令用于实现无条件跳转。
语法格式如下:JMP 目标地址其中,目标地址表示跳转的目标位置。
例如,JMP 100表示跳转到地址为100的指令处执行。
1.2 寄存器寄存器是一种用于存储和处理数据的硬件组件。
在汇编语言中,寄存器被广泛应用于各种数据传输和运算操作。
下面介绍几个常用的寄存器:1.2.1 通用寄存器通用寄存器是汇编语言中最常用的寄存器,用于存储数据和执行运算。
常见的通用寄存器有AX、BX、CX和DX等。
1.2.2 段寄存器段寄存器用于存储程序的段地址。
在实模式下,8086处理器有4个段寄存器:CS、DS、ES和SS。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 堆栈段寄存器,用于指出堆栈区 的堆栈段的段地址。