- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
--
-
嵌入式系统 编程题汇编 (带答案 )
.一。从一数到十
COUNT EQU 0;定义变量 COUNT 的基地址
AREA Example1,CODE,READONL Y; 声明代码段 Example1 为只读
ENTRY ;标识程序入口
CODE32 ;声明 32 位 ARM 指令
START LDR R1,=COUNT ;将 0赋给 R1
MOV R0,#0 ; 执行 R0=0
STR R0,[R1] ;存储 R0 寄存器的数据到 R1 指向的存
储单元
LOOP LDR R1,=COUNT ;将 0赋给 R1
LDR R0,[R1] ;将 R1 中的数值作为地址, 取出此地址中的数据保存
R0 中
ADD R0,R0,#1 ;执行 R0=R0+1
CMP R0,#10 ;将 R0 与 10 进行比较
MOVHS R0,#0 ;若 R0 大于等于 10,则 R0=0
STR R0,[R1] ;存储 R0 寄存器的数据到 R1 指向的地
址单元
B LOOP ;跳转到 LOOP
END ;汇编文件结束
二, 9 的 8 次幂
X EQU 9 ;初始化 X 为 9
n EQU 8 ; 初始化 N 为 8
AREA Example3,CODE,READONL Y ; 生明代码段 Example3 为只读
ENTRY ; 标识程序入口路
CODE32 ;声明 32 位 ARM 指令
START LDR S P,=0x30003F00 ;把 0x30003F00 赋给 SP
R13)
LDR R0,=X ;把 9 赋给 R0
LDR R1,=n ;把 8 赋给 R1
BL POW ;跳转到 POW ,并把下一条指令地址存入到
R14 中
1
HALT B HALT ;等待跳转
POW STMFD SP!,{R1-R12,LR} ; 将 R1-R12 入栈,满递减堆栈
MOVS R2,R1 ;将 R1 赋给 R2,并影响标志位
MOVEQ R0,#1 ;若 Z=1, 则 R0=1
BEQ POW_END ;若 Z=1, 跳转到 POW_END
MOV R1,R0 ;将 R0 中值赋给 R1
SUB R2,R2,#1 ;将 R2-1 的只赋给 R2
POW_L1 BL DO_MUL ;跳转到 DO-MUL ,并把下一条指令地址存入
R14 中
SUBS R2,R2,#1 ;将 R2-1 的值赋给 R2,并影响标志
位
BNE POW_L1 ; 若 Z=0, 跳转到 POW_L1
POW_END LDMFD SP!,{R1-R12,PC} ;数据出栈,存入到 R1-R12,PC 中
DO_MUL MUL R0,R1,R0 ;把 R1*R0 的值赋给 R0
MOV PC,LR ;LR 中的值赋给 PC
END ;汇编结束
三:从一一直加到一百
程序清单(一)
C 语言实验参考程序
#define
uint8
unsigned char
;定义一个无符号字符常量
uint8
#define
uint32
unsigned int
;定义一个无符号整形常量
unint32
#define
N
100
;定义一个常量 N=100( 宏定义, 100用N 代替 )
uint32
sum;
; 定义 sum为无符号整型常量(声明一个
unsigned int 型的变量 sum)
void Main (void )
;主函数
{uint32
i;
; 定义无符号整型常量 i(声明一个 unsigned int 型的变量 i )
sum=0;
;sum初始值为 0
for( i=0;i=N;i++
)
;i 在 N内自增加 1( i从 0开始, i=N 时循环成立)
{sum+=i;}
;把 sum+i赋给 sum
while ( 1) ;
; 为真循环
}
程序清单(二) 简单的启动代码
IMPORT
|Image$$RO$$Limit |
;R0 输出段存储区域界限
IMPORT
|Image$$RW$$Base |
;RW 输出段运行时起始地址
IMPORT
|Image$$ZI$$Base |
;ZI 输出段运行时起始地址
IMPORT
|Image$$ZI$$Limit |
;ZI 输出段存储区域界限
IMPORT
Main
;主函数
2
AREA
Start,CODE,READONL Y
;声明代码段 start,为只读
ENTRY
;程序入口
CODE32
;声明 32位ARM 指令
Reset
LDR
SP,=0x40003f00
; 将 0x40003f00 赋给 SP
LDR
R0,=|Image$$RO$$Limit| ; 将 R0
文档评论(0)