ARM 汇编 SOS 中的 64 位除法

2024-03-29

我正在计算 16 个 64 位数字相加的平均值,我认为我已经正确完成了所有加法,但现在我需要弄清楚如何将 64 位数字除以 16,但我被困住了!任何帮助都会非常感谢你。到目前为止,这是我的代码。

tableSize       EQU     16
sum             EQU     0x40000000
average         EQU     0x40000008
                MOV r8, #14

                ADR r0, table
                LDR r9, =sum
                LDR r10,=average

                LDR r1, [r0], #1    ;hi #1
                LDR r2, [r0], #1    ;lo #1
SUM
                SUB r8, r8, #1
                LDR r3, [r0], #1    ;hi #2
                LDR r4, [r0], #1    ;lo #2
                ADDS    r5, r2, r4  ;lo 1 + lo 2 set flags
                ADC r6, r1, r3  ;hi 1 + hi 2 + carry
                MOV r1, r6
                MOV r2, r5
                CMP r8, 0   
                BNE SUM

                STR r1, [r9], #8
                STR r2, [r9]
 average
                ;stuck here 


table           DCQ     0x0200200AD00236DD
                DCQ     0x00003401AAC4D097
                DCQ     0x000001102ACFF200
                DCQ     0x00010AA0AD3C66DF
                DCQ     0x0000FC3D76400CCB
                DCQ     0x000090045ACDD097
                DCQ     0x00000FF000004551
                DCQ     0x00000000003C66DF
                DCQ     0x1000200AD00236DD
                DCQ     0x00003401AAC4D097
                DCQ     0x000001102ACFF200
                DCQ     0x00010AA0AD3C66DF
                DCQ     0x1000FC3D76400CCB
                DCQ     0x000090045ACDD097
                DCQ     0x00000FF000004551
                DCQ     0x00000000003C66DF

假设有一个 64 位有符号整数r0 and r1,可以使用以下指令将其除以 16:

    lsl     r2, r0, #28
    asr     r0, r0, #4
    orr     r1, r2, r1, lsr #4

简而言之,我们需要做的就是将两半移位四,然后将低四位放入r0分成四个高位r1.

要获得无符号除法,应该使用lsr代替asr.

在这两种情况下,结果都会向负无穷大舍入。要将结果四舍五入到最接近的整数,可以在除法之前将整数加 8。此外,还可以加 15 来四舍五入到正无穷大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM 汇编 SOS 中的 64 位除法 的相关文章

  • M1 MacBook Pro 上的 Android Studio 无法使用 ABI armeabi-v7a 模拟系统映像

    我的 M1 Macbook Pro 上的 Android Studio 可以很好地模拟 ABI arm64 v8a 的所有系统映像 API 24 29 30 31 但是 它无法使用 ABI armeabi v7a 运行所有映像 例如 API
  • 英特尔® 事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?

    我在Intel的页面上找到了 https ark intel com products 97123 Intel Core i5 7500 Processor 6M Cache up to 3 80 GHz https ark intel c
  • 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

    如果有很多浮点运算正在进行 Apple 建议针对 ARM 进行编译 而不是针对拇指进行编译 我的整个应用程序几乎是一个大型浮点运算 iOS 应用程序开发工作流程指南中是这样说的 iOS 设备支持两种指令集 ARM 和 Thumb Xcode
  • 如何获取 VESA BIOS 信息

    我正在跟踪Phil Opp 教程 https os phil opp com 关于用 Rust 编写一个操作系统 在稍微尝试了一下之后 我想在屏幕上显示真实的图形 我发现我应该从使用带有 VESA 的线性帧缓冲区开始 我在 osdev or
  • 安全浮点除法

    我的代码中有一些地方我想确保 2 个任意浮点数 32 位单精度 的除法不会溢出 目标 编译器不保证 足够明确 对 INF INF 的良好处理 并且 不完全保证 IEEE 754 的异常值 可能未定义 并且目标可能会改变 另外 我无法对这几个
  • C/C++ 中的简单“Hello World”内联汇编语言程序

    我使用 devcpp 和 borland c 编译器 asm mov ax 4 I O Func mov bx 1 Output func mov cx name address of the string mov dx 6 length
  • 如何在 VC++ 中使用 _W64 和 __w64?

    有这样的事情 w64 http msdn microsoft com en us library s04b5w00 VS 71 aspx在 Visual C 9 中 我在尝试将本机 C DLL 移植到 64 位时遇到了它 特别是在crtde
  • 左/右旋转进位的实际用途

    循环左进位和循环右进位指令有哪些实际用途 在我的汇编课上 我们无法想出一个有用的好例子 如果要将位从一个操作数移出并移入另一个操作数 SHL EAX 1 move sign bit of EAX RCL EDX into LSB of ED
  • 如何使用 Neon SIMD 将无符号字符转换为有符号整数

    如何转换变量的数据类型uint8 t to int32 t使用霓虹灯 我找不到执行此操作的任何内在因素 假设您想要将 16 x 8 位整数的向量转换为 4 个 4 x 32 位整数的向量 您可以通过首先解压缩为 16 位 然后再次解压缩为
  • 装配中出现奇怪的字符?

    我写了以下代码 386 model small stack 100h data text db Paper 0 code start lea dx text mov ah 9h int 21h mov ah 4ch int 21h end
  • AVX512 掩码寄存器(k1...k7)的 GNU C 内联 asm 输入约束?

    AVX512 为其算术命令引入了 opmask 功能 一个简单的例子 上帝螺栓 org https godbolt org z P7xWD8 include
  • Clang 使用 -nostdlib 生成崩溃代码

    我正在尝试为可执行文件设置自己的运行时环境 但无法使用 clang v3 4 1ubuntu1 目标 x86 64 pc linux gnu 来生成没有段错误的可执行文件 我已将问题简化为以下内容 如果我有一个文件 crt1 c 除了满足
  • orpd等SSE2指令有什么意义?

    The orpd指令是 压缩双精度浮点值的按位逻辑或 这不是做完 全相同的事情吗por 按位逻辑或 如果是这样 拥有它还有什么意义呢 请记住 SSE1orps https www felixcloutier com x86 orps首先 实
  • 有 64 位 Ruby 吗?

    似乎人们正在为 64 位平台编译 MRI Ruby 1 8 7 我已经搜索和阅读了一段时间 但没有真正得到我想要的答案 我想知道的是 你们中是否有人真的在 Ruby 中使用了超过 4GB 的内存 如果这样编译 Ruby 真的是 64 位吗
  • Visual Studio 2017 上的简单装配程序

    386 model flat c stack 100h printf PROTO arg1 Ptr Byte data msg1 byte Hello World 0Ah 0 code main proc INVOKE printf ADD
  • 汇编基础知识:输出寄存器值

    我刚刚开始学习汇编语言 我已经陷入了 在屏幕上显示存储在寄存器中的十进制值 的部分 我使用 emu8086 任何帮助将不胜感激 model small Specifies the memory model used for program
  • 在 C++ 中将 64 位值左移 64 位给出奇怪的结果[重复]

    这个问题在这里已经有答案了 可能的重复 64位移位问题 https stackoverflow com questions 1024968 64bit shift problem 我在 Windows 8 64 位上使用 Visual St
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代
  • 如何BSWAP 64位寄存器的低32位?

    我一直在寻找如何将 BSWAP 用于 64 位寄存器的低 32 位子寄存器的答案 例如 0x0123456789abcdef位于 RAX 寄存器内 我想将其更改为0x01234567efcdab89用一条指令 因为性能 所以我尝试了以下内联
  • 使用 Easy 68K (68000) 组装范围内的随机数

    我正在使用 Easy 68K 模拟器创建一个简单的黑杰克游戏 需要使用随机数来分配牌 我的牌必须在 2 到 11 的范围内 我似乎每次都得到相同的数字 但它不在我预期的范围内 我的卡值需要以 D3 结束 因此我有以下随机数代码 CLR L

随机推荐

  • 如何对 Flask 应用程序进行守护进程?

    我有一个使用 Flask 用 Python 编写的小应用程序 现在我正在 nohup 下运行它 但我想将它守护进程化 这样做的正确方法是什么 部署 Flask 项目有多种方式 http flask pocoo org docs deploy
  • 在 Mac OS X Lion 上设置环境变量

    当有人说 编辑你的 plist 文件 或 你的 profile 或 bash profile 等时 这让我很困惑 我不知道这些文件在哪里 如果必须这样做的话如何创建它们等等 也不知道为什么似乎有这么多不同的文件 为什么 它们做不同的事情吗
  • 实现 PushKit 并测试开发行为

    我想在我的应用程序 Voip 应用程序 中实现 PushKit 服务 但我有以下疑问 我看到我只能生成生产 voip 证书 如果我尝试在开发设备上测试 voip 推送通知服务 它可以工作吗 这是我的实施测试 通过这 3 行代码 我可以在 d
  • 将 Shapes.Path 项目绑定到 ItemsControl

    我一直在试图弄清楚如何绑定ObservableCollection
  • 超越比较忽略所有文件中不重要的差异

    我正在使用Beyond Compare 3 3 4 我想比较大量文件并忽略不重要的差异 In Session gt Session Settings gt Comparison tab 需要打开文件 部分有一个 比较内容 基于规则的比较 当
  • IE 11 中的 VueJS - 的模板包装器不工作,但在 Edge 和 Chrome 中工作

    这是在 IE 11 中使用 Vue 2 5 16 假设datasetapp data 中的数组 以下内容在 Chrome 中运行良好 并且代码已简化 tbody tbody
  • 如何在 iOS 应用程序中创建自定义委托

    在 iPhone 中 每个 UIContrrol 都有预定义的委托方法 但是我们如何创建自己的自定义委托方法 在你的头文件中 之前 interface insert protocol YourDelegate
  • 按数组中的多个属性对对象进行分组,然后对它们的值求和

    按多个属性对数组中的元素进行分组 https codereview stackexchange com questions 37028 grouping elements in array by multiple properties是与我
  • React-Native-Table-Component 冻结可滚动表中的第一列和第一行

    期望状态 我正在使用react native table component 这是一个在 React Native 中渲染表格的基本组件 我需要冻结表中的第一列和第一行 以便滚动时它们保持在视图中 具体来说 我需要在水平滚动时第一列保持固定
  • gradle 1.10 内部 Maven 存储库在 intellij 13 中永远索引

    我有两个项目 一个 Maven 和一个 Gradle 该公司还有一个内部 Maven 存储库 我正在尝试设置 Gradle 以使用内部存储库 使用 Intellij 13 当我将像这样的存储库添加到 build gradle 中的 Grad
  • Maven 依赖项:树未显示所有传递依赖项

    我无法理解该人的行为依赖 树输出 当在更高的模块上运行插件时 我丢失了它所依赖的模块的重要信息 但是当我在较低的模块上运行插件时 我可以看到依赖项 这是一个显示问题的示例 名称已更改 mvn pl foo bar application d
  • 非 Windows 世界中的 COM?

    希望这个问题不会太含糊 通读 COM 规范和 Don Box 的 Essential COM 书 有很多关于 COM 解决的问题 的讨论 它们听起来都很重要 相关且重要 current https stackoverflow com que
  • React 组件未渲染到index.html

    我真的是 ReactJS 的初学者 组件没有渲染 我浪费了很多时间来搜索但没有成功 我正在跟进从这个系列 我已经从这里配置了 webpack dev serverlink https stackoverflow com questions
  • 动画不适用于 ::-webkit-slider-thumb

    我为 input type range 元素创建了一些自定义样式 我创建了以下动画 webkit keyframes balla from transform rotate 0 to transform rotate 360deg 我适用于
  • 通过nodejs、njs脚本语言扩展nginx

    我找到了您可以使用的 nginx 文档部分 ECMAScript 5 1 严格模式 以及一些 ECMAScript 6 和更高版本的扩展 扩展 nginx 作为用例 在请求到达上游服务器之前 njs 中进行复杂的访问控制和安全检查 http
  • 关于Java Cassandra Client,哪一个更好? CQL 怎么样? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试使用 Hive 作为数据库来开发应用程序 然后我还找到了 noSQL 解决方案作为它的替代方案 现在决定使用 Cassand
  • Notepad++改变文字颜色?

    我正在使用 Notepad 来模拟 ISPF 屏幕 我使用 StyleConfigurator 选择合适的字体 将其着色为绿色 并设置黑色背景 如何永久更改所选文本的颜色 例如 如果我的客户名称 THALECRESS 如何将客户名称 蓝色
  • 在 opentok ios sdk 中,呼叫者没有从接收者那里收到结束呼叫事件

    我有一个 iPhone 应用程序 我需要在其中管理从呼叫者到接收者的视频通话 并且它通过使用 Opentok 框架完美地工作 视频通话和音频一切正常 但我在从接收方结束呼叫而不接听电话时遇到问题 如果接收者接听电话然后结束通话 则呼叫者会收
  • 如何批量获取DynamoDB中的索引表?

    如何在DynamoDB中批量获取全局二级索引 这些参数给了我一个架构错误 因为这个哈希键仅在索引表中 主键有其他 const params RequestItems MyTableName Keys ThisHashKeyIsOnlyInI
  • ARM 汇编 SOS 中的 64 位除法

    我正在计算 16 个 64 位数字相加的平均值 我认为我已经正确完成了所有加法 但现在我需要弄清楚如何将 64 位数字除以 16 但我被困住了 任何帮助都会非常感谢你 到目前为止 这是我的代码 tableSize EQU 16 sum EQ