segmentatie in 8086

N

NTFS

Guest
Hoi

Ik schreef een programma voor 8086.

Bijvoorbeeld in datasegment als ik mijn gegevens uit 100H zetten, moet ik gebruiken

ORG 0100H richtlijn.Maar wat moet ik doen als ik wil mijn segment zetten van een aantal waar in het geheugen?

Het is nuttig wanneer we willen IVT initialiseren (interrupt vector tabel).omdat IVT segment moeten worden in de adresbalk van 00000h.

 
Alleen moet u deze initialiseren data segment.
Ik weet, moet u nieuwe gegevens segment waarde gebracht AX registreren, dan mov ax register
Data segment te registreren.

Adres berekening (EA) = (DS * 16) (General Purpose register)
algemene doeleinden register is een van de AX, ... DX, BP, ...<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />Groeten,
Davood

 
NTFS
Fisrt van alle wanneer u vragen over 100h bedoel je lijn te pakken of te compenseren?

ORG richtlijn ten opzichte van zo genoemd ding "tegen te gaan compenseren" wanneer u mnemonics de montage vertalen die in mnemincs opcode telt hun omvang en dus determing in welke compensatie van de huidige ezelsbruggetje is.Het is van cruciaal belang voor het te weten want als je iets schrijven als
jne @ label1
indien de korte JCC dan de opcode zou zij hebben immideat deel dat zou worden toegevoegd aan IP (EIP) aan Diifferent waarde laden.Of als je iets wil

. gegevens
myvar dd 0
. code
mov eax, myvar
ASM te maken opcode dat zou last myvar moet wat imm weten.deel van opcode moet zijn om uw myvar juiste adres.Voor dit doel teller offset (innerlijke ding van assembler programma niet) wordt gebruikt dat telt opcode maten opgenomen en op deze manier weet te compenseren van alle gegevens etiket en instructie labels.
Als je zegt ORG "nummer" je bent te veranderen teller dwingen assembler toe te voegen aan de toonbank "aantal" (en normaal gesproken zou je niet wilt, omdat teller berekenen offset van alle etiketten correct zonder u Orgs).
bijvoorbeeld aan het begin van de code. com-bestand dat u schrijven

@ label1:
inc ax
@ label2:
inc bx
elke instructie zou zij worden vertaald in een byte opcode
40h
43h
aan het begin van schijf-bestand. com byte 40h zou hebben offset 0, en 43h zou hebben 1 compenseren.
En ook in de binnensteden couner zouden zij hebben deze compensaties.
dus als je schrijft
mov cl, byte ptr @ label1
mov ch, byte ptr @ label2
volgens teller zou hetzelfde zijn als
mov cl, byte ptr CS: [0]
mov ch, byte ptr CS: [1]
maar als je richtlijn
ORG 100H
zou dwingen couner toe te voegen aan het adres van 100h
elke instructie
zo
ORG 100H
@ label1:
inc ax
@ label2:
inc bx
mov cl, byte ptr @ label1
zou
mov cl, byte ptr CS: [100h]
....
mov ch, byte ptr @ label2
zou
mov ch, byte ptr CS: [101h]

aan te pakken gegevens van compensatie 100h
je hoeft niet ORG richtlijn
je schrijft
mov regname, byte / of woord / of de DWORD PTR DS: [100h]

in com bestanden ORG 100h richtlijn wordt alleen gebruikt vanwege de manier om com bestanden laden in DOS
Bij DOS wordt geladen COM-bestand wordt geladen in de eerste plaats aan het begin van het segment een structuur genaamd PSP (Program Segment Prefics) en vervolgens (na PSP) het geladen alle gegevens (alle bytes) die in disk-image van COM-bestand.
Grootte van de PSP is 256 bytes (100h), dat is de reden waarom byte in disk image bestand dat was in het dossier in offset 0 wordt in offset 256h 0 (100h) in programma segement, een ander heeft dat byte offset 1 in het dossier heeft gecompenseerd 256 1 (101h) in programma segment,
...heeft gecompenseerd n in het dossier heeft gecompenseerd 256 n (100h n) in programma segment.Dus org 100H zegt ASM te corrigeren compenseren want al die gecompenseerd worden in het geheugen geladen zou zij worden verschoven 100h.
Het is alleen nodig voor com-bestand, (ORG wordt gebruikt in andere gelegenheden ook, maar ik ben bang dat het zou een beetje difficalt voor u om te begrijpen in het begin van de programmering worden)

Om een aantal gegevens in uw programma hoeft u niet op bepaalde adres opgeven, je gewoon opgeven etiket van gegevens of code.ASM zal maken van de juiste vorm te pakken voor je.
Indien ondanks alles wat je nodig hebben betrekking op specifieke bijzonder adres dat u net schrijven
gegevens (byte, woord of de DWORD) PTR DS: [adres]
of code
JMP (call, JCC) (ver, in de buurt) CS: [adres]Toegevoegd na 21 minuten:Davood Amerion wrote:

Alleen moet u deze initialiseren data segment.

Ik weet, moet u nieuwe gegevens segment waarde gebracht AX registreren, dan mov ax register

Data segment te registreren.Adres berekening (EA) = (DS * 16) (General Purpose register)

algemene doeleinden register is een van de AX, ... DX, BP, ...

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

Groeten,

Davood
 
The Svin
voordat u antwoord of vind een antwoord fout is het beter om te lezen (zeer carfully) gestelde vraag.

 
Goed advies!Zij hebben gevolgd in het geval?
Kunt u Enlight me wat er mis is in mijn antwoord?
Ik heb hem die vraag ging over hoe je iets adres in segment (al was het niet duidelijk uit de qeustion over welk type van het adres is bedoeld - en ik heb geprobeerd om het te verduidelijken), en als er ORG richtlijn zou nuttig zijn.Was ik verkeerd?
Ik legde adressering en ORG richtlijn.
Ik vraag me af waarom u niet adviseren mij ook "en weet het onderwerp" ...Toegevoegd na 57 minuten:Davood Amerion wrote:

Alleen moet u deze initialiseren data segment.

Ik weet, moet u nieuwe gegevens segment waarde gebracht AX registreren, dan mov ax register

Data segment te registreren.Adres berekening (EA) = (DS * 16) (General Purpose register)

algemene doeleinden register is een van de AX, ... DX, BP, ...

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

Groeten,

Davood
 

Welcome to EDABoard.com

Sponsor

Back
Top