AVR汇编语言如何实现如 LJMP @A+DPTR这样的散转结构
2008-01-22 13:08
393 查看
2007-12-24 15:59:03
.include "8515def.inc"
.dseg
keyone: .byte 1
.cseg
rjmp reset
.org 0x10
RESET:
ldi r16,low(RAMEND) ; ram 的顶端
ldi r17,high(RAMEND)
out spl,r16 ; 设置堆栈指针指向ram顶部
out sph,r17
ldi r16,1
sts keyone,r16 ;变量初始化
L2:
lds R20,keyone
ldi R24,low(L8) ;取散转表首地址
ldi R25,high(L8)
clr r21
subi r20,1 ;计算表内偏移量
sbci r21,0
lsl r20 ;注意对FLASH的地址是字寻址
rol r21
add r24,r20 ;相当于 @a+dptr
adc r25,r21
mov R30,R24
mov R31,R25
ijmp ;间接跳转指令,指向 z=r30,31
L8:
rcall prog1
rjmp L6
rcall prog2
rjmp L6
rcall prog3
rjmp L6
rcall prog4
rjmp L6
rcall prog5
L6:
NOP
rjmp L2
ret
prog1:
ldi R24,2
sts keyone,R24
ret
prog2:
ldi R24,3
sts keyone,R24
ret
prog3:
ldi R24,4
sts keyone,R24
ret
prog4:
ldi R24,5
sts keyone,R24
ret
prog5:
ldi R24,1
sts keyone,R24
ret
.include "8515def.inc"
.dseg
keyone: .byte 1
.cseg
rjmp reset
.org 0x10
RESET:
ldi r16,low(RAMEND) ; ram 的顶端
ldi r17,high(RAMEND)
out spl,r16 ; 设置堆栈指针指向ram顶部
out sph,r17
ldi r16,1
sts keyone,r16 ;变量初始化
L2:
lds R20,keyone
ldi R24,low(L8) ;取散转表首地址
ldi R25,high(L8)
clr r21
subi r20,1 ;计算表内偏移量
sbci r21,0
lsl r20 ;注意对FLASH的地址是字寻址
rol r21
add r24,r20 ;相当于 @a+dptr
adc r25,r21
mov R30,R24
mov R31,R25
ijmp ;间接跳转指令,指向 z=r30,31
L8:
rcall prog1
rjmp L6
rcall prog2
rjmp L6
rcall prog3
rjmp L6
rcall prog4
rjmp L6
rcall prog5
L6:
NOP
rjmp L2
ret
prog1:
ldi R24,2
sts keyone,R24
ret
prog2:
ldi R24,3
sts keyone,R24
ret
prog3:
ldi R24,4
sts keyone,R24
ret
prog4:
ldi R24,5
sts keyone,R24
ret
prog5:
ldi R24,1
sts keyone,R24
ret
相关文章推荐
- AVR汇编语言如何实现如 LJMP @A+DPTR这样的散转结构
- 编译器是如何用汇编语言实现C++的虚函数表和隐式传递this指针(一)
- 若用MASM写操作系统的启动部分如何实现? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- 编译器是如何用汇编语言实现C++的虚函数表和隐式传递this指针(三)
- AVR汇编语言实现的问题和AX寄存器的问题
- 用汇编语言实现结构体的输入和保存
- 编译器是如何用汇编语言实现C++的虚函数表和隐式传递this指针(二)
- [VB.NET]求如何用VB.NET语言+ACCECC数据库实现一个对会员等级自动升级功能!
- c语言元素实现汇编分析
- 汇编语言实现简单的冒泡排序
- 我是如何从汇编语言脑残粉转变的
- 如何实现这样的盗链功能?
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现地图定位时的地点微调功能
- 汇编语言实现两个任意大的数相加
- 如何用 ANTLR 4 实现自己的脚本语言?
- java编程如何实现多条2017-08-08 22:10:00.0这样的时间数据,相差多少天?(隔24小时为相差1天,否则为0天)
- .Net语言 APP开发平台——Smobiler学习日志:开发APP时,如何快速地实现屏幕自适应
- 不用定时器和汇编语言,只用C语言实现精确无误的延时
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现快递信息流的效果
- C语言switch语句的汇编语言实现