请高手分析一下这段汇编代码
WTCON EQU 0x53000000GPBCON EQU 0x56000010
GPBDAT EQU 0x56000014
IMPORT main
CODE32
AREA Init,CODE,READONLY
;ENTRY
ldr r0,=WTCON
ldr r1,=0x00
str r1,
b main
;ldr r0,=GPBCON
;ldr r1,=0x155500
;str r1,
;ldr r0,=GPBDAT
;loop
; ldr r1,=0x1c0
; str r1,
; bl delay
; ldr r1,=0x1a0
; str r1,
; bl delay
; ldr r1,=0x160
; str r1,
; bl delay
; ldr r1,=0xe0
; str r1,
; bl delay
; b loop
;delay
; ldr r2,=0x15400
;delay1
; subs r2,r2,#1
; bne delay1
; mov pc,lr
;
end
#include <stdio.h>
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
void delay()
{
int i=90000;
for(i;i>=0;i--)
;
}
int main()
{
GPBCON=0x155500;
while(1)
{
GPBDAT=0x1c0;
delay();
GPBDAT=0x1a0;
delay();
GPBDAT=0x160;
delay();
GPBDAT=0xe0;
delay();
}
}
这是一段流水灯的代码,本人菜鸟看不懂汇编,请高手分析一下 晕死!这不是我写的代码吗??哪里看不懂了!? 下面是我写的注释:
//这里其实把C的部分完全去掉,然后把汇编的部分的注释去掉效果是一样的!你可以试试!
WTCON EQU 0x53000000 //看门狗控制器的地址
GPBCON EQU 0x56000010 //POARTB的控制寄存器地址
GPBDAT EQU 0x56000014 //POARTB的寄存器地址
IMPORT main //相当于C语言中的引入全局变量extern
CODE32 //32位代码段
AREA Init,CODE,READONLY //定义一个代码段,ARM汇编中至少有一个代码段
;ENTRY //程序入口点
ldr r0,=WTCON //这个没什么好说的了,关闭看门狗自己可以看看手册
ldr r1,=0x00
str r1,
b main //跳转到main()
;ldr r0,=GPBCON
;ldr r1,=0x155500
;str r1,
;ldr r0,=GPBDAT
;loop
; ldr r1,=0x1c0
; str r1,
; bl delay
; ldr r1,=0x1a0
; str r1,
; bl delay
; ldr r1,=0x160
; str r1,
; bl delay
; ldr r1,=0xe0
; str r1,
; bl delay
; b loop
;delay
; ldr r2,=0x15400
;delay1
; subs r2,r2,#1
; bne delay1
; mov pc,lr
;
end
#include <stdio.h>
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
void delay()
{
int i=90000;
for(i;i>=0;i--)
;
}
int main()
{
GPBCON=0x155500;
while(1)
{
GPBDAT=0x1c0;
delay();
GPBDAT=0x1a0;
delay();
GPBDAT=0x160;
delay();
GPBDAT=0xe0;
delay();
}
} 1# wangpeihui123
这里没有设置一下堆栈就跳转,行么? 4# embedsky_lxt
完全可以的!你可以试试! 怎么设置一下堆栈就跳转 为什么要设置一下堆栈就跳转 堆栈设置好了,跳转时,PC的运行地址可以保存,等待运行完毕返回。
页:
[1]