虽然机器码和内存地址领证在一起了,但是俩个人都和汇编指令有着说不清的关系,机器码的前任是汇编指令,而汇编指令又与内存地址暗地相通,这究竟是道德的沦丧还是人性的扭曲,今天就让我来领大家细细分解这三者的前世今生!!!
之前我们使用汇编语言编写了点亮LED程序,.S文件通过FTP传到Ubuntu中,通过交叉编译工具生成.bin文件传回本机,然后通过oflash烧写进裸机的Nand FLASH,从而点亮LED。
这里分析一下汇编代码在此过程中的意义,内存地址、机器码与汇编指令三者之间的联系。
一.原汇编代码
汇编代码如下:
.text
.global _start
_start: ;程序从这里开始
ldr r1, =0X56000050 ;将地址存在r1
ldr r0, =0X100 ;将值存在r0
str r0, [r1] ;将r0的值写入[]中的地址
ldr r1, =0X56000054 ;同上
ldr r0, =0
str r0, [r1]
halt: ;死循环
b halt ;一直跳转到halt
简单解释一下代码:
要点亮LED,就要将GPF4引脚输出低电平,通过在GPFCON和GPFDAT寄存器中的对应位写入值来实现,即对0X56000050地址中写入0X100,对0X56000054地址中写入0 。
用到的汇编代码指令如下:
ldr(load):读内存命令
str(store):写内存命令
b:跳转
mov(move):赋值
二.反汇编代码
编译器会将汇编指令转换成机器码,而机器码又存放在内存地址中!!!通过反汇编指令可以得到反汇编文件,里面有内存地址、机器码与汇编指令三者的