Obecny czas to Pią 15:33, 26 Kwi 2024 | Zaloguj się, by sprawdzić wiadomości
Zobacz posty bez odpowiedzi
Forum Forum hakerskie - najlepsze forum hakerskie Strona GłównaForum Forum hakerskie - najlepsze forum hakerskie Strona Główna
Użytkownicy Grupy Rejestracja Zaloguj

Operacje matematyczne
Napisz nowy temat   Odpowiedz do tematu    Forum Forum hakerskie - najlepsze forum hakerskie Strona Główna » Assembler
Zobacz poprzedni temat | Zobacz następny temat  
Autor Wiadomość
CodeLan
Administrator



Dołączył: 03 Lis 2006
Posty: 171
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5
Skąd: Z pod skrzydeł Google.pl

PostWysłany: Nie 7:37, 17 Cze 2007    Temat postu: Operacje matematyczne

Po tym wszystkim, co już dotychczas zrobiliśmy, to, czym zajmiemy się teraz jest proste jak ... się za chwilę przekonasz.
Nie zwlekając więc ni chwili przystąpmy do rzeczy.

INC i DEC
Są to instrukcje analogiczne jak w Pascalu, z małym wszakże wyjątkiem, ale o tym za moment - powodują zwiększenie lub zmniejszenie jakiejś wartości.

Składnia:
INC A
DEC A

No więc cała różnica polega na tym, że - jak widać - nie ma tu drugiego parametru, który określałby o ile ma być zwiększona lub zmniejszona dana wartość. Parametru tego nie ma, gdyż zawsze jest ona zmniejszana/zwiększana o 1 - słownie jeden.
Rozwiewając więc resztki wątpliwości wszystkich, którzy takie wątpliwości jeszcze zachowali powiem, że INC zwiększa a DEC zmniejsza daną wartość...
Przykładowo, jeśli w AX mamy wartość 03H, to wykonanie instrukcji

INC AX - zwiększy AX o 1 - AX będzie się równać 04H.

Jeśli więc w tym stanie rzeczy wykonamy instrukcję

DEC AX - to wartość AX zostanie zmniejszona o 1 - z wartości 04H na 03H.



Dodawanie i odejmowanie
Do tych operacji można oczywiście używać DEC i INC, ale - oczywiście - byłoby prawie nie do pomyślenia, że Assembler nie udostępnia żadnej instrukcji umożliwiającej wykonanie powyższych działań "za jednym zamachem" tzn. bez konieczności zmieniania wartości o 1. Instrukcje, które umożliwiają wykonanie dodawania lub odejmowania to ADD (dodaj) i SUB (substract - odejmij).

Składnia:
ADD A, B
SUB A, B

Wykonanie powyższych instrukcji powoduje dodanie (lub odjęcie w przypadku SUB) wartości A i B i wrzucenie wyniku do A - np.: Jeśli AX=5 i wykonamy ADD AX, 08H - to procesor najpierw doda 5+8 a następnie wrzuci wynik do aX - po wykonaniu powyższego polecenia AX będzie równe 13 (dziesiętnie) czyli 0DH. Analogicznie - wykonanie w tym stanie rzeczy instrukcji SUB AX,3 spowoduje odjęcie trójki od aktualnej wartości AX i wrzucenie wyniku do AX (13 - 3 =10) - AX=10D czyli 0AH.



Mnożenie
Tutaj sprawa nie jest już tak prosta jak w przypadku dodawania i odejmowania, dlatego też mnożenie i dzielenie zostaną omówione oddzielnie.
Do mnożenia służy w Assemblerze instrukcja MUL (multiply - mnóż).

Składnia:
MUL A

Niewątpliwie wymaga to pewnych wyjaśnień - wyjaśniam więc: MUL powoduje pomnożenie wartości A razy zawartość rejestru AX, lecz sprawa wygląda nieco inaczej, gdy A jest wartością typu word (słowo - 2 bajty) lub byte (bajt).
Gdy więc A jest to 1 bajt, wówczas wykonywane jest mnożenie a*AL (przypomnę, że AL jest to młodszy bajt rejestru AX) i wynik mnożenia zostaje wrzucany do AX. Załóżmy, że AL=2 a BL=3 - wówczas wykonanie instrukcji

MUL BL - powoduje wymnożenie 2*3 i wrzucenie wyniku do AX - AX=6.

Jeśli jednak A jest wartością dwubajtową, to A jest mnożone razy AX a wynik zostaje wrzucany do rejestrów DX:AX tzn. DX zawiera 2 starsze a AX młodsze bajty - np:. Jeśli AX = 0FFFFH (65535) i BX=0FFFFH (65535 również), to wykonanie
MUL BX wymnoży BX*AX a wynik (w tym przypadku czterobajtowy 0FFFFFFFFH czyli 4294836225D) znajdzie się w DX (2 bajty) i AX (również 2 bajty).



Dzielenie
Instrukcją dzielącą jest w Assemblerze DIV (divide - dziel).

Składnia:
DIV A

Tutaj znowu - jak w przypadku mnożenia - ma znaczenie czy A jest bajtem (np. BH, BL), czy słowem (NP. BX).

Jeśli A jest bajtem, AX jest dzielony przez A; iloraz zostaje wrzucony do AL, reszta do AH.
Jeśli więc AL zawiera 10D (0AH), BH=3, to po
DIV BH
AL=3, AH=1 - bo oczywiście 10/3 =3 i reszty 1.

Gdy A jest słowem (2 bajty), DX:AX zostaje podzielony przez A; po dzieleniu AX zawiera iloraz a DX resztę z dzielenia - np.:
Jeśli - posługując się analogicznym przykładem co przy mnożeniu - ustawimy DX=0FFFFH, AX=0FFFFH (dzielna =0FFFFFFFFH) i BX=0FFFFH (dzielnik), to
DIV BX
ustawi AX=0FFFFH (iloraz) DX=0000H (reszta).


Post został pochwalony 0 razy
...
Zobacz profil autora
Powrót do góry
Napisz nowy temat   Odpowiedz do tematu    Forum Forum hakerskie - najlepsze forum hakerskie Strona Główna » Assembler
Wyświetl posty z ostatnich:   
 
 
Wszystkie czasy w strefie EET (Europa)
Skocz do:  

Strona 1 z 1


Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group

Theme created OMI of Kyomii Designs for BRIX-CENTRAL.tk.