segmentacija 8.086

N

NTFS

Guest
Labas

Parašiau programą 8.086.

Pavyzdžiui, duomenų segmentus, jei noriu kad mano duomenys 100H, turėčiau naudoti

ORG 0100h direktyvą.Bet ką man daryti, jei aš noriu įdėti savo segmente nuo kai kur į atmintį?

Tai naudinga, kai norime inicijuoti PPM (Pertraukties vektoriaus lentelę).nes PPM segmentas turi būti adresas 00000h.

 
<a href="http://www.komputerswiat.pl/nowosci/programy/2011/16/virtualbox-4-0-6-do-pobrania.aspx"> <img align="left" src="http://www.komputerswiat.pl/media/1253345/wirt-zaj.jpg" /></a> Wydano VirtualBox 4.0.6, który debiutuje ze sporą ilością poprawek dla systemów Windows, Mac OS X i Linux.<img width='1' height='1' src='http://rss.feedsportal.com/c/32559/f/491281/s/145df29f/mf.gif' border='0'/>

Read more...
 
Tiesiog turite inicijuoti duomenų segmentus.
Kaip aš žinau, jūs privalote pateikti naują duomenų segmento vertę AX registrą, tada mov AX registre
į duomenų segmento registro.

Adresas skaičiavimas (EA) = (DS * 16) (bendros paskirties registras)
bendrosios paskirties registre yra bet AX ... DX, BP, ...<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />Linkėjimai,
Davood

 
NTFS
Fisrt visų kada paklausti apie 100h do you mean linija adresą arba kompensuoti?

ORG direktyvos, pagal kurią taip vadinamas dalykas, "kompensuoti kovos", kai rašote Mnemoniska Asamblėja versti tuos mnemincs į opcode skaičiuoja savo dydžiu, ir taip kompensuoti determing kokia dabartinė mnemoninis yra.Tai labai svarbus jis žinoti "kilti, kai jūs kažką panašaus
jne @ label1
jei jo trumpą JKK tada opcode balsas turi immideat dalis, kuri būtų įtraukta į IP (EIP) apkrovos diifferent vertė.Arba jei kažką panašaus

. duomenų
myVar dd 0
. kodas
mov eax, myVar
ASM padaryti opcode kad būtų apkrova myVar reikia žinoti, kas Imm.dalis opcode turėtų būti siekiama atkreipti jūsų myVar teisingai.Šiam tikslui kompensuoti skaitiklis (vidinis dalykas montuotojo ne programa) yra naudojama, kad skaičiuoja dydžius įtraukti opcode ir taip žino kompensuoti bet kokį duomenų etiketė ir instrukcijos etiketėse.
Kai sakote org "numeris" Jūs keičiate, kad kovos privertė montuotojo įtraukti į kovos "skaičius" (ir normaly nenorite jo, nes kovos apskaičiuoti kompensuojamas visas etiketes teisingai be tavęs Orgs).
Pavyzdžiui pradžioje kodas. com failą parašyti

@ label1:
inc aks
@ label2:
inc bx
kiekvienas instrukcija balsas bus verčiama į vieną baitą opcode
40h
43h
ne disko failo pradžioje. com baitą 40h turės kompensuoti 0 ir 43h turės kompensuoti 1.
Taip pat ir vidinis couner jie būtų tie nukrypimais.
Taigi jei rašote
mov cl, byte ptr @ label1
MOV CH, byte ptr @ label2
atsižvelgiant į kovos būtų toks pat kaip
mov cl, byte ptr CS: [0]
MOV CH, byte ptr CS: [1]
Bet jeigu jūs įtraukėte direktyvos
ORG 100h
tai jėga couner įrašyti į 100h adresas
kiekviena instrukcija
taigi
ORG 100h
@ label1:
inc aks
@ label2:
inc bx
mov cl, byte ptr @ label1
reikštų
mov cl, byte ptr CS: [100H]
....
MOV CH, byte ptr @ label2
reikštų
MOV CH, byte ptr CS: [101h]

spręsti duomenų kompensuoti 100h
nereikia ORG direktyvos
tiesiog parašyti
mov regname, baitas / arba žodžiu / arba dword PTR DS: [100H]

COM failus ORG 100h direktyva yra naudojami tik dėl to, kaip įkelti failus į DOS ru
Kai yra pakrauta DOS COM-failas ji pirmiausia įkelia pradžioje vieno segmento struktūra, vadinama PSP (segmentui programos Prefics), tada (po PSP) jis pakrautas visi duomenys (visi baitai), kuri yra disko COM failo.
Dydis PSP 256 baitai (100H), todėl byte į disko vaizdą, kad buvo ofsetinės 0 bylos tampa ofsetinės 256h 0 (100H) į Programos segement kitas baitas, kuris kompensuoja 1 failas turi kompensuoti 256 1 (101h) pagal programą segmentas,
...turi kompensuoti N failas turi kompensuoti 256 n (100H n) Programa segmente.Taigi org 100h sako ASM ištaisyti kompensuoti "priežastis visų tų kompensuoti buvo pakrautas į atmintį balsas bus perkeltos iki 100h.
Tai reikia tik KOM failą (org yra naudojami kitomis progomis, bet taip pat bijau, kad būtų šiek tiek difficalt jums suprasti pradžioje programavimas)

Siekiant išspręsti kai kurias jūsų programa duomenų nereikia nurodyti konkretų adresą, jūsų tiesiog nurodyti etiketėje duomenų ar kodas.ASM bus pateikti teisingą formą adresą.
Jei, nepaisant visų jums reikia spręsti konkrečias ypač adresą tiesiog parašyti
duomenis (baitas, žodis ar DWORD) PTR DS: [adresas]
arba kodas
JMP (skambinti, JKK) (jei netoli) CS: [adresas]Parašytas po 21 minučių:Davood Amerion rašė:

Tiesiog turite inicijuoti duomenų segmentus.

Kaip aš žinau, jūs privalote pateikti naują duomenų segmento vertę AX registrą, tada mov AX registre

į duomenų segmento registro.Adresas skaičiavimas (EA) = (DS * 16) (bendros paskirties registras)

bendrosios paskirties registre yra bet AX ... DX, BP, ...

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />

Linkėjimai,

Davood
 
Norėdami Svin
Prieš jums atsakyti, ar rasti klaidą jokio atsakymo, tai geriau skaityti (labai carfully) paprašė klausimą.

 
Geras patarimas!Ar po ją labai atvejais?
Ar galėtumėte enlight man, kas yra negerai mano atsakymas?
I got it, kad klausimas buvo apie tai, kaip spręsti kažką segmentus (nors tai nebuvo aišku, kas tipo adresas yra skirtas qeustion - ir aš bandžiau paaiškinti jį), ir jeigu ten ORG direktyva būtų naudinga.Man buvo blogai?
Aš paaiškinau, spręsti ir ORG direktyvos.
Įdomu, kodėl jums nereikia patarimus man taip pat "ir žino, tema" ...Parašytas po 57 minučių:Davood Amerion rašė:

Tiesiog turite inicijuoti duomenų segmentus.

Kaip aš žinau, jūs privalote pateikti naują duomenų segmento vertę AX registrą, tada mov AX registre

į duomenų segmento registro.Adresas skaičiavimas (EA) = (DS * 16) (bendros paskirties registras)

bendrosios paskirties registre yra bet AX ... DX, BP, ...

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />

Linkėjimai,

Davood
 

Welcome to EDABoard.com

Sponsor

Back
Top