Mam jeszcze problem z inną wersją tego programu, użyciem scanf w pliku .s
O ile printf działa dobrze, to nie potrafię pobrać scanf wartości wpisywanej liczby. Docelowo próbowałam zapisać ją do liczba1 i liczba2, do rejestrów, ale coś chyba robię źle. We wrzuconej wersji wyrzuca wyniki liczbowe, ale zupełnie bez sensu.
SYSREAD=3
SYSWRITE=4
STDOUT=1
STDIN=0
.section .rodata
.liczba:
.string "Wynik to %f\n"
.pytanie1:
.string "Podaj liczbe\n"
.odczyt:
.string "%f"
.section .data
msg_pytanie3: .ascii "Podaj znak\n "
msg_pytanie3_len= . - msg_pytanie3
msg_znak: .ascii "+"
msg_znak_len= . - msg_znak
liczba1: .int 25
liczba2: .int 8
.text
.global main
main:
mov $SYSWRITE, %eax
mov $STDOUT, %ebx
mov $msg_pytanie3, %ecx
mov $msg_pytanie3_len, %edx
int $0x80
mov $SYSREAD, %eax
mov $STDIN, %ebx
mov $msg_znak, %ecx
mov $msg_znak_len, %edx
int $0x80
finit
subl $0x24, %esp
movl $.pytanie1, (%esp)
call printf
pushl $liczba1 ;chodzi o ten moment
pushl $.odczyt
call scanf
popl %edx
popl (liczba1)
movl $.pytanie1, (%esp)
call printf
pushl $liczba2
pushl $.odczyt
call scanf
popl %edx
popl (liczba2)
fild (liczba2)
fild (liczba1)
addl $0x24, %esp
mov $1, %ecx
mov $msg_znak, %ebx
movb -1(%ebx,%ecx, 1), %al
cmp $0x2B, %al
je dodawanie
dodawanie:
faddp %st, %st(1)
jmp koniec
koniec:
subl $0x12, %esp
fstpl 0x04(%esp)
movl $.liczba, (%esp)
call printf
addl $0x12, %esp
xorl %eax,%eax
ret
Make file jak coś (ale nie sądzę, żeby to był problem):
zad1: zad1.o
gcc -m32 -o zad1 zad1.o
zad1.o:
as -32 -o zad1.o zad1.s