关于 立即数 LDR STR

2024-02-07 22:48
文章标签 str 立即 ldr

本文主要是介绍关于 立即数 LDR STR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
而我们使用的LDR有两种情况

1.伪指令 LDR R0, =0x12345678 就是把0x12345678这个地址放到R0中,而用MOV不行,因为MOV只能用于寄存器之间的数据传递,或者把立即数传递给寄存器。这个立即数我们下面会讲到

2.数据移动指令,就是内存到寄存器之间的传递,比如 LDR R0, 0x12345678 就是把0x12345678这个地址的内容传递给R0

 

STR 是把寄存器的内容写回内存也就是某处地址 STR R0 [R1] 就是把R0中的值写到R1中地址处。

 

立即数,立即数要符合一个8位数循环右移偶数位的取值,原因是,MOV本身就是一条32bit指令,除了指令码本身,它不可能再带一个可以表示32bit的数字,所以用了其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2),8bit用来表示要移位的一个基数
可以看出,并不是所有数都可以表示成一个8bit数循环右移偶数位的。

 

有些时候不能用MOV移动的数,可以使用LDR实现。

 

下面这个程序就是控制ARM gpio的一个例子

 

.global _start
_start:
    LDR     R0,  =0x56000010              @GPBCON的地址
    MOV     R1, #0x00000400              @这是个立即数,所以可以使用MOV
    STR     R1, [R0]                               @相当于对GPBCON这个寄存器写0x00000400
    
    LDR     R0, =0x56000014                @GPBDAT的地址
    MOV     R1, #0x00000000
    STR     R1, [R0]

MAIN_LOOP:
    B       MAIN_LOOP   

这篇关于关于 立即数 LDR STR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/689145

相关文章

对于str.translate的介绍 python

translate的用法如下:         bstr = astr.translate(strtable,delete)         astr是一个需要被转换的字符串,strtable是一个翻译表,delete包含的字符在astr中需要被移除,移除后剩下的字符经过翻译表得到bstr。         翻译表是什么呢?翻译表是通过maketrans方法转换而来,其原型如下:

ARM——结构体系(处理器工作模式,CPSR,立即数,汇编语言函数调用)

1、处理器工作模式          ARM有7个基本工作模式:User:非特权模式,大部分任务执行在这种模式FIQ:当一个高优先级(fast)中断产生时将会进入这种模式IRQ:当一个低优先级(normal)中断产生时将会进入这种模式Supervisor:当复位或软中断指令执行时将会进入这种模式Abort:当存取异常时将会进入这种模式Undef:当执行未定义指令时会进入这种模式Sy

ListView, GirldList 等setCurrentItem 不立即刷新

有时候,你调用了adapter的setCurrentItem,然后立马就去获得第一个view的坐标,那么你获取的不是最新的。 要知道程序的并行性。程序运行很快,所以,延迟200s去得到第一个view的坐标。 mViewGridShelf.setSelection(0);if(mHandler != null){mHandler.postDelayed(new Runnable() {@Over

Python常用函数:获取当前项目路径【abs_path=pathlib.Path(__file__).absolute()】-->【sys.path.append(str(abs_path))】

当我们导入某个模块文件时, Python 解释器去哪里找这个文件呢?只有找到这个文件才能读取、装载运行该模块文件。 它一般按照如下路径寻找模块文件(按照顺序寻找,找到即停不继续往下寻找): 内置模块当前目录程序的主目录pythonpath 目录(如果已经设置了pythonpath 环境变量)标准链接库目录第三方库目录(site-packages 目录).pth 文件的内容(如果存在的话)sys.

Pandas-数据操作-字符串型(一):常用方法【str(自动过滤NaN值)、索引】

Pandas针对字符串配备的一套方法,使其易于对数组的每个元素进行操作。 一、str:通过str访问,且自动排除丢失/ NA值 通过str访问,且自动排除丢失/ NA值 直接通过.str调用字符串方法可以对Series、Dataframe使用自动过滤NaN值 import numpy as npimport pandas as pd# 通过str访问,且自动排除丢失/ NA值# 直接通

C++中利用stringstream或者c_str()进行int型与string型char*类型转换

stringstream还是相当强大的。简单易懂,虽然写的行数比较多! 基本数据类型转换例子 int和string,也支持string和char *,int和char *之间的转换。 注意同一个stringstream对象,再进行多次转换的时候,必须调用stringstream的成员函数clear(). 头文件<sstream> 如int转string int n = 0; std::st

《python语言程序设计》2018版第8章第2题检测子串,你可以用str类中的find方法检测一个字符串

我先用in来做一次 def find_text(text_input1, text_input2):a = str(text_input1)b = str(text_input2)if b in a:print(f"The {b} is in {a} ")else:print(f"The {b} is not in {a} ")text_n1 = "Welcome to shenyang"

LDR的用法(ARM指令及伪指令)

在ARM汇编中,LDR用的比较多,现总结一下它的用法: 1. 内存访问指令 LDR指令可以从内存中读取数据到寄存器中。 ldr r1, [r2, #4] /*将地址为r2+4的内存单元数据读取到r1中*/ldr r1, [r2], #4 /*将地址为r2的内存单元数据读取到r1中,然后r2 = r2 + 4*/ 2. 地址读取伪指令 ldr伪指令不是真实存在的指令,编译器会

C++中的c_str()

标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data() 1. c_str():生成一个const char*指针,指向以空字符终止的数组。 注: ①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中。注意。看下例: const

python3 list、tuple(元组)、str之间的相互转换

list()方法是把字符串str或元组转成数组tuple()方法是把字符串str或数组转成元组 >>> s = "xxxxx">>> list(s)['x', 'x', 'x', 'x', 'x']>>> tuple(s)('x', 'x', 'x', 'x', 'x')>>> tuple(list(s))('x', 'x', 'x', 'x', 'x')>>> list(tu