Мне нужно написать функцию в сборке, чтобы выполнить следующий код c.Несоответствие команд Cmp
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 с его значением ascii начиная с 65 до 90 и с 97 до 122. Но когда я начинаю компилировать сборку, он продолжает получать ошибку «несоответствие размера операнда для« cmp »для инструкции cmp (%eax,%edx,1), $0
, Можете ли вы мне помочь?
для удобства чтения, пожалуйста, укажите исходный код C. предложите 4 пробела после открытия скобки '{' и un-indent перед закрывающей скобкой '}' – user3629249
Я думаю, что точка входа должна быть объявлена. global, поэтому ее можно назвать – user3629249