Just nu i M3-nätverket
Jump to content

.code CS DS .data .model small osv...


Anp

Recommended Posts

Jag skulle behöva en grundkurs i assembler, tro det eller ej.

Själva programmeringen har jag i stort sett inga bekymmer med, men allt lull-lull fattar jag faktiskt inte riktigt.

 

Gamla källkåder inleds oftast så här:

.model small
.stack 200h
.386
.code

Vad innebär dessa raderna?

Vad innebär detta: ASSUME CS:@CODE, DS:@CODE ?

 

Eftersom jag aldrig har greppat data- och kodsegment helt så har jag lagt allt under .code och gjort push cs/pop ds i början. Har funkat bra.

Men om man behöver större datasegment måste man väl separera det.

 

Om DS:DX skall peka på "buffer", hur gör man då?

"mov dx,offset buffer" sätter väl dx relativs CS och inte DS? Hur sätter jag DS rätt?

 

Detta kanske har med saken att göra, men jag behöver då det förklarat för mig iallafall:

code32 segment para public use32
assume cs:code32, ds:code32
Code32, Code16, 386p, assume osv.. hilfe!

 

Jag har provat på Protected Mode ytterst lite.

Naturligtvis skulle intel ha skrotat segment-gröten i samband med att man lanserade 386:an, men man kan inte få allt.. ;)

 

Jag kör TASM och A86.

A86 är bra, där kan man börja med cpu-instruktionerna från rad 1. Tasm vill veta lite mer först.

 

\\Anp

 

- Varför göra det idag, det du skulle gjort igår?

 

[inlägget ändrat 2002-12-04 18:14:15 av Anp]

Link to comment
Share on other sites

Ursäkta, men jag har redan varit där och vänt. :)

 

Basic, C64

Assembler, x86

Assembler, 680x0

VB

Lite Perl och en smula C

 

Nu är vi framme vid 1997-98 ungefär, då HTML och Java börjar bli "inne".

Men min hjärna är tyvärr redan fullproppad med andra programspråk, så jag inser att det skulle vara fullständigt lönlöst för mig att ge mig på detta.

Jag har nyligen försökt mig på AVR-assembler, men det gick inget vidare.

 

Men visa lite respekt för de hädangångna lågnivåspråken, tack.

 

\\And

 

 

Link to comment
Share on other sites

Ursäkta, men steget närmast över assembler är C.

 

Jag har ungefär samma historia men har klarat mig utan perl...men fortsatte med C.

 

Snokat runt lite, vilket jag antar att också du gjort.

tex

ASSUME CS:@CODE, :@CODE ;don't worry about this for now

dock ingen fortsättning där.

 

Hittade en annan sida med lite info

http://www.whisqu.se/per/docs/graphics49.htm

 

Det verkar som man måste ha ett kollegieblock när man håller på och räknar på stacken.

 

Kör C istället och anropa asmkod när det är tidskritiskt eller hårdvarumässigt befogat.

 

\\And

?

/TN

 

[inlägget ändrat 2002-12-04 20:21:51 av Don Tomas]

Link to comment
Share on other sites

Jag får erkänna att jag borde ha lärt mig C bättre från början.

Men jag har tyvärr aldrig lyckats frambringa den ambitionen, trots att jag har viljat.

Körde fast lite med pekare (& och *) och tappade sugen..

(Windows-program i C skall vi inte prata om, jag blir alldeles vimmelkantig bara jag tänker på hWnd och allt sånt konstigt).

 

Med ASM så är det raka rör, jag har fullständig pejl på vad den pysslar med.

Sånt tycker jag känns bra, men det blir ju lite mer att skriva.

Som tur är så är det inga 900-sidiga mästerverk jag knapprar på. ;)

 

Jag tar åt mig sina synpunkter och undrar om du kan rekommendera nån bra C-kompilator. Freeware. Gärna för DOS.

Det gäller att ta tillvara på tillfällena när lusten faller på.

 

Sen blir jag naturligtvis ännu mer glad om nån kan bistå med vägledning i ursprungsfrågan.

 

Förstod du inte att \\And anspelar på min signatur, men med en lågnivå-prägel? :)

 

\\Anp

 

 

Link to comment
Share on other sites

Tjaa, det finns ju alltid den där GNU'n

http://gcc.gnu.org/

skapad till hur många plattformar som helst...

Dock en hel del info att läsa först.

 

Köp en billig bok nånting C-programmering för dummies, eller 'Windows Spelprogrammering för dummies' de förklarar &, *, hWnd, DC och sånt så man fattar;)

 

Om du vill lära dig mer om Windowsprogrammering kolla efter typ Windows 95 MFC.

 

Förstod du inte att \\And anspelar på min signatur, men med en lågnivå-prägel? :)

Nope.

 

/TN - En poäng från Anp(d) tillslut!

 

[inlägget ändrat 2002-12-04 21:02:24 av Don Tomas]

[inlägget ändrat 2002-12-04 21:04:52 av Don Tomas]

Link to comment
Share on other sites

  • 2 weeks later...

Hej Anp,

 

Nu är det iofs år och dar sedan jag själv skrev x86-assembler men om jag inte minns helt galet betyder raderna som följer:

 

.model small

Detta innebär att du inte tänker använda mer än 64k för både data och instruktioner i ditt program. Skrev åtminstone jag när målet var att skapa .com filer (som ju bara får vara så stora).

 

.stack 200h

Detta innebär att så stort utrymme reserveras för stacken (push, pop...)

 

.386

Medelande till assemblatorn att du vill använda dig av 386 instruktioner. Annars kommer assemblatorn troligen att klaga om du använder instruktioner som inte fanns på tidigare modeller.

 

.code

Anger att nu vill du börja skriva instruktioner, som skall hamna i kodsegmentet.

 

.code32 segment para public use32

Ser ut som om du vill skriva lite protected mode-program? Windows kanske?

code32 säger att du vill använda 32bitars register som eax, ebx etc...

use32 att dina segment kan vara 4gb stora

para att ditt segment skall alignas på en jämn paragraf

public kommer jag faktiskt inte ihåg.

 

assume cs:code32, ds:code32

Säger, har jag för mig, att ds och cs båda kan förväntas peka ut segmentet code32

 

Lycka till med registerfipplandet,

Erik

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...