Assembly 臂装配部

Assembly 臂装配部,assembly,arm,division,Assembly,Arm,Division,对于赋值,我需要将数字提升到标准输入输入输入的幂(我需要处理浮点数)。我的想法是使用计数器进行while循环,如果整数为负,则将1除以实际数(如将其提高到-1)。问题是,我不知道如何在手臂装配中进行分割,我已经搜索过了,但没有运气,我唯一发现的是有人模糊地提到旋转。如果有人能给我指出正确的方向,那就太完美了。顺便说一下,我正在使用ARMSim v5 编辑:我用gcc-S编译了一个c文件,结果在ARMSim中出现了一些错误,我不明白为什么: .file "xd.c" .text

对于赋值,我需要将数字提升到标准输入输入输入的幂(我需要处理浮点数)。我的想法是使用计数器进行while循环,如果整数为负,则将1除以实际数(如将其提高到-1)。问题是,我不知道如何在手臂装配中进行分割,我已经搜索过了,但没有运气,我唯一发现的是有人模糊地提到旋转。如果有人能给我指出正确的方向,那就太完美了。顺便说一下,我正在使用ARMSim v5

编辑:我用gcc-S编译了一个c文件,结果在ARMSim中出现了一些错误,我不明白为什么:

    .file   "xd.c"
    .text
    .globl  x
    .data
    .align 4
    .type   x, @object
    .size   x, 4
x:
    .long   6
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    x(%rip), %eax
    movl    %eax, %edx
    shrl    $31, %edx
    addl    %edx, %eax
    sarl    %eax
    movl    %eax, x(%rip)
    movl    x(%rip), %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"
    .section    .note.GNU-stack,"",@progbits

不确定你看了哪里,指令集引用应该是个好地方。它列出了作为浮点除法的
VDIV
。对于
1/x
,您可能需要浮点运算。请查看C编译器的输出,了解您想法的C实现。你可以考虑用基数的倒数和指数的绝对值来处理负数,然后使用你的标准乘法循环。(这应该表现得更好,只需要一个循环,而不是两个版本。)即使ISA有一个除法,乘1/x也是很常见的,因为乘法更快,我说的是定点而不是浮点,转换为浮点做除法,然后返回比只做整数乘法和移位更糟糕。另一种解决方案是使用C编译器库gcclib(基本上用于gcc)。做自己的长除法也很简单,如果你想做的话,它比在循环中进行减法要快,当然也行。如果这是同一个赋值,那么你应该注意这是针对浮点数的。您还应该指定要使用的浮点单元(VFP、NEON或其他),这就是x86-64程序集。显然,它不会用ARM汇编程序进行组装。使用ARM编译器。e、 g.在提供
arm none eabi gcc
的软件包上或安装该软件包。如果不确定查找的位置,说明集参考将是一个好地方。它列出了作为浮点除法的
VDIV
。对于
1/x
,您可能需要浮点运算。请查看C编译器的输出,了解您想法的C实现。你可以考虑用基数的倒数和指数的绝对值来处理负数,然后使用你的标准乘法循环。(这应该表现得更好,只需要一个循环,而不是两个版本。)即使ISA有一个除法,乘1/x也是很常见的,因为乘法更快,我说的是定点而不是浮点,转换为浮点做除法,然后返回比只做整数乘法和移位更糟糕。另一种解决方案是使用C编译器库gcclib(基本上用于gcc)。做自己的长除法也很简单,如果你想做的话,它比在循环中进行减法要快,当然也行。如果这是同一个赋值,那么你应该注意这是针对浮点数的。您还应该指定要使用的浮点单元(VFP、NEON或其他),这就是x86-64程序集。显然,它不会用ARM汇编程序进行组装。使用ARM编译器。e、 g.安装或安装提供
arm none eabi gcc