主题 : (汇编)编译后只有84字节的Tiny6410裸机程序:LED跑马灯 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 45773
精华: 2
发帖: 56
金钱: 415 两
威望: 83 点
贡献值: 2 点
综合积分: 152 分
注册时间: 2011-05-07
最后登录: 2012-01-21
楼主  发表于: 2011-06-19 11:54

 (汇编)编译后只有84字节的Tiny6410裸机程序:LED跑马灯

管理提醒: 本帖被 xoom 执行加亮操作(2011-06-19)
rGPKCON0     EQU 0x7F008800;S3C6410GPK端口配置寄存器0(GPK0-GPK7)                        
                        AREA    LED1,CODE,READONLY    ; 声明代码段LED1
                        ENTRY                ; 标识程序入口
                        CODE32                ; 声明32位ARM指令            
START
                        ldr r0,=rGPKCON0;给寄存器R0赋值GPK端口配置寄存器0的地址
loop
                        ldr r1,=0x00010000;打开GPK4针脚.GPKCON0寄存器,从左到右第一位是7第二位是6第三位是5第四位是4.
                        str r1,[r0];由于寄存器R0中储存内容为GPK端口配置寄存器0的地址,所以寄存器R1的内容会写入GPK端口配置寄存器0
                        bl delay;跳转到延迟函数位置执行程序,并且记下当前PC指针数据到r14(lr)寄存器以备返回
                        ldr r1,=0x00100000;打开GPK5针脚指令
                        str r1,[r0];写指令
                        bl delay;延迟
                        ldr r1,=0x01000000;打开GPK6针脚指令
                        str r1,[r0];写指令
                        bl delay;延迟
                        ldr r1,=0x10000000;打开GPK7针脚指令
                        str r1,[r0];些指令
                        bl delay;延迟
                        b loop;跳转到loop标签,达到程序无限循环
delay
                        ldr r3,=0x4ffff;将要延迟的时间(循环次数)写入
tag
                        sub r3,r3,#1;可以理解为r3=r3-1
                        cmp r3,#0x0;判断寄存器r3是否等于0
                        bne tag;b为arm跳转指令ne为条件码(不相等)即:寄存器r3不等于0则跳转到tag标记
                        mov pc,lr;将bl指令处储存的地址写入pc程序指针寄存器达到跳转的效果        
                        END
[ 此帖被ici2cc在2011-06-21 16:14重新编辑 ]
级别: 新手上路
UID: 125580
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2016-05-28
最后登录: 2017-05-27
1楼  发表于: 2016-10-04 09:50
wolainale