Guter Abend, ich versuche, diesen Code von mir aus C bis zur Montage IA32 zu übersetzen:Filin Char Array mit Zeichen eines größeren Arrays | @ASSEMBLY IA32
int i=0;
char s[3]; char c[n];
for(i=0;i<3;i++){
s[i]=c[i];
}
n ein Zeichen ist, das einen Wert von Benutzer erhält. Zu dem Zeitpunkt, an dem dieses "for" ausgeführt wird, ist "c" bereits mit Zeichen gefüllt. Ich möchte, wie Sie sehen können, füllen Sie "s" mit den ersten drei Einträge von "c". Ich übersetzte diesen Code zu Montage wie folgt aus:
.data
is: .asciz "%s"
id: .asciz "%d"
.bss
.comm c,500,1
.comm s,500,1
.comm n,4,4
.global main
main:
#asking for string to fill "c"
pushl $c
pushl $is
call scanf
addl $8,%esp
#asking for integer to know how long is c
pushl $n
pushl $id
call scanf
addl $8,%esp
movl $0,%eax
for:
cmpl $3,%eax
jge endfor
movb c(%eax),%cl
movb %cl,s(%eax)
incl %eax
jmp for
endfor:
movl $0,%eax
pushl %eax
pushl $s
pushl $is
call printf
addl $8,%ebp
popl %eax
Sache ist, wenn ich diesen Code ausführen es nichts überhaupt nicht gedruckt werden, es ist wie „s“ Array es leer ist, habe ich einige Dinge ausprobiert und nichts hat soweit gearbeitet. Irgendein Versammlungsgenie, um mir zu helfen?
:-) Danke!
Warum Sie nicht einen C-Compiler als Referenz verwenden? – Michas
Ich versuchte es mit einem Online-Disassembler, aber Code ist nicht für Menschen (mich) zu verstehen, total komisch. :( –
Verwenden Sie C-Compiler, um C-Code in Assembly zu übersetzen. – Michas