第4章 ARM程序设计基础.pdf

上传人:qwe****56 文档编号:70015564 上传时间:2023-01-14 格式:PDF 页数:17 大小:188.25KB
返回 下载 相关 举报
第4章 ARM程序设计基础.pdf_第1页
第1页 / 共17页
第4章 ARM程序设计基础.pdf_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《第4章 ARM程序设计基础.pdf》由会员分享,可在线阅读,更多相关《第4章 ARM程序设计基础.pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、ARM 应用系统开发?解基于 S3C4510B 的系统?计 1 第第第第 4 章章章章 ARM 程序设计基础程序设计基础程序设计基础程序设计基础 ARM 编译器一般都支持汇编语言的程序?计和 C尾C为为语言的程序?计?及?者的混合编程?本章介绍 ARM 程序?计的一些基本概念?如 ARM 汇编语言的伪指?汇编语言的语句格式和汇编语言的程序结构等?时介绍 C尾C?和汇编语言的混合编程等问题?本章的?要内容?ARM 编译器所支持的伪指?汇编语言的语句格式?汇编语言的程序结构?相关的程序示例 4.1 ARM 汇编器所支持的伪指?在 ARM 汇编语言程序?有一些特殊指?符?些?符?指?系统的?符?没有

2、相对应的操作码?通常?些特殊指?符?伪指?他们所完成的操作?伪操作?伪指?在源程序中的作用是?完成汇编程序作各种准备?作的?些伪指?仅在汇编过程中起作用?一旦汇编结束?伪指?的使命就完成?在 ARM 的汇编程序中?有如?几种伪指?符号定义伪指?数据定义伪指?汇编控制伪指?宏指?及?他伪指?4.1.1 符号定义?Symbol Definition?伪指?符号定义伪指?用于定义 ARM 汇编程序中的变量?对变量赋值?及定义寄?器的?等操作?常见的符号定义伪指?有如?几种?用于定义全局变量的 GBLA?GBLL 和 GBLS?用于定义局部变量的 LCLA?LCLL 和 LCLS?用于对变量赋值的 S

3、ETA?SETL?SETS?通用寄?器列表定义?的 RLIST?1、GBLA、GBLL 和 GBLS 语法格式?GBLA?GBLL 或 GBLS?全局变量?GBLA?GBLL 和 GBLS 伪指?用于定义一个 ARM 程序中的全局变量?并将?初始化?中?GBLA 伪指?用于定义一个全局的数?变量?并初始化?0?GBLL 伪指?用于定义一个全局的逻辑变量?并初始化?F?假?GBLS 伪指?用于定义一个全局的?符串变量?并初始化?空?由于?条伪指?用于定义全局变量?因?在整个程序范围内变量?唯一?使用示例?GBLA Test1?定义一个全局的数?变量?变量?Test1 Test1 SETA 0 x

4、aa?将?变量赋值?0 xaa GBLL Test2?定义一个全局的逻辑变量?变量?Test2 Test2 SETL TRUE?将?变量赋值?真 GBLS Test3?定义一个全局的?符串变量?变量?Test3 Test3 SETS?Testing?将?变量赋值?Testing?ARM 应用系统开发?解基于 S3C4510B 的系统?计 2 2、LCLA、LCLL 和 LCLS 语法格式?LCLA?LCLL 或 LCLS?局部变量?LCLA?LCLL 和 LCLS 伪指?用于定义一个 ARM 程序中的局部变量?并将?初始化?中?LCLA 伪指?用于定义一个局部的数?变量?并初始化?0?LCLL

5、 伪指?用于定义一个局部的逻辑变量?并初始化?F?假?LCLS 伪指?用于定义一个局部的?符串变量?并初始化?空?条伪指?用于声明局部变量?在?作用范围内变量?唯一?使用示例?LCLA Test4?声明一个局部的数?变量?变量?Test4 Test3 SETA 0 xaa?将?变量赋值?0 xaa LCLL Test5?声明一个局部的逻辑变量?变量?Test5 Test4 SETL TRUE?将?变量赋值?真 LCLS Test6?定义一个局部的?符串变量?变量?Test6 Test6 SETS?Testing?将?变量赋值?Testing?3、SETA、SETL 和 SETS 语法格式?变量

6、?SETA?SETL 或 SETS?表达式 伪指?SETA?SETL?SETS 用于给一个已经定义的全局变量或局部变量赋值?SETA 伪指?用于给一个数学变量赋值?SETL 伪指?用于给一个逻辑变量赋值?SETS 伪指?用于给一个?符串变量赋值?中?变量?已经定义过的全局变量或局部变量?表达式?将要赋给变量的值?使用示例?LCLA Test3?声明一个局部的数?变量?变量?Test3 Test3 SETA 0 xaa?将?变量赋值?0 xaa LCLL Test4?声明一个局部的逻辑变量?变量?Test4 Test4 SETL TRUE?将?变量赋值?真 4?RLIST 语法格式?RLIST

7、寄?器列表 RLIST 伪指?用于对一个通用寄?器列表定义?使用?伪指?定义的?在 ARM 指?LDM/STM 中使用?在 LDM/STM 指?中?列表中的寄?器?问次序?根据寄?器的编号由?到高?而?列表中的寄?器排列次序无关?使用示例?RegList RLIST R0-R5?R8?R10?将寄?器列表?定义?RegList?在ARM指?LDM/STM中通过?问寄?器列表?4.1.2 数据定义?Data Definition?伪指?数据定义伪指?一般用于?特定的数据?配?储单元?时?完成已?配?储单元的初始化?常见的数据定义伪指?有如?几种?DCB 用于?配一片连续的?节?储单元并用指定的数

8、据初始化?DCW?DCWU?用于?配一片连续的半?储单元并用指定的数据初始化?DCD?DCDU?用于?配一片连续的?储单元并用指定的数据初始化?DCFD?DCFDU?用于?双精度的浮点数?配一片连续的?储单元并用指定的数据初始化?ARM 应用系统开发?解基于 S3C4510B 的系统?计 3 DCFS?DCFSU?用于?单精度的浮点数?配一片连续的?储单元并用指定的数据初始化?DCQ?DCQU?用于?配一片?8?节?单?的连续的?储单元并用指定的数据初始化?SPACE 用于?配一片连续的?储单元 MAP 用于定义一个结构化的内?表首地址 FIELD 用于定义一个结构化的内?表的数据域 1、DC

9、B 语法格式?号 DCB 表达式 DCB 伪指?用于?配一片连续的?节?储单元并用伪指?中指定的表达式初始化?中?表达式?0255 的数?或?符串?DCB 也?用?=?替?使用示例?Str DCB?This is a test!?配一片连续的?节?储单元并初始化?2、DCW?或 DCWU?语法格式?号 DCW?或 DCWU?表达式 DCW?或 DCWU?伪指?用于?配一片连续的半?储单元并用伪指?中指定的表达式初始化?中?表达式?程序?号或数?表达式?用 DCW?配的?储单元是半?对齐的?而用 DCWU?配的?储单元并?格半?对齐?使用示例?DataTest DCW 1?2?3?配一片连续的半

10、?储单元并初始化?3、DCD?或 DCDU?语法格式?号 DCD?或 DCDU?表达式 DCD?或 DCDU?伪指?用于?配一片连续的?储单元并用伪指?中指定的表达式初始化?中?表达式?程序?号或数?表达式?DCD 也?用?&?替?用 DCD?配的?储单元是?对齐的?而用 DCDU?配的?储单元并?格?对齐?使用示例?DataTest DCD 4?5?6?配一片连续的?储单元并初始化?4、DCFD?或 DCFDU?语法格式?号 DCFD?或 DCFDU?表达式 DCFD?或 DCFDU?伪指?用于?双精度的浮点数?配一片连续的?储单元并用伪指?中指定的表达式初始化?每个双精度的浮点数占据?个?

11、单元?用 DCFD?配的?储单元是?对齐的?而用 DCFDU?配的?储单元并?格?对齐?使用示例?FDataTest DCFD 2E115?-5E7?配一片连续的?储单元并初始化?指定的双精度数?5、DCFS?或 DCFSU?语法格式?号 DCFS?或 DCFSU?表达式 DCFS?或 DCFSU?伪指?用于?单精度的浮点数?配一片连续的?储单元并用伪指?中指定的表达式初始化?每个单精度的浮点数占据一个?单元?用 DCFS?配的?储单元是?对齐的?而用 DCFSU?配的?储单元并?格?对齐?使用示例?FDataTest DCFS 2E5?-5E?7?配一片连续的?储单元并初始化?指定的单精度数

12、?ARM 应用系统开发?解基于 S3C4510B 的系统?计 4 6、DCQ(或 DCQU?语法格式?号 DCQ?或 DCQU?表达式 DCQ?或 DCQU?伪指?用于?配一片?8 个?节?单?的连续?储区域并用伪指?中指定的表达式初始化?用 DCQ?配的?储单元是?对齐的?而用 DCQU?配的?储单元并?格?对齐?使用示例?DataTest DCQ 100?配一片连续的?储单元并初始化?指定的值?7、SPACE 语法格式?号 SPACE 表达式 SPACE 伪指?用于?配一片连续的?储区域并初始化?0?中?表达式?要?配的?节数?SPACE 也?用?替?使用示例?DataSpace SPAC

13、E 100?配连续 100?节的?储单元并初始化?0?8、MAP 语法格式?MAP 表达式?基址寄?器 MAP 伪指?用于定义一个结构化的内?表的首地址?MAP 也?用?替?表达式?程序中的?号或数学表达式?基址寄?器?选?当基址寄?器选?在时?表达式的值即?内?表的首地址?当?选?在时?内?表的首地址?表达式的值?基址寄?器的和?MAP 伪指?通常?FIELD 伪指?配合使用来定义结构化的内?表?使用示例?MAP 0 x100?R0?定义结构化内?表首地址的值?0 x100?R0?9、F存LED 语法格式?号 FIELD 表达式 FIELD 伪指?用于定义一个结构化内?表中的数据域?FILE

14、D 也?用?#?替?表达式的值?当前数据域在内?表中所占的?节数?FIELD 伪指?常?MAP 伪指?配合使用来定义结构化的内?表?MAP 伪指?定义内?表的首地址?FIELD 伪指?定义内?表中的各个数据域?并?每个数据域指定一个?号供?他的指?引用?注意 MAP 和 FIELD 伪指?仅用于定义数据结构?并?实际?配?储单元?使用示例?MAP 0 x100?定义结构化内?表首地址的值?0 x100?A FIELD 16?定义 A 的长度?16?节?置?0 x100 B FIELD 32?定义 B 的长度?32?节?置?0 x110 S FIELD 256?定义 S 的长度?256?节?置?

15、0 x130 4.1.3 汇编控制?Assembly Control?伪指?汇编控制伪指?用于控制汇编程序的执行流程?常用的汇编控制伪指?包括?几条?IF?ELSE?ENDIF WHILE?WEND MACRO?MEND MEXIT ARM 应用系统开发?解基于 S3C4510B 的系统?计 5 1、存F、ELSE、END存F 语法格式?IF 逻辑表达式 指?序列 1 ELSE 指?序列 2 ENDIF IF?ELSE?ENDIF 伪指?能根据条件的成立?否决定是否执行某个指?序列?当 IF?面的逻辑表达式?真?则执行指?序列 1?否则执行指?序列 2?中?ELSE 及指?序列 2?没有?时?

16、当 IF?面的逻辑表达式?真?则执行指?序列 1?否则继续执行?面的指?IF?ELSE?ENDIF 伪指?嵌套使用?使用示例?GBLL Test?声明一个全局的逻辑变量?变量?Test IF Test=TRUE 指?序列 1 ELSE 指?序列 2 ENDIF 2、W字存LE、WEND 语法格式?WHILE 逻辑表达式 指?序列 WEND WHILE?WEND 伪指?能根据条件的成立?否决定是否循?执行某个指?序列?当 WHILE?面的逻辑表达式?真?则执行指?序列?指?序列执行完毕?再判断逻辑表达式的值?若?真则继续执行?一直到逻辑表达式的值?假?WHILE?WEND 伪指?嵌套使用?使用示

17、例?GBLA Counter?声明一个全局的数学变量?变量?Counter Counter SE正A 3?由变量 Counter 控制循?次数 WHILE Counter?=?=?/=?运算符?X 和 Y 表示?个逻辑表达式?的运算符?表的运算如?X=Y 表示 X 等于 Y?X Y 表示 X 大于 Y?X=Y 表示 X 大于等于 Y?X=Y 表示 X 小于等于 Y?X/=Y 表示 X?等于 Y?X Y 表示 X?等于 Y?LAND?LOR?LNOT?及?LEOR?运算符?X 和 Y 表示?个逻辑表达式?的逻辑运算符?表的运算如?X?LAND?Y 表示将 X 和 Y 作逻辑?的操作?X?LOR?

18、Y 表示将 X 和 Y 作逻辑或的操作?LNOT?Y 表示将 Y 作逻辑非的操作?X?LEOR?Y 表示将 X 和 Y 作逻辑异或的操作?3、?符串表达式及运算符?符串表达式一般由?符串常量?符串变量?运算符和括号构成?编译器所支持的?符串最大长度?512?节?常用的?符串表达式相关的运算符如?ARM 应用系统开发?解基于 S3C4510B 的系统?计 12 LEN 运算符 LEN 运算符返回?符串的长度?符数?X 表示?符串表达式?语法格式如?LEN?X CHR 运算符 CHR 运算符将 0255 之间的整数转换?一个?符?M 表示某一个整数?语法格式如?CHR?M STR 运算符 STR

19、运算符将将一个数?表达式或逻辑表达式转换?一个?符串?对于数?表达式?STR 运算符将?转换?一个?十六进制组成的?符串?对于逻辑表达式?STR 运算符将?转换?符串 T 或F?语法格式如?STR?X?中?X?一个数?表达式或逻辑表达式?LEFT 运算符 LEFT 运算符返回某个?符串?端的一个子串?语法格式如?X?LEFT?Y?中?X?源?符串?Y?一个整数?表示要返回的?符个数?RIGHT 运算符?LEFT 运算符相对应?RIGHT 运算符返回某个?符串右端的一个子串?语法格式如?X?RIGHT?Y?中?X?源?符串?Y?一个整数?表示要返回的?符个数?CC 运算符 CC 运算符用于将?个

20、?符串连接成一个?符串?语法格式如?X?CC?Y?中?X?源?符串 1?Y?源?符串 2?CC 运算符将 Y 连接到 X 的?面?4、与寄?器和程序计数器?PC?相关的表达式及运算符 常用的?寄?器和程序计数器?PC?相关的表达式及运算符如?BASE 运算符 BASE 运算符返回基于寄?器的表达式中寄?器的编号?语法格式如?BASE?X?中?X?寄?器相关的表达式?INDEX 运算符 INDEX 运算符返回基于寄?器的表达式中相对于?基址寄?器的偏移量?语法格式如?INDEX?X?中?X?寄?器相关的表达式?5、其他常用运算符?运算符?运算符返回某?码行所生成的?执行?码的长度?例如?X 返回

21、定义符号 X 的?码行所生成的?执行?码的?节数?DEF 运算符 DEF 运算符判断是否定义某个符号?例如?DEF?X 如果符号 X 已经定义?则结果?真?否则?假?ARM 应用系统开发?解基于 S3C4510B 的系统?计 134.3 汇编语言的程序结构 4.3.1 汇编语言的程序结构 在 ARM?Thumb?汇编语言程序中?程序段?单?组?码?段是相对独立的指?或数据序列?有特定的?段?码段和数据段?码段的内容?执行?码?数据段?放?码运行时需要用到的数据?一个汇编程序至少应?有一个?码段?当程序较长时?割?多个?码段和数据段?多个段在程序编译链接时最?形成一个?执行的映象文件?执行映象文

22、件通常由?几部?构成?一个或多个?码段?码段的属性?只读?零个或多个包?初始化数据的数据段?数据段的属性?读写?零个或多个?包?初始化数据的数据段?数据段的属性?读写?链接器根据系统默认或用户?定的规则?将各个段?排在?储器中的相应?置?因?源程序中段之间的相对?置?执行的映象文件中段的相对?置一般?会相?是一个汇编语言源程序的基本结构?AREA Init?CODE?READONLY ENTRY Start LDR R0?=0 x3FF5000 LDR R1?0 xFF STR R1?R0 LDR R0?=0 x3FF5008 LDR R1?0 x01 STR R1?R0 END 在汇编语言程

23、序中?用 AREA 伪指?定义一个段?并说明所定义段的相关属性?本例定义一个?Init 的?码段?属性?只读?ENTRY 伪指?识程序的入口点?接?来?指?序列?程序的?END 伪指?伪指?告诉编译器源文件的结束?每一个汇编程序段都?有一条 END 伪指?指示?码段的结束?4.3.2 汇编语言的子程序调用 在 ARM 汇编语言程序中?子程序的调用一般是通过 BL 指?来实?的?在程序中?使用指?BL 子程序?即?完成子程序的调用?指?在执行时完成如?操作?将子程序的返回地址?放在连接寄?器 LR 中?时将程序计数器 PC 指向子程序的入口点?当子程序执行完毕需要返回调用处时?只需要将?放在 L

24、R 中的返回地址?新拷贝给程序计数器 PC 即?在调用子程序的?时?也?完成参数的传递和从子程序返回运算的结果?通常?使用寄?器 R0R3 完成?是使用 BL 指?调用子程序的汇编语言源程序的基本结构?AREA Init?CODE?READONLY ENTRY Start LDR R0?=0 x3FF5000 LDR R1?0 xFF STR R1?R0 ARM 应用系统开发?解基于 S3C4510B 的系统?计 14LDR R0?=0 x3FF5008 LDR R1?0 x01 STR R1?R0 BL PRINT_TEXT PRINT_TEXT MOV PC?BL END 4.3.3 汇编

25、语言程序示例?是一个基于 S3C4510B 的串行通?程序?关于 S3C4510B 的串行通?的?作原理?参考第六章的相关内容?在?仅向读者说明一个完整汇编语言程序的基本结构?;*;Institute of Automation,Chinese Academy of Sciences;Description:This example shows the UART communication!;Author:JuGuang,Lee;Date:;*UARTLCON0 EQU 0 x3FFD000 UARTCONT0 EQU 0 x3FFD004 UARTSTAT0 EQU 0 x3FFD008 U

26、TXBUF0 EQU 0 x3FFD00C UARTBRD0 EQU 0 x3FFD014 AREA Init,CODE,READONLY ENTRY;*;LED Display;*LDR R1,=0 x3FF5000 LDR R0,=&ff STR R0,R1 LDR R1,=0 x3FF5008 LDR R0,=&ff STR R0,R1;*;UART0 line control register;*LDR R1,=UARTLCON0 LDR R0,=0 x03 STR R0,R1;*;UART0 control regiser;*LDR R1,=UARTCONT0 LDR R0,=0 x

27、9 STR R0,R1;*;UART0 baud rate divisor regiser ARM 应用系统开发?解基于 S3C4510B 的系统?计 15;Baudrate=19200?对应于 50MHz 的系统?作频率;*LDR R1,=UARTBRD0 LDR R0,=0 x500 STR R0,R1;*;Print the messages!;*LOOP LDR R0,=Line1 BL PrintLine LDR R0,=Line2 BL PrintLine LDR R0,=Line3 BL PrintLine LDR R0,=Line4 BL PrintLine LDR R1,=0

28、 x7FFFFF LOOP1 SUBS R1,R1,#1 BNE LOOP1 B LOOP;*;Print line ;*PrintLine MOV R4,LR MOV R5,R0 Line LDRB R1,R5,#1 AND R0,R1,#&FF TST R0,#&FF MOVEQ PC,R4 BL PutByte B Line PutByte LDR R3,=UARTSTAT0 LDR R2,R3 TST R2,#&40 BEQ PutByte LDR R3,=UTXBUF0 STR R0,R3 MOV PC,LR Line1 DCB&A,&D,*,0 Line2 DCB&A,&D,Chi

29、nese Academy of Sciences,Institute of Automation,Complex System Lab.,0 Line3 DCB&A,&D,ARM Development Board Based on Samsung ARM S3C4510B.,0 Line4 DCB&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&A,&D,&ARM 应用系统开发?解基于 S3C4510B 的系统?计 16A,&D,&A,&D,0 END 4.3.4 汇编语言与 C/C+的混合编程

30、在应用系统的程序?计中?若所有的编程任?均用汇编语言来完成?作量是?想而知的?时?利于系统升?或应用软件移植?事实?ARM 体系结构支持 C/C?及?汇编语言的混合编程?在一个完整的程序?计的中?除了初始化部?用汇编语言完成?外?要的编程任?一般都用 C/C+完成?汇编语言?C/C+的混合编程通常有?几种方式?在 C/C?码中嵌入汇编指?在汇编程序和 C/C?的程序之间进行变量的互?汇编程序?C/C?程序间的相互调用?在?的几种混合编程技术中?遵?一定的调用规则?如物理寄?器的使用?参数的传递等?对于初学者来说?无疑显得过于烦琐?在实际的编程应用中?使用较多的方式是?程序的初始化部?用汇编语言

31、完成?然?用 C/C?完成?要的编程任?程序在执行时首先完成初始化过程?然?跳转到 C/C?程序?码中?汇编程序和 C/C?程序之间一般没有参数的传递?也没有频繁的相互调用?因?整个程序的结构显得相对简单?容易理解?是一个?种结构程序的基本示例?程序基于第五?六章所?述的硬件?;*;Institute of Automation,Chinese Academy of Sciences ;File Name:Init.s;Description:;Author:JuGuang,Lee;Date:;*IMPORT Main ;通知编译器?号?一个外部?号 AREA Init,CODE,READON

32、LY?定义一个?码段 ENTRY?定义程序的入口点 LDR R0,=0 x3FF0000?初始化系统配置寄?器?体内容?参考第五?六章 LDR R1,=0 xE7FFFF80 STR R1,R0 LDR SP,=0 x3FE1000?初始化用户堆?体内容?参考第五?六章 BL Main?跳转到 Main?函数处的 C/C+?码执行 END?识汇编程序的结束?的程序段完成一些简单的初始化?然?跳转到 Main?函数所?识的 C/C?码处执行?要的任?处的 Main 仅?一个?号?也?使用?他?C 语言程序中的 main?函数没有关系?/*Institute of Automation,Chine

33、se Academy of Sciences *File Name:main.c*Description:P0,P1 LED flash.*Author:JuGuang,Lee*Date:*/void Main(void)int i;*(volatile unsigned long*)0 x3ff5000)=0 x0000000f;ARM 应用系统开发?解基于 S3C4510B 的系统?计 17while(1)*(volatile unsigned long*)0 x3ff5008)=0 x00000001;for(i=0;i0 x7fFFF;i+);*(volatile unsigned long*)0 x3ff5008)=0 x00000002;for(i=0;i0 x7FFFF;i+);4.4 本章小节 本章介绍了 ARM 程序?计的一些基本概念?及在汇编语言程序?计中常见的伪指?汇编语言的基本语句格式等?汇编语言程序的基本结构等?时简单介绍了 C尾C?和汇编语言的混合编程等问题?些问题均?程序?计中的基本问题?希望读者掌握?注意本章最?的?个示例均?面章节介绍的基于 S3C4510B 的硬件?有关系?读者?参考第五?六章的相关内容?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁