gpt4 book ai didi

Cmp 指令不匹配

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

我必须用汇编写一个函数来完成下面的c代码。

int main(){

int hist[26]={0};
int i;

charHistogram("This is a string", hist);

for (i=0; i<26; i++ )
printf("%c:%d ", i+’a’, hist[i] );
printf("\n");
}

return 0;
}

这是我写的汇编代码:

_charHistogram:

push %ebp
movl %esp,%ebp
subl $0x10,%esp
movl $0x0,-0x4(%ebp)
movl $0x41,-0x8(%ebp)

condFor1:

movl -0x4(%ebp),%edx
movl 0X8(%ebp),%eax
cmp (%eax,%edx,1), $0
je exit

condFor2:

cmpl $0x5a,-0x8(%ebp)
jg condFor1

if1:

movl -0x8(%ebp), %ecx
cmp (%eax,%edx,1), %ecx
jne if2
subl $0x41,%ecx
movl 0xc(%ebp), %ebx
add $0x1, (%ebx,%ecx,4)
add 0x20,%ecx
inc %ecx
inc %edx
jmp condFor1

if2:

add 0x20,%ecx
cmp (%eax,%edx,2), %ecx
jne condFor1
subl $0x41,ecx
movl 0xc(%ebp), %ebx
add $0x1, (%ebx,%ecx,4)
add 0x20,%ecx
inc %ecx
inc %edx
jmp condFor1

exit:

leave
ret

基本上,用汇编编写的函数必须计算给定字符串中字母出现的次数,并将其存储在整数数组 hist 中。所以我认为它可以将每个 char 值与其从 65 到 90 以及从 97 到 122 开始的 ascii 值进行比较。但是当我开始编译程序集时,它不断收到指令的错误“‘cmp’的操作数大小不匹配”cmp (%eax,%edx,1), $0.你能帮帮我吗?

最佳答案

cmp  (%eax,%edx,1), $0

您需要反转操作数。

cmp  $0, (%eax,%edx,1)

你有没有注意到你编写了无限循环?
您使用 movl $0x0,-0x4(%ebp) 设置了一个变量,但是您忘记了在整个代码中更改它的值!

既然你的输入字符串是 ASCIIZ,你不应该与 CL 比较而不是与 ECX 比较吗?

关于Cmp 指令不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30017733/

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