zz
Hugo: KTOŚ NIE WIE JAK SIE KASUJE HISTORIE POLECEŃ W ASMEBLERZE

? korzystam z Puttiego i pracuje na
NASM
24 sty 14:39
Eve: ja NIE WIEM
24 sty 14:39
Dziadek Mróz:
Historia poleceń znajduje się w pliku .bash
history, wystarczy że znajdziesz skrypt na operacje
na plikach. Skopiuj .bash
history do pliku roboczego, np .bash
history
asm i ten plik wyzeruj
24 sty 15:04
Hugo: dz

!
24 sty 18:00
Draghan: "bash" bardzo silnie kojarzy mi się z pingwinkami... Mam dobre skojarzenia?
24 sty 18:15
Hugo: 
to konsola do pisania .. ale dokladnie nie wiem
24 sty 20:20
Draghan: Używasz Linksa?
24 sty 20:23
Dziadek Mróz:
Putty głównie loguje się na linuxach, na Windowsy łatwiej używać telnet'a.
24 sty 20:36
Hugo: używam puttiego na windowsie ale mam ububtu i moze ktoś sie zna to mam tez kali linux
24 sty 20:57
Dziadek Mróz:
Najpierw ogarnij podstawy języka, a później rzucaj się na głęboką wodę. Zrób proste programy na
arytmetyce, warunkach logicznych i i/o (input/output).
24 sty 21:12
Hugo: A umiałbyś liczyć potęgi i pierwiastki? tego mi brakuje
24 sty 21:17
24 sty 21:39
Draghan: A masz prawa do wykonania w tym katalogu?
24 sty 21:58
Stachu: Jeśli się nie mylę to musiisz uruchomić ./hello
24 sty 21:59
Stachu: ./hello.asm to źródło
24 sty 21:59
Stachu: jeśli nie zadziała dej zrzut z ls −a
24 sty 22:00
Saris: ls −l i patrzaj na prawa.
Nie jestem dokładnie pewny, ale z którejś komendy jak tworzysz plik to jest z automatu bez
prawo wykonywania chyba i musisz ręcznie zmienić.
24 sty 22:01
Stachu: Saris masz racje ls −l
24 sty 22:02
Dziadek Mróz:
Na takie programiki to wystarczy:
chmod 777 hello.asm
Na jakieś pliki ważniejsze:
chmod 644 hello.asm
24 sty 22:10
Stachu: Potęgi naturalne liczysz najprościej mnożąc w pętli natomiast sqrt obliczy jednostka
zmiennoprzecinokowa:
w sekcji data rezerwujesz miejsce w pamięci:
od: times 4 db 0 ; 32 bity − 4 bajty
sqrt: times 4 db 0
sekcja text:
włączenie jedn. zmien..
finit
wrzucenie liczby typu int na stos jedn. zmien.
fild dword [od]
wykonanie obliczen
fsqrt
pobranie wynikow w "formacie" int
fistp dword [sqrt]
24 sty 22:11
Dziadek Mróz:
Lub jak ktoś libi literki to:
chmod ugo=rwx hello.asm
chmod u=rw,go=r hello.asm
24 sty 22:13
Stachu: Dziadem Mróz popatrz na wywołanie nasm−a jest −o hello zatem binarka ma nazwe hello

t
24 sty 22:15
Hugo: 
jak odświeżam to dziala
24 sty 22:54
Hugo: WZMIANKA DO PIERWIASTKÓW/POTĘG
podstawy robiłem na rejestrach jak widać wyżej udalo mi sie takie do mnozenia na ASCII
section .text
global start
start:
mov eax, 3
mov ebx, 0
mov ecx, liczba1
mov edx, 2
int 80h
mov eax, 3
mov ebx, 0
mov ecx, liczba2
mov edx, 2
int 80h
mov eax, 4
mov ebx, 1
mov ecx, pole
mov edx, [dpoler]
int 80h
mov eax, [liczba1]
mov ebx, [liczba2]
sub eax, 48
sub ebx, 48
imul eax, ebx
add eax, 48
mov [wynik], eax
mov eax, 4
mov ebx, 1
mov ecx, wynik
mov edx, 1
int 80h
section .data
liczba1 dd 0
liczba2 dd 0
pole db "Pole wynosi: "
dpoler dd $ − pole
wynik dd 0
24 sty 22:58
Hugo: WIDZĘ że i od asemblera jest dużo speców
konkretyzując z tymi pierwiastkami potęgami
to chodzi o KOOPROCESOR przykład:
section .data
zm1 dq 1.0
zm2 dq −5.0
zm3 dq 4.0
x db 0
a db 0
temp dd 0
section .text
global
start:
start:
finit
fld qword[zm1]
fld qword[zm2]
fld qword[zm3]
fldz
fadd st0,st2
fmul st0,st2
mov dword [temp],2
fild dword [temp]
fmul st4,st0
fmul st0,st4
fmul st0,st2
fsubP st1,st0
fsqrt
fist dword[temp]
mov al,[temp]
add al,48
mov [a],al
mov eax,4
mov ebx,1
mov ecx,a
mov edx, 1
int 80h
fldz
fsub st0,st3
fadd st0,st1
fdiv st0,st4
fild dword [x]
fist dword [temp]
mov al,[temp]
add al,48
mov [a],al
24 sty 23:00
Hugo: 1. Czy ktoś by mi mógł potłumaczyć te nazwy? Jest to program do delty
2. Pomógłby mi ktoś napisać program na bazie tych poleceń program liczący całki
ma byc na kolokwium
24 sty 23:02
Stachu: sqrt inacze nie da się właściwie zrobić
24 sty 23:02
Stachu: całki jak ? numerycznie
24 sty 23:03
Hugo: Nie powiedział nam na razie jak więc chyba dowolnie. Za cokolwiek będę bardzo wdzięczny.
Mógłbyś taki napisać? : )))
24 sty 23:06
Stachu: finit aktywacja zmiennoprzecinkowej jednostki
fld wrzucenie liczby zmiennoprzecinkowej 64 bity na stos j.z.
fldz wrzucenie 0 na stos
fadd st0 st2 dodawanie w st0 masz to samo co w st2
fmull mnożenie st0 st2 wynik w st0
24 sty 23:10
Dziadek Mróz:

Można całkę metodą trapezów policzyć. Dzielisz funkcję od a do z na małe trapeziki o wysokości
d <<< 1 i sumujesz ich pola, kolejna podst_a staje się poprzednią podst_b a podst_b staje
się podst_b + d
24 sty 23:11
Dziadek Mróz:
**od a do b
24 sty 23:12
24 sty 23:12
Stachu: Dziadek Mróz : czyli numerycznie możnajeszcze metodą monte carlo ale jest to mniej wydajne i
wynik wysoce niepewny
24 sty 23:14
Stachu: jesteś pewny że ten program liczy delte poprawnie?
24 sty 23:21
Hugo: Dziadek Mróz: o tak teraz sobie coś przypomniałem o tym trapezie

chyba jednak o tym mowil
Stachu: fajny link, i co rzadkie po polsku : ))
Dziadek Mróz: a miałbyś chwilkę posiedzieć jak ostatnio i to napisać ze mną ?
24 sty 23:22
Hugo: Nie jestem pewny i chyba nie liczy

przepisalem to na szybko bo nic nie rozumiałem
24 sty 23:23
Dziadek Mróz:
W C++ tak, w asemblerze nigdy. Nie umiem tego bełkotu
24 sty 23:48
Stachu: sprawdź ten program coś mi się ze stosem nie zgadza
24 sty 23:50
Hugo: 
podobno Asembler jak matma język Bogów
24 sty 23:50
Hugo: nie mam jak sprawdzić, możesz mieć racje że jest źle
24 sty 23:51
Stachu: Nie jest dobrze zapomniałem że liczy się od 0

Tak to wygląda na stosie kolejne kolumny to następujące po sobie rozkazy
2a 2a 2a
a a a b b b b 2a
a b b b c c c c b
b c c c b
2 b
2 b
2 b
2 c
c 0 b b
2 2 2 4a 4ac b
2−4ac sqrt(b
2−4ac )
25 sty 00:08
Stachu: rozjechało się troszkę ale ogarniesz
25 sty 00:09
Hugo: :c trudne to , i te rozkazy? w celu? to czego uczy : ))?
25 sty 00:26
Stachu: W pewnych przypadkach asembler jest przydatny a czasem nawet niezbedny natomiast 99% jest to
zbedne
25 sty 00:31
Hugo:
25 sty 00:34
Hugo: a mógłbyś napisać ten program do calek trapezami albo twoją metodą ?
25 sty 00:35
Stachu: Niestety to nie jest takie proste najwieksza czesc problemu stanowi odpowiednie wprowadzenie
funkcji i wyliczenie jej wartosci a to zalezy od tego jaka funkcje dostaniesz do calkowania
25 sty 00:41
Hugo: heh
25 sty 00:54
Dziadek Mróz:
Musisz rozrysować sobie stos i pilnować danych na nim się znajdujących, rozrysować sobie
funkcję do obliczenia i przekazywać jej odpowiednie elementy stosu a następnie zwracać jej
wynik na ten sam stos, sumować ten wynik z poprzednim wynikiem na stosie bez utraty
odpowiedniej podstawy do kontynuacji obliczeń. Potrzeba kilku zmiennych dla granic a i b, sumy
trapezów, podstaw a i b trapezu, pola trapezu, odstępu między trapezami i wyniku funkcji.
25 sty 13:41
Stachu: Tu masz przykład dla x
2
extern scanf
extern printf
global main
section .data
float
format: db "%f",0
int
format: db "Wartość całki dla aktualnego kroku: %d",10,0
int
format1: db "Wynik: %d",10,0
w1: db "Oblicznie calki x
2 ", 10,0
w2: db "Od: ", 10,0
w3: db "Do: ", 10,0
od: times 4 db 0 ; 32 bity − 4 bajty
integral: times 4 db 0
do: times 4 db 0
step: times 4 db 0
now: times 4 db 0
section .bss
section .text
main:
mov rdi,w1
mov rax,0
call printf
mov rdi,w2
mov rax,0
call printf
mov edi,float
format
mov eax,0
mov esi,od
call scanf
mov rdi,w3
mov rax,0
call printf
mov edi,float
format
mov eax,0
mov esi,do
call scanf
; oblicz dx
finit
mov eax,1000
mov [integral],eax
fild dword [integral]
fld dword [od]
fld dword [do]
fsub st0,st1
fdiv st0,st2
fstp dword [step]
;zainicjuj petle
mov eax,1000
fldz
fld dword [step]
fld dword [od]
loop:
fadd st0,st1

owiekszam x od dx
fldz
fadd st0,st1 ; kopiuje x
fmul st0,st1 ; wyliczam x
2
fmul st0,st2 ; mnoze razy dx
faddp st3,st0 ; dodaje do calki
; usuwam x
2*dx ze stosu
fldz
fadd st0,st3 ; kopiuj wartosc calki do st0
fistp dword[integral]

dczyt aktualnej wartosci calki
fwait ;synchronizacja z cpu
push rax
mov edi,int
format
mov eax,0
mov esi,[integral]
call printf
pop rax
dec eax
cmp eax,0
jne loop
mov edi,int
format1
mov eax,0
mov esi,[integral]
call printf
ret
25 sty 15:00
Stachu: Jest to metodą prostokątów troszkę prostsza w implementacji niż metoda trapezów
25 sty 15:01
Stachu: Niestety nie udało mi się zmusić asemblera do wypisania zmiennej zmiennoprzecinkowej

jak
ktoś umie niech da znać
25 sty 15:05
25 sty 15:05
25 sty 15:09
Trivial:
Dajcie spokój z tym koprocesorem. Wszystkie niearchaiczne komputery architektury x86 od dawna
obsługują SSE − nie trzeba cały czas myśleć jak wygląda stos.
25 sty 15:12
Trivial:
Stachu, skorzystaj z printf do wypisania takiej liczby i po problemie.

Odpowiednik w C:
double x = 2.5;
printf("x = %lg", x);
25 sty 15:17
Stachu: Co do SSE masz rację nigdy wcześniej na nich nie pisałem ale faktycznie bd to prostsze niż
walka z kooprocesorem
25 sty 15:33
Stachu: Ale Hugo niestety nie ma wyboru
25 sty 15:34