Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
mam takie o to zadanie, i nie umiem sobie poradzić
Zaprojektować i uruchomić program w asemblerze 80x86 realizujący
wielokrotną operację pierwiastek drugiego stopnia dla liczb o słowie 8-bitowym w kodzie U2.
Dane wprowadzane z klawiatury w kodzie binarnym. Kolejność
wprowadzania danych i wykonania operacji dowolna i wielokrotna.
Na ekranie istnieje stała linia (linia poleceń) gdzie wprowadzamy
polecenia oraz wprowadzamy dane. Z klawiatury przyjmujemy tylko
następujące klawisze :
- <L> - wybór dane1
- <P> - wybór dane2
- <W> - wybór (wykonanie) operacji
- <1>, <0> - wprowadzenie wartości danej
- <B> - akceptacja danej/wyboru
- <Esc> - wyjście z programu
Przy wprowadzaniu liczb długość danych jest dowolna. Dla każdej operacji wprowadzamy obie dane. Z chwilą wprowadzenia ich (w linii w linii poleceń), w kodzie binarnym. Na ekranie zmieniamy tylko te pola, które uległy zmianie. W środku między danymi na ekranie umieszczamy znak operacji. W opcji "wykonanie operacji" wyświetlamy kod błędu wg zasad stosowanych w matematyce. Dodatkowo dla wersji :
c. gdy dana2 != -2 wyświetlamy kod błędu
Na początku programu dane1, dane2" zerujemy" i wyświetlamy je na ekranie a polu wyniku spacje. Zmiana dowolnej danej "kasuje" na ekranie poprzedni wynik. Wynik operacji wyświetlamy w stałym miejscu ekranu w kodzie ósemkowym a w nawiasach [ ] w kodzie binarnym. Dla wyniku operacji z błędem lub przekroczymy zakres liczby wyświetlamy w polu wyniku "***".
W programie nie deklarujemy własnych procedur. Wykożystujemy tylko rozkazy procesora 8086.
do tej pory napisałem coś takiego, prosze się nie śmiać
.model SMALL .stack 512 .data ;------------tu szykujemy zmienne-----------------; MENU db ' Menu programu: ',10,13 db ' <l> -Wpisywanie pierwszej liczby',10,13 db ' <p> -Wpisywanie drugiej liczby',10,13 db ' <w> -dokonanie operacji (pierwiastkowanie)',10,13 db ' <Esc> -wyjscie z programu',10,13 db ' Co robimy?...',10,13,'$' spacja db ' ','$' dwukropek db ':','$' txt_liczba1 db 'Wprowadz pierwsza liczbe! ',10,13,'$' TXT1 DB 'DANA1: [00000000] 000',13,10,'$' WYNIK DB 0 dana1 db 0 ;*****************************************PRZYGOTOWANIE ************************* ;--------------start programu .code START: MOV AX, @data MOV DS, AX ;----------------ustawienie aktywniej strony tekstowej mov al, 0 mov ah, 05 int 10h ;---------czyszczenie ekrenu mov al, 0 mov ch, 0 mov cl, 0 MOV DH, 25 MOV DL, 80 MOV BH, 15 ;TU DEFINUJEMY KOLOR TEKSTU MOV AH, 06 ;TU DEFINUJEMY KOLOR TEKSTU INT 10H ;----------ustawienie kursora MOV DH, 0 ;wiersz MOV DL, 0 ;kolumna MOV BH, 0 ;STRONA MOV AH, 02 INT 10H ;--------wyswietlenie MENU LEA DX, MENU MOV AH, 09h int 21h ;************************************************************ ;********************************** GLOWNY PROGRAM *********** ;************************************************************ ;*********** POCZATEK sprawdzenie jakie polecenie bedzie wykonane polecenie: ;---------skok kursora MOV DH, 8 ;wiersz MOV DL, 0 ;kolumna MOV BH, 0 ;STRONA MOV AH, 02 INT 10H ;---------linia polecen :P LEA DX, dwukropek MOV AH, 09h int 21h LEA DX, spacja MOV AH, 09h int 21h ;-------wcisniecie klawisza i wyswietlenie na ekranie MOV AH,01 ;----->ZAPIS DANEJ DO AL INT 21H ;--------porówanie co zostalo wcisniete? CMP AL,'L' ;SPRAQWDZENIE CZY DUZE L JE LICZBA1 ;PRZESKOK DO LICZBA1 CMP AL,'l' ; SPRAWDZENIE CZY MALE L JE LICZBA1 CMP AL,1BH ;sprawdzenie czy ESC wcisniete JE WYJSCIE ;-------jezeli wcisniete cos innego niz L,l,P,p badz ESC to wraca do lini polecen :) JMP polecenie ;********************************************* ;************************************************ ;*************************************************DZIAŁANIA DLA LICZBY 1 liczba1: ;-------obnizenie kursora lea dx, spacja mov ah,09 int 21h ;--------wyswietlenie tekstu dla liczby 1 lea dx, txt_liczba1 mov ah,09 int 21h ;-------wcisniecie klawisza i wyswietlenie na ekranie dla liczby 1 mov cx,8 zapis_1: MOV AH,01 ;----->ZAPIS DANEJ DO AL INT 21H ;mov dana1,al ;--------porówanie co zostalo wcisniete? CMP AL,'1' ;--SPRAQWDZENIE czy 1 ; je jeden cmp AL,'0' ;--sprawdzenie czy 0 cmp AL,0dh ;--sprawdzenie czy ENTER je ENTER_1 ;-----jesli wprowadzona jest jedynka loop zapis_1 ;--------------------- ;wyswietlenie dana1 w postaci osemkowej mov dh,20 mov dl,30 mov bh,0 mov ah,02h int 10h ;wyswietlenie dana1 w postaci osemkowej mov dl,dana1 and dl,11000000b mov cl,6 shr dl,cl add dl,48 mov ah,06h int 21h mov dl,dana1 and dl,00111000b mov cl,3 shr dl,cl add dl, 48 mov ah,06h int 21h mov dl,dana1 and dl,00000111b add dl,48 mov ah,06h int 21h ;wysw dana1 w postaci binarnej mov dl, 91 ;wstaw [ int 21h mov cl,8 mov bl,10000000b ;-------------------zakonczenie dzialania WYJSCIE: MOV AH,4CH INT 21H END
Offline