你好,这里的回答应当与ARM相似下面我做一个简单的ARM汇编语言描述
ARM中伪指令不是真正的ARM指令或者Thumb指令,这些伪指令在汇编编译时对源程序进行汇编处理时被替换成对应的ARM或Thumb指令(序列)。ARM伪指令包括ADR、ADRL、LDR和NOP等。
1、ADR(小范围的地址读取伪指令)
该指令将基于PC的地址值或基于寄存器的地址值读取到寄存器中。
语法格式
ADR{cond} register, expr
其中,cond为可选的指令执行的条件
register为目标寄存器
expr为基于PC或者基于寄存器的地址表达式,其取值范围如下:
当地址值不是字对齐时,其取值范围为-255~255
当地址值是字对齐时,其取值范围为-1020~1020
当地址值是16字节对齐时,其取值范围将更大
在汇编编译器处理源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能。
因为ADR伪指令中的地址是基于PC或者基于寄存器的,所以ADR读取到的地址为位置无关的地址。当ADR伪指令中的地址是基于PC时,该地址与ADR伪指令必须在同一个代码段中。
示例
start MOV r0,#10 ;因为PC值为当前指令地址值加8字节
ADR r4, start ;本ADR伪指令将被编译器替换成SUB r4,pc,#0xc
2、 ADRL(中等范围的地址读取伪指令)
该指令将基于PC或基于寄存器的地址值读取到寄存器中。ADRL伪指令比ADR伪指令可以读取更大范围的地址。ADRL伪指令在汇编时被编译器替换成两条指令,即使一条指令可以完成该伪指令的功能。
语法格式
ADRL{cond} register,expr
示例
start MOV r0,#10 ;因为PC值为当前指令地址值加8字节
ADRL r4,start+60000 ;本ADRL伪指令将被编译器替换成下面两条指令
ADD r4,pc,#0xe800
ADD r4,r4,#0x254
3、LDR(大范围的地址读取伪指令)
LDR伪指令将一个32位的常数或者一个地址值读取到寄存器中
语法格式
LDR{cond} register, =[expr|label-expr]
其中,expr为32位的常量。编译器将根据expr的取值情况,如下处理LDR伪指令:
当expr表示的地址值没有超过MOV或MVN指令中地址的取值范围时,编译器用合适的MOV或MVN指令代替该LDR伪指令
当expr表示的地址值超过了MOV或者MVN指令中地址的取值范围时,编译器将该常数放在数据缓冲区中,同时用一条基于PC的LDR指令读取该常数。
label-expr为基于PC的地址表达式或者是外部表达式。当label-expr为基于PC的地址表达式时,编译器将label-expr表示的数值放在数据缓冲区(literal pool)中,然后将该LDR伪指令处理成一条基于PC到该数据缓冲区单元的LDR指令,从而将该地址值读取到寄存器中。这时,要求该数据缓冲区单元到PC的距离小于4KB。当label-expr为外部表达式,或者非当前段的表达式时,汇编编译器将在目标文件中插入一个地址重定位伪 *** 作,这样连接器将在连接时生成该地址。
LDR伪指令主要有以下两种用途:
当需要读取到寄存器中的数据超过了MOV及MVN指令可以 *** 作的范围时,可以使用LDR伪指令将该数据读取到寄存器中。
将一个基于PC的地址值或者外部的地址值读取到寄存器中。由于这种地址值是在连接时确定的,所以这种代码不是位置无关的。同时LDR伪指令的PC值到数据缓冲区中的目标数据所在的地址的偏移量要小于4KB。
示例
将0xff0读取到R1中
LDR R1,=0xFF0
汇编后将得到:
MOV R1,0xFF0
将0xfff读取到R1中
LDR R1,=0xFFF
汇编后将得到:
LDR R1,[PC,OFFSET_TO_LPOOL]
…
LPOOL DCD 0xFFF
将外部地址ADDR1读取到R1中
LDR R1,=ADDR1
汇编后将得到:
LDR R1,[PC,OFFSET_TO_LPOOL]
…
LPOOL DCD ADDR1
4、NOP空 *** 作伪指令
在汇编时将被替换成ARM中的空 *** 作,如MOV R0,R0
NOP伪指令不影响CPSR中的条件标志位
以上是对ARM汇编语言的回答描述,望采纳。谢谢
不完全是。伪代码是一种描述算法思路、结构和过程的文字,用来指导程序员编写实际的程序代码。它并非一种真正的编程语言,而是一种由自然语言和一些符号组成的,方便程序员理解和描述算法的语言。伪代码常常使用流程控制结构(如循环、条件分支等)和变量等,但不一定按照编程语言的语法严格描述。
因此,伪代码不能算是一个完整的表格,它通常是一种描述算法的文本材料,不需要按照某种特定的排版格式来编写。当然,在实际编写伪代码时,可以适当使用分隔符、缩进、注释等元素来增加伪代码可读性和美观度。
CLRD:
MOV R0,#50H
MOV DPTR,#TAB
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
RET
TAB:
DW 0,0,0
高级语言是相对于低级语言说的,低级语言官方名称为汇编语言,就是计算机的硬件能直接识别并执行的语言,高级语言不能被计算直接识别必须由计算转换成汇编语言才能执行。
伪代码是编写者为了方便、减化程序,让程序更加简捷、明了、直观的编写程序,方便自己和读者读懂程序自己定义一的指令,就像为了方便称乎你而不用描述你长什么样、穿什么衣服等等给你起的名字一样。
编译程序是编写程序的过程,就像你把中文翻译成英文的过程就叫翻译一样,只不过那个叫编译,因为它不只是要翻译,还要编写。
汇编程序是由汇编语言直接编写的一段完整的代码,能够表达编写者的意图、目的一段代码,就如同游戏程序一样,能够执行的就像你要做一个程序算出一个值一样,必须完整的才叫程,不完整的只能叫一段汇编代码,因为它不能执行或不能完整的表达作者的意图。
解释程序就是了解编写者的目的、意图对其编写好的程序逐行分析并加以解释。
机器语言就是比汇编更加基础的一类语言,就是二进制代码比如说不得010111000011001之类的语言,能直接被计算执行,其实计算是读不懂汇编语言的,必须由内存中事先存好的机器语言对汇编语言的定义,比如说啊move这个是汇编语言中的移动指令,咱人能读懂是因为事先有人把这个语言存在人的大脑里了,但计算机不懂啊,所以必须转化为机器语言再执行。
自然语言就是自然话了,就是人能读懂的语言,电脑不一定明白的话,就象中国话一样。
流程图是编写者为了方便编写程序或直观的分析程序上下句之间的过程,自己画的一个流程图,就象你要去吃饭,但不知怎么去吃饭的地方,这样给你画一个路线图就明白了。
以上就是关于使用ARM汇编伪指令编程:分别将两个无符号数放在寄存器R0和R1中,求其中较大的那个数的阶乘全部的内容,包括:使用ARM汇编伪指令编程:分别将两个无符号数放在寄存器R0和R1中,求其中较大的那个数的阶乘、伪代码是表格么、将50H为起点的6个单元清零,不用循环结构,用DW伪指令编写程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)