|
||
Skład grupy: Rachański Edward Patyra Artur Rudy Marek
|
Wydział elektrotechniki i Informatyki
|
|
|
Grupa: ED5.5 |
Ćwiczenie nr 4 |
TEMAT: Operacje arytmetyczne. |
Data wykonania ćwiczenia:21.11.2005 |
Ocena: |
Listing do programu przeliczającego wartość PLN w stosunku do euro:
1 ; *************************************************
2 ; Zadanie nr 1
3 ; Program przeliczający wartość PLN na EURO
4 ; *************************************************
5 0000: 02 01 00 LJMP START
6 ORG 100H
7 0100: START:
8
9 0100: 12 81 1C LCALL WAIT_KEY ;podaj kurs euro
10 0103: F5 F0 MOV B,A ;przenieś A na B
11 0105: 12 81 04 LCALL WRITE_HEX ;wyświetl kurs
12 0108: 74 2A MOV A,#"*" ;kod znaku * do akumulatora
13 010A: 12 81 02 LCALL WRITE_DATA ;wyświetla znak *
14 010D: 12 81 1C LCALL WAIT_KEY ;podaj wartość pln
15 0110: C0 E0 PUSH ACC ;odłóż akumulator na stos
16 0112: 12 81 04 LCALL WRITE_HEX ;wyświetla ilość złotówek
17 0115: 74 3D MOV A,#"=" ;kod znaku = do akumulatora
18 0117: 12 81 02 LCALL WRITE_DATA ;wyświetla znak =
19 011A: D0 E0 POP ACC ;pobierz wartość akumulatora
ze stosu
20 011C: A4 MUL AB ;operacja mnożenia
21 011D: 75 F0 0A MOV B,#10 ;zamiana HEX na BCD
22 0120: 84 DIV AB
23 0121: C4 SWAP A
24 0122: 25 F0 ADD A,B
25 0124: 12 81 04 LCALL WRITE_HEX ;wyświetl wynik
26 0127: 02 01 27 LJMP $
Wartości poszczególnych rejestrów w pracy krokowej:
B |
ACC |
PSW |
Zawartość stosu |
SP |
00 |
00 |
00 |
00 |
07 |
00 |
22 |
00 |
00 |
07 |
00 |
07 |
81 |
00 |
07 |
07 |
07 |
81 |
00 |
07 |
07 |
22 |
A0 |
00 |
07 |
07 |
2A |
A1 |
00 |
07 |
07 |
22 |
A0 |
00 |
07 |
07 |
04 |
A1 |
04 |
08 |
07 |
22 |
A0 |
04 |
08 |
07 |
3D |
A1 |
04 |
08 |
07 |
22 |
A0 |
04 |
08 |
07 |
04 |
A1 |
00 |
07 |
00 |
1C |
A1 |
00 |
07 |
0A |
1C |
A1 |
00 |
07 |
08 |
02 |
A1 |
00 |
07 |
08 |
20 |
A1 |
00 |
07 |
08 |
28 |
20 |
00 |
07 |
08 |
22 |
A0 |
00 |
07 |
Powyższy program pobiera dwie liczby z zakresu 0…9 i mnoży je. Wynik wyświetlany jest w postaci dziesiętnej. Aby zamienić wynik na postać dziesiętną podzieliłem wartość iloczynu przez 10 otrzymując liczbę dziesiątek i jedności. Stosując rozkaz SWAP umieściłem liczbę dziesiątek na właściwych, starszych 4 bitach, a liczbę jedności na 4 mniej znaczących. Rozkaz SWAP przesuwa 4 młodsze bity na miejsce 4 starszych.
Aby otrzymać wynik w postaci dziesiętnej należało dokonać takiej operacji gdyż program wykonuje działania na liczbach szesnastkowych. Liczby dziesiętne i szesnastkowe w zakresie 0...9 pokrywają się także zamiana ich nie była konieczna.
Wynik dwóch mnożonych liczb 8-bitowych może być 16-bitowy. Mniej znacząca część jest umieszczana w akumulatorze a bardziej znacząca w rejestrze B. Z uwagi na ograniczony zakres wprowadzanych liczb cały wynik mieścił się w A więc nie uwzględniłem rejestru B.