天嵌 ARM开发社区

 找回密码
 注册
查看: 2202|回复: 7

请高手分析一下这段汇编代码

[复制链接]
wangpeihui123 发表于 2010-9-14 15:48:29 | 显示全部楼层 |阅读模式
WTCON EQU 0x53000000
GPBCON EQU 0x56000010
GPBDAT EQU 0x56000014

        IMPORT main

        CODE32
        AREA Init,CODE,READONLY
       
        ;ENTRY
       
        ldr r0,=WTCON
        ldr r1,=0x00
        str r1,[r0]
       
        b main
       
        ;ldr r0,=GPBCON
        ;ldr r1,=0x155500
        ;str r1,[r0]
       
        ;ldr r0,=GPBDAT
       
;loop
       
;        ldr r1,=0x1c0
;        str r1,[r0]
;        bl delay
       
;        ldr r1,=0x1a0
;        str r1,[r0]
;        bl delay
       
;        ldr r1,=0x160
;        str r1,[r0]
;        bl delay
       
;        ldr r1,=0xe0
;        str r1,[r0]
;        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();
        }
}
       




这是一段流水灯的代码,本人菜鸟看不懂汇编,请高手分析一下
cumtwys 发表于 2010-9-14 16:28:08 | 显示全部楼层
晕死!这不是我写的代码吗??哪里看不懂了!?
cumtwys 发表于 2010-9-14 16:39:48 | 显示全部楼层
下面是我写的注释:
//这里其实把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,[r0]
        
        b main                        //跳转到main()
        
        ;ldr r0,=GPBCON
        ;ldr r1,=0x155500
        ;str r1,[r0]
        
        ;ldr r0,=GPBDAT
        
;loop
        
;        ldr r1,=0x1c0
;        str r1,[r0]
;        bl delay
        
;        ldr r1,=0x1a0
;        str r1,[r0]
;        bl delay
        
;        ldr r1,=0x160
;        str r1,[r0]
;        bl delay
        
;        ldr r1,=0xe0
;        str r1,[r0]
;        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();
        }
}
天嵌_support1 发表于 2010-9-14 16:43:59 | 显示全部楼层
1# wangpeihui123


这里没有设置一下堆栈就跳转,行么?
cumtwys 发表于 2010-9-14 16:46:06 | 显示全部楼层
4# embedsky_lxt
完全可以的!你可以试试!
 楼主| wangpeihui123 发表于 2010-9-18 14:40:07 | 显示全部楼层
怎么设置一下堆栈就跳转
 楼主| wangpeihui123 发表于 2010-9-18 14:44:15 | 显示全部楼层
为什么要设置一下堆栈就跳转
天嵌_support1 发表于 2010-9-18 15:20:27 | 显示全部楼层
堆栈设置好了,跳转时,PC的运行地址可以保存,等待运行完毕返回。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-29 18:17 , Processed in 1.046875 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表