assembler 1, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Projekt, Projekt 1


Marta Kiełczewska grupa AiR1

Barnik Grzegorz

Grzegrzółka Paweł

Majewski Paweł

Architektura Systemów Komputerowych - Projekt 1

Program nazwany przez nas „HEX” ma na celu przeliczanie liczby podanej przez użytkownika w kodzie szesnastkowym na liczbę zapisaną w kodzie dziesiętnym. Kompilator, jakiego użyliśmy do skompilowania kodu to Turbo Assembler w wersji 5.0. Aby uruchomić program należy uruchomićplik wsadowy hex.exe, natomiast kod programu zawarty został w niniejszym sprawozdaniu oraz w pliku hex.asm, załączonym do sprawozdania.

Program wykorzystuje przerwanie 21h funkcja 01h do wczytania tekstu, 21h funkcja 09h do wyświetlenia tekstu, 21h funkcja 02h oraz 21h 04ch do zakończenia programu. Działanie aplikacji opiera się na wczytaniu wprowadzonego z klawiatury znaku w kodzie ASCII do rejestru AL, następnie dokonywana jest zamiana z kodu ASCII na wartość cyfry. W kolejnym kroku przekonwertowana na postać binarna liczba zostaje zapisana w rejestrze AX. Następnie program dokonuje konwersji liczby z postaci heksagonalnej na dziesiętną i wyświetla wynik konwersji na ekranie. Warto zauważyć, że w przypadku wpisywania liczby zawierającej mniej niż 4 znaki należy wcisnąć klawisz ENTER, podczas gdy w momencie wpisania czwartego znaku wciskanie owego klawisza nie jest już konieczne, gdyż program sam zacznie wykonywać powierzone mu instrukcje co zapobiega wpisaniu przez użytkownika liczby zawierającej więcej niż 4 znaki. Instrukcje, wykonywane kolejno przez program znajdują się w komentarzach do poszczególnych linijek kodu (wyszczególnionych w niniejszym sprawozdaniu kursywą).

0x01 graphic

rys. Obraz widoczny na ekranie po zakończeniu działania programu.

Kod programu:

dane SEGMENT

komunikat db 13, 10,'Prosze podac liczbe HEX nie wieksza FFFF '

db 'i nacisnac Enter $'

wynik db 13, 10, 'Liczba zapisana w systemie dziesietnym to = $'

tbl_cyfr db 10 dup (?)

dane ENDS

rozkazy SEGMENT

ASSUME cs:rozkazy, ds:dane

pocz: mov ax, SEG dane

mov ds, ax

mov dx, OFFSET komunikat

mov ah, 9

int 21H ; wyswietlenie tekstu informacyjnego

; wczytywanie liczby dziesiętnej z klawiatury, konwersja na postać binarną, która zostaje wpisana do rejestru AX po wprowadzeniu ostatniej cyfry należy nacisnąć klawisz Enter

mov cl, 0 ; poczatkowa wartosc ilosci wpisanych liczby w rejestrze CL

mov si, 0 ; poczatkowa wartosc wyniku konwersji w

rejestrze SI

ptlc: mov ah, 1

int 21H ; wczytywanie znaku w kodzie ASCII z klawiatury do rejestru AL

cmp al, 13

je nacisn_enter ; skok, gdy naciśnięto klawisz Enter

sub al, 30H ; zamiana kodu ASCII na wartość cyfry

cmp al, 41

ja mala_litera ; zostala wpisana mala litera (a,b,...)

cmp al, 9

ja duza_litera ; zostala wpisana duza litera (A,B,...)

return: mov bx, 0 ; zerowanie rejestru BX

mov bl, al ; wpisanie kolejnej cyfry do rejestru BL

mov ax, 16 ; mnożnik

mul si ; mnożenie dotychczas uzyskanego wyniku przez 16

add ax, bx ; dodanie aktualnie wczytanej cyfry

mov si, ax ; przesłanie wyniku obliczenia do rejestru SI

inc cl

cmp cl,4

je nacisn_enter ; skok, gdyz liczba ma juz 4 znaki

jmp ptlc ; skok na początek pętli

nacisn_enter:

mov ax, si ; przepisanie wyniku konwersji do rejestru AX

jmp koniec

duza_litera:

sub al,7 ;A=10, B= 11 ... itd

jmp return

mala_litera:

sub al,39 ;a=10, b= 11 ... itd

jmp return

koniec:

; wartość binarna wprowadzonej liczby znajduje się teraz w rejestrze AX

mov si, ax ; przechowanie AX

mov dx, OFFSET wynik

mov ah, 9

int 21H ; wyświetlenie tekstu o wyniku obliczenia

; konwersja liczby zawartej w rejestrze AX

mov ax, si ; odtworzenie AX

mov cx, 10 ; liczba obiegów pętli

mov bx, 10 ; dzielnik

mov si, 9 ; indeks początkowy w tablicy tbl_cyfr

ptlw: mov dx, 0 ; zerowanie starszej części dzielnej

div bx ; dzielenie przez 10; iloraz w AX, reszta w DX

add dl, 30H ; zamiana reszty na kod ASCII

mov tbl_cyfr[si], dl ; odesłanie kodu ASCII kolejnej cyfry do tablicy tbl_cyfr

dec si ; zmniejszenie indeksu w rejestrze SI o 1

loop ptlw ; sterowanie pętlą

; usuwanie zer nieznaczących z lewej strony

mov cx, 9 ; liczba obiegów pętli usuwania

; zer nieznaczących

mov si, 0 ; indeks początkowy w tablicy tbl_cyfr

ptz: cmp byte PTR tbl_cyfr[si], 30H ; czy cyfra '0'

jne wyskocz

mov byte PTR tbl_cyfr[si], 20H ; wpisanie kodu spacji

; w miejsce zera

inc si

loop ptz

; wyświetlanie cyfr

wyskocz:

mov cx, 10 ; liczba obiegów pętli wyświetlania

mov si, 0 ; indeks poczatkowy w tablicy tbl_cyfr

ptlw2: mov dl, tbl_cyfr[si]; pobranie kodu ASCII kolejnej cyfry

mov ah, 2

int 21H ; wyświetlenie cyfry na ekranie

inc si ; zwiększenie indeksu w rejestrze SI o 1

loop ptlw2 ; sterowanie pętlą wyświetlania

mov al, 0 ; kod powrotu programu

mov ah, 4CH

int 21h ; koniec programu - przekazanie sterowania

rozkazy ENDS

END pocz



Wyszukiwarka

Podobne podstrony:
Projekt 3, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Projekt, Projekt 3
ASK-koło pierwsze pytania z mojej grupy, Edukacja, studia, Semestr IV, Architektura Systemów Kompute
ask4, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Wyklad
opracowane pytania na ASK@, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Oprac
ask1, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Wyklad
Teoria 2003, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Opracowania pytań
ask3, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Wyklad
Pytania przykl ASK1, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Opracowania
Pytania przykl ASK2, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Opracowania
ask2, Edukacja, studia, Semestr IV, Architektura Systemów Komputerowych, Wyklad
TECHNIKA MIKROPROCESOROWA (1), Edukacja, studia, Semestr IV, Technika Mikroprocesorowa
liniowkaWKLEPANE PYTANIA, Edukacja, studia, Semestr IV, Układy Elektroniczne
pytania na smoki, Edukacja, studia, Semestr IV, Technika Mikroprocesorowa
arch02, UŁ Sieci komputerowe i przetwarzanie danych, Semestr II, Architektura systemów komputerowych
Układy Elektroniczne zagadnienia, Edukacja, studia, Semestr IV, Układy Elektroniczne
arch05, UŁ Sieci komputerowe i przetwarzanie danych, Semestr II, Architektura systemów komputerowych
arch07, UŁ Sieci komputerowe i przetwarzanie danych, Semestr II, Architektura systemów komputerowych
Optoelektronika kolo 1, Edukacja, studia, Semestr IV, Optoelektronika, Pytania na koła, zestaw 8
JavaScript- podstawy, Edukacja, studia, Semestr IV, Języki Programowania Wysokiego Poziomu, Java skr

więcej podobnych podstron