DSM51 operacje przesylania danych i operacje arytmetyczne strona 1 Przypomnienie: Plik Otworz (F3) otwieranie pliku z programem.asm Plik Zapisz (F2) zapisywanie pliku z programem.asm do katalogu C:\JAGODA Plik Zapisz jako zapisywanie pliku z programem.asm do innego katalogu Po kaŝdej modyfikacji programu naleŝy wykonac: Uruchom Przerwij prace krokowa (Ctrl+F2) Uruchom Kompiluj (F9) Uruchom Uruchom (Ctrl+F9) Temat: Operacje przesylania danych Dodawanie (rozkaz MOV) Wstawienie wartości liczbowej do akumulatora ; op_mov1.asm ; rozkaz MOV A, #data MOV A, #15 ; do ACC wstaw 15 Otwórz okno Debugger Wewnetrzna pamiec danych IRAM Debugger Rejestry ACC=0F hex Przeslanie wartości liczbowej z rejestru do akumulatora ; op_mov2.asm ; rozkaz MOV A, Rr MOV R4,#10 ; do R4 wstaw 10 MOV A, R4 ; do A wstaw zawartosc rejestru R4 ACC=0A hex
DSM51 operacje przesylania danych i operacje arytmetyczne strona 2 ; op_mov3.asm ; operacje przesylania danych ; rozkaz MOV A, direct MOV 2,#10 ; do komorki o adresie 02 wstaw 10 MOV A, 2 ; do A wstaw zawartosc komorki 02 ACC=0A hex IRAM[2]=0A Hex ; op_mov4.asm ; operacje przesylania danych z adresowaniem posrednim ; za pomoca rejestru R0 lub R1 ; rozkaz MOV A, @R0 MOV 11, #8 ; do komorki o adresie 11 wstaw wartosc 8 MOV R0,#11 ; do R0 wstaw adres komorki MOV A, @R0 ; do A wstaw zawartosc komorki o adresie w R0 IRAM[11]=08 Hex R0=0B Hex ACC=08 Hex ; op_mov5.asm ; operacje przesylania danych do rejestru ; rozkaz MOV R1, direct MOV 01, #255 ; do komorki 01 wstaw 255 MOV R1, 01 ; do R1 wstaw zawartosc komorki o adresie 01 IRAM[1]=FF Hex R1=FF Hex
DSM51 operacje przesylania danych i operacje arytmetyczne strona 3 ; op_mov6.asm ; operacje przesylania danych z adresowaniem posrednim ; za pomoca rejestru R0 ; rozkaz MOV @R0, #data MOV R0, #16 ; do R0 wstaw adres 16 (10 hex) MOV @R0, #13 ; do komorki o adresie w R0 wstaw wartosc 13 R0=10 Hex IRAM[10hex]=0D Hex Temat: Programowanie prostych operacji arytmetycznych Dodawanie (rozkaz ADD) ; wersja A ; dodawanie dwoch komorek pamieci, wynik sumowania ; umieszczamy w trzeciej komorce ; pierwsza liczba - adres 01, druga liczba - adres 02, suma - adres 03 ; Po wykonaniu dodawania dla: 0+254 oraz 254+2 ; sprawdz zawartosc dziesietna: ; KOMORKI o adresie 03, akumulatora oraz flagi CY MOV 1, #254 ; do komórki o adresie 01 wstawiamy liczbę 254 MOV 2, #02 ; do komórki o adresie 02 wstawiamy liczbę 2 MOV A, #0 ; do akumulatora wstawimy liczbę 0 ADD A, 1 ; A = A + komórka 01 ADD A, 2 ; A = A + komórka 02 MOV 3, A ; do komórki o adresie 03 wstawiamy wartość akumulatora Pomoc: Otwórz okno Debugger Wewnetrzna pamiec danych IRAM Debugger Rejestry Debugger Bity ACC=00 hex PSW=80 hex CY=1
DSM51 operacje przesylania danych i operacje arytmetyczne strona 4 IRAM[1]=FE hex IRAM[2]=02 Hex IRAM[3]=00 Hex ; wersja B ; dodawanie dwoch rejestrow R0 i R1, wynik sumowania w rejestrze R2 MOV R0, #200 MOV R1, #55 MOV A,#0 ADD A, R0 ADD A, R1 MOV R2, A ACC=FF hex PSW=00 hex CY=0 IRAM[0]=C8 hex IRAM[1]=37 Hex IRAM[2]=FF Hex Odejmowanie (rozkaz SUBB) ; wersja A ; odejmowanie dwoch komorek pamieci, wynik odejmowania ; umieszczamy w trzeciej komorce ; pierwsza liczba - adres 01, druga liczba - adres 02, roznica - adres 03 ; Po wykonaniu odejmowania dla: 200-199, oraz 200-200 ; sprawdz zawartosc dziesietna: ; KOMORKI o adresie 03, akumulatora oraz flagi CY MOV 1, #200 ; wartosci poczatkowe MOV 2, #199 MOV A, 1 CLR PSW.7 ; zeruj CARRY w PSW SUBB A, 2 MOV 3, A
DSM51 operacje przesylania danych i operacje arytmetyczne strona 5 ACC=01 hex PSW=01 hex IRAM[1]=C8 hex IRAM[2]=C7 Hex IRAM[3]=01 Hex Temat: Programowanie prostych operacji Zerowanie czesci pamieci (rozkaz MOV) ; mem_clr1.asm ; zerowanie czesci pamieci ; rozkaz MOV direct, #data MOV 00, #0 ; do komorki 00 wstaw 00 MOV 01, #0 ; do komorki 01 wstaw 00 MOV 02, #0 ; do komorki 02 wstaw 00 MOV 03, #0 ; do komorki 03 wstaw 00 MOV 04, #0 ; do komorki 04 wstaw 00 IRAM[0]=00 hex IRAM[1]=00 hex IRAM[2]=00 hex IRAM[3]=00 hex IRAM[4]=00 hex Dla zaawansowanych ; mem_clr2.asm ; zerowanie czesci pamieci - zawansowane ; zerowanie KOMOREK od 00 hex do 1F hex ; rozkaz MOV direct, #data MOV A, #31 ; adres koncowy CLEAR: MOV R0, A MOV @R0, #00 ; zeruj komorke o adresie w R0 DEC A ; zmiejsz A o 1 JNZ CLEAR ; jesli A<>0 to skocz do CLEAR
DSM51 operacje przesylania danych i operacje arytmetyczne strona 6 MOV R0, #00 ; zeruj rejestr R0 Temat: Programowanie prostych operacji arytmetycznych Wykonaj 3 wersje programu mnozenia: ; rozkaz MUL AB ; mnozenie dwoch liczb, wynik mnozenia umieszczamy w R3 i R4 ; pierwsza liczba - R1, druga liczba - R2, iloczyn R4 (high), R3 (low) ; Po wykonaniu mnozenia dla: ; a). 4 x 5 ; b). 25 x 10 ; c). 10 x 255 ; sprawdz zawartosc dziesietna, binarną, heksydecymalną: ; rejestrów R3, R4, oraz A, B ; ODP.: (R4,R3): 20 DEC = 00 14 HEX = 0000 0000 0001 0100 BIN ; ODP.: (R4,R3): 250 DEC = 00 FA HEX = 0000 0000 1111 1010 BIN ; ODP.: (R4,R3): 2550 DEC = 63 9C HEX = 0110 0011 1001 1100 BIN MOV R1, #4 ; wartosci argumentów mnoŝenia MOV R2, #5 MOV A, R1 MOV B, R2 MUL AB ; mnozenie MOV R3, A MOV R4, B Wersja a). A = 4, B = 5 B= 00 hex ACC = 14 hex Dziesietnie = 20 Wersja b). A = 25, B = 10 B= 00 hex ACC = FA hex Dziesietnie = 250 Wersja c). A = 10, B = 255 B= 09 hex ACC = F6 hex Dziesietnie = 2550
DSM51 operacje przesylania danych i operacje arytmetyczne strona 7 Wykonaj program dzielenia: ; rozkaz DIV AB wersja a ; dzielenie dwoch liczb, wynik dzielenia umieszczamy w R3 i R4 ; pierwsza liczba - R1, druga liczba - R2, iloraz - R3, reszta z dzielenia - R4 ; Po wykonaniu dzielenia dla: ; a). 10 / 3 ; sprawdz zawartosc dziesietna, binarną, heksydecymalną: ; rejestrów R3, R4, oraz A, B ; ODP.: (R4,R3): 20 DEC = 01 03 HEX = 0000 0001 0000 0011 BIN MOV R1, #10 ; wartosci argumentów dzielenia MOV R2, #3 MOV A, R1 MOV B, R2 DIV AB ; dzielenie MOV R3, A MOV R4, B Wersja a). A = 10, B = 3 B= 01 hex ACC = 03 hex