ST的微处理器反汇编的准确性?

作者:操作系统    发布时间:2020-01-19 06:47     浏览次数 :

[返回]

自作者一向在接受汇编语言写8位单片机,同时用C在写ARM。小编以为困惑不解的是出于汇编的间接性,招致其BIN码能够直接反推出汇编制程序序。但ARM的C编写翻译后的BIN文件小编试过大约不也许反推出其汇编程序。由此是不是得出那样贰个结论:汇编的保密性比不上C语言呢?那么汇编怎样能够造成敬性格很顽强在大起大落或巨大压力面前不屈吗?

数码管理指令:

  • 数量管理指令只可用来寄放器之间或贮存器与那个时候数里面
![](https://upload-images.jianshu.io/upload_images/6308419-c9d5601eb71c93d5.png)
  • 移位指令

图片 1

  1. Rotate left(ROL) 能够透过 rotate right (ROR卡塔尔(32-number卡塔尔国来促成, e.g. ROL 10 也就是 RO奇骏 22.
  2. 立即数:只要该数,能够由此0x00-0xFF中有个别数,循环右移偶数位而产生,便是合法的mov的操作数,否则尽管不法的mov的操作数。

    mov r0, #256       ; mov r0, #0x100
    mov r1, #0x40, 30  ; mov r1, #0x100
    
  3. 伪指令LD奥迪Q5能够用来MOV大肆34人的常数到贮存器中

    图片 2

  • 例如:
 SUB    r0,r1,#5         ;r1-5->r0    (立即寻址)
 ADD    r2,r3,r3,LSL #2  ;R3x4+r3->r2
 ANDS   r4,r4,#0x20      ;r4+0x20->r4,更新条件码标志位
 ADDEQ  r5,r5,r6         ;r5+r6->r5(条件-相等)(寄存器寻址)

ARM汇编,MDK,ARM初学
作者是一名linux嵌入式初读书人,未来在看ARM微处理器。使用的是一块S3C2440的开荒板,近些日子的支付调节和测量试验情形是KEIL4。笔者在四个增多了开发银行代码的工程中增添三个温馨编辑的粗略汇编文件。然后在起步代码的C入口点处改正,import增添的归纳汇编文件中的程序段,并使其跳转到该程序段。编写翻译无法通过,错误提示的本人编写的汇编文件中定义的label未有定义。想知道哪些化解。作者想在起步代码实践截至后调用多个定义在其余文件中的汇编制程序序。

存款和储蓄器存取指令:

  • 存款和储蓄器存取指令用于通用存放器与内部存款和储蓄器单元之间
![](https://upload-images.jianshu.io/upload_images/6308419-79444ffee1fa9494.png)
  • 例如
 LDR    r0,[r1],#4      ;r1+4->r0(基址变址寻址)
 STRNEB r2,[r3,r4]      ;NE符合-将r2低8位数写到[r3+r4]内存单元(寄存器间接寻址)
 LDRSH  r5,[r6,#8]!     ;[r6+8]->r5(半字节),r5中高16位设置成该字节的符号位
 STMFD  sp!,{r0,r2-r7,r10}  ;出栈(多寄存器寻址)
  • STR :从寄放器中将32bits字数据存款和储蓄到内部存储器中

图片 3

  • LDM/STM(出栈/入栈) 用于基址存放器所指的一片一连内部存款和储蓄器到存放器列表中的八个贮存器之间的数额传送。

    图片 4

PSTiguan 读写指令

  • M福睿斯S 将CPSLacrosse/SPS奇骏的内容读取到通用贮存器中
  • MSLX570 将通用寄放器的值写到CPSTiggo/SPSXC90的一定位域(f,c)中

图片 5

  • 例如
MRS R0, CPSR     ;R0 = CPSR 
MSR CPSR_c, R0   ;CPSR [c] = R0

ARM 跳转分支指令

  • B <label>
    PC 相对寻址
  • BL <子程序>
    封存重回地址到 LWrangler
    回去时从 LXC90 复苏 PC
    对于 non-leaf 函数(func1), L奥迪Q5 必需压栈保存

图片 6

ARM条件实践与标识位

  • ARM指令能够通过丰硕合适的条件码后缀的办法使其尺度实践

图片 7

  • 更仆难数情状下,数据管理指令不影响条件码标识位,但能够拉长"S"后缀来改造标识位意况。

图片 8

常用条件码如下:

图片 9

  • 例如:
  1. if (a==0) func(1);
CMP      r0,#0�
MOVEQ    r0,#1
�BLEQ     func
  1. if (a==0) x=0;�
    if (a>0) x=1;
CMP      r0,#0
�MOVEQ    r1,#0�
MOVGT    r1,#1�
  1. if (a==4 || a==10) x=0;
CMP      r0,#4
�CMPNE    r0,#10�
MOVEQ    r1,#0