Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

nyac55

Assembler - wprowadzenie do pisania programów itd. ?

Polecane posty

Witam. Mam prośbę ,aby ktoś zamieścił jakieś materiały wraz z komentarzami odnośnie pisania pierwszych programów ,a między innymi:

1. Pobieranie klawiszy z klawiatury

2. Sprawdzanie ,blokowanie znaków ,wyświetlanie tekstów i znaków ,wprowadzanie ich do zmiennych ,czyszczenie ekranu.

__________

3.Program ,który realizuje : Wprowadź 10 cyfr ,nie działa na inne znaki. Przycisk q(zakończy wprowadzanie znaków) i zlicza.

Jeśli ,ktoś dałby radę to chętnie skorzystam. [Pilnie potrzebuję tych materiałów] ,ponieważ mam jutro kartkówkę... icon_wink.gif

Link do komentarza
Udostępnij na innych stronach

Chodzi Ci o obsługe konsoli? Tu masz link do funkcji z WinAPI.

Blokowanie znaków, nic mi nie mówi. Wczytywanie wartości i wyświetlanie najprościej chyba zrobić scanf'em i printf'em.

Sprawdzanie czy znak jest cyfrą? Trzeba zwyczajnie porównać z '0', '1', itd. Znaki od 0 do 9, powinny być ułożone kolejno w tablicy znaków, co pozwala ograniczyć się do warunku '0' <= znak <= '9'.

Link do komentarza
Udostępnij na innych stronach

Obecnie muszę wykonać program ,który wyświetla na ekranie:

Dana1 =

-

Dana2 =

Wynik =

Obok danej 1 ma się pojawić: liczba w szesnastkowym i w nawiasie kwadratowym [liczba w ósemkowym]. My dane te musimy wprowadzić z klawiatury w systemie U2 i od danej 1 odejmuje daną 2. Wynik zwraca w binarnym.

Program ma reagować na następujące klawisze:

- <L> - wybór dane1

- <P> - wybór dane2

- <W> - wykonanie operacji

- <1>, <0> - wprowadzenie wartości danej

- <Enter> - akceptacja danej

- <BS> - korekta

- <Esc> - wyjście z programu

(Z chwilą wprowadzenia danej z linii wyświetlamy ją w stałym miejscu ekranu w

kodzie szesnastkowym, a w nawiasach [] w kodzie ósemkowym. Na ekranie

zmieniamy tylko te pola które uległy zmianie. W środku między danymi na

ekranie umieszczamy znak operacji.

Na początku programu daną1 oraz daną2 zerujemy i wyświetlamy je na ekranie a

polu wyniku spacje. Zmiana dowolnej danej ?kasuje? na ekranie poprzedni wynik.

Dla operacji arytmetycznych wynik operacji wyświetlamy w stałym miejscu ekranu

w kodzie szesnastkowym, a w nawiasach [] w kodzie ósemkowym. Dla wyniku

operacji z błędem (np. dzielenie przez 0) lub przekroczymy zakres liczby

wyświetlamy w polu wyniku ?***?.)

>... ? Ktoś pomoże?? Mam też problem natury takiej ,że nie wiem jak zacząć. Zainstalowałem Virtual Box'a by uruchomić FASM'a ,początkowy fragment się kompiluje ,ale jak chcę go uruchomić to nic z tego. Może trzeba jakoś zatrzymać ekran? Zmienne ,należy tworzyć w dyrektywach?? Można prosić o jakiś przykład tego zabiegu... i tego jak rozpocząć program w FASM'ie??

Link do komentarza
Udostępnij na innych stronach

Zmienną typ unsigned int tworzy się tak:

add 4, %sp

Zmienną unsigned int na stosie zeruje się tak:

xor %eax, %eax
mov %eax, [%sp - 4]

Parametr funkcji przekazuje się tak:

push %eax

Oczywiście zapis należy traktować jak pseudokod. Każdy asembler ma własną formę zapisu.

Po co Ci virtualbox? Nie łatwiej użyć asemblerów działających pod windowsem? Z mingw albo microsoftowego?

Link do komentarza
Udostępnij na innych stronach

O co chodzi z tym linkiem? Z tej strony nie udało mi się pobrać MASM'a jednak pobrałem z innej ,podczas instalacji były 2 błędy ,lecz je zignorowałem. Program uruchamia się ,lecz nie da się uruchomić napisanego kodu (skompilować też).

Link do komentarza
Udostępnij na innych stronach

Od siebie mogę zaoferować te materiały(link będzie aktywny do piątku lub dopóki nie pobierzesz): https://www.dropbox.com/sh/7myvp5h7l1bqllf/Oxc4OwrNTR

Znajduje się tam też obraz wirtualnej maszyny DOSa(pobierz vMware Player, a no i jak wczytasz to wybierz opcję 'i copied it') dzięki której można uruchomić podane dalej przeze mnie programy do Assemblera(które już są tam wgrane). Programy takie, jak AFD 1 i 2, czy też NASM(nie działają pod x64, więc maszyna wirtualna XP, by się przydała, jeśli nie wystarczy ten obraz DOS-a), które będą pewnie przydatne.

Wszystkie materiały można kopiować, jednak proszę zbytnio nie rozpowszechniać.

BTW. Na zajęciach nie masz czasem możliwości zaopatrzenia się w podobne programy itd.?

Link do komentarza
Udostępnij na innych stronach

Dzięki. Ostatecznie dzisiaj udało mi się uruchomić FASM'a na 2 sposoby. Lecz nie na laptopie studenckim tylko komputerze stacjonarnym ,który jest w domu. 1 sposób to metoda działania FASM'a pod windows ->działa pod każdym nawet 64-bitowym. 2 metoda to z użyciem VirtualBOx'a i emulowanie XP. Lecz chyba będę musiał się przerzucić na tą 1 metodę. Dzięki za materiały ,przydadzą się do nauki języka.

______________

Odnośnie zajęć to: dostaliśmy jakieś materiały ,przykładowe pliki z programami i obecną opisaną tu metodę 1 pod Windows'a. Zanim poznałem tą metodę miałem liczne problemy na laptopie związane z próbą uruchomienia jakiegokolwiek programu. Dopiero dzisiaj się udało.

_+_+_+_+_+_+_+_+_

Może mi ktoś jeszcze podać skuteczną metodę uruchamiania FASM'a na DosBox'ie lub wersję FASM'a do ściągnięcia od razu z skonfigurowanym DOSBOX'em tak ,żeby od razu po uruchomieniu działało. Chodzi mi o to ,żeby programy dało się łatwo pisać:


segment entry:start
mov ah,9
int 21h

Ponieważ w wersji pod Windows jest to trudniejsze ,bardziej skomplikowane i mniej zrozumiałe.

icon_neutral.gif

Link do komentarza
Udostępnij na innych stronach

Obecnie udało mi się osowoić z FASM'em pod emulatorem+windows XP (działa ,kompiluje się itd.)

Mam małe pytanie ,pokażę na kodzie:


format MZ
entry main:start
stack 100h
segment main
start:
mov ax,dane ;ustalnie segmentu danych
mov ds,ax <- czym w tym wypadku jest ds??
;wyswietlenie 1 tekstu (przerwanie 21h,funkcja 09h, w dx offset tekstu)
mov dx,dana1
mov ah,09h
int 21h
;wyswietlenie 1 znaku (przerwanie 21h,funkcja 09h, w dx offset tekstu)
mov dx,znak1
mov ah,09h
int 21h
;wyswietlenie 2 tekstu (przerwanie 21h,funkcja 09h, w dx offset tekstu)
mov dx,dana2
mov ah,09h
int 21h
;wyswietlenie 2 znaku (przerwanie 21h,funkcja 09h, w dx offset tekstu)
mov dx,znak2
mov ah,09h
int 21h
;wyswietlenie 3 tekstu (przerwanie 21h,funkcja 09h, w dx offset tekstu)
mov dx,wynik
mov ah,09h
int 21h

;czekanie na wcisniecie klawisza (przerwanie 21h, funkcja 01h, kod ASCII wcisnietego klawisza zwrócony zostaje w rejestrze AL)
mov ah,01h
int 21h
;zakonczenie programu (przerwanie 21h, funkcja 4ch)
mov ah,01h
int 21h
segment dane
dana1 db 'Dana 1 =',10,13,'$'
znak1 db ' -',10,13,'$'
dana2 db 'Dana 2 =',10,13,'$'
znak2 db ' =',10,13,'$'
wynik db 'Wynik =',10,13,'$'

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...