Article View: pl.comp.lang.asm
Article #2343Re: Segment
From: Bogdan (bogdro)
Date: Tue, 20 Jul 2010 15:58
Date: Tue, 20 Jul 2010 15:58
68 lines
4408 bytes
4408 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
Technical Details
Message-ID:
<i24h2n$mng$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<31bb59d9-27ca-40ee-8864-a9199b992fc9@q12g2000yqj.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> Newsgroups: pl.comp.lang.asm Subject: Re: Segment Date: Tue, 20 Jul 2010 17:58:14 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 68 Message-ID: <i24h2n$mng$1@inews.gazeta.pl> References: <31bb59d9-27ca-40ee-8864-a9199b992fc9@q12g2000yqj.googlegroups.com> NNTP-Posting-Host: rudy.mif.pg.gda.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1279641496 23280 153.19.42.16 (20 Jul 2010 15:58:16 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Tue, 20 Jul 2010 15:58:16 +0000 (UTC) X-User: bog.d In-Reply-To: <31bb59d9-27ca-40ee-8864-a9199b992fc9@q12g2000yqj.googlegroups.com> User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.4) Gecko/20100608 Thunderbird/3.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit