Witajcie, ostatnio ucze się asemblera, cięęężko to idzie, ale jakoś powolutku do przodu.
ucze się z tutoriala http://home.elka.pw.edu.pl/~mkurdej1/asm/asm_pdf_linux.pdf na tej stronie.
I do zrobienia mam banalne zadanie, ale rady nie daje, prosił bym o wytłumaczenie, co w moim kodzie jest źle, jest krótki, na szczęscie :D
"Napisz program obliczający (nie wyświetlający) wartość 10*PI. Potem sprawdź, czy sinus tej liczby
jest zerem"
section .text
global _start
_start:
finit
fldpi ;st0 = pi , ładuje PI
fmul dword [ten] ;st0 = pi*10 ( nie chcialem ladowac zmiennej ten na stos bo chyba, można obliczyc tez tak)
fsin ;st0 = sin(st0) ( Czy aby na pewno ;> ? )
ftst ;czy st(0) == 0
fstsw ax
sahf ;rozumiem ze tu przenosimy flagi fpu do rejestru flag procesora
jz tak
mov ecx, nie
mov edx, nie_d
jmp pisz
tak:
mov ecx, tak1
mov edx, tak1_d
pisz:
mov eax, 4
mov ebx, 1
int 80h
mov eax, 1
xor ebx,ebx
int 80h
section .data
tak1 db "Jest równe zeru",0ah
tak1_d equ $-tak1
nie db "Nie jest równe zeru",0ah
nie_d equ $-nie
ten dw 0ah
z góry za pomoc dziękuje :)