Skip to content

Instantly share code, notes, and snippets.

@soltys
Created April 2, 2015 08:58
Show Gist options
  • Save soltys/673ddce42210c3a9839a to your computer and use it in GitHub Desktop.
Save soltys/673ddce42210c3a9839a to your computer and use it in GitHub Desktop.
unsigned char a,b; //char'y są 8 bitowe (patrz treść zadania)
unsigned short int wynik = 0; // short int 16 bitowy (patrz treść zadania)
a=12; //Ustawiamy dwie wartości które chcemy przemnożyć
b=8;
//Rozpoczynamy wstawkę assemblerową
_asm
{
mov dx,0 //kolejne sumy a << coś będziemy przechowywać w dx (patrz wzór)
mov bl, b //kopiujemy do bl wartość zmiennejb
mov cl, 0x00 //cl będzie przechowywać wykładnik potęgi 2 (patrz wzór)
multi_loop: //etykieta służy później do przeskoków
shr bl, 1 // przesuwamy bl czyli kopię naszej zmiennej o jeden bit w prawo
// wartość na pozycji zerowego bitu (najbardziej na prawo)
// wchodzi do flagi pożyczki (ang. carry flag)
// dzięki temu wykonujemy dalsze przeskoki (ang. jumpy)
jc multiply //jeżeli właśnie ustawiliśmy flagę pożyczki na 1
//wykonaj przeskok do etykiety o nazwie multiply
//jeżeli flaga pożyczki jest ustawiona na zero
//to ta instrukcja nic nie robi
jz end_multi //Jeżeli wyniku ciągłego przesuwania b wyzerowaliśmy b
//to oznacza koniec mnożenia (nie ma już w b żadnych jedynek)
jnc next_bit //To przypadek w którym nie wyzerowaliśmy b
//oraz w bicie zerowym znajduje się zero
//czyli przeskakujemy do next_bit
multiply:
mov al, a //kopiujemy wartość a do rejestru al
shl al, cl //wykonujemy al=al*2^cl
cbw //abyśmy mogli przekazać wartość z rejestru 8 bitowego
//do rejestru 16 bitowego musimy 'rozszerzyć' rejestr al
//aby zajmował wielkość 16 bitową
//do ax zostaje przypisana wartość al
add dx, ax // wykonywanie dodawania jednego z czynników
next_bit:
inc cl //zwiększamy o jeden wykładnik potęgi
jmp multi_loop // wykonujemy bezwzględny skok do multi_loop
end_multi:
mov wynik, dx //Przypisujemy wartość dx do wyniku
} //Kończymy algorytm.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment