gpt4 book ai didi

c - 如何将 C 代码转换为 MIPS 程序集?

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:47 24 4
gpt4 key购买 nike

我目前正在为一个要求我将 C 程序转换为 MIPS 程序集的类编写程序。前提是取两个十六进制值,看看有多少个 1 在二进制中匹配。例如,这是 C 代码:

// Count the number of items that match the pattern (have '1' bits in 
// the same place as the pattern)
// pu32_a points to the first element of the array
// u32_n is the number of elements in the array
// u32_pat is the pattern to match

uint32_t pmatch(uint32_t* pu32_a, uint32_t u32_n, uint32_t u32_pat) {

uint32_t u32_result;

u32_result = 0;
while(u32_n != 0) {
if((*pu32_a & u32_pat) == u32_pat) u32_result++;
pu32_a++;
u32_n--;
}

return u32_result;

}

uint32_t au32_k[] = {0x80000000, 0xFFFFFFFF, 0x0000A5AA, 0xF0F0F0F0};
uint32_t u32_count;

main() {

u32_count = pmatch(au32_k, 4, 0x0000000F0);
printf("Number of matches is: %d \n", u32_count);

}

这是我当前的汇编代码:

#
#
# au32_k = {0x80000000, 0xFFFFFFFF,
# 0x0000A5AA, 0xF0F0F0F0}
#
#

.data
au32_k: .space 16
u32_n: .word 4
u32_pat: .word 240
.text

main:

# Store values in $s# registers

addi $s0, $zero, 2147483648
addi $s1, $zero, 4294967295
addi $s2, $zero, 42410
addi $s3, $zero, 4042322160

# Index = $t0
# This loads each of the values into an array
# starting at index $t0.

addi $t0, $zero, 0
sw $s0, au32_k($t0)
addi $t0, $t0, 4
sw $s1, au32_k($t0)
addi $t0, $t0, 4
sw $s2, au32_k($t0)
addi $t0, $t0, 4
sw $s3, au32_k($t0)

# Reset pointer to 0

addi $t0, $t0, -12

# Storing values in argument registers for subroutine

la $a0, au32_k
lw $a1, u32_n
lw $a2, u32_pat
jal pmatch

# This is where I get completely lost.

pmatch:

addi $s0, $zero, 0
addi $s1, $zero, 0

while:

beqz $a1, while_end

if_start:

while_end:

我完全迷失在 C 代码的这一部分:

if((*pu32_a & u32_pat) == u32_pat) u32_result++;

我不知道如何将其转换为汇编,坦率地说,我不知道这如何计算两个数字中匹配 1 位的数量。

最佳答案

我不会为您完成整个作业,但代码的作用如下。

if((*pu32_a & u32_pat) == u32_pat) u32_result++;

第一个重要的 block 是:

(*pu32_a & u32_pat)

它涉及取消引用名为 pu32_a 的指针变量。然后将其与另一个名为 u32_pat 的变量进行“与”运算。下一个 block 如下。

 == u32_pat) u32_result++;

此 block 将 AND 运算的结果与名为 u32_pat 的变量进行比较。如果它等于名为 u32_result 的变量加一。

关于c - 如何将 C 代码转换为 MIPS 程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48656163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com