Mnożenie dwubajtowe


Laboratorium z techniki mikroprocesorowej

Elektronika i telekomunikacja

semestr VI rok szk. 1998/99

Elektroniczna aparatura medyczna

Skład grupy:

Paweł Wyszyński

Arkadiusz Żanowski

Temat: Mnożenie dwubajtowe.

  1. Mnożenie jednobajtowe przez wielokrotne dodawanie

Program ten dodaje wielokrotnie możną do mnożnika. (Działanie 3*3 będzie wykonane w następujący sposób: 3*3=3+3+3).

Listing programu z opisem działania:

################################################################################

# #

# Micro Series Z80 Assembler V1.25/MD1 10/Mar/99 18:45:18 #

# #

# Source = c:mnoz.s01 #

# List = c:mnoz.lst #

# Object = c:mnoz.r01 #

# Options = #

# #

# (c) Copyright IAR Systems 1984 #

################################################################################

1 ;MNPOZENIE PRZEZ WIELOKROTNE DODAWANIE

2

3

4 ;WE - B,C

5 ;WY - H,L

6

7 0000 ORG 0H

8 0000 210000 ld hl,0 ;do hl wstaw 0

9 0003 79 ld a,c ;zawartość c wstaw do akumulatora

10 0004 58 ld e,b ;do e wstaw zawartość rejestru b

11 0005 AF xor a ;operacja logiczna XOR

12 0006 81 add a,c ;dodaj do akumulatora zawartość c

13 0007 CA0F00 jp z,koniec ;jeśli wynik=0 to skocz do koniec

14 000A 19 petla: add hl,de ;dodaj do hl zawartość de

15 000B 3D dec a ;zmniejsz o 1 zawartość akumulatora

16 000C C20A00 jp nz,petla ;jeśli wynik nie równa się 0 to skocz ;do petla

17 000F 76 koniec: halt

18 0010 end

Errors: None ########

Bytes: 16 # mnoz #

CRC: 2000 ########

W programie tym akumulator spełnia rolę licznika kolejnych działań.

Zastosowanie kombinacji funkcji:

ld a,c

xor a

add a,c

zapewnia, że program wykrywa próbę mnożenia przez zero. Program działa poprawnie.

4. Mnożenie jednobajtowe z przesunięciem

Algorytm działania programu:

  1. Test najmniej znaczącego bitu mnożnika. Jeżeli jest on równy 0, przejdź do 2. Jeżeli jest on równy 1, dodaj mnożnik do najbardziej znaczącego bajtu wyniku.

  2. Przesuń 2-bajtowy wynik o jeden bit w prawo. Usuń najmniej znaczący bit mnożnika.

  3. Powtórz 1 i 2 tyle razy, aby wszystkie bity mnożnika zostały przetestowane.

Listing programu z opisem działania:

################################################################################

# #

# Micro Series Z80 Assembler V1.25/MD1 10/Mar/99 19:03:30 #

# #

# Source = c:mnoz1.s01 #

# List = c:mnoz1.lst #

# Object = c:mnoz1.r01 #

# Options = #

# #

# (c) Copyright IAR Systems 1984 #

################################################################################

1 ;mnożenie liczb jednobajtowych 'przez przesuniecie'

2 ;wejście: d- mnożna; c-mnożnik, pierwotny

3 ;wyście: b- najbardziej znaczący bit; c -najmniej znaczący bit

4 ; e - licznik bitów

5

6 0000 org 0h

7 0000 0600 ld b,0 ;zerowanie najbardziej znaczącego bitu wyniku

8 0002 1E09 ld e,9 ;ustawienie licznika bitw

9 0004 start:

10 0004 79 ld a,c ;c do akumulatora

11 0005 1F rra ;przesuniecie akumulatora w prawo

12 0006 4F ld c,a ;zawartość c do akumulatora

13 0007 1D dec e ;zmniejszenie licznika bitów o 1

14 0008 CA1400 jp z,koniec ;jeśli e=0 to koniec programu

15 000B 78 ld a,b ;b do a

16 000C 3001 jr nc,dodaj ;jeśli cy=0 to skocz do dodaj

17 000E 82 add a,d ;do a dodaj zawartość d (mnożną)

18 000F dodaj:

19 000F 1F rra ;przesuniecie a w prawo - przy cy=0

20 0010 47 ld b,a ;wynik do b

21 0011 C30400 jp start ;powrót na początek programu

22 0014 koniec:

23 0014 76 halt

24 0015 end

Errors: None #########

Bytes: 21 # mnoz1 #

CRC: 00CD #########

  1. Mnożenie liczb dwubajtowych.

W programie tym do przechowywania poszczególnych wyników obliczeń został wykorzystany stos. Za pomocą rozkazu push dokonujemy załadowania wyniku na stos, zdjęcie ze stosu realizowane jest rozkazem pop. Wykorzystaliśmy także rozkaz skoku do podprogramu call dzięki czemu nie potrzebne było wielokrotne zapisywanie operacji mnożenia ośmiobitowego. Powrót z podprogramu za pomocą rozkazu ret. Zasada działania programu oparta jest na następującej zależności: a1a2*b1b2=(a2*b2*256*256)+ ((a2*b1)+(a1*b2))*265+a1*b1

Listing programu z opisem działania:

################################################################################

# #

# Micro Series Z80 Assembler V1.25/MD1 17/Mar/99 19:04:26 #

# #

# Source = c:mnoz2c.s01 #

# List = c:mnoz2c.lst #

# Object = c:mnoz2c.r01 #

# Options = #

# #

# (c) Copyright IAR Systems 1984 #

################################################################################

1 ;mnożenie liczb dwubajtowych

2 ;mnożna w komórkach pamięci: 100h(a2), 101h(a1)

3 ;mnożnik w komórkach pamięci: 102h(b2), 103h(b1)

4 ;WYNIK HL DE

5

6 0000 org 0h

7 0000 315001 ld sp,150h ;stos od adresu 150h

8 0003 3A0101 ld a,(101h) ;do a komórkę pamięci 101h(a1)

9 0006 5F ld e,a ;do e zawarto a

10 0007 3A0301 ld a,(103h) ;do a komórkę pamięci 103h(b1)

11 000A CD4A00 call mnoz1 ;skok do podprogramu mnoz1

12 000D E5 push hl ;ładuj wynik na stos a1*b1

13 000E 3A0001 ld a,(100h)

14 0011 5F ld e,a

15 0012 3A0301 ld a,(103h)

16 0015 CD4A00 call mnoz1

17 0018 E5 push hl ;ładuj na stos b1*a2

18 0019 3A0101 ld a,(101h)

19 001C 5F ld e,a

20 001D 3A0201 ld a,(102h)

21 0020 CD4A00 call mnoz1

22 0023 E5 push hl ;ładuj na stos a1*b2

23 0024 3A0001 ld a,(100h)

24 0027 5F ld e,a

25 0028 3A0201 ld a,(102h)

26 002B CD4A00 call mnoz1 ;w hl wynik a2*b2

27 002E DDE1 pop ix ;zdejm ze stosu a1*b2 i wstaw do ix

28 0030 C1 pop c ;zdejm ze stosu b1*a2 i wstaw do c

29 0031 DD09 add ix,bc ;działanie (a1*b2)+(b1*a2) wynik w ix

30 0033 D23700 jp nc,p1 ;jeśli cy=0 to do p1

31 0036 24 inc h ;zwiększ o 1 wartość w h

32 0037 DDE5 p1: push ix ;ix na stos

33 0039 C1 pop c ;(a1*b2)+(b1*a2) wstaw do c

34 003A 7D ld a,l ;l do a

35 003B 80 add a,b ;do a dodaj b

36 003C D24000 jp nc,p2 ;jeśli cy=0 to do p2

37 003F 24 inc h ;zwiększ h o 1

38 0040 6F p2: ld l,a ;l do a

39 0041 D1 pop de ;a młodszy bajt

40 0042 7A ld a,d ;po sumie z a1*b1

41 0043 81 add a,c

42 0044 D24800 jp nc,p3 ;jeśli cy=0 to do p3

43 0047 2C inc l ;zwiększ o 1 l

44 0048 57 p3: ld d,a

45 0049 76 halt

46

47 004A mnoz1:

48 004A 53 ld d,e

49 004B 4F ld c,a

50 004C 0600 ld b,0 ;zerowanie najbardziej znaczącego bitu ;wyniku

51 004E 1E09 ld e,9 ;ustawienie licznika bitw

52 0050 start:

53 0050 79 ld a,c ;c do akumulatora

54 0051 1F rra ;przesuniecie akumulatora w prawo

55 0052 4F ld c,a ;a do c

56 0053 1D dec e ;zmniejszenie licznika bitów o 1

57 0054 CA6000 jp z,koniec1 ;jeśli e=0 to koniec programu

58 0057 78 ld a,b ;b do a

59 0058 3001 jr nc,dodaj ;jeśli cy=0 to skok do dodaj

60 005A 82 add a,d ;do a dodaj mnożna

61 005B dodaj:

62 005B 1F rra ;przesuniecie b w prawo - przy cy=0

63 005C 47 ld b,a ;wynik do b

64 005D C35000 jp start ;powrót na początek programu

65 0060 koniec1:

66 0060 60 ld h,b

67 0061 69 ld l,c

68 0062 C9 ret

69 0063 end

Errors: None ##########

Bytes: 99 # mnoz2c #

CRC: 1F97 ##########



Wyszukiwarka

Podobne podstrony:
Tabliczka mnożenia
ALGORYTM MNOŻENIA PISEMNE GO(1), wykłady i notatki, dydaktyka matematyki, matematyka przedszkole i 1
mnozenie do 25 2[1] id 304290 Nieznany
mnozenie 20x20
matematyka wzory skróconego mnożenia
mnozenie do 25 11 id 304283 Nieznany
Tabliczka mnożenia na wesoło, Dla dzieci, Edukacja, mnożenie i dzielenie
Mnożenie i dzielenie do 20 - bombka, Matematyka(1)
wektory-odejmowanie-mnozenie, Fizyka
Kartkówka mnożenie i dzielenie pisemne
mnozenie macierzy
2006 szybkie mnozenie
03 06 Mnozenie

więcej podobnych podstron