jz2440裸机开发与分析: 点亮LED灯之汇编语言

LED原理图及2440寄存器说明

jz2440裸机开发与分析: 点亮LED灯之汇编语言_第1张图片
jz2440裸机开发与分析: 点亮LED灯之汇编语言_第2张图片
jz2440裸机开发与分析: 点亮LED灯之汇编语言_第3张图片

汇编语言编写控制LED灯

.text           /*.text部分是处理器开始执行代码的地方,指定了后续编译出来的内容放在代码段*/
.global _start; /*.global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用;*/
                /* 告诉编译器后续跟的是一个全局可见的名字*/
                /*.global _start让_start符号成为可见的标识符,*/
				/*这样链接器就知道跳转到程序中的什么地方并开始执行程序*/
_start:         /*_start是一个函数的起始地址,也是编译、链接后程序的起始地址*/

ldr r0, =0x56000050 /*GPFCON 地址*/
ldr r1, =0x0100
str r1, [r0]

ldr r0, =0x56000054 /*GPFDAT 地址*/
ldr r1, =0
ldr r1, [r0]

halt:
	b halt

① .text
.text部分是处理器开始执行代码的地方,指定了后续编译出来的内容放在代码段【可执行】
arm-linux-gcc编译器的关键词
② .global
.global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用;告诉编译器后续跟的是一个全局可见的名字【变量/函数名】
.global _start让_start符号成为可见的标识符,这样链接器就知道跳转到程序中的什么地方并开始执行程序。
③ _start
_start是一个函数的起始地址,也是编译、链接后程序的起始地址。
由于程序是通过加载器来加载的,必然要找到_start名字的函数,因此_start必须定义成全局的,以便存在于编译后的全局符号表中,供其他程序【如:加载器】寻找到。

ARM指令集–ldr、mov与str的用法与区别

  1. mov的用法
    在ARM体系中,mov只能用于数据在寄存器之间的移动或者往寄存器中写入立即数。格式如下:mov{条件}{s} 目的寄存器,源操作数
MOV     R1,R2    ;R1=R2
  1. ldr的用法
    LDR是将内存中的数载入到寄存器,LDR可以载入立即数。格式如下:LDR 目的寄存器,源
LDR     R1,=0xE0000000  ;R1=0xE0000000
LDR     R1,0xE0000000   ;将内存中地址为0xE0000000的内容载入到R1
LDR     R1,[R0]         ;将R0中的数所指定的地址的内容传输到R1
  1. str的用法
    STR是将寄存器中的数字载入内存。格式如下:STR{条件} 源寄存器,<存储器地址>
STR     R1,[R0]     ;将R1中的内容传输到R0中的数所指定的地址的内存中去
  1. 他们之间的区别
    mov 只能用于寄存器之间的传输,传输立即数时有条件限制,只能装载通过偶数次移位能得到的立即数。
    str/ldr 可以用于寄存器与内存之间的数据交换,STR是将寄存器中的数载入内存,LDR是将内存中的数载入到寄存器,LDR可以载入立即数。
    并且LDR在往寄存器中载入立即数时,不受立即数的限制,而mov受其限制。

参考文献

添加链接描述
jz2440裸机开发与分析: 点亮LED灯之C语言1

你可能感兴趣的:(JZ2440学习笔记)