1
unknown
assembly_x86
2 years ago
2.2 kB
6
Indexable
ARG1 EQU 20h ;bajty ARG1, ARG1+1, ARG1+2, ARG1+3 pierwszy argument HEX i wynik ARG2 EQU 2Ah ;bajty ARG2 i ARG2+1 drugi argument HEX REG EQU 30h ;do przechowania rejestrów LJMP START ORG 100H START: ; Napisz program wykonujący operacje logiczne na dwóch argumentach pobieranych z klawiatury matrycowej z zakresu [0 - FF] hex. ; Kolejne operacje: ; 1. na LCD wyświetlamy napis: "Kliknij 4 znaki " (tekst ma 16 znaków) LCALL LCD_CLR MOV DPTR, #TXT_WELCOME LCALL WRITE_TEXT ; 2. wciskamy 4 dowolne klawisze, kolejne dwa znaki tworzą jednobajtowe liczby heksalne MOV R1, #ARG1 ACALL READ_H_1B MOV R1, #ARG2 ACALL READ_H_1B MOV A, #ARG1 ; Przeniesienie danych z adresu ARG1 do akumulatora A ANL A, #ARG2 ; Wykonanie iloczynu logicznego z wartością znajdującą się pod adresem ARG2 MOV R1, #ARG1+1 MOV @R1, A MOV A, #ARG1+1 LCALL WRITE_HEX LCALL WAIT_KEY ; 3. po czwartym znaku czyścimy LCD LCALL LCD_CLR ; Po wprowadzeniu i zapamiętaniu liczb pod adresami AD1=Arg.1 oraz AD2=Arg.2: ; 1. w pierwszym wierszu LCD wyświetlamy: Arg1&&Arg2=iloczyn logiczny (argumenty i wynik wypisujemy jako 2-u cyfrowe liczby heksalne zakończone literą h) MOV A, ARG1 LCALL WRITE_HEX MOV DPTR, #TXT_DIVIDER LCALL WRITE_TEXT MOV A, ARG2 LCALL WRITE_HEX MOV DPTR, #TXT_EQUALS LCALL WRITE_TEXT READ_H_1B: LCALL WAIT_KEY MOV R2, A SWAP A MOV @R1, A MOV A, R2 ACALL PISZ_CYFRA LCALL WAIT_KEY MOV R2, A ADD A, @R1 MOV @R1, A MOV A, R2 ACALL PISZ_CYFRA RET PISZ_CYFRA: MOV R0, A CLR C SUBB A, #10 JNC E2 MOV A, R0 ADD A, #48 ;uzyskujemy kod ASCII cyfry od 0 do 9 AJMP E3 E2: MOV A, R0 ADD A, #55 ;uzyskujemy kod ASCII cyfry od A do F E3: LCALL WRITE_DATA RET MUL_2_1: MOV REG, R1 MOV REG+1, R2 MOV R1, A MOV B, A MOV A, @R0 MUL AB ;wynik mnozenia: B-high A-low MOV @R0, A MOV R2, B MOV A, R1 MOV B, A INC R0 MOV A, @R0 MUL AB CLR C ADD A, R2 MOV @R0, A CLR A INC R0 MOV @R0, B ADDC A, @R0 MOV @R0, A MOV R1, REG MOV R2, REG+1 RET TXT_WELCOME: DB 'Kliknij 4 znaki ', 0 TXT_DIVIDER: DB 'h&&', 0 TXT_EQUALS: DB '=', 0 TXT_HEXAL: DB 'h', 0 TXT1: DB 'h + ',0 TXT2: DB 'h = Press any key ',0 TXT3: DB 'h klik',0 END
Editor is loading...