[asembler] kombinacje, liczba dziesiętna i pierwiastek

ludmi?a
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 17 maja 2009, o 20:02
Płeć: Kobieta
Podziękował: 4 razy

[asembler] kombinacje, liczba dziesiętna i pierwiastek

Post autor: ludmi?a »

mam takie zadnaia:

Zad1

Uzupełnij, w mnemonice IA-32 lub AT&T (Intel x86), algorytm obliczający liczby dziesiętnej, reprezentowanej
przez kody ASCII kolejnych jej cyfr umieszczonych w N-bajtowej zmiennej LICZBA, zgodnie ze schematem.
X=(...((xn*10+xn-1)*10+xn-2)*10+...+x1)*10+x0.

Kod: Zaznacz cały

konflikt (etykieta) rozkaz            Komentarz
                    xor ................................  ; wyzerowanie eax
                    mov               ; podstawa 10 do ecx
                    mov .........           ; rozmiar argumentu N do esi
         pocz:      mul ..............................    ; suma:=suma*10
                    mov               ; kod ASCII kolejnej cyfry ze zmiennej LICZBA do rejestru bl
                                      ;
                    .............................................
                    add               ; suma:=suma+kolejna cyfra
                           ..............................
                                      ;
                    .............................................
                    j....... pocz       ; (wybierz ..... spo ród warunków ge, gt, le, lt, eq, ne)
                              
(2p) Wynik programu jest w rejestrze (rejestrach) ..............................
(2p) Program zwraca poprawn warto , je li 0 ≤ N≤ .............

Zad2

Uzupełnij, w mnemonice IA-32 lub AT&T (Intel x86), algorytm obliczający liczbę kombinacji k-elementowychw zbiorze n elementów (n ≥ k≥ 1), zgodnie z zależnością C(n,k)=[...[[n*(n–1)/2]*(n–2)/3]*(n–3)/4 ...]*(n–k+1)/k

Kod: Zaznacz cały

konflikt (etykieta) rozkaz             komentarz
                    mov ...........................    ; n do rejestru ecx
                    mov ...........................    ; k do rejestru esi
                    mov ...........................    ; pierwszy dzielnik (1) do ebx
                    mov ...........................    ; pierwszy mno nik (n) do eax
                                                        ¦
         comb:      dec ...........................    ; kolejny czynnik (n–i) iloczynu
                    mul ...........................    ; (edx:eax:=eax*ecx)
                                       ; kolejny dzielnik
                    .....................................
                    div                ; (eax:=(edx:eax)/ebx, reszta w edx)
                           ...........................
                    .......................................
                    j.......... comb         ; (wybierz ..... spo ród warunków ge, gt, le, lt, eq, ne)
   
Wynik programu jest w rejestrze/rejestrach ..............................................
Jeśli n =–2 a k=1, to program zwraca wartość ..............................................


Zad 3

Uzupełnij, w mnemonice IA-32 lub AT&T (Intel x86), algorytm obliczający przybliżenie pierwiastka kwadratowego z 64-bitowej liczby naturalnej zgodnie ze schematem: (...(((ZMIENNA–1)|[?<0] –3) |[?<0] –5)|[?<0] –...) – (2n–1)|[!<0]
(z wykorzystaniem tożsamości 1+3+5+...+(2n–1) = \(\displaystyle{ n^{2}}\))

Kod: Zaznacz cały

konflikt (etykieta) rozkaz       Komentarz
                    mov ........................  ;  ; (ZMIENNA<2^64→ SQRT<2^32)
                    mov ........................ ; –1 do edx:eax
         cykl:    add ........................ ; oblicz w edx:eax następną nieparzystą
                    ............................................. ; 
                    sub                                : ZMIENNA – eax
                   ............................................. ; 
                    j.......... cykl        ; (wybierz warunek spo ród: ge, gt, le, lt, eq, ne)
                    shr ................................... ; przesu w prawo obliczon warto 2n+1
                    rrc ....................................


Wynik programu jest w rejestrze /rejestrach ..............................................
Jeśli ZMIENNA<0, to program zwraca wartość ..............................................



proszę o pomoc
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[asembler] kombinacje, liczba dziesiętna i pierwiastek

Post autor: soku11 »

Z czym masz konkretnie problem? Nikt za ciebie przeciez pracy domowej nie zrobi... Skladnie mozna znalezc na necie, a samo wpisanie nie powinno sprawiac problemu. Na poczatek moge napisac, ze:
- zerowanie rejestru robimy poprzez:

Kod: Zaznacz cały

  xor rejestr,rejestr
Jest podobno szybsze niz zwykle przeniesienie do eax 0.
- przenoszenie wartosci do rejestru wyglada tak:

Kod: Zaznacz cały

  move rejestr, wartosc
Oczywiscie wszystko to jest w skladni intela.
Pozdrawiam.
ludmi?a
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 17 maja 2009, o 20:02
Płeć: Kobieta
Podziękował: 4 razy

[asembler] kombinacje, liczba dziesiętna i pierwiastek

Post autor: ludmi?a »

tutaj napiszę to co potrafię zrobić

Zad1

Uzupełnij, w mnemonice IA-32 lub AT&T (Intel x86), algorytm obliczający liczby dziesiętnej, reprezentowanej
przez kody ASCII kolejnych jej cyfr umieszczonych w N-bajtowej zmiennej LICZBA, zgodnie ze schematem.
X=(...((xn*10+xn-1)*10+xn-2)*10+...+x1)*10+x0.

Kod: Zaznacz cały

konflikt (etykieta) rozkaz            Komentarz
                    xor %eax, %eax  ; wyzerowanie eax
                    mov  10,%ecx             ; podstawa 10 do ecx
                    mov N, %esi           ; rozmiar argumentu N do esi
         pocz:      mul ..............................    ; suma:=suma*10  Od tego miejsca nie wiem gdzie ta suma ma być. Więc to.
                    mov               ; kod ASCII kolejnej cyfry ze zmiennej LICZBA do rejestru bl
                                      ;
                    .............................................
                    add               ; suma:=suma+kolejna cyfra
                           ..............................
                                      ;
                    .............................................
                    j....... pocz       ; (wybierz ..... spo ród warunków ge, gt, le, lt, eq, ne)
                              
(2p) Wynik programu jest w rejestrze (rejestrach) ..............................
(2p) Program zwraca poprawn warto , je li 0 ≤ N≤ .............

Zad2

Uzupełnij, w mnemonice IA-32 lub AT&T (Intel x86), algorytm obliczający liczbę kombinacji k-elementowychw zbiorze n elementów (n ≥ k≥ 1), zgodnie z zależnością C(n,k)=[...[[n*(n–1)/2]*(n–2)/3]*(n–3)/4 ...]*(n–k+1)/k

Kod: Zaznacz cały

konflikt (etykieta) rozkaz             komentarz
                    mov $n, %ecx    ; n do rejestru ecx
                    mov $k, %esi    ; k do rejestru esi
                    mov $1, %ebx   ; pierwszy dzielnik (1) do ebx
                    mov $n, %eax    ; pierwszy mno nik (n) do eax
                    Od tego miejsca nie wiem co wpisać jak to ma działać                                    ¦
         comb:      dec ...........................    ; kolejny czynnik (n–i) iloczynu
                    mul ...........................    ; (edx:eax:=eax*ecx)
                                       ; kolejny dzielnik
                    .....................................
                    div                ; (eax:=(edx:eax)/ebx, reszta w edx)
                           ...........................
                    .......................................
                    j.......... comb         ; (wybierz ..... spo ród warunków ge, gt, le, lt, eq, ne)
   
Wynik programu jest w rejestrze/rejestrach ..............................................
Jeśli n =–2 a k=1, to program zwraca wartość ..............................................


Zad 3

Uzupełnij, w mnemonice IA-32 lub AT&T (Intel x86), algorytm obliczający przybliżenie pierwiastka kwadratowego z 64-bitowej liczby naturalnej zgodnie ze schematem: (...(((ZMIENNA–1)|[?<0] –3) |[?<0] –5)|[?<0] –...) – (2n–1)|[!<0]
(z wykorzystaniem tożsamości 1+3+5+...+(2n–1) = \(\displaystyle{ n^{2}}\))

w tym 3 nie rozumiem co mam wpisać od początku te opisy są dla mnie nie zrozumiałe np. co to znaczy edx:eax nie rozumiem, nie wiem co znaczy rrc na wikibooks tego nie ma.

Kod: Zaznacz cały

konflikt (etykieta) rozkaz       Komentarz
                    mov ........................  ;  ; (ZMIENNA<2^64→ SQRT<2^32)
                    mov ........................ ; –1 do edx:eax
         cykl:    add ........................ ; oblicz w edx:eax następną nieparzystą
                    ............................................. ; 
                    sub                                : ZMIENNA – eax
                   ............................................. ; 
                    j.......... cykl        ; (wybierz warunek spo ród: ge, gt, le, lt, eq, ne)
                    shr ................................... ; przesu w prawo obliczon warto 2n+1
                    rrc ....................................


Wynik programu jest w rejestrze /rejestrach ..............................................
Jeśli ZMIENNA<0, to program zwraca wartość ..............................................

opisałam już to co mogłam zrobiłam i napisałam od którego miejsca nie wiem co dalej
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[asembler] kombinacje, liczba dziesiętna i pierwiastek

Post autor: soku11 »

1. Co do tej sumy: W eax mamy 0, a w ecx mamy 10. Uzywajac mul podajemy rejestr przez ktory pomnozyc rejestr eax. Jako, ze chcemy pomnozyc sume przez 10, to musimy uzyc mul ecx (bo nigdzie indziej tej 10 nie mamy).
Jesli chcemy przepisac kod ascii ktorejs cyfry, to poprostu przemieszczamy odpowiednia jej cyfre z offsetem minus kod liczby 0, czyli:

Kod: Zaznacz cały

  mov bl, byte LICZBA[esi]
Dodawnie - niby tak, jednak wypadaloby zapewnic, ze ebx nie ma na poczatku smieci (zeby bylo tylko bl).

Kod: Zaznacz cały

  add eax, ebx
Dalej trzeba sie przesunac na kolejna cyfre:

Kod: Zaznacz cały

  dec esi
I wracamy, jesli jeszcze sa jakies cyfre do przemnozenia (tzn. zmienna esi jest wieksza od 0 lub poprostu rozna od 0):

Kod: Zaznacz cały

  jne pocz
Z innymi pokombinuj sama. Jak nie dasz rade, wtedy na nie spojrze.
Pozdrawiam.
ODPOWIEDZ