汇编寄存器简介

合集下载

汇编语言——寄存器

汇编语言——寄存器

汇编语⾔——寄存器⼀、栈的基本概念栈有两个基本的操作:⼊栈和出栈。

⼊栈:将⼀个新的元素放到栈顶;出栈:从栈顶取出⼀个元素。

栈顶的元素总是最后⼊栈,需要出栈时,⼜最先被从栈中取出。

栈的操作规则:后进先出8086CPU提供的栈机制8086CPU提供⼊栈和出栈指令:(最基本的)PUSH(⼊栈)POP (出栈)push ax:将寄存器ax中的数据送⼊栈中;pop ax :从栈顶取出数据送⼊ax。

push和pop指令也可以在内存和寄存器传输数据(以栈的形式)8086CPU的⼊栈和出栈操作都是以字为单位进⾏的。

⽰例:1 2 3 4 5 6 7 8 9 10 11假设将10000H~1000FH这段内存当作栈来使⽤(其实CPU并不知道这段是代码段,数据段还是栈段,都是⼈为设定的)下⾯⼀段指令的执⾏过程:mov ax,0123H# AX=0123Hpush ax # 将AX的值推⼊栈中mov bx,2266H# BX=2266Hpush bx # 将BX的值推⼊栈中mov cx,1122H# CX=1122Hpush cx # 将CX的值推⼊栈中pop ax # 将栈顶的2个内存单元取出放到AX寄存器中,AX=1122Hpop bx # 将栈顶的2个内存单元取出放到BX寄存器中,BX=2266Hpop cx # 将栈顶的2个内存单元取出放到CX寄存器中,CX=0123H那么问题来了,在执⾏push和pop的时候,如何知道哪个单元是栈顶单元?8086CPU中,有两个寄存器:段寄存器SS 存放栈顶的段地址寄存器SP 存放栈顶的偏移地址任意时刻,SS:SP指向栈顶元素。

⼆、push和pop指令push 指令的执⾏过程在执⾏push ax指令时,主要做了⼀下2件事(1)先将SP=SP–2(2)将ax中的内容送⼊SS:SP指向的内存单元处,SS:SP此时指向新栈顶。

pop 指令的执⾏过程在执⾏pop ax指令时,主要做了⼀下2件事(1)先将SS:SP指向的内存单元处的数据送⼊ax中;(2)SP = SP+2,SS:SP指向当前栈顶下⾯的单元,以当前栈顶下⾯的单元为新的栈顶。

汇编语言语法介绍

汇编语言语法介绍

汇编语言语法介绍汇编语言是一种底层编程语言,主要用于编写特定硬件体系结构的程序。

与高级语言相比,汇编语言更接近机器语言,更加直接控制硬件。

本文将介绍汇编语言的基本语法,包括指令、寄存器、标志位等内容。

一、指令集汇编语言通过一系列指令来完成特定的任务。

指令是汇编程序的最基本单元,它们直接对应着机器语言指令。

指令可以完成诸如数据传输、算术运算、逻辑运算等操作。

每个机器体系结构都拥有自己的指令集,汇编语言程序需要按照特定的指令集编写。

二、寄存器寄存器是汇编语言中的一种特殊内存单元,可以暂时存放数据或者指令。

不同的机器体系结构有不同的寄存器个数和名称,常见的有通用寄存器、指令指针、栈指针等。

在编写汇编语言程序时,我们可以通过操作寄存器来实现数据的存取和处理。

三、标志位标志位是一组单个位的寄存器,用于存储特定的状态信息。

例如,进位标志位可以记录运算是否产生了进位。

在条件判断和程序控制中,我们可以使用标志位来决策是否执行某个操作或者跳转到某个位置。

四、语法规则汇编语言有一套自己的语法规则,下面是一些常见的规则和语法:1. 指令和操作数都在同一行,用空格或者制表符进行分隔。

2. 指令和操作数的顺序往往对应着操作的先后顺序。

3. 注释可以使用分号(;)进行标记,位于指令之后或者单独一行。

4. 标号用于标识某个地址或者位置,通常以字母或者下划线开头。

5. 数据的定义可以使用众多的伪指令,如DB、DW、DD等。

6. 指令可以按照标准格式进行组织,包括标号、指令、操作数和注释。

五、示例程序下面是一个简单的示例程序,用于将两个数相加并存储结果。

```MOV AX, 5 ; 将值5移动到寄存器AXMOV BX, 3 ; 将值3移动到寄存器BXADD AX, BX ; 将AX和BX的值相加MOV CX, AX ; 将结果存储在寄存器CX中```六、总结汇编语言是一种底层的编程语言,需要直接操作硬件。

本文介绍了汇编语言的基本语法,包括指令、寄存器、标志位等内容。

汇编系列9-通用寄存器

汇编系列9-通用寄存器

汇编系列9-通⽤寄存器1、寄存器计算机有三个地⽅可以存储数据,分别是· CPU,内存,硬盘。

运⾏速度 CPU > 内存 > 硬盘。

价格也是CPU⽐较贵。

寄存器,就是CPU中⽤来存储数据的地⽅。

寄存器的⼤⼩取决于CPU的位数。

32位的CPU:有三种寄存器类型,分别是 8位 16位 32位64位的CPU:有四种寄存器类型,分别是 8位 16位 32位 64位05年后买的电脑,基本都是64位的。

为何64位已经普及还要学习32位的?因为硬件发展历史,64位向下兼容,由32位发展⽽来,⽆⾮是新增寄存器,指令都是⼀样的。

直接学习64位的会⽐较吃⼒,故此我们先学习32位的。

⽽且还要很多程序是32位的。

2、通⽤寄存器32位通⽤寄存器,通⽤寄存器,想存什么就存什么。

不能超过32位,超过部分会被丢弃。

EIP也是寄存器,但它⾥⾯的值是CPU下次要执⾏的指令地址,不能⽤做他⽤,故此不是通⽤寄存器。

EAX:⼀般⽤来存储返回值ECX: ⽤来存储计数值,可结合rep指令EDX:EBX:ESP:栈顶指针寄存器EBP:栈底指针寄存器ESI:存储复制时的原地址,结合move moves指令EDI:存储复制时的⽬标地址,结合move moves指令3、MOV指令 ⽤来移动数据的。

汇编就是寄存器与寄存器之间,或者寄存器与内存之间数据的来回流动。

想要学好汇编,只要记住⼏个关键词就可以了。

寄存器,内存,指令。

围绕这三点就可以把汇编学好。

汇编好理解,好做实验。

MOV EAX,1 将⼀个⽴即数1,存放到寄存器EAX中。

MOV EDX,EAX 将寄存器EAX中的值,存放到EDX中。

实验--初始寄存器值,全部设为FFFF FFFF。

汇编语言之寄存器(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(溢出标志位)等。

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

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

汇编常用寄存器

汇编常用寄存器

BX 存储器指针
CX 串操作、循环控制的Βιβλιοθήκη 数器 CL 移位操作的计数器
DX 字的乘、除运算,间接的输入输出
指针寄存器
主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式 ,为以不同的地址形式访问存储单元提供方便。
变址寄存器
SI 存储器指针、串指令中的源操作数指针
累加器AX 可分为 AH AL
基地址寄存器 BX 可分为 BH BL
计数器 CX 可分为 CH CL
数据寄存器 DX 可分为 DH DL
8086CPU中的AX、BX、CX、DX(通用寄存器) 都只可以分为2个独立的8位寄存器来用。
段地址寄存器:
代码段 CS
数据段 DS
栈段 ES
ES 附加段寄存器
CS 代码段寄存器
SS 堆栈段寄存器
DS 数据段寄存器
新增加的
段寄存器 FS 附加段寄存器
GS 附加段寄存器
DI 存储器指针、串指令中的目的操作数指针
BP 存储器指针、存取堆栈的指针
SP 堆栈的栈顶指针
指令指针
IP/EIP
标志位寄存器 Flag/EFlag
32位
CPU的
段寄存器
16位CPU的
段寄存器
内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
附加段 SS
专用寄存器:
基础指针 BP
堆栈指针 SP
源变址 SI
目的变址 DI
指令指针寄存器 IP
标志寄存器
数据寄存器

汇编语言的指令和寄存器

汇编语言的指令和寄存器
HF是把FLAGS的低八位送到AH中
5.XLAT是(查表转换指令)把BX+AL为偏移的字节指向的值传送到AL。DS位段偏移量。
6.MOVSX(符号传送指令)8到16,把高8位全弄成符号位。
7.MOVZX(领扩展指令)8到16,把高8位全弄成0;
8.BSWAP(字节交换指令)特指32位的数。针对本个数。
4》结果的特征将放在FLAGS中:
1.CF:进位标志。
2.PF:奇偶标志。
3.AF:辅助进位标志。
4.ZF:零标志。
5.OF:溢出标志。
(5)奇偶标志 PF
(6)辅助进位标志AF
2>.状态控制标志
(1)方向标志DF
(2)中断允许标志IF
(3)追踪标志TF
3》1.lea是送偏移量;到寄存器
2.LDS是把一个32位的数,分别送到DS和BX中,LDS BX,list
3.SAHF是把AH送到FLAGS的低八位中,
复习一下汇编的基础知识,主要是Intel 8086的CPU。16机器
1.通用寄存器
(1)数据寄存器
数据寄存器共有4个寄存器AX、BX、CX、DX,用来保存操作数或运算结果等信息。
AX寄存器称为累加器。使用频度最高,用于算术、逻辑运算以及与外设传送信息等。
BX寄存器称为基址寄存器。常用于存放存储器地址。
CX寄存器称为计数器。一般作为循环或串操作等指令中的隐含计数器。
DX寄存器称为数据寄存器。常用来存放双字数据的高16位,或存放外设端口地址。
(2)变址和指针寄存器
变址和指针寄存器包括SI、DI、SP、BP 4个16位寄存器,主要用于存放某个存储单元的偏移地址。

汇编语言中寄存器介绍

汇编语言中寄存器介绍

汇编语言中寄存器介绍寄存器是汇编语言中非常重要的概念,它们用于存储和操作数据。

在本文中,将介绍汇编语言中常用的寄存器,并详细解释它们的功能和用途。

1. 通用寄存器通用寄存器是最常用的寄存器,在汇编语言中使用频率较高。

通常有四个通用寄存器,分别是AX、BX、CX和DX。

这些寄存器既可用于存储数据,也可用于进行算术运算。

例如,将数据从内存加载到通用寄存器中,进行加法或减法运算,然后将结果存回内存。

2. 累加器寄存器累加器寄存器是AX寄存器的别名。

AX寄存器在处理循环和计数时非常有用。

它还可以用于存储需要频繁访问的数据,例如需要进行累加或累减的数值。

3. 基址寄存器基址寄存器是BX寄存器的别名。

它与偏移量配合使用,用于计算内存地址。

通常在存储大量数据的数组或缓冲区中使用。

4. 计数器寄存器计数器寄存器是CX寄存器的别名。

CX寄存器在处理循环时非常有用。

它可以作为循环计数器,用于控制循环的次数。

5. 数据寄存器数据寄存器是DX寄存器的别名。

它可以存储需要进行输入/输出操作的数据,例如从键盘读取的字符或向屏幕输出的字符。

数据寄存器还可以用于存放在算术运算中需要使用的常数。

6. 标志寄存器标志寄存器用于存储处理器运行过程中的状态信息,例如进位标志、零标志、符号标志等。

它们对于程序的条件分支非常重要,可以根据不同的标志位执行相应的操作。

7. 段寄存器段寄存器用于指示在内存中的位置。

在实模式下,由于地址总线的限制,内存地址仅能表示64KB。

因此,通过使用段寄存器,可以将内存地址拓展到1MB甚至更大。

常用的段寄存器有CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)和ES(附加段寄存器)。

8. 指令寄存器指令寄存器(IP)用于存储当前执行的指令在内存中的地址。

它是程序执行的关键寄存器之一,能够实现指令的顺序执行。

在汇编语言中,寄存器是程序设计中不可或缺的组成部分。

通过合理地使用和操作寄存器,能够提高程序的执行效率和性能。

汇编语言8086和8088中寄存器

汇编语言8086和8088中寄存器

1980年代,汇编语言8086和8088在个人电脑中广泛应用。

这两种语言使用16位和8位寄存器,这些寄存器是编程中不可或缺的组成部分。

接下来我将根据这两种汇编语言的寄存器,深入探讨其特性和用途,帮助你全面了解这一主题。

一、汇编语言8086和8088中寄存器的基本概念在汇编语言8086和8088中,寄存器是一种保存数据的特殊存储器。

它们用于存储指令中的临时数据和位置区域。

这两种汇编语言使用的寄存器包括通用寄存器、段寄存器和指令指针寄存器。

通用寄存器用于存储操作数和中间结果,段寄存器用于存储内存访问的段位置区域,指令指针寄存器用于存储当前执行指令的位置区域。

二、8086和8088中的通用寄存器1. AX寄存器AX寄存器是一个16位的累加器,用于存储算术运算的结果。

在8086和8088中,它可以分为AH和AL两个8位寄存器,分别存储较高位和较低位的数据。

2. BX寄存器BX寄存器是一个16位的基址寄存器,用于存储数据的基址。

在8086和8088中,它也可以分为BH和BL两个8位寄存器。

3. CX寄存器CX寄存器是一个16位的计数寄存器,用于存储循环次数。

在8086和8088中,它可以分为CH和CL两个8位寄存器。

4. DX寄存器DX寄存器是一个16位的数据寄存器,用于存储I/O端口的数据。

在8086和8088中,它也可以分为DH和DL两个8位寄存器。

三、8086和8088中的段寄存器1. CS寄存器CS寄存器是一个16位的代码段寄存器,用于存储当前执行代码段的基位置区域。

在8086和8088中,它存储着指向当前代码段的位置区域。

2. DS寄存器DS寄存器是一个16位的数据段寄存器,用于存储当前数据段的基位置区域。

在8086和8088中,它存储着指向当前数据段的位置区域。

3. SS寄存器SS寄存器是一个16位的堆栈段寄存器,用于存储当前堆栈段的基位置区域。

在8086和8088中,它存储着指向当前堆栈段的位置区域。

汇编语言之寄存器(详细介绍)

汇编语言之寄存器(详细介绍)

汇编语言之寄存器(详细介绍)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利用奇偶标志可以进行奇偶校验检查。

汇编入门 精髓(转)寄存器和寻址方式

汇编入门 精髓(转)寄存器和寻址方式

一汇编入门精髓(转)寄存器和寻址方式2010-03-20 13:01寄存器和寻址方式寄存器,在8086/8088里,有三组共13个16位寄存器.寄存器,从名字上看,可以知道,它就象书店的行包寄存处,寄存器的名字就象寄存处发给用户取回自已物件的标志牌子,表示物件的存放地址.寄存器的内部给构都相同,只不过是一个二字节或一字节的存储空间,别看他们小,作用可大了,所有电脑的运算,都要从他们过关,因为他们的处理速度快嘛.为了区分和准确运用,就要给他们进行科学的分组和起名.第一组,数据寄存器,AX,BX,CX,DX.其中,X表示一个未知数,那么这些寄存器都可以用来存放数据,ABCD,虽说都可以理解为一个顺序号,但是,A还是加法ADD的简称,所以AX叫累加器,B是基地址的简称,所以BX可以叫基地址寄存器,C是计数器的简称,所以CX可以叫做计数器.D是数据DATA的简称,所以DX可以叫数据寄存器.这四个寄存都可以按高八位和低八位分成两个寄存器:AH,AL,BH,BL,CH,CL,DH,DL.第二组,地址指示和变址寄存器,SI,DI,BP,SP.它们用来表示一个地址偏移,或用来表示一个地址的变化状况.SI,DI都可以表示变址,在串操作中,SI和DI表示源和目的操作数的指示器,快速记忆方法:SI联想饮水思源的思(谐音SI),DI联想目的(谐音DI).BP,SP的P表示堆栈专用,BP表示基地址专用,SP则是堆栈顶指示器.其中,BP,SI,DI还可以兼作数据寄存器.SP则只能和堆栈绑定.第三组,段寄存器,CS,SS,DS,ES.它们用来存放CPU可以直接访问的四个当前段的段首地址.CS代码段,SS堆栈段,DS数据段,ES附加段.其中,在表示地址时,CS和指令指示器IP绑定使用,SS 和BP绑定.DS为SI,DI,BX共用.第四组,指令指示器,IP,这是CPU自动引用的,表示下一次要从主存取出的指令的偏移.寻址方式寻址方式分为六种,(这是教材里讲的).1,立即寻址, 数据的本身在代码段.用于赋初值.2,直接寻址, 数据的偏移在代码段,用于变量名.3,寄存器寻址, 数据的本身在寄存器.用寄存器名表示.4,寄存器相对寻址, 数据的偏移在寄存器.注意:BP和SS绑定.DS为SI,DI,BX 共用.5,变址寻址, 数据的偏移在一个寄存器里,并要加上一个偏移量.注意:BP和SS绑定.DS为SI,DI,BX共用.6,基址加变址寻址, 数据的偏移放在两个寄存器中,并要加上一个偏移量.注意:BP和SS绑定.DS为SI,DI,BX共用.BX为DS段的基址专用.寻址方式是汇编语言的重点和难点。

汇编语言-寄存器

汇编语言-寄存器

汇编语⾔-寄存器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。

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

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

汇编语言寄存器和指令操作的整理汇编语言是一种与机器语言紧密相关的低级语言。

它使用寄存器和特定的指令操作来进行数据的加载、存储、运算和控制。

寄存器是位于CPU内部的高速存储器。

它们可以暂时存储数据,供CPU进行运算和操作。

汇编语言使用多个寄存器进行数据的临时存储和处理。

在x86架构的计算机系统中,常见的寄存器包括:1.通用寄存器:程序员可以随意使用的寄存器,用于存储临时数据和地址。

在32位模式下,共有8个32位通用寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP),在64位模式下,有16个64位通用寄存器(RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8~R15)。

2.段寄存器:用于存储段地址,分别包括代码段寄存器(CS)、数据段寄存器(DS)、附加段寄存器(ES)、栈段寄存器(SS)和指令指针寄存器(IP)。

3.标志寄存器:用于存储程序运行状态和执行结果的标志位,包括进位标志(CF)、零标志(ZF)、符号标志(SF)、溢出标志(OF)等。

除了寄存器,汇编语言还使用一些特定的指令操作来完成各种功能。

常见的指令操作包括:1.数据传输指令:用于将数据从一个位置(如寄存器、内存)传送到另一个位置。

常见的数据传输指令有MOV(将数据从源操作数传送到目标操作数)、LEA(加载有效地址)等。

2.算术运算指令:用于对数据进行加、减、乘、除等数学运算。

常见的算术运算指令有ADD(加法)、SUB(减法)、MUL(乘法)、IDIV(整数除法)等。

3.逻辑运算指令:用于对数据进行逻辑上的与、或、非、异或等运算。

常见的逻辑运算指令有AND(与运算)、OR(或运算)、NOT(取反运算)、XOR(异或运算)等。

4.控制指令:用于控制程序的流程和状态。

常见的控制指令有JMP(无条件跳转)、JZ(零标志跳转)、LOOP(循环执行)、CALL(调用子程序)等。

5.输入输出指令:用于与外部设备进行数据的输入和输出。

汇编语言中DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器介绍

汇编语言中DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器介绍

汇编语言中DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器介绍DS is called data segment register. It points to the segment of the data used by the running program. You can point this to anywhere you want as long as it contains the desired data.DS叫做段寄存器, 指向当前运行着的程序的数据段. 你可以把它指向任何你想要的地方, 只要那个地方有你想要的数据.ES is called extra segment register. It is usually used with DI and doing pointers things. The couple DS:SI and ES:DI are commonly used to do string operations.ES叫做额外的段寄存器. 它通常跟DI一起用来做指针使用. DS:SI和ES:DI配对时通常用来执行一些字符串操作.SS is called stack segment register. It points to stack segment.SS叫做栈段寄存器, 它指向栈段.The register SI and DI are called index registers. These registers are usually used to process arrays or strings.SI和DI两个寄存器叫做索引寄存器, 这两个寄存器通常用来处理数组或字符串.SI is called source index and DI is destination index. As the name follows, SI is always pointed to the source array and DI is always pointed to the destination. This is usually used to move a block of data, such as records (or structures) and arrays. These register is commonly coupled with DS and ES. SI叫做源索引寄存器, DI叫做目的索引寄存器. 正如它们的命名, SI通常指向源数组, DI 通常指向目的数组. 他们通常被用来成块地移动数据, 比如移动数组或结构体. SI和DI通常和DS和ES一起使用.The register BP, SP, and IP are called pointer registers.BP, SP, 和IP叫做指针寄存器.BP is base pointer, SP is stack pointer, and IP is instruction pointer. Usually BP is used for preserving space to use local variables.BP是基指针, SP是栈指针, IP是指令指针. 通常BP用来保存使用局部变量的地址.SP is used to point the current stack. Although SP can be modified easily, you must be cautious. It's because doing the wrong thing with this register could cause your program in ruin.SP用来指向当前的栈. 尽管SP可以被很容易地修改, 你还是一定要非常小心. 因为如果这个寄存器搞错了, 你的程序就毁了.IP denotes the current pointer of the running program. It is always coupled with CS and it is NOT modifiable.IP用来指示当前运行程序的当前指针. 通常和CS一起使用, IP是不允许修改的.So, the couple of CS:IP is a pointer pointing to the current instruction of running program. You can NOT access CS nor IP directly.所以, CS:IP配对用来指示当前运行的指令地址. 你不能直接访问CS, 也不能直接访问IP.FS和GS寄存器是从386开始才有的. FS主要用来指向Thread InformationBlock(TIB).。

汇编寄存器功能详解

汇编寄存器功能详解

汇编寄存器功能详解汇编语言是一种底层语言,与计算机硬件直接交互。

在汇编语言中,寄存器是一组特殊的存储单元,用于暂时存储数据或指令。

它们在处理器中的位置较为接近,可以快速访问。

在汇编语言中,寄存器被分为通用寄存器、数据段寄存器、指令指针寄存器、标志寄存器等几个类别,每个寄存器都有特定的功能。

一、通用寄存器通用寄存器是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要执⾏指令的地址。

ARM汇编之寄存器

ARM汇编之寄存器

ARM汇编之寄存器在ARM处理器内部共有37个⽤户可访问的寄存器,分别为31个通⽤的32位寄存器和6个状态寄存器。

⼀.通⽤寄存器:1.在汇编语⾔中,寄存器R0-R13为保存数据或地址值的通⽤寄存器。

2.其中寄存器R0-R7为未分组的寄存器。

对于任何处理器模式,它们都共享R0~R7的通⽤寄存器。

3.寄存器R8-R12为两个分组的物理寄存器。

a.FIQ拥有⾃⼰独⽴的R8~R12的通⽤寄存器。

b.其他六种处理器模式共享R8~R12的通⽤寄存器注:寄存器R8~R12在ARM体系结构中没有特定的⽤途。

给FIQ单独的R8~R12可实现快速的中断处理(在发⽣FIQ中断后,处理器不⽤为了保护寄存器⽽浪费时间,从⽽提⾼了FIQ的处理速度)4.寄存器R13和R14a.⽤户模式和系统模式公⽤R13和R14的寄存器内容。

b.其它五个模式拥有⾃⼰独⽴的R13和r14寄存器内容。

c.R13作为堆栈指针(SP),⽤于保存待使⽤的寄存器内容。

d.寄存器R14称为链接寄存器(LR),它的作⽤有两个:当使⽤BL指令调⽤⼦程序时,系统会⾃动将 BL指令的下⼀条指令的地址存⼊R14中。

程序A指令过程中调⽤程序B程序跳转⾄标号Lable处,执⾏程序B.系统将BL Lable指令的下⼀条指令所在地址存⼊R14中程序B执⾏最后,执⾏语句MOV PC,LR将R14寄存器的内容放⼊PC处,返回⾄NEXT处继续执⾏。

●当发⽣异常时,系统⾃动将异常的返回地址放⼊R14中(有些异常有⼀个⼩的固定的偏移量)⼆.重要的寄存器1.堆栈指针R13R13作为堆栈指针SP。

在ARM指令集中,由于没有以特殊⽅式使⽤R13的指令。

(在Thumb)指令集中存在使⽤R13的指令)每个异常模式都有其⾃⾝的R13分组版本,它通常指向由异常模式所专⽤的堆栈。

在⼊⼝处,异常处理程序通常将其他要使⽤的寄存器值保存到这个堆栈。

通过返回时将这些值重装到寄存器中。

异常处理程序可确保异常发⽣时的程序状态不会被破坏。

汇编寄存器

汇编寄存器

数据寄存器:1寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;2寄存器BX称为基地址寄存器(Base Register)。

它可作为存储器指针来使用;3寄存器CX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;4寄存器DX称为数据寄存器(Data Register)。

在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址;变址寄存器寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便指针寄存器寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便。

指针寄存器不可分割成8位寄存器。

作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们主要用于访问堆栈内的存储单元,并且规定:BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶段寄存器段寄存器是根据内存分段的管理模式而设置的。

内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址CS——代码段寄存器(Code Segment Register),其值为代码段的段值DS——数据段寄存器(Data Segment Register),其值为数据段的段值;ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段指令指针寄存器指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。

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

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

汇编语言入门汇编指令及寄存器详解教程汇编语言是一种低级编程语言,与计算机硬件直接相关。

它使用一组基本的指令和寄存器来编写程序。

本篇教程将介绍汇编语言的基本指令和寄存器,帮助读者入门汇编语言编程。

一、汇编语言概述及基本概念汇编语言是机器语言的助记符表示。

它采用英文单词来表示机器指令,以便程序员更容易理解和编写。

汇编语言程序需要通过汇编器将其转换为机器语言,然后可以在计算机上运行。

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

AX/EAX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。
BX/EBX在计算存储器地址时,可作为基址寄存器使用。
CX/ECX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含计数器。DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。此外,对某些I/O操作,DX可用来存放I/O的端口地址。
SP/ESP、BP/EBP、SI/ESI、DI/EDI四个16/32位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16/32位)为单位使用。此外,它们更经常的用途是在存储器寻址时,提供偏移地址。因此,它们可称为指针或变址寄存器。
SP/ESP称为堆栈指针寄存器,用来指出栈顶的偏移地址。
BP/EBP称为基址指针寄存器,在寻址时作为基地址寄存器使用,但它必须与堆栈段寄存器SS联用来确定堆栈段中的存储单元地址。
2、标志寄存器FLAG
条件码标志用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由(CPU)自动设置的。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。
⑤ 辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。
⑥ 奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。
1. 通用寄存器
通用寄存器包括了8个16/32位的寄存器:AX/EAX、BX/EBX、CX/ECX、DX/EDX、SP/ESP、BP/EBP、DI/EDI及SI/ESI。其中AX/EAX、BX/EBX、CX/ECX、DX/EDX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途:
① 进位标志 CF,记录运算时最高有效位产生的进位值。
② 符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0。
③ 零标志 ZF,运算结果为0时ZF位置1,否则置0。
④ 溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。
相关文档
最新文档