Pisanie po ekranie w asm

0

ma pare pytań:

  1. Jak jest przechowywany tekst z tego: printf("banan");

tak??? :

b
a
n
a
n

??? oczywiście o stos mi chodzi czy w odwrotnej kolejności???

  1. Jakim przerywaniem można wyświetlić zawartość rejestru AX ??
  2. Jak uzyskać przjście do następnej linii ale od początku następnej linii???
  3. Jak sprawdzić czy stos już nie zawiera nic???

nie kasujcie plizzzzzzzzzzzzzzz najwyżej dajcie jakieś linki albo coś oki?? a co do tego przerywania to może jakiś przykład?

0
  1. Jak jest przechowywany tekst z tego: printf("banan");

otwórz swój (a właściwie to dowolny) program dowolnym hexedytorem i będziesz wiedział

??? oczywiście o stos mi chodzi czy w odwrotnej kolejności???

dane nie są przechowywane na stosie, tylko w pamięci danych. tak, to jest różnica.
w pamięci "obracane" są tylko liczby - więc skąd pomysł na to, że teksty też?

  1. Jakim przerywaniem można wyświetlić zawartość rejestru AX ??

żadnym. musisz sobie przekonwertować zawartość rejestru na łańcuch znaków. poza tym skoro piszesz własny OS ;-) to nie masz do dyspozycji żadnych przerwań software'owych, więc obsługę wyświetlania musisz zrobić sam.

  1. Jak uzyskać przjście do następnej linii ale od początku następnej linii???

??? przecież jak wyświetlasz dane na ekranie, to piszesz pod pewne adresy w pamieci. sprawdź, pod jakim adresem jest początek następnego wiersza erranu, i zacznij pisać od nowego adresu.

  1. Jak sprawdzić czy stos już nie zawiera nic???

czy tu jest ukryta kamera? znajdź w necie przykłady użycia stosu i już. poza tym to wszystko zależy od tego, w jaki sposób używaż stosu - bo metod są setki. sam sobie jakąś wymyśl, bo tu nie uczymy podstaw.

nie kasujcie plizzzzzzzzzzzzzzz najwyżej dajcie jakieś linki albo coś oki??

polecam google. zamiast zadawać debilne pytania, to najpierw byś przeczytał kilka kursów, żeby chociaż rozumieć odpowiedzi, i odróżniać "przerywanie" od "przerwania".

a co do tego przerywania to może jakiś przykład?

może jeszcze cały program ci napisać? i po główce pogłaskać?
słuchaj uważnie: wszystko znajdziesz w necie, bo wszystkie pytania już zadano. jedynym problemem jest czasem znalezienie odpowiedzi, ale google mocno upraszcza sprawę.

0

Czy Ty naprawdę piszesz OSa, czy używasz czyjegoś kodu??
Powienieneś wiedzieć takie rzeczy, bo system operacyjny nie tylko odpowiada za pliki i odpalanie programów. Jego głównym zadaniem jest komunikacja między programami a sprzętem. OS to także sterowniki, biblioteki etc, tymczasem widzę, że zabierasz się do czegoś o czym nie masz pojęcia. Ale dobra, nie będę się aż tak wypowiadał, bo sam nie mam aż takiej wiedzy, więc odpowiem na kilka Twoich pytań.

Otóż stos teoretycznie nie może się skonczyc, bo tak naprawdę jest tylko wskaźnikiem w pamięci, który w zależności od tego czy wrzucasz coś na niego czy z niego coś ściągasz, zmienia swoją wartość.

Jeżeli chodzi o printf to w samej dokumentacji funkcji napisane jest, że parametrem przekazywanym do funkcji jest wskaźnik, tak więc na stos wrzucany jest tylko on, tekst natomiast przechowywany jest w sekcji DATA. Ów wskaźnik jest na pozycji SS:[BP+6]

Zawartość AX można wyświetlić przy pomocy 10h

Jak uzyskać przjście do następnej linii ale od początku następnej linii???

Mozesz obliczyc poczatek nastepnej linii lub znowu 10h.

0

Ja napisze tylko tyle... Siedzisz nad tą funkcja miesiąc prawie... Jeśli przez ten czas nie ruszyłeś, to moze czas dac sobie spokój - obsługe pamieci i dysku w takim przypadku będziesz robił latami, a technika komputerowa pójdzie w miedzyczasie strasznie do przodu.
http://4programmers.net/Forum/viewtopic.php?id=50717

// a właściwie to siedzisz na gotową podaną na tacy i nie potrafisz jej uzyć...

0
  1. Jakim przerywaniem można wyświetlić zawartość rejestru AX ??

żadnym. musisz sobie przekonwertować zawartość rejestru na łańcuch znaków. poza tym skoro piszesz własny OS ;-) to nie masz do dyspozycji żadnych przerwań software'owych, więc obsługę wyświetlania musisz zrobić sam.

I tak i nie :)

Istnieje przerwanie 29h - wyświetla znak podany w AL - często z tego korzystałem.

0

Proszę o normalne odpowiedzi a nie komentarze, robie co robie i koniec.

Wiecie jak wewalić ten tekst na stos??

czyli jak bym teraz odczytywal ze stosu tekst to bedzie on wyswietlany od tylu???

Acha i jeszcze jedno: Pisze w trybie rzeczywistym a nie chronionym wiec moge ort! z przerywań a nie jak jeden z was powiedział że od podstaw bede musial to pisac.

Robie powoli bo powoli nie glowie sie tak nad tym ale zaczynam wiec nie gadajcie na mnie tak.

0

movsb/stosb w petli

// Dopisane, do postu poniżej: jasniej sie nie da. a kodu za ciebie pisal ponownie nie bede, bo i tak bedziesz mial z tym problem

0

moge jaśniej?

sp??? bp????

niezrozumiale napisałeś

0

przerwania, to są specjalne funkcje, które są zaprogramowane w SYSTEMIE OPERACYJNYM dOS. komputer bez dosa nie am żadnych przerwań, więc jeśli chces pisać wlasny system operacyjny, to przerwań żadnych mieć nie będziesz. No chyba, że sam zaprogramujesz. A jeśli w dalszym ciągu chcesz napisać OS wykorzystujący przerwania dosowe, no to sorry, ale stworzysz co najwyżej nakładkę na dos, co z OSem będzie mieć tyle wspólnego co programista mandarynką

0

Do Anonima!

Co to za stek bzdur? Że niby DOS sprawuje władzę nad np. przerwaniami 10h, 13h itp? [glowa]

// Dopisze jeszcze: 11h-lista urzadzen/12h-pamiec/14h-port szeregowy/16h-no comment/17h-port rownolegly/19h -bootstrap/1ah-zegar CMOS - to wszystko przerwania sprzętowe [mf]

0

ale o co chodzi z tymi Dosowymi przerywaniami??? tyle wiem że są w dosie to skad sie biorą w moim Osie? nieczaje, mi chodzi bynajmiej wszystko cacy ale gdzie one są??? skad one są wywoływane?? przecieŻ dosa nawet na kompie nie mam a mój kernel uruchamia się z dyskietki nie czaje z tym :(

Zauważyłem że jak uruchomie normalnie mój OS to te 29h przerywanie nie działa więc jest Dosowe????

Weźcie mi powiedzcie jakie są a jakie nie są do <ort>wykożystania</ort> w OSie???

  1. Cały czas sie mecze jak wydobyć ten tekst i jakoś nie idzie ale spox :P aha i jak wysiwtla się to jest petla i wywala na ekran po 1 literce? czy Od razu całość??? ale chyba po literce :P byści zapodali jakis linki albo jakos wytłumaczyli mi jak to wydobyć, proszęeeeeeeeeeeeeeee
0

http://www.ctyme.com/intr/rb-4124.htm

Nikt nie pisał przecież, że to sprzętowe przerwanie. Wiedziałbyś jak to zrobić, gdybyś czytał to co piszę!!!!!!

Jakbyś nie zauważył to jak wyświetlasz zmienną, która jest liczbą całkowitą to roisz to m.in. tak printf( "%d", &zmienna ), jak wyświetlasz tablice znaków to robisz to tak printf( nazwa_tablicy ) WIĘC ZROZUM, ŻE WRZUCASZ NA STOS WSKAŹNIK DO TEKSTU A NIE TEKST!!!!!!!!

A co do przerwań, to podałem wyżej link więc sobie je pooglądaj. Sprzętowe to o ile się nie myle 1 - debuger , 2, 3 - debuger, ... 8 timer systemowy, 09 - klawaitura, 10h karta graf. ( obsluga z poziomu BIOSu ), .... 13 h - dyski twarde, dyskietki etc, ... 16h klawiatura etc dalej nie chce mi się wymieniać.

A jeśli chcesz się dowiedzieć co to są przerwania, to jest to taki kawałek kodu, którego wektor ( segment i offset ) są przechowywane w pamięci podstawowej ( chyba od 0000:0000, albo 0000:0100 , już nie pamiętam ;p ) i w zależności czy są one sprzętowe czy programowe to są wywoływane przez sprzęt lub przez inne programy. Weźmy na to, że chcesz odczytać coś z dysku to używając odpowiedniej funkcji prerwania 13h pobierasz owe dane i to jest przerwanie programowe, jednak działa bez systemu operacyjnego bo jest to przerwanie BIOSu. Natomiast takie sobie przerwanie sprzętowe 8 http://www.ctyme.com/intr/rb-0043.htm jest generowane przez zegar systemowy 18.2 razy na sekundę i możesz tam sobie wrzucić dowolny kod, który będzie wykonywany po 18 razy w ciągu każdej sekundy. Myślę, że zrozumiałeś conieco :d

// tablica wektorów przerwan jest pod adresem 0:0 ;-) [mf]

0

Dzięki :D

czyli jak dobrze rozumiem to mam se to: printf("banan") i tekst banan jest wewalany do pamięci a do kodu asma dostaje się adres który mówi gdzie ten napis się znajduje??? możesz zapodac jakieś tutki albo opisy o tym??? żeby wyswietlić ten tekst???

znalazłem takie cuś:

08H - zegar - przerwanie wykonywane 18.2 razy na sekundę;
09H - klawiatura - przerwanie wykonywane, gdy został naciśnięty lub puszczony jakikolwiek klawisz.
70H - RTC - zegar czasu rzeczywistego.
(Są to oczywiście tylko te przerwania, które nas - początkujących assemblerowców - będą interesować jako te, które się przydają:)).

05H - bios - print screen - przerwanie uaktywniane, gdy naciśnięty zostaje klawisz
10H - bios obsługa karty graficznej
16H - bios - obsługa klawiatury
20H - dos - zakończenie programu
21H - dos - główne przerwanie funkcji/procedur

0

Ech, 20h i 21h to przerwania DOSowe.

Jeśli chodzi Ci o wyświetlanie tekstu to sa dwie metody:

  1. w pamięci podadresem 0b800h:0000 masz po kolei jeden bajt - kod znaku w ASCII drugi bajt kod koloru i tła znaku i tak dalej.

  2. przerwanie 10h funkcja 09 http://www.ctyme.com/intr/rb-0099.htm. Ta funkcja wyświetla znak o podanym kodzie w ASCII z określonym atrybutem na pozycji, w której akurat znajduje się kursor.

Mała pętla i jeden z tych 2 sposobów pozwoli Ci na wyświetlenie tekstu na ekranie, a co do tutoriali na ten temat to nie wiem czy coś gdzieś znajdziesz, raczej źródełka, a zresztą zapraszam na http://www.programmersheaven.com

0

Masz może jakiś przykładowy kod??? bo do końca nie potrafie zrobić :( może jak masz to wstaw i opisz oki?? plzzzzz

Zaczynam już dużo czaić w asmie :D, tak samo zaczynałem z PHP :P a teraz cuda robie w PHP, zawsze se coś wyznaczam i z 10 razy podchodze :P ale sie udaje :D, musze po prostu zrozumieć zasady panujące w tym języku :D

0
PUSH segment_gdzie_wrzucamy_tekst
POP DS
PUSH 0b800h
POP ES
XOR DI, DI
MOV SI, OFFSET miejsca_gdzie_umiescilismy_tekst
MOV AH, 0Ch ; ustawiamy, żeby pisał czerwonymi literkami na czarnym tle
MOV CX, dlugosc_tekstu
petla:
LODSB
STOSW
LOOP petla

najprostszy kod

0

Dzięki ale jak oblicza sie długość tekstu? i te 2 niewiadome co napisałeś to co tam wstawić??? bp????

// Koniec. Blokuję, masz wszystko podawane na tacy i nie potrafisz tego użyc, kazda odpowiedz sprawia ci coraz wieksze problemy. Ksiazka - podstawowe rozkazy, rejestry, struktury danych i algorytmy ich obróbki oraz budowa programow na pamięć. Jak bedziesz juz wiedział, mozesz kontynuowac pytanie (ale bez molestowania o wszystko) [mf]

1 użytkowników online, w tym zalogowanych: 0, gości: 1