精华内容
下载资源
问答
  • 今日在暴啃芯片手册!...今日突然发现一些寄存器缩写命名规律,前来记录并与大家分享! 1. 最常见的缩写方式 如下表: 英文 ( 缩写 ) 描述 read/ write( rw ) 软件能读写此位 read-only ( r

    今日在暴啃芯片手册!其中最令人头疼的就是成百上千的寄存器英文缩写

    在实际学习过程中会发现,很多寄存器会加上三个四个甚至更多的英文缩写字母作为后缀,而其很多时候百度并不一定能查询到全拼!这使得我们在学习过程中对于寄存器的“真名”不得而知,也就一定程度上阻碍了对于寄存器真正用途的理解

    今日突然发现一些寄存器缩写命名规律,前来记录并与大家分享!





    1. 最常见的缩写方式

    如下表:

    英文 ( 缩写 )描述
    read/ write( rw )软件能读写此位
    read-only ( r )软件只能读此位
    write-only ( w )软件只能写此位,读将返回复位值
    read/clear ( rc_w1 )软件可以读此位,也可以通过写’1’清除此位,写’0’对此位无影响
    read / clear ( rc_w0 )软件可以读此位,也可以通过写’0’清除此位,写’1’对此位无影响
    read / clear by read ( rc_r )软件可以读此位;读此位将自动地清除它为’0’,写’0’对此位无影响
    read / set ( rs )软件可以读也可以设置此位,写’0’对此位无影响
    read-only write trigger ( rt_w )软件可以读此位;写’0’或’1’触发一个事件但对此位数值没有影响
    toggle ( t )软件只能通过写’1’来翻转此位,写’0’对此位无影响
    Reserved ( Res. )保留位,必须保持默认值不变

    以上内容可在STM32数据手册内查到




    2. 首字母直接缩写

    这种缩写方式适用于寄存器作用名称有多个单词描述的情况,例如:

    英文缩写描述
    MMS主模式选择 (Master Mode Selection)
    CCDS捕获/比较的DMA选择 (Capture/Compare DMA Selection)
    CCUS捕获/比较控制更新选择 (Capture/Compare Control Update Selection)
    CCPCCCPC:捕获/比较预装载控制位 (Capture/Compare Preloaded Control)



    联想到芯片手册产自国外,原版多是利用英语编写,而英语这样一种拼音文字,歪果仁对音律颇为敏感,因此我产生了一探究竟的想法,有以下发现:


    3. 辅音缩写方式

    我的音标可以说是从小学过整整三遍。。。一年级、三年级、初一,在此为大家拓展一些音标的基础知识:

    音标

    其中辅音又可分为:

    • 爆破音:[p],[b],[t],[d],[k],[g]

    • 摩擦音:[f],[s],[ʃ] ,[θ] ,[h],[v],[z],[ʒ],[ð],[r]

    • 破擦音:[tʃ],[tr],[ts],[dʒ],[dr],[dz]

    • 鼻音: [m],[n],[ŋ]

    • 舌侧音:[l]

    • 半元音:[w],[j]

    在寄存器的后缀缩写中常常出现提取英文单词辅音字母作为缩写的情况!!!

    分为以下三类:

    A. 辅音字母正好有三个

    例1: source - SRC

    source音标 [sɔːrs]

    摩擦音 [s] 和 [r]

    对应字母S和RC

    正好三个字母,直接提出缩写为SRC

    例2: config register - CFGR

    config音标 [kənˈfɪg]

    爆破音 [k],[g]

    摩擦音 [f]

    对应字母CFG

    正好三个字母,直接提出缩写为CFG

    加上寄存器Register的首字母,为CFGR


    例3: Packet count - PKTCNT

    packet音标 [ˈpækɪt]

    爆破音 [p],[k],[t]

    正好三个字母,直接提出为PKT

    count音标 [kaʊnt]

    爆破音 [k],[t]

    鼻音 [n]

    对应字母CNT,直接提出

    最终合成缩写PKTCNT




    B. 辅音字母小于三个

    这种情况下,一般会拖拽一个跟辅音字母紧邻的、共同影响音节的元音字母上来,凑成三个字母的缩写

    例1: ready - RDY

    ready音标 [ˈredi]

    辅音 [r],[d],取RD,不足三个字母

    dy构成第二个音节,取Y过来

    RDY构成三个字母的缩写


    例2: wide bus mode enable - WIDBUS

    wide音标 [waɪd]

    辅音[w],[d]

    取与辅音相邻的元音字母 i 构成三个音节WID

    构成缩写WIDBUS




    C. 辅音字母大于三个

    这种情况下通常会直接选单词的前三个字母来作为缩写

    例1: command argument - CMDARG

    argument 辅音较多,选取前三个字母ARG


    例2: multiplication - MUL

    multiplication 音标 [ˌmʌltɪplɪˈkeɪʃn]

    选取前三个字母MUL




    补充:英文缩写的一种特殊习惯-X

    例如TX和RX的X是什么意思?答案就是没有意思!

    It’s doesn’t stand for anything.


    The X is used to pad out acronyms to make them more acceptable.Los Angeles International Airport uses the code LAXIn theatre, anything lighting related gets called LX (e.g. PVC electrical tape gets called LX tape).Ethernet at Gigabit speeds, using single mode fibre uses the 1000Base-LX standard (the “L” stands for Long Reach)


    For some reason humans don’t seem to like single letter acronyms, so we pad them out to two letters.


    There are some X acronyms, where the X does mean something: FX (special eFeCTs), MX (Mailbox Exchange), RX (RallyCross), etc




    读一方著作,品一语文化,芯片手册亦不例外。

    未能大面积筛选示例,仅取个别分析,但相信一定存在这方面的原因在里面,如有异议或者意见,请及时与我交流!

    展开全文
  • 给IDA中的寄存器变量命名的技巧

    千次阅读 2016-08-30 23:10:30
    前言release版中, 尽最大可能使用寄存器变量. 如果一个寄存器变量在一段程序中, 在前10行是一个含义, 在后10行是另外一个含义, 看起来很头痛. 今天看了IDA中改名的UI上有参数可以指定改名的地址范围, 正好解决了这...

    前言

    release版中, 尽最大可能使用寄存器变量.
    如果一个寄存器变量在一段程序中, 在前10行是一个含义, 在后10行是另外一个含义, 看起来很头痛.
    今天看了IDA中改名的UI上有参数可以指定改名的地址范围, 正好解决了这个问题.
    逆向过程中的反汇编代码的可读性提高很多

    改名后的例子

    .text:00401000 ; int __cdecl main(int argc, const char **argv, const char **envp)
    .text:00401000 _main           proc near               ; CODE XREF: start+AFp
    .text:00401000
    .text:00401000 iIn             = dword ptr -4
    .text:00401000
    .text:00401000 divisor = esi                           ; 除数
    .text:00401000                 push    ecx
    .text:00401001                 push    divisor
    .text:00401002                 push    edi             ; 保存环境
    .text:00401002                                         ; ;
    .text:00401003 iUserInputBk = edi                      ; 用户输入
    .text:00401003 INPUT_HALF = ecx                        ; 用户输入数值的一半
    .text:00401003                 push    offset msg1     ; "请输入:"
    .text:00401008                 call    _printf
    .text:0040100D                 lea     eax, [esp+10h+iIn]
    .text:00401011                 push    eax
    .text:00401012                 push    offset Format   ; "%d"
    .text:00401017                 call    _scanf
    .text:0040101C                 mov     iUserInputBk, [esp+18h+iIn]
    .text:00401020                 mov     divisor, 2
    .text:00401025                 mov     eax, iUserInputBk
    .text:00401027                 add     esp, 0Ch        ; 平栈 printf和scanf
    .text:0040102A                 cdq
    .text:0040102B                 sub     eax, edx
    .text:0040102D                 mov     INPUT_HALF, eax
    .text:0040102F                 sar     INPUT_HALF, 1
    .text:00401031                 cmp     INPUT_HALF, divisor
    .text:00401033                 jl      short L_WAS_PRIME
    .text:00401035
    .text:00401035 PARSE_INPUT:                            ; CODE XREF: _main+41j
    .text:00401035                 mov     eax, iUserInputBk
    .text:00401037                 cdq
    .text:00401038                 idiv    divisor
    .text:0040103A                 test    edx, edx        ; edx中余数
    .text:0040103C                 jz      short L_NOT_PRIME
    .text:0040103E                 inc     divisor
    .text:0040103F                 cmp     divisor, INPUT_HALF
    .text:00401041                 jle     short PARSE_INPUT
    .text:00401043
    .text:00401043 L_WAS_PRIME:                            ; CODE XREF: _main+33j
    .text:00401043                 push    offset msg2     ; "是素
    .text:00401048                 call    _printf
    .text:0040104D                 add     esp, 4
    .text:00401050                 xor     eax, eax        ; ;
    .text:00401050                                         ; ;
    .text:00401052                 pop     edi             ; 恢复环境
    .text:00401053                 pop     divisor
    .text:00401054                 pop     ecx
    .text:00401055                 retn
    .text:00401056 ; ---------------------------------------------------------------------------
    

    改名时的地址范围图例

    Start address 和 End address默认是函数范围内有效, 改成在函数内需要的生效范围(只指定包含特定用途的地址范围).
    这里写图片描述

    展开全文
  • 寄存器

    2021-04-22 11:47:59
    首先介绍我们会经常看到的一些寄存器: ...这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH

    首先介绍我们会经常看到的一些寄存器:
    4个数据寄存器(EAX、EBX、ECX和EDX)
    2个变址和指针寄存器(ESI和EDI)
    2个指针寄存器(ESP和EBP)


    4个数据寄存器(EAX、EBX、ECX和EDX):
    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),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

    那么如何理解eax,ax,al(ah)之间的关系呢?
    专业点可以这样解释:Eax是32位寄存器,ax是16位寄存器,al(ah)是八位寄存器。
    那么eax存储的数据就是ax的两倍,ax是al(ah)的两倍。
    Eax可以存储的数字是DWORD(双字)ax存储的是WORD(字)AL(AH)存储的是BYTE(字节),那么为什么又有AH和AL呢,我们可以这样理解,AX=AH+AL,AH存储的是AX的高8位数据,AL存储的是AX的低八位数据。H这里就是HIGH,L就是LOW.
    假设eax是红色区域,那么eax现在就是64636261;
    那么ax就是eax的低十六位,也就是6261;
    Al是61;AH是62。



    其他ebx,ecx,edx也有类似的bx,bl,bh等对应的寄存器,原理和上面相同。

    在用途方面,他们有各自默认的用途:
    Eax用来保存所有API函数的返回值。
    寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;
    寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 
    寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;
    寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

    由于存储的数据大小关系,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。(什么是基址,什么是变址以后会说到)

    2个变址和指针寄存器(ESI和EDI)
    32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

    寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
    变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

    2个重要的指针寄存器(ESP和EBP)


    这两个指针寄存器都和“栈”这个神秘的东东有关,那么什么是栈呢?这俩指针寄存器又有何作用呢?


    从计算机科学的角度看,栈是一种数据结构,是一种先进后出的数据表。栈的最常见操作有两种:Push(入栈)和Pop(出栈)。


    我们可以把栈想象成一摞扑克牌:
    PUSH:为栈增加一个元素的操作是push,相当于在这摞扑克牌最上面再放一张

    POP:从栈中取出一个元素的操作叫做POP,相当于从这摞扑克牌取出最上面的一

    张。

    TOP:标识栈顶位置,并且是动态变化的。每做一次PUSH 操作,它都会自增1;

    相反,每做一次POP 操作,它会自减1。栈顶元素相当于扑克牌最上面一张,只有


    这张牌的花色是当前可以看到的。

    BASE:标识栈底位置,它记录着扑克牌最下面一张的位置。BASE 用于防止栈空后

    继续弹栈(牌发完时就不能再去揭牌了)。很明显,一般情况下,BASE 是不会变动


    的。
     

    用王爽《汇编语言》中的图说明一下push和pop操作
    代码如下:
    mov ax,0123H
    push ax
    mov bx,2266H
    push bx
    mov cx,1122H
    pop ax
    pop bx
    pop cx

    mov是传送数据的指令,mov ax,0123H表明把0123H这个值给ax
    H代表0123是十六进制数

     



    mov是传送数据的指令,mov ax,0123H表明把0123H这个值给ax
    H代表0123是十六进制数
    图中左边的10000H等数值表明内存地址
    箭头指向栈顶位置

     

    那么针对此例栈底就是1000FH
    栈顶由于入栈和出栈操作在不断变化。

    那么在这里栈底1000FH就是BP 栈顶(不断变化的箭头)就是SP
    (BP和SP分别是16位下的寄存器,与ebp,esp类似)

    内存的栈区实际上指的就是系统栈。系统栈由系统自动维护,它用于实现高级语言中函

    数的调用。对于类似C 语言这样的高级语言,我们无需担心他们是如何操作的。一般说来,只有在使用汇编语言的时候,才需要和它直接打交道。

    那么ESP和EBP指的分别是什么呢?

    (1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
    (2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

    展开全文
  • 转载于:https://www.cnblogs.com/junuh/archive/2009/06/12/1502030.html

    转载于:https://www.cnblogs.com/junuh/archive/2009/06/12/1502030.html

    展开全文
  • 64位寄存器与汇编

    千次阅读 2018-05-05 10:22:44
    e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r8,r....
  • 一,设计如下图所示电路 ...内部封装:我把第一排寄存器命名为R11,R12,R13,第二排寄存器命名为R21,R22,R23,复用器命名为M1,M2,M3,加法器命名为A1,A2,最后还有一个R3。比如说,从寄存器R11到复用器M1...
  • 64位寄存器分配的不同

    千次阅读 2017-07-15 09:12:14
    e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。 32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi
  • 写本文其实有点心虚,逆向工程是个高深且需要长期积累的过程,在...x64汇编使用16个通用64位寄存器,其中一些低位可以用作32,26,8位寄存器,寄存器命名如上图所示。这些寄存器使用方法如下图: 其中%rbx,%rbp...
  • 64位和32位的寄存器和汇编的比较

    千次阅读 2019-04-25 09:40:29
    e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。 32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx...
  • 背景突然好奇x86架构下函数参数怎么传递的,之前只是听别人说过通过寄存器,但是怎么传,什么顺序都没有仔细研究过,也...e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r...
  • 第27部分- Linux x86 64位汇编 寄存器 64位时候X86处理器的寄存器如下图: ...e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。
  • 4.21 寄存器

    2021-04-14 17:15:16
    文章目录常见的CPU架构寄存器缓存寄存器的分类 常见的CPU架构 x86架构:PC端主流,高性能高消耗 ARM架构:移动端主流,体积小低功耗 MIPS架构:龙芯3号 国产 寄存器 CPU上存放数据的容器,与内存条、硬盘等不同,...
  • 1.v命名方法采用小写字母“v”开头的方式表示函数中用到局部变量与参数,所有的寄存器命名从v0开始,依次递增。对于foo()函数,v命名法会用到v0,v1,v2,v3,v4等五个寄存器。v0与v1表示函数的局部变量寄存器,v2表示被...
  • 寄存器中文-英文命名对照表

    千次阅读 2006-06-13 20:58:00
    寄存器说明 多 功 能 寄 存 器 累加低八 AL 0 累加寄存器低八位 累加高八 AH 100 ...
  • PC寄存器

    千次阅读 2020-10-07 13:13:56
    JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译...
  • MSR寄存器变的越来越多,但与此同时,有一部分MSR寄存器随着版本迭代,慢慢固化下来,成为了变化中那部分不变的,这部分MSR寄存器,Intel将其称为Architected MSR,这部分MSR寄存器,在命名上,统一加上了IA32的前缀...
  • linux寄存器

    2020-09-09 09:16:21
    linux寄存器寄存器分类数据寄存器变址寄存器指针寄存器寄存器指令指针寄存器标志寄存器一、运算结果标志位二、状态控制标志位三、32位标志寄存器增加的标志位代码示例与分析 ...寄存器分类 32位CPU所含有的寄存器有:...
  • 寄存器详解

    2014-11-12 13:32:25
    寄存器  英文名称:Register 寄存器定义  寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令...
  • 寄存器备忘

    2019-09-26 03:18:03
    32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) ...
  • 本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究感觉TI的寄存器命名还是有一定规律可循的SEL主要用于选择位 CTL主要用于控制位 EINT主要用于使能中断 FLG是标志查询位 CLR中断标志清除位 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,155
精华内容 18,062
关键字:

寄存器命名