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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2005-12-01 10:55:23

  owca_z - Użytkownik

owca_z
Użytkownik
Skąd: Wodzisław Śl/Jastrzębie Zdr
Zarejestrowany: 2004-09-24

[ASM] prosty programik :/

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ć



Kod:

.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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.012 seconds, 10 queries executed ]

Informacje debugowania

Time (s) Query
0.00013 SET CHARSET latin2
0.00018 SET NAMES latin2
0.00107 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.141.24.134' WHERE u.id=1
0.00311 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.141.24.134', 1714991725)
0.00043 SELECT * FROM punbb_online WHERE logged<1714991425
0.00138 DELETE FROM punbb_online WHERE ident='85.208.96.200'
0.00043 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=2389 AND t.moved_to IS NULL
0.00043 SELECT search_for, replace_with FROM punbb_censoring
0.00124 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=2389 ORDER BY p.id LIMIT 0,25
0.00117 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=2389
Total query time: 0.00957 s