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/.

Użytkownik


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