Programowanie Niskopoziomowe 3, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder


POLITECHNIKA LUBELSKA

Wydział Elektrotechniki i Informatyki

LABORATORIUM PROGRAMOWANIA

NISKOPOZIOMOWEGO

Ćwiczenie nr : 3

Temat : Podstawowe operacje arytmetyczne.

Grupa:

Data wykonania:

Wykonał:

Zadanie 1

(operacja dodawania z wykorzystaniem bitu przeniesienia C i wyświetlanie wyników w kodzie dziesiętnym BCD)

Listing programu:

1 LJMP START

2 ORG 100H

3 START:

4 LCALL LCD_CLR

5

6 MOV A,#240

7 LCALL BIN_BCD

8 MOV R0,A

9

10 MOV A,#'+'

11 LCALL WRITE_DATA

12 CLR C

13

14 MOV A,#100

15 LCALL BIN_BCD

16 MOV R1,A

17

18 MOV A,#'='

19 LCALL WRITE_DATA

20 CLR C

21

22 MOV A,R1

23 ADDC A,R0

24

25 JNC POINTER

26

27 MOV B,#100

28 ADD A,#56

29 DIV AB

30 ADD A,#2

31 LCALL WRITE_HEX

32 MOV A,B

33

34 POINTER:

35 LCALL BIN_BCD

36

37 LJMP $

38

39 BIN_BCD:

40 PUSH PSW

41 PUSH B

42 PUSH ACC

43

44

45 MOV B,#100

46 DIV AB

47

48 JZ POINTER1

49 LCALL WRITE_HEX

50

51 POINTER1:

52 MOV A,B

53 MOV B,#10

54 DIV AB

55 SWAP A

56 ADD A,B

57

58 LCALL WRITE_HEX

59

60 POP ACC

61 POP B

62 POP PSW

63

64 RET

Wnioski:

Program sumuje dwie liczby z zakresu 0..256.

W wierszach 6-20 następuje wpisanie do rejestrów składników i wywołanie podprogramu BIN_BCD który zamienia składniki na kod BCD i wypisuje je w postaci dziesiętnej.

Zostają również wyświetlone znaki + i = .

W przypadku gdy suma jest większa niż 256 zostaje ustawiony bit przeniesienia C czyli siódmy bit rejestru stanu PSW. Aby przy dodawaniu uwzględnić ustawianie tego bitu należy zamiast rozkazu ADD użyć rozkazu ADDC jak w wierszu 23.

Jeżeli po wykonaniu operacji dodawania wartość bitu przeniesienia wynosi 0 to zostaje wykonany skok do miejsca oznaczonego etykietą POINTER.

Wówczas należy wywołać BIN_BCD aby zamienić wynik na BCD i wyświetlić go jako liczbę dziesiętną.

Do sprawdzenia stanu bitu C został użyty w wierszu 25 rozkaz JNC wykonujący skok do etykiety podanej jako parametr jeśli stwierdzi C=0.

Jeśli C=1 to zostaną wykonane instrukcje z wierszy 27-32. Służą one do obliczenia i wyświetlenia liczby setek.

Od wartości przeniesienia 256 zostaje odrzucona liczba setek czyli 2. Liczbę 56 należy dodać do zawartości akumulatora i podzielić przez 100. Do części całkowitej z podziału przez 100, która znajduje się w akumulatorze jest dodana 2 i całość wyświetlona jako liczba setek końcowej sumy. Należy jeszcze przenieść resztę z dzielenia przez 100 z rejestru B do akumulatora.

Podprogram BIN_BCD rozpoczyna się od zachowania na stosie rejestrów PSW, B i A, aby po wykonaniu podprogramu można je było powtórnie odczytać.

Aby sprawdzić czy dana liczba jest trzycyfrowa należy podzielić ją przez 100 i sprawdzić stan akumulatora rozkazem JZ. Zero oznacza liczbę dwucyfrową lub cyfrę i zostaje wykonany skok do POINTER1. W ten sposób zostaje pominięty rozkaz LCALL WRITE_HEX z wiersza 49, który niepotrzebnie wyświetlałby dwa zera.

Na koniec zostają odczytane ze stosu wartości PWD,B i A.

Zadanie 2:

(odejmowanie z uwzględnieniem liczb ujemnych)

Listing programu:

1 LJMP START

2 ORG 100H

3 START:

4 LCALL LCD_CLR

5

6 MOV A,#255

7 LCALL BIN_BCD

8 MOV R0,A

9

10 MOV A,#'-'

11 LCALL WRITE_DATA

12 CLR C

13

14 MOV A,#100

15 LCALL BIN_BCD

16 MOV R1,A

17

18 MOV A,#'='

19 LCALL WRITE_DATA

20 CLR C

21

22 MOV A,R0

23 SUBB A,R1

24 JNC POINTER

25 PUSH ACC

26 MOV A,#'-'

27 LCALL WRITE_DATA

28 POP ACC

29

30 MOV R0,A

31 MOV A,#255

32 SUBB A,R0

33 ADD A,#2

34

35

36 POINTER:

37 LCALL BIN_BCD

38

39 SJMP $

40

41

42 BIN_BCD:

43 PUSH ACC

44 PUSH PSW

45

46 MOV B,#100

47 DIV AB

48 JZ POINT

49 LCALL WRITE_HEX

50 POINT:

51 MOV A,B

52 MOV B,#10

53 DIV AB

54 SWAP A

55 ADD A,B

56 LCALL WRITE_HEX

57 POP PSW

58 POP ACC

59 RET

Wnioski:

Program odejmuje jedną liczbę od drugiej uwzględniając liczby ujemne oraz wyświetla różnicę w postaci dziesiętnej.

W wierszach 6-20 następuje wpisanie do rejestrów odjemnej, odjemnika i wywołanie podprogramu BIN_BCD który zamienia odjemną i odjemnik na kod BCD i wypisuje je w postaci dziesiętnej.

Zostają również wyświetlone znaki - i = .

Przy posługiwaniu się rozkazem odejmowania SUBB bit C pełni rolę pożyczki i musi być zerowany przed wykonaniem odejmowania. Nie wyzerowanie bitu C prowadzi do otrzymania błędnego wyniku. Jeżeli po wykonaniu odejmowania bit C zmienił swoją wartość na 1 oznacza to, iż otrzymana różnica jest ujemna.

Rozkaz odejmowania jest zapisany w wierszu 23. Następnie jest sprawdzana wartość bitu C rozkazem JNC.

Jeśli C=0 to następuje skok do etykiety POINTER: i zamienia się różnicę na BCD korzystając z BIN_BCD.

Jeśli C=1 to zawartość akumulatora jest dodana do stosu poleceniem PUSH aby umożliwić wstawienie do akumulatora a następnie wypisanie znaku - . Następnie odzyskuje się wartość akumulatora przechowywaną na stosie poleceniem POP.

Odejmując od 255 wartość z akumulatora i dodając 2 uzyskuje się liczbę dodatnią, która odpowiada wartości bezwzględnej z ujemnej różnicy dwóch liczb. Teraz należy już tylko skorzystać z BIN_BCD.

Zadanie 4:

(mnożenie)

Listing programu:

1 LJMP START

2 ORG 100H

3 START:

4 LCALL LCD_CLR

5

6 MOV A,#255

7 LCALL BIN_BCD

8 MOV R0,A

9

10 MOV A,#'*'

11 LCALL WRITE_DATA

12

13

14 MOV A,#255

15 LCALL BIN_BCD

16 MOV B,A

17

18 MOV A,#'='

19 LCALL WRITE_DATA

20

21

22 MOV A,R0

23 MUL AB

24

25 XCH A,B

26 LCALL WRITE_HEX

27 MOV A,B

28 LCALL WRITE_HEX

29

30

31 SJMP $

32

33

34 BIN_BCD:

35 PUSH ACC

36 PUSH PSW

37

38 MOV B,#100

39 DIV AB

40 JZ POINT

41 LCALL WRITE_HEX

42 POINT:

43 MOV A,B

44 MOV B,#10

45 DIV AB

46 SWAP A

47 ADD A,B

48 LCALL WRITE_HEX

49 POP PSW

50 POP ACC

51 RET

Wnioski:

Program mnoży dwie liczby i wypisuje iloczyn w postaci szesnastkowej.

W wierszach 6-20 następuje wpisanie do rejestrów czynników i wywołanie podprogramu BIN_BCD który zamienia czynniki na kod BCD i wypisuje je w postaci dziesiętnej.

Zostają również wyświetlone znaki * i = .

Mnożenie realizuje się za pomocą rozkazu MUL AB. Wykonuje się ono zawsze na rejestrach A i B. Wynik mnożenia może być maksymalnie 16-bitowy gdyż po wykonaniu działania mniej znacząca część iloczynu (młodsze 8 bitów) znajduje się w akumulatorze, zaś bardziej znacząca część (starsze 8 bitów) w rejestrze B.

Aby w pierwszej kolejności wyświetlić bardziej znaczący bajt użyty został w wierszu 25 rozkaz XCH, który zamienia wartości bajtów podanych jako parametry.

Następnie starszy bajt zostaje wyświetlony z akumulatora, do akumulatora zostaje podstawiony młodszy bajt z rejestru B poleceniem MOV A,B, po czym również on zostaje wyświetlony.



Wyszukiwarka

Podobne podstrony:
Urządzenia 101 - parametry łączników protokół (tylko dla ZAO, Politechnika Lubelska, Studia, semestr
Sieci 9, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Teoria ster. 4, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Oświetlenie 11, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Materiałoznawstwo 6(1), Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Metrologia 23 protokół, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Sieci 14, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Napęd E. 20 protokół, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Sieci 11, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Miernictwo p.8 - pomiar ilości ciepła, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Oświetlenie 8, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Metrologia 18, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Metrologia 16, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Identyfikacja 6-9 protokół, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Elektronika 6 protokół stary, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Metrologia 16 protokół, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Napęd E. 20, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Napędy 2 protokół EZ 9, Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder
Teoria ster. 8(1), Politechnika Lubelska, Studia, semestr 5, Sem V, Nowy folder

więcej podobnych podstron