精华内容
下载资源
问答
  • 寄存器操作大小及参数数量

    千次阅读 2019-02-08 13:26:43
    在看程序的机器级表示的时候可以跟着书上的思路来用这个寄存器实现什么什么,但是为什么是用这个寄存器呢。这表应该可以得到一些...使用的寄存器的名字取决于操作大小和参数个数。 操作大小(位) 参数数量 ...

    在看程序的机器级表示的时候可以跟着书上的思路来用这个寄存器实现什么什么,但是为什么是用这个寄存器呢。这个表应该可以得到一些解答。
    x86-64寄存器最多传递6个整型参数,超出部分用栈来传递。使用的寄存器的名字取决于操作数大小和参数个数。

    操作数大小(位) 参数数量
    1 2 3 4 5 6
    64 %rdi %rsi %rdx %rcx %r8 %r9
    32 %edi %esi %edx %ecx %r8d %r9d
    16 %di %si %dx %cx %r8w %r9w
    8 %dil %sil %dl %cl %r8b %r9b

    csdn的排版一言难尽,编辑界面好好的,到了视图就不整齐了,截个图吧。

    在这里插入图片描述
    再补充几个:
    %rax 返回值
    %rbx 被调用者保存
    %rbp 被调用者保存
    %rsp 栈指针

    展开全文
  • 如“mov %esp %ebp”有两操作,分别称为源操作和目的操作,这指令的意思是将寄存器%esp的值传送给寄存器%ebp。 二、寄存器  程序编译后的指令代码存放在存储器中。CPU如何执行程序?简单的说,就是取...

    写在前面:汇编语言格式有AT&T和Intel格式两种,GCC编译器采用AT&T格式,本系列文章中的所有汇编指令都采用此格式。数据格式采用IA32体系结构的Intel格式,用“字”(word)表示16位数据,用“双字”(double word)表示32位数据,用“四字”(quad word)表示64位数据

    一、 什么是汇编语言

     我们熟悉的C语言,Java,Python等语言都是高级语言,高级语言不能被处理器识别,程序运行时,需要将代码转成处理器能识别的机器码。机器码是一串十六进制的数字,如 55 5D 89 E5。由于人很难理解机器码表达的意思,因此需要用一些符号帮助理解指令。这种用符号代替机器指令操作码的低级语言称为汇编语言。机器码与汇编指令的关系如下图所示。
      汇编语言由一条一条指令构成,由上图右半部分所示。指令有两部分组成,第一部分是操作码,用便于记忆的助记符表示,另一部分是操作数。一条指令可以有零个,一个或两个操作数。如“push %ebp” 只有一个操作数,这个指令的意思是将寄存器%ebp的值压入栈。如“mov %esp %ebp”有两个操作数,分别称为源操作数和目的操作数,这个指令的意思是将寄存器%esp的值传送给寄存器%ebp。

    二、寄存器

     程序编译后的指令代码存放在存储器中。CPU如何执行程序?简单的说,就是取指令,执行指令。CPU从存储器中取出一条指令,分析后执行相应的操作。如:x+y。GCC编译后产生三条指令,第一条指令告诉CPU从存储器中取出x的值,放在CPU的寄存器中,第二条指令告诉CPU从存储器中取出y的值,放在CPU的寄存器中,第三条指令告诉CPU将两个寄存器的值相加。
     寄存器用来存储整数数据以及指针,一个IA32指令集架构的处理器包含一组8个32位的寄存器。

    3216高8位低8位
    %eax%ax%ah%al
    %ecx%cx%ch%cl
    %edx%dx%dh%dl
    %ebx%bx%bh%bl
    %esi%si
    %edi%di
    %esp%sp
    %ebp%bp

     32位处理器需要向后兼容16位处理器。表中%eax对应32位寄存器,%ax对应16位寄存器,%ax寄存器由%ah与%al组成,%ah与%al分别表示寄存器的高八位与低八位。
      表中前6个寄存器是通用寄存器,可以存放数据和指针。%esp是栈指针寄存器,%ebp是帧指针寄存器。%eax %ecx %edx是调用者保存寄存器,指的是当一个函数P调用另一个函数Q时,由于寄存器数量有限,函数Q可以写这些寄存器。%ebx %esi %edi是被调用者保存寄存器,指的是当一个函数P调用另一个函数Q时,需要先把这些寄存器的值保存在存储器中,之后,函数Q才可以写这些寄存器。这个现象可以称为保存现场。当函数调用结束后,保存在存储器中的值会被恢复到寄存器中,称为恢复现场

    三、操作数寻址方式

     操作数分为三种:立即数(immediate),寄存器,存储器的引用。翻译一下,就是常数,寄存器中的值(用 R [ E a ] R[E_a] R[Ea]表示),存储器中的值(用 M [ a d d r ] M[addr] M[addr]表示)。而寻址的意思就是如何得到操作数表达的值。
    在这里插入图片描述 举一个例子就可以明白上图中表达的意思。
     假设存储器地址中的值如下所示:

    地址
    0X1000XFF
    0X1040XAB
    0X1080X13
    0X10C0X11

    寄存器中的值如下所示:

    寄存器
    %eax0X100
    %ecx0X1
    %edx0X3

    那操作数与值的对应关系如下表所示:

    操作数
    %eax0X100
    0X1040XAB
    $0X1080X108
    (%eax)0XFF
    4(%eax)0XAB
    9(%eax,%edx)0X11
    (%eax,%edx,4)0X11
    0XFC(,%ecx,4)0XFF

    以9(%eax,%edx)为例,9(%eax,%edx)=M[9+%eax+%edx] = M[0X9+0X100+0X3]=M[0X10C],表示存储器0X10C地址的值,在第一张表上可以查到,地址0x10C上的值为0x11。

    展开全文
  • 寄存器

    千次阅读 2016-09-04 22:24:52
    8086 有1416位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。 通用寄存器 有8, 又可以分成2组,一组是数据寄存器(4),另一组是指针寄存器及...

    8086寄存器

    编辑
    8086 有14个16位 寄存器,这14个寄存器按其用途可分为(1) 通用寄存器、(2)指令指针、(3) 标志寄存器和(4) 段寄存器等4类。

    通用寄存器

    有8个, 又可以分成2组,一组是 数据寄存器(4个),另一组是指针寄存器及 变址寄存器(4个).
    顾名思义, 通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对 计算机的运行造成很大的影响。
    数据寄存器分为:
    AH&AL=AX(accumulator): 累加寄存器,常用于运算;在乘除等 指令中指定用来存放 操作数,另外,所有的 I/O指令都使用这一寄存器与外界设备传送数据。
    BH&BL=BX(base): 基址 寄存器,常用于地址索引
    CH&CL=CX(count):计数 寄存器,常用于计数;常用于保存计算值,如在 移位指令,循环(loop)和串处理指令中用作隐含的计数器.
    寄存器 寄存器
    DH&DL=DX(data): 数据寄存器,常用于数据传递。
    他们的特点是,这4个16位的 寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位 寄存器可以分别寻址,并单独使用。
    另一组是 指针 寄存器变址寄存器,包括:
    SP(Stack Pointer): 堆栈指针,与SS配合使用,可指向目前的堆栈位置
    BP(Base Pointer): 基址 指针 寄存器,可用作SS的一个相对基址位置
    SI(Source Index):变址 寄存器,可用来存放相对于DS段之源变址指针
    DI(Destination Index):目的 变址 寄存器,可用来存放相对于ES 段之目的变址 指针
    这4个16位 寄存器只能按16位进行存取操作,主要用来形成 操作数的地址,用于 堆栈操作和 变址运算中计算操作数的 有效地址

    指令指针IP

    指令指针IP是一个16位专用 寄存器,它指向当前需要取出的指令 字节,当BIU从 内存中取出一个指令字节后,IP就自动加(取出该字节的长度,如:BIU从内存中取出的是1个字节,IP就会自动加1,如果BIU从内存中取出的字节数长度为3,IP就自动加3),指向下一个指令字节。注意,IP指向的是 指令地址的段内地址 偏移量,又称 偏移地址(Offset Address)或 有效地址(EA,Effective Address)。

    标志寄存器

    8086有一个16位的标志性 寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。 标志寄存器(Flags Register,FR)又称 程序状态字(Program Status Word,PSW)。这是一个存放条件标志、控制 标志寄存器,主要用于反映处理器的状态和运算 结果的某些特征及控制 指令的执行。
    标志寄存器位置图: [4]  
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
            OF DF IF TF SF ZF   AF   PF   CF
    OF:溢出标志位OF用于反映有 符号数加减运算所得 结果是否溢出。如果运算 结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
    DF:方向标志DF位用来决定在串操作 指令执行时有关指针 寄存器发生调整的方向。
    IF:中断允许标志IF位用来决定CPU是否响应CPU外部的 可屏蔽中断发出的 中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的 中断请求,以及CPU内部产生的 中断请求。具体规定如下:
    (1)、当IF=1时,CPU可以响应CPU外部的 可屏蔽中断发出的 中断请求
    (2)、当IF=0时,CPU不响应CPU外部的 可屏蔽中断发出的中断请求。
    TF:跟踪标志TF。该标志可用于 程序调试。TF标志没有专门的 指令来设置或清除。
    (1)如果TF=1,则CPU处于单步执行 指令的工作方式,此时每执行完一条指令,就显示CPU内各个 寄存器的当前值及CPU将要执行的下一条指令。
    (2)如果TF=0,则处于连续工作模式。
    SF: 符号标志SF用来反映运算 结果的符号位,它与运算结果的最高位相同。在 微机系统中, 有符号数采用补码表示法,所以,SF也就反映运算 结果的正负号。运算 结果为非负数时,SF的值为0,否则其值为1。当运算 结果没有产生溢出时,运算结果等于逻辑结果(即应该得到的正确的结果),此时SF表示的是逻辑结果的正负,当运算结果产生溢出时,运算结果不等于逻辑结果,此时的SF值所表示的正负情况与逻辑结果相反,即:SF=0时,逻辑结果为负,SF=1时,逻辑结果为非负。
    ZF:零标志ZF用来反映运算 结果是否为0。如果运算 结果为0,则其值为1,否则其值为0。在判断运算结果
    寄存器 寄存器
    是否为0时,可使用此标志位。
    AF:( Assistant Carry Flag)下列情况下, 辅助进位标志AF的值被置为1,否则其值为0:
    (1)、在字操作时,发生低 字节向高字节进位或借位时
    (2)、在 字节操作时,发生低4位向高4位进位或借位时。
    PF:奇偶标志PF用于反映运算 结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
    CF:进位标志CF主要用来反映无 符号数运算是否产生进位或借位。如果运算 结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

    段寄存器

    为了运用所有的 内存空间,8086设定了四个 段寄存器,专门用来保存 段地址
    寄存器 寄存器
    CS(Code Segment): 代码段寄存器
    DS(Data Segment):数据 段寄存器
    SS(Stack Segment): 堆栈段 寄存器
    ES(Extra Segment):附加 段寄存器
    当一个程序要执行时,就要决定程序代码、数据和 堆栈各要用到 内存的哪些位置,通过设定 段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可 寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以 内存作为战场,用 寄存器做为军事基地,以加速工作。
    备注:由于所讲的是16位cpu(IP 寄存器的位数为16,即: 偏移地址为16位)2的16次幂就是64K,所以16位 段地址不能超过64K,超过64K会造成64K以上的地址找不到。

    展开全文
  • 1.PC和MAR寄存器的位数对应的是存储单元的个数 eg:若MAR为10位,则对应2**10=1024存储单元,记为1K.也即像2M,1K,3G等表示的都是存储单元的个数.当其后加上B表示的是字节个数.例如:2MB表示2M字节.

    1.PC和MAR寄存器的位数对应的是存储单元的个数

    eg:若MAR为10位,则对应2**10=1024个存储单元,记为1K.也即像2M,1K,3G等表示的都是存储单元的个数.当其后加上B表示的是字节个数.例如:2MB表示2M个字节.
    
    展开全文
  • 伪随机生成-移位寄存器方法
  • 将AX寄存器中的16位数分成4组,每组4位,然后把这四组分别放在AL、BL、CL和DL中。
  • CPU位数 = CPU中寄存器的位数 = CPU能够一次并行处理的数据宽度 = 数据总线宽度 CPU为了实现其功能一般设计了指令集,即是CPU的全部指令,这就是机器语言。计算机的所有功能都是基于CPU的指令集。指令集和CPU的...
  • 寄存器数据类型reg是最常见的数据类型。reg类型使用保留字reg加以说明,形式如下:reg [ msb: lsb] ...寄存器中的值通常被解释为无符号, 例如:reg [1:4] Comb;. . .Comb = -2; //Comb 的值为14(1110),1110是2的
  • [汇编语言]立即寻址和寄存器寻址

    千次阅读 2018-11-25 19:41:45
    1. 什么是立即? 操作从指令代码中得到,即立即(Immediate),也可以说就是指令的一部分了, 例如: MOV EAX 33221100H ;机器代码为 B8 00 11 22 33 ;操作码为 B8 ;立即为 33221100 操作码 (操作)...
  • FANUC机器人如何修改PR寄存器的数量上限?
  • 详解通用寄存器-内存读写

    千次阅读 2020-10-28 16:04:16
    在看这篇文章之前,可以先看一下这一篇 数据宽度 便于理解后续的内容 在数据宽度那里已经说了计算机中有很多的容器 ...我们称为32位通用寄存器 32位通用寄存器的指定用途如下 这张图片里面的东西一定要记住,
  • 寄存器操作的寻址方式

    千次阅读 2014-04-10 13:55:31
    在程序中,一存储单元的地址是采用逻辑地址形式表示的,即: 段基址:偏移量 1、 直接寻址 这种寻址方式是在指令中直接给出存储器操作的偏移地址。有效地址EA可直接由偏移地址得到。 (1) 用常数表示。 ...
  • ”拆炸弹“ 的实验 要 来 力 ,提前准备一下,到时候要做汇编,提前搞懂那些寄存器啊,指令的意义,以及x86-64指令的栈帧结构,否则无头苍蝇,是找不出boom函数调用的点的 寄存器 %rsp 栈顶位置指针 %rax 函数...
  • 线性反馈移位寄存器实现产生伪随机M序列 -----在CN03平台上,主要体现为Random功能的实现。 什么是线性反馈移位寄存器? 数学解释这里就不作介绍了,这里我们主要理解两词语就行,一是线性,它是指量与量...
  • 8086_14个寄存器

    万次阅读 多人点赞 2018-07-03 12:03:19
    8086有14个寄存器:AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP,flags。// 以下为这14个寄存器的速查表。要记清楚每个寄存器的详细用法,还是多写代码,汇编:王爽-汇编如图:在debug下用r命令查看各个寄存器Register:...
  • 寄存器值查看助手,十六进制,十进制显示二进制值;
  • 寄存器间接寻址(register indirect addressing) 操作在存储器中,其有效地址EA存放在某个寄存器中。寄存器的使用在16位寻址和32位寻址时不一样。 (1)16位寻址 寄存器 有效地址存放在SI, DI, BX, BP中。 如果...
  • 寄存器总结之通用寄存器

    千次阅读 2020-09-15 16:34:02
    典型CPU是由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。 区别:内部总线实现CPU内部各个器件之间的联系 外部总线实现CPU与主板上其它器件的联系。(地址,数据,控制) 8086CPU有14个寄存器...
  • RegBit-寄存器计算器

    2021-01-05 22:32:38
    寄存器计算器
  • 在r0和r1寄存器中输入2数字。您的程序将比较这两数字,并将最低的一存储在r2中,最高的一存储在r3中。如果两数字相等,结果将只存储在R4寄存器中。 有大神会嘛 跪求 ...
  • JVM为什么采用面向操作栈而不是寄存器的架构?

    千次阅读 热门讨论 2021-05-12 00:16:38
    为了支持这种跨平台的特性,只有面向操作栈的指令集架构才能满足需求。 补充 基于栈的指令集与基于寄存器的指令集 Java编译器输出的指令流,基本上是一种基于栈的指令集架构(Instruction Set Architecture,ISA)...
  • 本文档是我整理结果。word文档形式,前面有主目录方便快速检索,通过点击可以快速连接到寄存器说明。每个寄存器各位定义均详细描述。在使用寄存器存在疑问时很快检索和查阅。
  • 1、移位寄存器(shift register)是用于寄存二进制信息并将信息移位的时序逻辑电路,只能寄存二进制信息的称为寄存器。移位寄存器在数字通信中应用极其广泛。例如远程通信中,发送端将要发送的信息送入移位寄存器,...
  • 使用子程序结构实现下面的程序设计:以16进制的形式显示DX寄存器中的值;
  • data segment char db '?' data ends stack segment db 128 dup ('?') stack ends assume cs:code,ds:data,ss:stack code segment start: mov ax,data mov ds,ax mov ah,0 ;进行输入 ...
  • ** 关于为什么立即不能直接存入段寄存器的一些设想** 由8086的内部结构我们可以知道8086微处理器为了充分使用总线以提高程序的执行速度被设计成为两独立的功能部件:EU和BIU,如下图所示 我们可以看出,立即...
  • 实验一 寄存器A,W实验 一、实验要求 利用COP2000实验仪上的K16..K23开关做为DBUS的数据,其它开关做为控制信号,将数据写入寄存器,这些寄存器包括累加器A,工作寄存器W。 二、实验目的 了解模型机中A和W寄存器结构...
  • Verilog FPGA 4位寄存器 异步清零 同步置 可调时钟周期
  • X86系列CPU标准寄存器

    千次阅读 2018-03-28 21:54:28
    1 16位和32位CPU的寄存器2 通用寄存器  通用寄存器包括数据寄存器、指针寄存器、变址寄存器。除完成规定的专门用途...八个寄存器都可以作为普通的数据寄存器使用。但有的有特殊的用途:AX为累加器,CX为计数器,BX,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 240,406
精华内容 96,162
关键字:

寄存器个数怎么数