IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM汇编(二)访存指令和实践 -> 正文阅读

[嵌入式]ARM汇编(二)访存指令和实践

ARM访存指令:

访存:LDR 读内存,STR 写内存
?? ?1、数据流向
?? ?2、操作的寄存器和内存地址
?? ?3、后续附加行为
LDR R1,[R0,#4]! ? R0地址偏移4的值给R1,!为附加操作,执行完前面的操作后 把地址写入R0 ? ? R1 = [地址+偏移]的值 ?R0 = [地址+偏移]的地址

LDR R1,[R0] #4?? ? ? R0地址的值给R1,R0 + 偏移4 的地址给R0 ? ? R1 = 值[地址] ?R0 = 地址[地址] + 偏移

相当于进栈: STR R0,[SP,#-4]!
相当于出栈: LDR R1,[SP],#4

STR R0,[R1],#8 ? ? ? ? ? ? ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR R0,[R1,#8] ? ? ? ? ? ? ;将R0中的字数据写入以R1+8为地址的存储器中。”
STR ? ? r1, [r0] ? ? ? ? ? ? ? ? ? ? ? ;将r1寄存器的值,传送到地址值为r0的(存储器)内存中

LDR R0,=0x12345678?? ?出现‘=’表示内存寻址
例如:
当前寄存器:
R0:B6EBB93C
R1:B86D1410

当前机器指令:
B6EBB940 04 70 A0 E3
指令:LDR R1,[R0,#4]!?
执行后:
R0:B6EBB940
R1:E3A07004?

实战:

1、写arm程序 hello.c:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef unsigned int uint32_t;

uint32_t x;
int main()
{	
	x = 0x12345678;
	while(1){

		printf("going...");
		getchar();
	}
	return 0;	
}

2、编写Android.mk

LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm #编译后的指令集 ARM指令
LOCAL_MODULE    := hello  	#模块名称
LOCAL_MODULE_FILENAME :=libhello
LOCAL_SRC_FILES := hello.c #源文件  .c或者.cpp
#LOCAL_LDLIBS += -llog #依赖库
include $(BUILD_EXECUTABLE)
#include $(BUILD_SHARED_LIBRARY) #指定编译文件的类型

3、编写Application.mk

APP_ABI := armeabi-v7a
APP_BUILD_SCRIPT :=Android.mk
APP_PLATFORM      :=android-16

4、生成

ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk

5、上传到手机运行,并超级权限下运行android_server

启动之后来到main函数处,找到x的地址和值

上图可以看出R2经过两次mov最后值为0x12345678?

STR R2,[R3] 就是将R2写入到R3记录的地址中。

R3 = B6FF44AC + 2B00? 计算后为:B6FF6FAC

按G 跳转到?B6FF6FAC

这里的机器码为 B6FF7004 这就是变量X的地址。将0x12345678 写入到这个地址的值。按G 调到代码处:

存放的就是 0x12345678 ,静态分析时这里应该为????是没有值的。

本节内容为周壑ARM汇编内容观看笔记。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:20:04  更:2022-05-07 11:20:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:29:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码