Thread View: pl.comp.lang.asm
5 messages
5 total messages
Started by przemo12146
Tue, 20 Jul 2010 04:35
Segment
Author: przemo12146
Date: Tue, 20 Jul 2010 04:35
Date: Tue, 20 Jul 2010 04:35
38 lines
1640 bytes
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
Author: przemo12146
Date: Tue, 20 Jul 2010 10:04
Date: Tue, 20 Jul 2010 10:04
29 lines
1247 bytes
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
Author: "Bogdan (bogdro)
Date: Tue, 20 Jul 2010 17:58
Date: Tue, 20 Jul 2010 17:58
69 lines
3602 bytes
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
Author: przemo12146
Date: Wed, 21 Jul 2010 09:42
Date: Wed, 21 Jul 2010 09:42
4 lines
73 bytes
73 bytes
W³a¶nie o to mi chodzi³o. Jeszcze raz dziêkuje za odpowied¼.
Re: Segment
Author: "Bogdan (bogdro)
Date: Wed, 21 Jul 2010 18:21
Date: Wed, 21 Jul 2010 18:21
71 lines
1993 bytes
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