🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
5 messages
5 total messages Started by przemo12146 Tue, 20 Jul 2010 04:35
Segment
#2261
Author: przemo12146
Date: Tue, 20 Jul 2010 04:35
38 lines
1640 bytes
J.Duntemann w ksi±¿ce pt.:"Zrozumieæ Asembler" pisze, ¿e granica
paragrafu znajduje siê co 10h oraz, ¿e segment mo¿e zaczynaæ siê od
ka¿dej granicy paragrafu.

1. Dlaczego granica paragrafu musi zaczynaæ siê akurat co 10h i
dlaczego segment musi zaczynaæ siê od ka¿dej granicy paragrafu ?

Oprócz tego pisze, ¿e procesory "8086 i 8080 widz± ca³y megabajt
pamiêci...i dlatego te¿ mo¿e podawaæ pamiêci pe³ny 20-bitowy adres"
oraz "...procesory z rodziny 86..."widz±"  jeden megabajt pamiêci, to
patrz± na niego przez 16-bitowe "przes³ony"","Okienko ma d³ugo¶æ 65536
bajtów i szeroko¶æ jednego bajta.Mikroprocesor mo¿e przesuwaæ tê
przes³onê do góry i do do³u po ca³ej pamiêci. ...Mikroprocesor ogl±da
wiêc pamiêæ w do¶æ szczególny sposób. Widzi j± tylko w wycinkach nie
wiêkszych ni¿ 65536 bajtów."

2. Czy skok (tylko czysto teoretycznie) z pocz±tku pamiêci o adresie
0h a¿ do koñca czyli FFFF0h odbywa siê w sposób taki ¿e, segment jest
przesuwany co 10h a¿ do ostatniego adresu (pocz±tku ostatniego
segmentu) czy mo¿e od razu znajduje siê na pocz±tku ostatniego
segmentu (ostatnim adresie), tak jak elektrony kr±¿±ce wokó³ jadra
atomowego jakiego¶ pierwiastka które teoretycznie mog± znajdowaæ siê w
ka¿dym punkcie o promieniu r (odpowied¼ wydaje mi siê oczywista skoro
skok zajmuje jaki¶ czas to znaczy ¿e, segment musi siê przemie¶ciæ z
pocz±tku do koñca przez pozosta³e adresy nie zatrzymuj±c siê na nich,
ale nie jestem pewien.).

Re: Segment
#2265
Author: przemo12146
Date: Tue, 20 Jul 2010 10:04
29 lines
1247 bytes
>  Czysto teoretycznie rozmawiaj±c, punkt nie ma promienia :)

przepraszam za pomy³kê mia³o byæ w ka¿dym punkcie ze ¶rodka o
promieniu r (czysto teoretycznie bo tak naprawdê miejsce w którym mo¿e
wyst±piæ elektron wyra¿ony jest funkcj± matematyczn± rozk³adu gêsto¶ci
elektronowej w zale¿no¶ci od j±dra które jest umieszczone w pocz±tku
uk³adu wspó³rzêdnych to "r" to tylko tak dla uproszczenia).


Wracaj±c do tematu jak mia³by wygl±daæ czysto teoretycznie kod który
realizuje proste za³o¿enie a mianowicie do pierwszego adresu pamiêci
³aduje warto¶æ 11111111b pó¼niej wykonywany jest skok pod ostatni
adres pamiêci i tam warto¶æ zmieniana jest na 11111111b tak jak wy¿ej,
pó¼niej nastêpuje inkrementacja rejestrów które zawieraj± adres
pocz±tkowy nastêpnie wykonywana jest dekrementacja rejestrów które
zawieraj± adres koñcowy i znowu pod adres zwiêkszony i zmniejszony
wpisywana jest warto¶æ 11111111b tu chyba przyda³aby siê jaka¶ pêtla
a¿ do "¶rodka" pamiêci gdzie "¶rodkowa" warto¶æ zostaje wyzerowana a
program koñczy dzia³anie wychodz±c.

Dziêkuje za poprzedni± odpowied¼.

Re: Segment
#2264
Author: "Bogdan (bogdro)
Date: Tue, 20 Jul 2010 17:58
69 lines
3602 bytes
W dniu 20.07.2010 13:35, przemo12146 pisze:
> J.Duntemann w ksi��ce pt.:"Zrozumie� Asembler" pisze, �e granica
> paragrafu znajduje si� co 10h oraz, �e segment mo�e zaczyna� si� od
> ka�dej granicy paragrafu.

 Tak.

> 1. Dlaczego granica paragrafu musi zaczyna� si� akurat co 10h

 Przyczyna jest prosta: paragraf definiuje si� jako 16 (10h) bajt�w. A
skoro adresy zaczynaj� si� od zera, to granica paragrafu jest co 16
bajt�w.

> i
> dlaczego segment musi zaczyna� si� od ka�dej granicy paragrafu ?

 Adres w trybie 16-bitowym sk�ada si� z pary segment:offset,
odpowiadaj�cy tej parze adres fizyczny otrzymuje si� wed�ug wzoru:
segment*16 + offset. Zauwa� wi�c, �e jak zwi�kszasz numer segmentu o
1, to tak naprawd� zwi�kszasz adres fizyczny o 16 bajt�w, czyli o
paragraf. Paragraf to najmniejsza wielko��, o kt�r� mo�esz si�
przesun��, zmieniaj�c numer segmentu. Skoro paragrafy s� co 16 bajt�w
od adresu 0, tym samym segmenty te� zaczynaj� si� co 16 bajt�w od
adresu 0.
 Poczytaj http://rudy.mif.pg.gda.pl/~bogdro/dos/a_kurs02.htm - tam
masz wszystko wyja�nione.

> Opr�cz tego pisze, �e procesory "8086 i 8080 widz� ca�y megabajt
> pami�ci...i dlatego te� mo�e podawa� pami�ci pe�ny 20-bitowy adres"
> oraz "...procesory z rodziny 86..."widz�"  jeden megabajt pami�ci, to
> patrz� na niego przez 16-bitowe "przes�ony"","Okienko ma d�ugo�� 65536
> bajt�w i szeroko�� jednego bajta.Mikroprocesor mo�e przesuwa� t�
> przes�on� do g�ry i do do�u po ca�ej pami�ci. ...Mikroprocesor ogl�da
> wi�c pami�� w do�� szczeg�lny spos�b. Widzi j� tylko w wycinkach nie
> wi�kszych ni� 65536 bajt�w."

 Tak. Te wycinki nazywaj� si� w�a�nie segmentami.

> 2. Czy skok (tylko czysto teoretycznie) z pocz�tku pami�ci o adresie
> 0h a� do ko�ca czyli FFFF0h odbywa si� w spos�b taki �e, segment jest
> przesuwany co 10h a� do ostatniego adresu (pocz�tku ostatniego
> segmentu) czy mo�e od razu znajduje si� na pocz�tku ostatniego
> segmentu (ostatnim adresie), tak jak elektrony kr���ce wok� jadra
> atomowego jakiego� pierwiastka kt�re teoretycznie mog� znajdowa� si� w
> ka�dym punkcie o promieniu r (odpowied� wydaje mi si� oczywista skoro
> skok zajmuje jaki� czas to znaczy �e, segment musi si� przemie�ci� z
> pocz�tku do ko�ca przez pozosta�e adresy nie zatrzymuj�c si� na nich,
> ale nie jestem pewien.).

 Od razu znajduje si� na ko�cu. Procesor, widz�c instrukcj� postaci
	jmp 0FFFFh:0000h
 po prostu �aduje 0FFFFh do rejestru segmentu kodu (CS), 0000h do
rejestru wska�nika instrukcji (IP) i od tej pory pobiera instrukcje
spod nowego adresu.
 Tak samo, mo�na r�cznie za�adowa� rejestr CS na odpowiedni� warto��
"od razu", nie trzeba si� przesuwa� co 1 segment. Przesuwaj�c si� co
10h segment�w, nie da si� od segmentu 0 trafi� na segment 0FFFF.
Przesuwaj�c si� co 10h bajt�w - tak.
 Skoki zajmuj� du�o czasu z wielu przyczyn: trzeba opr�ni� na
przyk�ad pami�� podr�czn�, zdekodowany potok instrukcji, wczyta� nowe
dane z pami�ci itd.
 Czysto teoretycznie rozmawiaj�c, punkt nie ma promienia :)

--
Pozdrawiam/Regards - Bogdan                     (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm:  pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft

Re: Segment
#2274
Author: przemo12146
Date: Wed, 21 Jul 2010 09:42
4 lines
73 bytes
W³a¶nie o to mi chodzi³o.

Jeszcze raz dziêkuje za odpowied¼.

Re: Segment
#2273
Author: "Bogdan (bogdro)
Date: Wed, 21 Jul 2010 18:21
71 lines
1993 bytes
W dniu 20.07.2010 19:04, przemo12146 pisze:

[...]

> Wracaj�c do tematu jak mia�by wygl�da� czysto teoretycznie kod kt�ry
> realizuje proste za�o�enie a mianowicie do pierwszego adresu pami�ci
> �aduje warto�� 11111111b

	mov	ax, 0		; lub "xor ax, ax"
	mov	ds, ax
	mov	byte [ds:0], 0FFh

> p�niej wykonywany jest skok pod ostatni
> adres pami�ci i tam warto�� zmieniana jest na 11111111b tak jak wy�ej,

 M�wisz: "skok". Chcesz najpierw skoczy� pod ostatni adres, po czym
zmienia� kod, kt�ry tam akurat jest? Je�li m�wisz po prostu o zmianie
danych pod tym "ostatnim adresem", bez skakania (przenoszenia
dzia�ania programu pod inny adres), to wystarczy takie co�:

	mov	ax, 0FFFFh
	mov	ds, ax
	mov	byte [ds:0FFFFh], 0FFh


> p�niej nast�puje inkrementacja rejestr�w kt�re zawieraj� adres
> pocz�tkowy nast�pnie wykonywana jest dekrementacja rejestr�w kt�re
> zawieraj� adres ko�cowy i znowu pod adres zwi�kszony i zmniejszony
> wpisywana jest warto�� 11111111b tu chyba przyda�aby si� jaka� p�tla
> a� do "�rodka" pami�ci gdzie "�rodkowa" warto�� zostaje wyzerowana a
> program ko�czy dzia�anie wychodz�c.

 M�wisz o czym� w postaci poni�szego kodu?

	mov	ax, 0		; lub "xor ax, ax"
	mov	ds, ax
	mov	byte [ds:1], 0FFh

	mov	ax, 0FFFFh
	mov	ds, ax
	mov	byte [ds:0FFFEh], 0FFh

 Mo�na oczywi�cie, jak najbardziej u�ywa� rejestr�w zamiast sztywnych
offset�w, np.

	mov	ax, 0
	mov	ds, ax
	mov	ax, 0FFFFh
	mov	es, ax

	mov	bx, 0
	mov	byte [ds:bx], 0FFh
	mov	bx, 1
	mov	byte [ds:bx], 0FFh

	[itd...]

	mov	si, 0FFFFh
	mov	byte [es:si], 0FFh
	mov	si, 0FFFEh
	mov	byte [es:si], 0FFh

	[itd...]


--
Pozdrawiam/Regards - Bogdan                     (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm:  pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft

Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads