第9章arm程序设计内容摘要:
的文件不作任何变动,编译器从其后开始继续 处理。 AREA Init, CODE, READONLY GET C:\。 通知编译器此处插入源文件 C:\ INCBIN。 通知编译器此处插入数据文件 INCBIN C:\。 通知编译器此处插入目标文件 C:\ …… END 编写汇编源程序时,常将一个源文件专门用于定义 宏指令( MICRO)、 符号常量 ( EQU), 结构化数据类型 ( MAP和FIELD),然后再用 GET伪指令将这个源文件包含到其他源文件中。 汇编语言中常用的符号 • 在汇编语言程序设计中,经常使用各种符号代替地址、变量和常量等,以增加程序的可读性。 尽管符号的命名由编程者决定,但并不是任意的,必须遵循以下的约定: – 符号区分大小写,同名的大小写字母符号会被编译器认为是两个不同的符号; – 局部标号可以以数字开头,其他标号均不得以数字开头; – 符号在其作用范围内必须唯一; – 自定义的符号名不能与系统的保留字相同; – 符号名不应与指令或伪指令同名。 常 量 常量是指其值在程序的运行过程中不能被改变的量 ARM(Thumb)汇编程序所支持的常量有数字常量、逻辑常量和字符串常量。 数字常量一般为 32位的整数,用“ ”标识。 当作为无符号数时,其取值范围为 0~2321 当作为有符号数时,其取值范围为 231~2311 逻辑常量只有两种取值情况:真 {TURE}或假 {FAUSE}。 字符串常量为一个固定的字符串,一般用于程序运行时的信息提示。 20201129 25/52 变 量 ARM(Thumb)汇编程序支持数字变量、逻辑变量和字符串变量。 可用 GBLA, GBLL和 GBLS伪指令声明全局变量,用 LCLA,LCLL和 LCLS伪指令声明局部变量,并可使用 SETA, SETL和SETS对其进行初始化。 变量可通过 代换操作 (“ $” )获得一个常量: 如果数字变量前加“ $” ,编译器会将该数字变量的值转换 为十六进制的字符串,并用该十六进制的字符串代换“ $” 后的数字变量。 如果逻辑变量前加“ $” ,编译器会将该逻辑变量代换为其 值 (真或假 )。 如果字符串变量前加“ $” ,编译器会用其值代换 “ $” 后的 字符串变量。 LCLS S1。 定义局部字符串变量 S1和 S2 LCLS S2 S1 SETS Test! S2 SETS This is a $S1。 S2的值为 This is a Test!” 26/52 常用运算符和表达式 • 在汇编语言程序设计中,经常会使用各种表达式。 表达式 常用于各种变量的运算,一般由变量、常量、运算符和括号构成。 • 常用表达式 有 数字表达式 、 逻辑表达式 和 字符串表达式 ,其运算次序遵循如下优先级。 – 优先级相同的双目运算符的运算顺序为从左到右; – 相邻的单目运算符的运算顺序为从右到左,且单目运算符的优先级高于其他运算符; – 括号运算符的优先级最高。 算术 /逻辑表达式及运算符 算术 /逻辑表达式由 数字 /逻辑变量、数字 /逻辑常量、运算符和括号 构成。 X+Y 和 XY 差 X Y 乘 X/Y 除 X:MOD:Y 余 运算次序的规定: 优先级相同的双目运算符的运算顺序为从左到右; 相邻的单目运算符的运算顺序为从右到左,且单目运算符 的优先级高于其他运算符; 括号运算符的优先级最高。 X:ROL:Y X循环左移 Y位 X:ROR:Y X循环右移 Y位 X:SHL:Y X左移 Y位 X:SHR:Y X右移 Y位 X:AND:Y 按位逻辑与 X:OR:Y 按位逻辑或 :NOT:Y 按位逻辑非 X:EOR: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 X Y X不等于 Y X:LAND:Y 逻辑与 X:LOR:Y 逻辑或 :LNOT:Y 逻辑非 X:LEOR:Y 逻辑异或 28/52 注意:这些运算在汇编过程中计算,机器码中出现的已经是表达式的值了。 字符串表达式及运算符 字符串表达式一般由 字符串常量、字符串变量、运算符和括号 构成。 编译器支持的字符串最大长度为 512字节。 ① LEN:X 返回字符串 X的长度 (字符数 )。 ② CHR:M 将 0~255之间的整数 M转换为一个字符。 ③ STR:X 将数字或逻辑表达式 X转换为一个字符串。 对于数字表达式, STR运算得到一个以十六进制字符组成的字符串; 对于逻辑表达式, STR运算得到字符串“ T”或“ F”。 ④ X:LEFT:Y 返回字符串 X左端的一个子串。 整数 Y表示要返回的字符个数。 ⑤ X:RIGHT:Y 返回字符串 X右端的一个子串。 整数 Y表示要返回的字符个数 ⑥ X:CC:Y 将字符串 Y连接到字符串 X的后面形成一个新字符串。 20201129 29/52 其它常用运算符 ③ ?X 返回定义符号 X的代码行所生成的可执行代码的长度(字 节数) ④ :DEF:X 判断是否定义了符号 X:如果符号 X已经定义则结果为真,否则为假。 ① BASE:X 返回基于寄存器的表达式 X中寄存器的编号。 ② INDEX:X 返回基于寄存器的表达式 X中相对于其基址寄存器的偏移 量。 20201129 30/52 ARM汇编语言程序结构 ARM(Thumb)汇编语言程序中,以 程序段(代码段和数据段)为单位组织代码。 一个汇编程序至少应该有一个代码段。 当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译连接时最终形成一个可执行的映象文件。 可执行映象文件 通常由以下几部分构成: 一个 或多个代码段,代码段的属性默认为 READONLY。 零个或多个包含初始化数据的数据段,数据段的属性默认为 READWRITE。 零个或多个不包含初始化数据的数据段,数据段的属性为默认为 READWRITE。 20201129 31/52 ARM汇编语言程序结构示例 • GET • GET • …… • AREA Init, CODE, READONLY • ENTRY • spr • MUL r1, r0, r0 …… • AREA Data1, DATA, READWRITE • num DCD 10 • …… • END 引用其它源文件 代码段 数据段 定义代码段 指定程序入口 程序主体 ARM汇编程序设计实例 • 重点介绍如何用 ARM汇编语言实现: –顺序结构 –分支结构 –循环结构 –子程序调用与返回 顺序结构 两个 64位数相加 • AREA add64, CODE, READONLY • ENTRY • start LDR R0, =data1。 R0中保存 data1的首地址 • LDR R1, [R0]。 用寄存器间接寻址方式读数据 1的高 32位到 R1 • LDR R2,[R0,4]。 用寄存器间接寻址方式读数据 1的低 32位到 R2 • LDR R0, =data2。 R0中保存 data2的首地址 • LDR R3, [R0]。 用寄存器间接寻址方式读数据 2的高 32位到 R3 • LDR R4,[R0,4]。 用寄存器间接寻址方式读数据 1的低 32位到 R4 • ADDS R6,R2,R4。 低 32位相加,并影响标志位,保存进位 • ADC R5,R1,R3。 高 32位相加,并使用标志位 C • LDR R0,=result。 R0中保存 result的首地址 • STR R5,[R0]。 保存结果的高位 • STR R6,[R0, 4]。 保存结果的低位 • data1 DCD 0x11223344,0xFFDDCCBB • data2 DCD 0x11223344,0xFFDDCCBB • result DCD 0,0 • END 例 RVDS上的运行结果 分支结构 “if … else …”结构 • AREA add64, CODE, READONLY • ENTRY • Start LDR R0, data1。 R0中保存 data1 • LDR R1, data2。 R1中保存 data2 • CMP R0, R1。 比较 R1和 R0中的值的大小 • BHI save。 R0R1则跳转到标号为 save处 • MOV R0,R1。 将 R1的值赋给 R0 • Save STR R0, result。 将结果保存到 result • data1 DCD 0x100 • data2 DCD 0x200 • result DCD 0 • END。第9章arm程序设计
相关推荐
主要技术指标 显卡的构成及技术指标 将主机输出的电信号转换为光信号,并最终将文字、图形等显示出来。 了解 四、打印机 击打式打印机 —— 点阵打印机 非击打式打印机 激光打印机 喷墨打印机
、 讨论和征文。 之后 , 常德市某中学八年级 (4)班召开了 “ 我家的家风 ” 主题班会。 下面摘录的是班会上几位同学的发言: 许志强:我记得 , 在我家 , 从小就不容许 “ 衣来伸手 、 饭来张口 ” , 爷爷总是要求我们自己的事情自己做 , 而且不能安于现状 、 怕苦怕累。 所以 , 我爸爸在事业上取得了一些令人羡慕的成绩 , 成为了我们的榜样。 第一单元 ┃ 历史启示录 韩阳毅
第一次世界大战导火线 1914年 6月 28日 塞拉热窝事件 第四章 第五节 第一次世界大战 暗杀事件发生后 ,奥匈帝国立即寻求德国的支持 ,以摧毁塞尔维亚;德国立即表示全力支持奥匈对塞尔维亚采取军事行动。 德皇威廉二世声称: “ 这是千载难逢的好机会。 ” 并说:如果俄国干涉,它将以对同盟国的忠诚,与奥匈并肩对俄作战。 俄国不能再听任奥匈压制塞尔维亚,使它在巴尔干的地位遭到削弱
1954年日内瓦会议的结果表明 , 国际间的冲突是可以通过和平谈判解决的。 ——周恩来 导读: 史料表明日内瓦会议上 , 参加国家达成了和平协议 ,说明不同社会制度国家之间取得了一致 , 正是体现了和平共处五项原则。 知识整合 聚焦重点 对接高考 史料二 在我们之间有无求同的基础呢。 有的。 那就是亚非绝大多数国家和人民自近代以来都曾受过 , 并且现在仍在受殖民主义所造成的灾难和痛苦。 „„
数值时, θ按直线内插。 对翼缘在受拉区的倒 T形截面, θ应增大 20%。 长期刚度的计算公式为 1kSkqMBBMM 式中 MK为荷载效应标准组合弯矩值, Mq为荷载效应准永久组合弯矩值。 第 8章 钢筋混凝土构件的裂缝宽度和变形验算 在等截面构件中,可假定各同号弯矩区段内的刚度相等,并取该区段内最大弯矩处的刚度,即“最小刚度”进行挠度验算,如图所示。 四、受弯构件的挠度验算