简单点说,就是你自己通常写的C语言程序是在用户模式下运行的。 *** 作系统的汇编部分在管理模式和系统模式运行,系统模式是为了解决 *** 作系统在管理模式下不能访问用户模式下的部分寄存而设立的。其它的还有快速中断模式,快速中断模式,数据访问终止模式,定义指令终止模式。你说的“一般”如果是指自己写的程序,应该是在用户模式下运行的。希望对您有帮助。
格式 AREA sectionname{,ATtr}{,ATtr}
AREA指令指示汇编程序汇编新的代码节或数据节。节是不可分的已命名独立代码或数据块,它们由链接器处理。
CODE包含机器指令。READONLY 是缺省值。
(与DATA包含数据,不包含指令。READWRITE 是缺省值相对应)
你给的例子意思是定义名为 Exch 的只读代码节
在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的 *** 作码,通常称这些特殊指令助记符为伪指令,他们所完成的 *** 作称为伪 *** 作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。
在ARM的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。
411 符号定义(Symbol Definition)伪指令
符号定义伪指令用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等 *** 作。常见的符号定义伪指令有如下几种:
— 用于定义全局变量的GBLA、GBLL和GBLS。
— 用于定义局部变量的LCLA、LCLL和LCLS。
— 用于对变量赋值的SETA、SETL、SETS。
— 为通用寄存器列表定义名称的RLIST。
1、 GBLA、GBLL和GBLS
语法格式:
GBLA(GBLL或GBLS) 全局变量名
GBLA、GBLL和GBLS伪指令用于定义一个ARM程序中的全局变量,并将其初始化。其中:
GBLA伪指令用于定义一个全局的数字变量,并初始化为0;
GBLL伪指令用于定义一个全局的逻辑变量,并初始化为F(假);
GBLS伪指令用于定义一个全局的字符串变量,并初始化为空;
由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。
使用示例:
GBLA Test1 ;定义一个全局的数字变量,变量名为Test1
Test1 SETA 0xaa ;将该变量赋值为0xaa
GBLL Test2 ;定义一个全局的逻辑变量,变量名为Test2
Test2 SETL {TRUE} ;将该变量赋值为真
GBLS Test3 ;定义一个全局的字符串变量,变量名为Test3
Test3 SETS “Testing” ;将该变量赋值为“Testing”
2、 LCLA、LCLL和LCLS
语法格式:
LCLA(LCLL或LCLS) 局部变量名
LCLA、LCLL和LCLS伪指令用于定义一个ARM程序中的局部变量,并将其初始化。其中:
LCLA伪指令用于定义一个局部的数字变量,并初始化为0;
LCLL伪指令用于定义一个局部的逻辑变量,并初始化为F(假);
LCLS伪指令用于定义一个局部的字符串变量,并初始化为空;
以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。
使用示例:
LCLA Test4 ;声明一个局部的数字变量,变量名为Test4
Test3 SETA 0xaa ;将该变量赋值为0xaa
LCLL Test5 ;声明一个局部的逻辑变量,变量名为Test5
Test4 SETL {TRUE} ;将该变量赋值为真
LCLS Test6 ;定义一个局部的字符串变量,变量名为Test6
Test6 SETS “Testing” ;将该变量赋值为“Testing”
3、 SETA、SETL和SETS
语法格式:
变量名 SETA(SETL或SETS) 表达式
伪指令SETA、SETL、SETS用于给一个已经定义的全局变量或局部变量赋值。
SETA伪指令用于给一个数学变量赋值;
SETL伪指令用于给一个逻辑变量赋值;
SETS伪指令用于给一个字符串变量赋值;
其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。
使用示例:
LCLA Test3 ;声明一个局部的数字变量,变量名为Test3
Test3 SETA 0xaa ;将该变量赋值为0xaa
LCLL Test4 ;声明一个局部的逻辑变量,变量名为Test4
Test4 SETL {TRUE} ;将该变量赋值为真
4、 RLIST
语法格式:
名称 RLIST {寄存器列表}
RLIST伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。
使用示例:
RegList R >
学过单片机吗?其实ARM就是一个微型的CPU,要针对它进行嵌入式开发,首先是要了解arm的结构,知道每个引脚的作用,设计好外围电路。这样才能在这个以ARM为核心的嵌入式平台上进行开发。
至于你问的用什么语言,那是次要的,只要可以 *** 作硬件的语言都可以,工业上常用的是c和汇编。C++也是可以的,但是C++更适合面向对象编程,而嵌入式开发是面向过程的结构化编程,所以我个人觉得C更适合。
至于开发环境,有很多编译工具可以选择,比如GCC,CYGWIN,最近Keil被收购以后也可以对ARM芯片进行开发了
以上就是关于arm程序一般运行在什么模式下全部的内容,包括:arm程序一般运行在什么模式下、一段ARM 程序程序名 类型和属性怎么判断、在arm的汇编程序中有哪几种伪指令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)