RAM存储二进制数,用汇编语言进行冒泡排序
我必须使用存储在RAM内存10二进制数字中的ARM V7进行例程,然后使用气泡排序从高到低的这些数字进行对这些数字进行排序,我应该如何开始? 解决方案 .func bubbleSortAscendingU32: ldr r3, [r0], #4 mov r1, #9*4 mov r12, #9*4 1: ldr r2, [r0], #4 cmp r2, r3 strdlo r2, r3, [r0, #-8] movhi r3, r2 subs r12, r12, #4 bgt 1b sub r0, r0, r1 subs r1, r1, #4 ldrgt r3, [r0, #-4] movgt r12, r1 bgt 1b bx lr .endfunc 假
42 2024-04-04
编程技术问答社区
ld: 在iOS 4.3上有重复的符号_objc_retainedObject ,但在iOS 5.0上没有。
一些背景 - 我已经使用Diney的指南构建了一个自定义框架" noreferrer"> http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/ 它为ARMV6/ARMV7构建的,它是一个基于电弧的框架,其开采目标为4.3. . 当我将结果框架放入5.0项目中时,它效果很好,但是当我将其放入4.3项目(弧或非arc,无关紧要)时,我会得到以下我真的无法理解的. . 我还尝试添加libarclite.a手动,但没有改变任何东西. ld: duplicate symbol _objc_retainedObject in/Users/freak4pc/Project/MyFramework.framework/MyFramework and/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos
28 2024-03-21
编程技术问答社区
RPI3 B+的ARM组件为什么在注册柜台上进行XOR?
我正在尝试制作一个程序,以用ARMV7组件闪烁RPI3 B+,并注意到它在使用此代码的延迟功能 delay: b loop loop: add r10, r10, #1 cmp r10, r4 bne loop beq return return: mov r10, #0 bx lr r10是用于计数器的寄存器,R4包含R10需要停止并返回主代码所需的R4. 查看教程后,我发现他们为计数器注册进行了XOR操作,我添加了更正,现在代码看起来像这样. delay: eor r10, r10, r10 b loop loop: add r10, r10, #1 cmp r10, r4 bne loop beq return return: mov r10, #0 bx lr 我已经编译了,将其加载到RPI3中,现在起作用,但是为什么我不得不添加该行
12 2024-03-17
编程技术问答社区
GNU as:如何将.bss/.data符号加载到一个寄存器?
我的问题非常基本.我正在制作我在汇编器中的第一个裸金属程序.该体系结构是ARMV7-M,我正在使用GNU AS,并且我正在用UAL写作. 我在.bss中有一个变量(或.data,没关系),如下所示: .lcomm a_variable, 4 然后,我想在程序中的某个地方阅读其值.为此,我首先将其地址加载到寄存器中,然后将变量本身的值加载到另一个寄存器中: adr r0, a_variable ldr r1, [r0, #0] 到目前为止一切都很好.编译的对象包含我的 a_variable 符号: 00000000 b a_variable ,生成的指令看起来像这样: 0: f2af 0004 subw r0, pc, #4 4: 6801 ldr r1, [r0, #0] 问题在我想将对象链接到结果图像中时开始. ld将 a_variable 符号重新定位到最终.bss部分: 2000
30 2024-03-17
编程技术问答社区
为什么在用arm-linux-gnueabi-gcc编译时,堆栈指针向下移动了4个字节,比堆栈框架大小大?
以下面的琐碎C程序为例. main()调用函数以总和传递在4个整数中. sum()使用4个当地人. void sum(int a, int b, int c, int d); void main(void) { sum(11, 12, 13, 14); } void sum(int a, int b, int c, int d) { int x; int y; int z; int z2; x = a; y = b; z = c; z2 = d; } 在我的Ubuntu服务器上12.04.04 LTS我使用 编译此程序 ARM-LINUX-GNUEABI-GCC -S -Mthumb Func.c sum: @ args = 0, pretend = 0, frame = 32 @ frame_needed = 1, uses_anonymous_args = 0 @ link regist
20 2024-03-17
编程技术问答社区
对于具有独立管道的ARM,指定"-mfpu=neon-vfpv3 "比"-mfpu=neon "有什么优势吗?
我的Zynq-7000 ARM Cortex-A9处理器具有霓虹灯和VFPV3扩展名,而Zynq-7000-TRM表示,该处理器配置为具有VFPV3的独立管道和高级SIMD指令" . 到目前为止,我使用Linaro GCC 6.3-2017.05和-mfpu=neon选项编制了程序,以使用SIMD说明.但是,在编译器还具有非SIMD操作的情况下,使用-mfpu=neon-vfpv3会有所作为吗? GCC的指令选择和调度程序是否会针对这两个版本发出指令,以便可以利用这两个管道来增加CPU的利用? 解决方案 从技术上讲,是的. 现实,否. 霓虹灯在ARMV7上是可选的. 被许可人可以从下面选择一种配置: 无 vfp 霓虹灯加VFP 与霓虹灯不同,ARMV7上有不同的VFP版本,Cortex-A8上的VFP-Lite是最臭名昭著的不管道上的VFP版本,因此非常慢. 因此,从技术上讲,通过编译器选项指定CPU配置和架构版本是有意义的 实际上
28 2024-03-17
编程技术问答社区
谁能解释一下ARM中的分支操作码?
我正在尝试创建一个opcode跳到地址. 我看了手册,我看到了: B 31 30 29 28 | 27 26 25 24 | 23 ................. 0 cond 1 0 1 0 imm24 我不明白cond和imm24是什么.我将如何创建一个opcode到分支到某个地址,例如分支到0xbeffffbc? 解决方案 B是+/- 32mb的相对分支.即时编码从当前PC的目标地址的签名偏移(即本指令 + 8) - 请注意,此偏移量是用 worde 计数的,而不是字节;由于指令始终是单词对准的,因此任何偏移的底部底部始终将始终为00,因此在编码中被隐含. cond与大多数其他ARM指令中的谓词字段相同.如果您必须围绕指令编码进行戳戳,则可能已经意识到了这一点 - 手臂臂的"有条件执行"部分(我有方便的V7A/R Edition中的A8.3节)已完成详细信息. 手臂的典型烦恼是
18 2024-03-17
编程技术问答社区
如何从main()返回一个大于8位的数字?
据我所知,从r0返回的退出代码仅使用此寄存器的最低位.我如何返回一个高于8位的值? 这是ARMV7代码: @ looping.s @ calculates sum of integers from 1 to 100 .text .balign 4 .global main main: MOV r1, #0 @ r1 = 0 as sum MOV r2, #0 @ r2 = 0 as counter loop: ADD r2, r2, #1 @ counter = counter + 1 ADD r1, r1, r2 @ sum = sum + counter CMP r2, #100 @ counter - 100 BLT loop @ if counter
16 2024-03-17
编程技术问答社区
ARM Cortex-A7中的系统控制寄存器
mcr 或 mrc 指令用不同的 crm 或 opt2 执行,那么 crn 注册? 例如,如果运行: asm volatile("mcr p15, 0, %0, c9, c13, 0" : : "r"(val)) 或 asm volatile("mcr p15, 0, %0, c9, c13, 2" : : "r"(val)) 然后,将更改哪个寄存器的值 c9 或 c13 ?最后选项(0或2)的角色是什么?. " rel =" nofollow">在这里 解决方案 MCR和MRC说明是通用协处理器说明.这些说明的作用取决于您使用的特定硬件,它拥有的协处理器以及OpCode和coprosessor寄存器操作的值( opcode1 , opcode2 ,, > crn 和 crm ).协处理器寄存器操作数不一定是指实际协处理器寄存器,因此有效地是其他操作数. 要找出MCR/MRC nstructions的功能,您需要在特定的CPU中查找该代码的特定CPU,该
16 2024-03-17
编程技术问答社区
用cmake为armv7和arm64编译libical
我已经浏览了ARMV7的各种编译Libical V1.0的解决方案,但是Github上可用的最新蜥蜴库似乎已移至CMake: https://github.com/libical/libical/libical/libical 有人可以指导我做些什么以使iOS和Mac(一个胖静态库)编译它?我已经能够为Mac编译它,但不知道该如何为ARMV7和ARM64做同样的事情.谢谢! 解决方案 我尝试了从iOS-Toolchain for Cmake到自己编写构建脚本的所有内容.没有什么可用.最后,它很简单.只需在64位Mac上运行cmake并编译libical.然后从" SRC"目录下方获取所有生产的代码,然后将其直接添加到您的iOS项目中.然后,将#include替换为#include" config.h",并禁用ICU支持.将预处理器宏添加到您的构建设置中,以包括生成的config.h
16 2024-03-03
编程技术问答社区
iOS应用程序需要arm64吗?
我将应用程序上传到Xcode,其中说构建需要ARM64.这不包括iPhone 5/5c,而不仅仅是使用该应用程序.但是,我希望iPhone 5/5C能够使用该应用程序,并且必须错误地需要ARM64.我认为这一定是info.plist中的东西,但不知道. 我已经检查的东西: (1)info.plist没有必需的devicecapabilities line. (2)在Xcode,ARMV7,ARMV7和ARM64中的构建设置下都是有效的架构. 您可以提供的任何帮助都是不可思议的.我已经附上了我的信息屏幕截图.谢谢! 解决方案 注意 - 根据我的原始答案的评论,此答案得到了完善. 上传到App Store的应用需要64位支持,通常接受的方法是构建具有多CPU支持的应用程序. 您需要构建主动体系结构设置为"是的调试配置",而对于发行配置来说,否. 这不会改变ARM64的要求,因为这不是Xcode的要求,而是App Store要求.实际上,从默认
18 2024-03-03
编程技术问答社区
如果我的部署目标是8.0,我们是否需要同时为 "armv7 "和 "arm64 "编译iOS应用程序?
我的应用程序支持iOS8.0及以上.而且我知道,从ios7开始,其ARM64位体系结构.在这种情况下 如果我单独使用ARM64编译,则可以降低应用程序尺寸.这是正确的方式吗? 请帮助. 解决方案 在这里以及Mac CPU架构. 当我决定从支持的体系结构中删除ARMV7架构时,这对我有很大帮助: 排除体系结构时仔细选择.使用ARMV7构建的应用程序将在所有当前的iOS设备上运行,即使是支持新架构的设备(它将在iPhone 5s和更高版本上以32位运行).但是,另一方面,一个没有ARMV7的应用不会在旧设备(例如iPhone 4/4s或原始iPad mini)上运行. 其他解决方案 根据我对Apple文档的理解,当您编译特定体系结构时,应用程序的大小将减小,这是正确的方法. 苹果文档: 目标较少的CPU 默认情况下,Xcode项目被配置为生成优化副本 您的应用程序中可执行文件中的应用程序特定的"切片".不同的 硬件将运行可执行文件的不同切
24 2024-03-03
编程技术问答社区
playstore会拒绝有armabi-v7a、arm64-v8a、x86但不支持x86-64的应用吗?
来自Android开发人员网站,我们当前的应用程序具有用于ARMEABI-V7A,ARM64-V8A,X86 ABIS的本地库,但没有X86-64.这是因为我们正在使用的Cordova插件之一不提供X86-64支持. 考虑到有ARM64-V8A支持,PlayStore会拒绝应用程序更新或通过IT通过,否则我们将不得不放弃对X86的支持才能保持合规性? 解决方案 tl; dr Unity Technologies的用户 Scottf (1)与Google代表确认: " ...您确实需要删除X86才能符合 他们的64位要求." 我今天亲自放弃了Google Play商店中X86的支持,用于与Unity建立的Android应用程序. 我刚刚警告说,我将失去 2个设备的支持. 一些额外的信息: Unity在Android X86和X86_64(1) 上放弃了支持 根据Unity的某些消息来源,Android上的英特尔处理器实际上已经死了. (2)(3
22 2024-03-03
编程技术问答社区
为armv7、armv7s、arm64、i386和universal构建ffmpeg iOS库
我已经看到了几个脚本来构建用于ARMV7、7S和I386的FFMPEG API,但找不到任何适用于ARMV64的脚本.该论坛其他主题上的一些答案建议为ARM64准备单独的库,但与其余的架构无法很好地工作.因此,我需要一个脚本,可以适用于所有支持的iOS架构,包括ARMV7,ARMV7S,ARMV64和i386. 解决方案 我使用以下脚本来为ARM64 制造FFMPEG P> 您必须在Xcode Project中添加libbz2.dylib和libiconv.dylib框架.
36 2024-03-03
编程技术问答社区
ARM v7中的非对齐内存访问
您可以帮助我使用代码('C'或ARM组装)将内存区域标记为"正常",从而允许不规学的内存访问?我知道我们需要在此之前启用MMU.我是武器建筑的新手. 谢谢! 解决方案 如果您需要的一切都是不规则的访问,请尝试将CP15 SCTLR [1](对齐位)设置为0. mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #2 mcr p15, 0, r0, c1, c0, 0 我不知道是否需要为此启用MMU. 其他解决方案 #define L1PoniterTo2ndLevelPageTable(BASE_ADDRESS, P, DOMAIN) (BASE_ADDRESS
16 2024-03-03
编程技术问答社区
安卓NDK-armeabi VS armeabi-v7a文件夹
有一些我的问题. 为什么我需要我将 *.so文件放在Armeabi-V7a和Armeabi文件夹中? 为什么Armeabi-v7a与另一个模块的Armeabi冲突? 为什么要在Armeabi code上使用Armeabi-V7a代码? 但我还不清楚.我有很多.So Armeabi和Armeabi-V7A的文件. //binaries armeabi/libarmeabi-v7a-module1.so armeabi/libarmeabi-v7a-module2.so //application.mk文件 APP_ABI := armeabi APP_PLATFORM := android-19 APP_STL := gnustl_shared //android.mk文件 include $(CLEAR_VARS) LOCAL_MODULE := module1 LOCAL_SRC_FILES := $(LOCAL_PATH)/ar
62 2024-03-03
编程技术问答社区
svc.n #imm指令的解释
我无法弄清楚SVC之后的不同IMM值是什么.例如 svc.n #c6 svc.n #ac 任何人可以帮忙吗? 解决方案 立即完全没有做任何事情.它只是编码为指令,因此,如果您愿意,可以得到它. 因此,如果您只有一个SVC处理程序,则直接是任意的.如果您有多个处理程序,并且需要调用合适的处理程序,则需要找到生成SVC IRQ的指令并将其拆除以找到即时. 例如,在ARMV7M上: SVC_Handler ; Link register contains the 'exit handler mode' code ; Bit 2 tells whether the MSP or PSP was in use TST lr, #4 MRSEQ r0, MSP MRSNE r0, PSP ; r0 now contains the SP that was in use ; Return add
26 2024-03-03
编程技术问答社区
如何判断一个字(4个字节)是16位指令还是32位指令?
我怎么知道单词中的字节是16位指令还是32位指令? 我转介了ARMV7M,但我不清楚如何区分它是16位指令还是32位指令. 它说 If bits [15:11] of the halfword being decoded take any of the following values, the halfword is the first halfword of a 32-bit instruction: • 0b11101 • 0b11110 • 0b11111. Otherwise, the halfword is a 16-bit instruction 这是否意味着处理器总是获取半词,检查它们并决定是16或32位吗? 第一个中半词是什么意思?一个单词中的位[31-16]还是位[15-0]? 如果我有32位,那么我可以知道这是32位指令还是16位指令? 谢谢. 解决方案 在拇指中," 32位"指令仍然由两个单独的半字组成,因此"第一个中半字"是编
16 2024-03-03
编程技术问答社区
警告。可加载部分 "my_section "在ELF段之外
我已经使用ARM编译器V6.9为Cortex-R4构建了AXF(ELF)文件.但是,当我使用ARM MCU Eclipse J-Link GDB插件将其加载到目标时,它无法为我的细分市场加载初始化数据.如果我使用segger臭氧加载AXF并将J-link加载正确. 如果我在AXF文件上运行无臂 - abi-gdb.exe,我会在所有初始化的段中获得"警告:可加载的部分" ELF段" My_section". 查看图像应在图像之后加载到图像之后到该表中的地址$$表$$ base. ,如果我们与GCC链接,我们将没有这个问题,因为初始数据的完成不同. . 有什么想法? 解决方案 我今天遇到了同样的问题,并且观察到了您描述的同一问题: "查看图像的初始化数据应在图像之后加载到该表中的地址$$ $$表$$ base." 看来,尽管非常相似,但Armlink生成的ELF文件与GCC生成的ELF有些不同. 无论如何,我为此找到了解决方法. 检查我的
20 2024-03-03
编程技术问答社区