PCPROG.6

25 Sep 1995 - 24 Dec 1999

Topics

  1. algoritmi (449)
  2. baze.podataka (309)
  3. ms.dos (17)
  4. windows (294)
  5. asembler (553)
  6. basic (458)
  7. jezici (42)
  8. pascal (1297)
  9. cccc (522)
  10. cpp (299)
  11. clipper (601)
  12. fox (70)
  13. cavo (14)
  14. delphi (1130)
  15. java (100)
  16. razno (776)
  17. unknown (127)

Messages - asembler

asembler.1 biber,
>> Imam jedan problem. Naime radim rutinu za DMA prenos. Problem Kako se programira DMA prenos? Sta se desava kada procesor pozeli da pristupi memoriji u toku DMA prenosa? Ko onda ima prednost? Sta se desava kad procesor pozeli da pristupi bas delu memorije iz koga se vrsi DMA transfer? I na kraju da li je moguce pauzirati DMA prenos u proizvoljnom trenutku i na osnovu stanja nekih registara zakljuciti dokle se stiglo sa prenosom?
asembler.2 nemko, -> #1, biber
)>- Kako se programira DMA prenos? ... )>- pristupi bas delu memorije iz koga se vrsi DMA transfer? i )>- I na kraju da li je moguce pauzirati DMA prenos u )>- proizvoljnom trenutku i na osnovu stanja nekih registara )>- zakljuciti dokle se stiglo sa prenosom? Ako sam "dobro" obavešten ovo poslednje nije moguće. Nadam se da ćeš odgovore na sva pitanja koja si postavio naći u dokumetaciji koju šaljem. Uz poruku dokumentacija o DMA iz PCGPE-a kog sam nedavno ovde slao i fajl koji objašnjava kako se vrši DMA transfer iz memorije u memoriju (duplo brže od movs[b,w,d])!!!!!. Ako neko od vas prokljuvi ovo drugo neka pošalje u obliku funkcije. dma.zip
asembler.3 deimos, -> #1, biber
 ű>> Kako se programira DMA prenos? Jednostavno (;)). Evo recepta: - 1 bafer koji mora da bude na adresi formata X000:0000, sto znaci da moras da realociras bafer, tj. da ga resize-ujes sve dok ne bude na takvoj pocetnoj adresi. - U takav bafer stavis ne vise od 64K podataka. - 1 DMA channell. - Odrediti Page, Address i Count registar (hw. port) na sledeci nacin: CH0: Addr=0 Count=1 Page=87h CH1: Addr=2 Count=3 Page=83h CH2: Addr=4 Count=5 Page=81h CH3: Addr=6 Count=7 Page=82h - Konvertovati adresu bafera u 20-bitni format. Kako? Evo ovako: Ako si se drzalopravila za alociranje bafera, adresu tipa X000:0000 ces lako pretvorii u X:0000. Od toga 'X' je PAGE, a '0000' je ADDRESS. - Maskiras DMA kanal, po principu: Za DMA (ch0-3) - Mode reg (port) = 0Ah. Drugi bit maskira kanal, a 0,1 bitovi oznacavaju port, pa se moze generalno reci: OUT 0Ah,DMA_Channel+4 - Resetujes Flip-Flop registar (hw. port 0Ch) tako sto ces na njega baciti bilo koju vrednost, npr. 0. - Izaberes nacin (mode) prenosa peko hw. porta 0Bh. (Za detalje pogledaj PORTS.LST iz paketa INTERRUPT LIST ili javi ako ipak hoces da ga opisem ovde). Generalno, za prenos IZ memorije NA odresiste (deo hardwarea koji podrzava DMA), moze se reci sledece: OUT 0Bh,DMA_Channel+48h - ADRESS izbacis na Addr port i to prvo nizi, pa visi bajt. - Duzinu bafera izbacis na Count port,isto prvo nizi,pa visi bajt. - PAGE izbacis na Page port (dozvoljene vrednosti 0-Fh). - Demaskiras DMA kanal (hw. port 0Ah), tako sto na njega, u principu izbacis samo redni broj kanala koji programiras. OUT 0Ah,DMA_Channel - Ovde je kraj sto se tice DMA-a. Sledeci korak je programiranje uredjaja koji treba da koristi taj DMA kanal. Kontrola DMA prenosa, tj. pauziranje, i nastavljanje regulise (ili ne regulise), tj. dozvoljava hardverski uredjaj koji programiras. Ako te interesuje kako bi to izgledalo u praksi, javi pa cu da ostavim ovde deo koda koji sam koristio za programiranje SB-a, a tice se DMA-a. Poruku sam inace razvukao... Pozdrav, Vlada.
asembler.4 miroslavn,
Ima li neko noviji ASM.NG od 7-15-87 ??????? (duzina 597407) U ovom čak se ni ne spominju 1.44MB diskete (INT 13), a kamoli druge novije stvari.... Ako neko ima, molio bih ga da mi se javi na mail. Hvala. Miroslav BTW. Ima li neko C ili ASM rutine za rad sa disketama u nestandardnim formatima (800KB, 1.64MB,...) BTW.BTW. Tražim i neki noviji C.NG (da ne bude stariji od 5 god.)
asembler.5 atech, -> #2, nemko
> Uz poruku dokumentacija o DMA iz PCGPE-a kog sam nedavno ovde > slao i fajl koji objasnjava kako se vrsi DMA transfer iz > memorije u memoriju (duplo brze od movs[b,w,d])!!!!!. Da ga nisi kojim slucajem slao i na pro-ba? :) Ovde je skoro nemoguce skinuti arhivu od nekoliko stotina kb.
asembler.6 biber, -> #3, deimos
>> Kontrola DMA prenosa, tj. pauziranje, i nastavljanje regulise >> (ili ne regulise), tj. dozvoljava hardverski uredjaj koji OK. Recimo uredjaj dozvoljava. Dakle zaustavio sam prenos ( recimo ka uredjaju, mada je zanimljivo i obrnuto ). Kako da saznam dokle smo stigli? Ili: Kako da sve vreme prenosa pratim dokle se stiglo? Ili: Kako da u proizvoljnom trenutku vremena saznam dokle se stiglo bez da zaustavljam transfer? >> Ako te interesuje kako bi to izgledalo u praksi, javi pa cu da >> ostavim ovde deo koda koji sam koristio za programiranje SB-a, >> a tice se DMA-a. Poruku sam inace razvukao... Naravski, interesuje me :) Kad bi sve poruke bile ovako razvucene pevao bih od radosti. I to u duetu sa modemom. Hvala na odgovoru :)
asembler.7 biber, -> #2, nemko
>> Uz poruku dokumentacija o DMA iz PCGPE-a kog sam nedavno ovde slao >> i fajl koji objasnjava kako se vrsi DMA transfer iz memorije u memoriju Da li znas gde se nalazi "PCGPE"? Pregledao sam ceo PC.PROG.5:asembler, i ne nadjoh.
asembler.8 velicko, -> #3, deimos
>+ ostavim ovde deo koda koji sam koristio za programiranje SB-a, Ajde ostavi što više koda o programiranju SB-a, mnogi bi ti bili zahvalni ;) velicko
asembler.9 deimos, -> #6, biber
>> >> Kontrola DMA prenosa, tj. pauziranje, i nastavljanje regulise >> >> (ili ne regulise(╝ tj. dozvoljava hardverski uredjaj koji >> OK. Recimo uredjaj dozvoljava. Dakle zaustavio sam prenos >> ( recimo ka uredjaju, mada je zanimljivo i obrnuto ). DMA prenos moze da se zaustavlja u oba pravca (opet zavisi od hardvera). >> Kako da saznam dokle smo stigli? Addres Registar, (tj. hw. port DMA_channel * 2) je READ/WRITE, tako da u svakom trenutku, bilo da je prenos pauziran ili ne, uvek mozes da proveris trenutni offset bajta u baferu koji biva prenosen (tako sto citas prvo nizi, pa visi bajt). Isto tako, je R/W i Count Registar (port DMA_Channel * 2 + 1), koji citanjem word-a vraca kolicinu bajtova preostalih za prenos. No Problem. >> >> Ako te interesuje kako bi to izgledalo u praksi, javi pa cu da >> Naravski, interesuje me :) Evo dela koda koji se tice DMA-a. Pisan je u C-u, sto bas i nije u skaldu sa temom, ali je, mozda, laksi za pregled: // ----- Cut Here :) -------------------------------------------------- void SetupDMA(char DMA_Channel,unsigned SegAddr,unsigned Length) // U igri je samo segment bafera, posto se podrazumeva da je bafer na // adresi tipa X000:0000, pa se podrazumeva i da je offset 0. { unsigned int Base,PageReg; unsigned char Page; if(DMA_Channel == 0) PageReg = 0x87; if(DMA_Channel == 1) PageReg = 0x83; if(DMA_Channel == 2) Pagereg = 0x81; if(DMA_Channel == 3) Pagereez 0xx2; - H @ Base = DMA_Channel*2; Page= (unsigned char) ( ladr >> 12 ); outportb(0x0A, DMA_Channel + 4); // Maskiranje kanala outportb(0x0C, 0); // Reset Flip-FLop-a outportb(0x0B, 0x48 + DMA_Channel); // 48h = iz memorije... outportb(base, 0); // Offset na kome bafer outportb(base, 0); // pocije. outportb(base+ 1,((Length<<8)>>8)); // Nizi bajt duzine outportb(base+ 1,(Length>>8)); // Visi bajt duzine outportb(PageReg, Page); // Page outportb(0xa, DMA_Channel); // Demaskranje kanala } //---------------------------------------------------------------------- To je sve sto treba da se angazuje DMA. >> Kad bi sve poruke bile ovako razvucene pevao bih od radosti. >> I to u duetu sa modemom. Hvala, hvala... :) Vlada.
asembler.10 deimos, -> #8, velicko
>> Ajde ostavi sto vise koda o programiranju SB-a Veoma rado, ali je sve uglavnom pisano u C-u, pa ako vam ne smeta, poslacu iako je tema asm... Vlada.
asembler.11 nemko, -> #5, atech
)>- Da ga nisi kojim slucajem slao i na pro-ba? :) )>- Ovde je skoro nemoguce skinuti arhivu od nekoliko stotina kb. Kad dođem u BG poslaću! Podseti me dakle za jedno 10-15 dana u mail. (Onima kojima je hitno trebao sam slao kući! B))))) )
asembler.12 nemko, -> #7, biber
)>- Da li znas gde se nalazi "PCGPE"? Pregledao sam ceo )>- PC.PROG.5:asembler, i ne nadjoh. Mislim da je pod RAZNO! Uzgred slao sam bulaji mail da ga prebaci u direktorijume, ali nije :(((.
asembler.13 nemko, -> #9, deimos
)>->> Kad bi sve poruke bile ovako razvucene pevao bih od )>->> radosti. I to u duetu sa modemom. )>- )>- Hvala, hvala... :) Jedna moja poruka je misteriozno nestala so: Pošto dobro poznaješ DMA zamolio bih te da pogledaš sledeći tekst i da ga preradiš u C++ funkciju oblika (ne snalazim se sa ovim najbolje), naravno ako je upotrebljiv: boolean fastmove (long Src, long Dest, long Size) {...}; DMA Transfers for FAST Memory Moves If you ever have the need for super fast moves of blocks of memory and you can put up with a lot of restrictions in order to gain the speed there is a method in the PC environment to move bytes at the rate of one every 3 clock cycles. Compare that to the clocks for a rep movsb and then say that isn't fast. This isn't for every programmer and it certainly isn't for every time you need to move a few bytes. ***nemoj mi reći da koristim mowsw ili mowsd, treba mi baš ovo The DMA chip is a four channel device. Channel 0 is reserved for refresh of memory that requires at least 256 consecutive bytes be read some- where in memory at intervals less than about 4ms. The other three channels are available for such things as transferring information to and from the disk drives or the ports. Interesting trivia so far, but not very useful in moving memory around. It gets worse. The 8259 DMA doesn't know anything about segments. It only knows a 64k universe. This is where the Page registers come in. The page registers decide which page (on 64k boundaries) the 8259 will look at for any operation. There are not, as you might guess, 4 page registers,but only 2 plus a default. If it is not channel 1 or 2 then it uses the default register programmed as channel 3. A careful reading of the data sheet of the 8259 discloses that it is capable of doing a memory to memory transfer but only between channels 0 and 1. That is why this method is a little tricky to use. In order to set up your own parameters you have to disable the timer from asking for a DMA from chan- nel 0 every x milliseconds and reconfigure the 8259 and assume the respon- sibility for doing the memory refresh. It actually sounds worse than it is. The configuring and re configuring of the 8259 doesn't take all that long, so the time is made up after only moving a few tens of bytes, and if you move at least 256 CONSECUTIVE bytes the memory refresh requirement is met for another 2 or 3 milliseconds. The page registers are taken care of by setting channels 1 and 3 to the same value. Given below is an example of a program I wrote just to test the idea. A lot of the setup is too complex to explain in this short article, but if you are interested in checking it all out you will need a data sheet on the 8259. This worked nicely on my machine and should on most compatibles just the way it is. With the not-so-compatible it may very well not. I hope this listing is well enough commented so you can figure it out and make use of it sometime. ` DMA SOURCE PAGE 60,132 TITLE DMA MEMORY TO MEMORY DMA EQU 0 STACK SEGMENT PUBLIC 'STACK' DB 32 DUP('STACK') STACK ENDS DATA SEGMENT PUBLIC 'DATA' SOURCE DW 08000H TARGET DW 09000H NUMBER DW 800H INCDEC DB 0 PAGER DB 0BH ;PAGE (O TO F) FILL DB 0 ;2 IF A FILL OP DATA ENDS ASSUME CS:CODE,DS:DATA,ES:DATA CODE SEGMENT PUBLIC 'CODE' START: MOV AX,DATA MOV DS,AX MOV AX,0B800H MOV ES,AX PAGE: MOV AL,PAGER ;PAGE TO OPERATE IN OUT 83H,AL UNDMA: OUT 0DH,AL ;MASTER RESET OF DMA MOV DX,03D8H MOV AL,1 OUT DX,AL MOV AX,SOURCE ;WHERE IS IT COMING FROM OUT 0H,AL MOV AL,AH OUT 0H,AL MOV AX,TARGET ;WHERE TO PUT IT OUT 2H,AL MOV AL,AH OUT 2H,AL MOV AX,NUMBER ;HOW MANY OUT 3H,AL MOV AL,AH OUT 3H,AL MOV AL,009H ;ENABLE M TO M,COMPRESSED OR AL,FILL ;WILL BE 2 IF FILL OP OUT 8H,AL MOV AL,088H ;BLOCK MODE, INC, READ OR AL,INCDEC ;WILL BE 20H IF DEC OUT 0BH,AL MOV AL,85H ;BLOCK MODE, INC, WRITE OR AL,INCDEC ;WILL BE 20H IF DEC OUT 0BH,AL MOV AL,4 ;THIS IS THE REQUEST OUT 9,AL ;DO IT MOV AL,9 OUT DX,AL RESET: OUT 0DH,AL ;THIS IS A MASTER RESET OUT 0CH,AL ;RESET F/L F/F MOV AL,01 OUT 0,AL OUT 0,AL REINIT: MOV AL,0 OUT 83H,AL ;MOVES REFRESH TO BASE PAGE MOV AL,0FFH OUT 1,AL PUSH AX OUT 1,AL OUT 0BH,AL INC AL ;MODE CHAN3 OUT 0BH,AL PUSH AX POP AX POP AX POP AX MOV AH,4CH INT 21H CODE ENDS END START From Issue Three: In the article about fast memory moves I repeatedly referred to the 8259 as the DMA processor. The 8259 is the interrupt controller and has nothing to do with DMA transfers.
asembler.14 pedjak, -> #1, biber
> I na kraju da li je moguce pauzirati DMA prenos u proizvoljnom > trenutku i na osnovu stanja nekih registara zakljuciti dokle > se stiglo sa prenosom? Baš pauzirati ne, ali je moguće pratiti preko statusnog registra i brojača tok prenosa (koliko je bajtova još ostalo za prenos/da li je prenos završen)
asembler.15 deimos,
Svima onima koji su hteli moju biblioteku za SB/SBP, okacena je zajedno sa sorsom i primerom u temi cccc, poruka 8.6, arhiva SBDEIMOS.RAR. .dEiMoS.
asembler.16 biber, -> #9, deimos
>> uvek mozes da proveris trenutni offset bajta u baferu koji biva >> prenosen (tako sto citas prvo nizi, pa visi bajt). Isto tako, Ovo sam vec probao, ali mi uvek vraca 00ff. Mora da sam nesto pogresio. Da li sme (il' treba ) da postoji pauza izmedju ocitavanja nizeg i viseg bajta, npr: in .... jmp sled sled: jmp sled1 sled1: in .... Sta bi se desilo, pri ocitavanju porta dobijem ofset 0ff ( nizi bajt ), zatim ocitam visi bajt, a ofset se u medjuvremenu povecao za jedan ( ili vise ). Da li cu dobiti pogresan rezultat?
asembler.17 deimos, -> #16, biber
Word ces uzeti na sledeci nacin: PORTVAL dw ? PUSH AX PUSH DX XOR AX,AX XOR DX,DX IN AL,_port_ MOV DL,AL IN AL,_port_ SHL AX,8 ADD AX,DX MOV PORTVAL,AX POP DX POP AX Ovo je skoro 100% po knjizi, amda moze i da se optimizuje. Pisao sam isto ovo u ranijim porukama, koliko se secam na sasvim drugaciji nacin, ali i ovo bi trebalo da radi. Inace, ne treba ti nikakvo stanje cekanja. .dEiMoS.
asembler.20 konem,
Zna li neko neku dobru knjigu iz koje se moze nauciti asembler (barem osnove,ako nista vise) ?
asembler.21 biber, -> #20, konem
>> Zna li neko neku dobru knjigu iz koje se moze nauciti >> asembler (barem osnove,ako nista vise) ? Za knjigu bas i ne znam, ali sledeci fajlovi, koji se nalaze na SEZAM-u su sasvim dovoljni. MSDOS - R:\INFOPROG ---------------------- i386 a01 107266* i80386 Programmer's Reference Manual (Intel) #2 i386 arj 108601* i80386 Programmer's Reference Manual (Intel) #1 helppc21 a01 131766* Puno informacija za programere (#2) helppc21 arj 139216* Puno informacija za programere (ASM, C, DOS, HW,..)(#1) Najbolji nacin da provalis kako se to radi, je da analiziras neki tudji program, uz pomoc tabela i informacija iz pomenutih fajlova. Nadam se da ces naleteti na neki korektno pisan program. Za pocetak izaberi neki .COM program, po mogucstvu kraci. Za analiziranje koristi D86. I njega ces naci na SEZAM-u. Ako ti nesto zapne javi se ponovo.
asembler.22 ognjen, -> #20, konem
)-> Zna li neko neku dobru knjigu iz koje se moze nauciti )-> asembler (barem osnove,ako nista vise) ? Već si počeo? :) Što se tiče naših knjiga, slabo stojjimo sa literaturom na tom polju. Probaj da nabaviš udžbenik za Matematičku Gimnaziju iz Asemblera. Knjiga za totalne početnike, samo njima može da pomogne. Nabavi sve moguće helpove (imaš ih i na sezamu) u elektronskoj formi u PCu i Asmu: TecHELP, HelpPC, ASM - norton guide, asmtutor.zip...
asembler.23 nemko, -> #20, konem
)>- Zna li neko neku dobru knjigu iz koje se moze nauciti )>- asembler (barem osnove,ako nista vise) ? P prethodnu konferenciju pc.prog (valjda je to bilo "razno") sam slao PCGPE (pc games prog. enciclopedia). Tamo se pored razne dokumentacije nalazi i 12 lekcija programiranja grafike i 3-4 lekcije programiranja u ASM-u. Dalje ti preporučujem da nepočneš odmah da radiš u TASM-u ili MASM-u (turbo ili microsoft assempbler) i pišeš gotove programe već da počneš sa pisanjem manjih rutina u integrisanom assembleru koji se nalazi u novijim verzijama C++-a ili Pascal-a (zavisi šta voliš). Korsno je da nabaviš neke dobro komentarisane i korektno pisane programe koje ćeš da analiziraš.
asembler.24 konem, -> #21, biber
>Za knjigu bas i ne znam, ali sledeci fajlovi, koji se nalaze >na SEZAM-u su sasvim dovoljni. Ne znam kako da ti se zahvalim, sem :Thanks,biber....
asembler.25 konem, -> #22, ognjen
>Vec si poceo? :) Ne brini, I am harmless. U svakom slucaju, puno hvala na informacijama.
asembler.26 konem, -> #23, nemko
> Dalje ti preporucujem da nepocnes odmah da radis u TASM-u ili MASM-u >(turbo ili microsoft assempbler) i pises gotove programe vec da pocnes >sa pisanjem manjih rutina u integrsanom assembleru koji se nalazi u >novijim verzijama C++-a ili Pascal-a (zavisi sta volis). Thanks nemko, poslusacu tvoj savet.
asembler.27 biber, -> #24, konem
>> Ne znam kako da ti se zahvalim, sem :Thanks,biber.... Napisi neki PD program. U asembleru naravno. :)
asembler.28 kriss, -> #21, biber
˙˙ Za analiziranje koristi D86. I njega ces naci na SEZAM-u. ˙˙ Ako ti nesto zapne javi se ponovo. Uz poštovanje prema D86, preporučujem Turbo Dibager, ako uspe da ga nabavi.
asembler.29 kriss, -> #22, ognjen
˙˙ formi u PCu i Asmu: TecHELP, HelpPC, ASM - norton guide, ˙˙ asmtutor.zip... Ovaj zadnji je bar po meni beskoristan i zbunjuje.
asembler.30 kriss, -> #23, nemko
˙˙ P prethodnu konferenciju pc.prog (valjda je to bilo "razno") ˙˙ sam slao PCGPE (pc games prog. enciclopedia). Tamo se pored Ali još nisi poslao onaj fajl koji ne valja u arhivi.
asembler.31 biber, -> #21, biber
>> Najbolji nacin da provalis kako se to radi, je da analiziras >> neki tudji program, uz pomoc tabela i informacija iz pomenutih fajlova. Evo uz poruku ti saljem program HEXDUMP ( source i .com ). Program nije komentarisan ( na zalost nemam tu naviku ), ali mislim da ces se snaci, jer je jednostavan. Inace sintaksa programa je: HEXDUMP name.ext Program sluzi za dump listing fajla "name.ext" Smatraj ga PD. PS Da se ne zbunis odmah na pocetku, u programu se koriste naredbe tipa XOR AX,AX sto mu isto dodje kao MOV AX,0, ali zauzima manje mesta i brze je. Neko voli da koristi i SUB AX,AX sa istim rezultatom, dakle u registru AX se nadje 0. Jos jedna caka je OR AX,AX sto mu dodje testiranje da li je AX jednak nuli ( umesto CMP AX,0 - opet brze i krace ) Samo napred ! hexdump.zip
asembler.32 konem, -> #31, biber
>Program sluzi za dump listing fajla "name.ext"... Program je OK.Sve je jasno sem jedne sitnice. Naime, nisam nasao BREAK sekvencu nigde. Mozda sam neku sitnicu prevideo? Dugacke fajlove lista, ne odgovarajuci ni na jednu break kombinaciju tastera. Ukoliko gresim , bio bih ti zahvalan da mi javis gde. Ako ne, da li se JUMP na break moze postaviti unutar labele OK: , i kako? Thanks for everything, biber.
asembler.33 pedjak, -> #17, deimos
> Ovo je skoro 100% po knjizi, amda moze i da se optimizuje. Pisao Kojoj knjizi..?
asembler.34 deimos, -> #33, pedjak
>> > Ovo je skoro 100% po knjizi, amda moze i da se optimizuje. Pisao >> Kojoj knjizi..? :))) Ne, nisam mislio po nekoj odredjenoj knjizi, vec sam mislio da je napisano najjasnije sto moze biti. Sto se tice knjiga za assembler je po meni bila i ostala najbolja: 8086/8088/80286 Assembly Language. Pisao je Leo J. Scanlon. Ne znam da li je kod nas izdavana, jer sam imao englesku verziju (izdavac BREADY). .dEiMoS.╝á 
asembler.35 .sima,
Hi Da li bi neko bio dobar da priloži primer pisanja com programa u tasm-u.
asembler.36 kriss, -> #35, .sima
˙˙ Da li bi neko bio dobar da priloži primer pisanja com programa ˙˙ u tasm-u. Ja to radim ovako: .model tiny .code org 0100h start: (blabla) end start
asembler.37 deimos, -> #13, nemko
RE: DMA Transfers for FAST Memory Moves Primer koji je isao uz ovaj tekst, je jednostavno prebaciti u C, i to sam i ucinio. Medjutim, primer je teoretski i prakticno neispravan. >> PAGER DB 0BH ;PAGE (O TO F) Ovo se odredjuje u zavisnosti od Source/Dest. segmenta. (PAGER = SHR DESTINATION,8) >> MOV DX,03D8H >> MOV AL,1 >> OUT DX,AL Besmisleno, jer, jeste da je neophodno pobuditi HW uredjaj da bi reagovao i primio DMA buffer packet, ali CGA mode register nije to :) >> MOV AX,SOURCE ;WHERE IS IT COMING FROM >> OUT 0H,AL >> MOV AL,AH >> OUT 0H,AL Ovakvu adresu DMA cip ne prepoznaje ni pod razno, sto se moze primetiti ako izberemo za odredisnu adresu video memoriju. Ekran ili bafer ce se puniti od offseta jednakom Source Segmentu, a ne od njegovog pocetka, sto nikome nije potrebno. ... Na kraju sam dobio tri verzije koda, i evo sta se desava. 1. ASM: Kod uzet iz poruke bez ikakvih modifikacija: Buffer se puni nulama od offseta SourceSeg. 2. ASM: Modifikovan i ispravljen kod iz poruke: Buffer se ispravno puni od pocetka do zadate duzine, ali se opet puni nulama. 3: C: Identican rezultat kao pod 2. Posle jaaako puno vremena provedenim nad ovim ( i ja sam se odusevio idejom ) nisam uspeo da korektno napravim prenos sa sadrzajem pocetnog bafera u odredisni ( uvek samo nule ). E, sada, ja se pitam da li je ovo uopste moguce realizovati, jer princip je u tome da on preko 0-tog kanala procita deo memorije, a putem 1-og vrati istu kolicinu u memoriju na neko drugo mesto. Postavlja se pitanje: GDE ON STAVLJA TAJ SADRZAJ MEMORIJE U MEDJUVREMENU? Druga stvar je da iz ovakvog koda DMA nema pojma odakle se vrsi transfer jer je za to neophodan jos jedan page registar i page vrednost (za source). Odmah da kazem da, i posle velikog optimizovanja, prenos buffera (iako praznog) je za desetak puta SPORIJI od Borland C-ovog MOVMEM, a od MOVSW/MOVSD i vise, tako da znas da se uopste ne radi o nekom brzom prenosu. U svakom slucaju, necu odmah odustati od ovoga, pa se moze jos i svasta izroditi :) Samo sam hteo da ti javim, da te ne drzim u neizvesnosti. .dEiMoS. PS. Probaj sam da ovo assembliras. Preporucujem ti da na samom pocetku (posle START:) stavis jedno: MOV AX,13h INT 10h Za source stavi bilo koju adresu, a za destination stavi 0, kao PAGER stavi 0Ah, a za NUMBER 0FA00h Ovo bi trebalo da uslovi popunjavanje ekrana. Probao sam da za source uzmem adresu 0:0 jer tamo sigurno ima necega uvek, ali je rezultat opet isti u sva tri slucaja - prazan krajnji bafer.
asembler.38 willow, -> #35, .sima
> Da li bi neko bio dobar da prilozi primer pisanja com programa u > tasm-u. Za pisanje .COM programa preporucujem ti shareware Assembler A86, koji mozes pokupiti sa Sezama. Ja iskljucivo njega koristim i mogu tu reci da je zaista izuzetnih mogucnosti a veoma lak za upotrebu.Sa njim mozes odmah da sednes da kucas kod , odnosno ne moras da se zamlacujes sa nekim direktivama tipa "... segment", "model ...", "org ...", itd. Evo ti primer programa koji ne radi nista ( samo se vraca u DOS ), a koji ce uspesno biti kompajliran pomocu A86 : mov ah, 04ch int 021h Tvoj program izgleda bukvalno ovako.Dobices odma' .COM program bez teranja kroz linker i nekog tamo Exe2Bin glupiranja. A86 je ( po mojim iskustvima ) 100% kompatibilan sa TASM-om i MASM-om, dok obrnuto ne vazi. Ako tek pocinjes sa assembler-om, onda ti toplo preporucijem A86 jer uz izvrstan assembler, dobijas i isto takvo uputstvo, sa mnogo primera. P.S. U arhivi postoji program FAKE.EXE cija je namena da se reimenuje u TASM.EXE i da se tako i upotrebljava. Hello from Willow Valley
asembler.39 biber, -> #32, konem
>> Program je OK.Sve je jasno sem jedne sitnice. Naime, nisam >> nasao BREAK sekvencu nigde. Mozda sam neku sitnicu prevideo? >> Dugacke fajlove lista, ne odgovarajuci ni na jednu break kombinaciju >> tastera. Nigde nema BREAK testiranja. Jednostavno kod mene DOS to lepo sam detektuje ( dakle radi i ctrl-c i ctrl-break ), a program sam pisao za sebe pa se nisam ni opterecivao time. A ima tu jos pokoja sitnica, koja trazi doradu. :) Cini mi se da postoji neka DOS funkcija koja postavlja nekakav flag, tako da se pri svakom pozivu neke od DOS funkcija automatski testiraju BREAK kombinacije. Ocigledno je u mojoj masini po defaultu taj flag postavljen pa zato nemam problema. >> da li se JUMP na break moze postaviti unutar labele OK: , i kako? Cini mi se da ga mozes testirati pozivom BIOS-a: mov ah,1 int 016 jnz nijedan_taster; ili jz nijedan_taster ( pisem napamet ) or ax,ax jz break nijedan_taster: .... Vise o ovome ces naci u HELPPC.
asembler.40 vladoem,
1. Moze li se programski podesiti clock LPT porta, tj. proizvoljno usporiti slanje signala na stampac? 2. Kako? :)
asembler.41 konem,
Posto sam prilicno zelen u ovoj oblasti,evo i jednog zelenog pitanja: -Kako se prave biblioteke u asembleru? Jasno mi je da u glavnom programu moram staviti EXTRN ,a u biblioteci PUBLIC.Problem je sto ne znam kako da napravim od .OBJ fajla .LIB fajl. Neki su mi govorili da neki Dos-ov program LIB radi to ,ali ja ga ne nadjoh. Ako neko nesto zna,neka kaze. Hvala.......
asembler.42 djelovic, -> #41, konem
> Jasno mi je da u glavnom programu moram staviti EXTRN ,a u biblioteci > PUBLIC.Problem je sto ne znam kako da napravim od .OBJ fajla .LIB fajl. Zavisi koji asembler koristiš? Kod Borlanda se za pravljenje LIB-ova koiristi program TLIB, dok u poslednje vreme Majjkrosoftovi proizvodi nemaju svoj LIB, već taj posao radi linker.
asembler.43 konem, -> #42, djelovic
> Kod Borlanda se za pravljenje LIB-ova koiristi program TLIB... Ako ti nije tesko bio bih ti strasno zahvalan kad bi TLIB.EXE zakacio uz neku od poruka ili na mail.Ako postoji na Sezamu taj program samo mi daj pointer. Hvala.....
asembler.44 djelovic, -> #43, konem
> Ako ti nije tesko bio bih ti strasno zahvalan kad bi TLIB.EXE > zakacio uz neku od poruka ili na mail. Na žalost, moraćeš da ga potražiš negde drugde - ostavljanje komercijalnih paketa ili delova komercijalnih paketa na Sezamu nije dozvoljeno.
asembler.46 haralampie,
Imam par pitanja... Sta koristiti, Macro assembler, Turbo assembler, ili ?! Nisam nasao u doc fajlu da li postoji komanda u assembleru pomocu koje se npr. na neku labelu ucitava neki fajl sa diska? Npr.. labelica: incbin "BabaiJa.mod" Ili se na nesrecu mora svaki fajl prebacivati u "db" format, ili ucitavati sa diska posto se program startuje?
asembler.47 vasic, -> #46, haralampie
> Sta koristiti, Macro assembler, Turbo assembler, ili ?! Manje-više svejedno. MASM ima neke makroe za strukturirano programiranje, TASM ima ideal mod sa malo ulepšanom sintaksom, ali ako misliš da ti se sorsovi prevode sa oba, onda i onako nećeš koristiti ni jedno ni drugo. :) > Nisam nasao u doc fajlu da li postoji komanda u assembleru pomocu koje se > npr. na neku labelu ucitava neki fajl sa diska? > Ili se na nesrecu mora svaki fajl prebacivati u > "db" format, ili ucitavati sa diska posto se program startuje? Naredba ne postoji, ali ni ovo drugo ne mora. Uzmeš BINOBJ, BGIOBJ ili neki sličan program (BGIOBJ imaš u BGI direktorijumu ako koristiš BC ili TP) i pomoću njega prevedeš svoj binarni fajl u obj koji posle ulinkuješ u exe.
asembler.48 konem,
Moze li neko iskusniji da objasni strukturu Trojanca. Prvenstveno me interesuje kako se kaci na izvrsni fajl ... Thanks in advance.
asembler.49 deimos,
1. Trebala bi mi neka dokumentacija sa jako puno primera, bilo u obliku kompjuterskog doc-a/skupa sorseva, bilo kao knjiga ( u tom slucaju - gde ima da se nabavi ili bar naslov ), a da se tice programiranja iskljucivo 386 i visih procesora: da ima objasnjenu konkretnu primenu virtualnog, native, flat i uopste protected moda (ukljucujuci deskriptore, selektore...) i da ima sto vise primera za masinski kod i asembler. 2. Bio bih nekom zahvalan kad bi mi dostavio bar najkracu (template) verziju programa koji radi u 100% protected ili virtuelnom modu. 3. Takodje bih bio zahvalan (a predpostavljam i drugi) kad bi neko okacio ovde A386 assembler (onaj slican A86 samo za 386+). Unapred hvala, Vlada.
asembler.50 saxon, -> #49, deimos
> 1. Trebala bi mi neka dokumentacija sa jako puno primera, bilo > u obliku kompjuterskog doc-a/skupa sorseva, bilo kao knjiga ( u > tom slucaju - gde ima da se nabavi ili bar naslov ), a da se > tice programiranja Ne bavim se asemblerom ali imam jednu takvu knjigu koja sam iščitao radi "opšte kulture": Ros P. Nelson Microsoft's 80386/80486 Programming Guide (Assembly Language Programmer's Guide for 80386SX, 80386DX and 80486) Second Edition, redmond, Washington 1991. Knjiga nema gotovih primera ali zato zalazi u vrlo perverzne detalje svake pojedinačne asemblerske instrukcije, detaljno opisuje sistem protekcije, pejdžing i keš-menadžment...
asembler.51 haralampie,
Nikako ne mogu da nadjem proggy koji ima mogucnost snimanja brusha ili cele slike u 'RAW'(chunky) formatu. Programi za konvertovanje slika koje imam nemaju tu mogucnost [Gsw, Vpic]. Konvertuju u sve zivo, ali, u Raw nikako. Ima li neko neki converter koji bi radio ovaj posao?
asembler.52 pedjak, -> #49, deimos
> 1. Trebala bi mi neka dokumentacija sa jako puno primera, bilo u > obliku kompjuterskog doc-a/skupa sorseva, bilo kao knjiga ( u tom > slucaju Pored onoga što ti je preporučio saxon, u elektronskom obliku imaš: r:/infoprog/ i386 a01 107266 i80386 Programmer's Reference Manual (Intel) #2 i386 arj 108601 i80386 Programmer's Reference Manual (Intel) #1 i387 zip 120306 i80387 Programmer's Reference Manual (Intel)
asembler.53 deimos, -> #50, saxon
 ű>> Ros P. Nelson >> Microsoft's 80386/80486 Programming Guide >> (Assembly Language Programmer's Guide for 80386SX, 80386DX and 80486) >> Second Edition, redmond, Washington 1991. Zahvaljujem na informaciji. Knjigu sam video, kao i jos neke slicne koje se bave suvom teorijom, i to je sve jako lepo, ali kad treba to da se primeni u praksi dolazi do problema :( , zato i pokusavam da dodjem do nekih primera... U svakom slucaju, hvala za info. Vlada.
asembler.54 deimos, -> #52, pedjak
>> Pored onoga sto ti je preporucio saxon, u elektronskom obliku imas: >>r:/infoprog/ >>i386 a01 107266 i80386 Programmer's Reference Manual (Intel) #2 >>i386 arj 108601 i80386 Programmer's Reference Manual (Intel) #1 >>i387 zip 120306 i80387 Programmer's Reference Manual (Intel) Imam ovo vec odavno. Ovo je jako interesantno za upoznavanje sa problemom, ali je u praksi to polu primenljivo, a meni trebaju konkretni primeri... :( Vlada.
asembler.55 kriss, -> #48, konem
˙˙ Moze li neko iskusniji da objasni strukturu Trojanca. If neki_uslov=nešto_što_se_proverava Then Format(all_drives); ˙˙ Prvenstveno me interesuje kako se kaci na izvrsni fajl ... Trojanci se ne kače, virusi se kače. Prekopaj malo stare poruke po PC.UTIL.n:virusi, zna štošta zanimljivog da se nađe ...
asembler.56 konem, -> #55, kriss
> Prekopaj malo stare poruke po PC.UTIL.n:virusi, zna stosta zanimljivog da se > nade ... Nasao sam manje-vise ono sto me je zanimalo. Hvala kriss ...
asembler.57 nemko, -> #51, haralampie
Konverzija u RAW format slike: Posao mozes da odradis sa programom ImageAlchemy. Jedna od njegovih verzija se nalazi i na Sezamu.
asembler.58 jablan,
Imam jedno pitanje: Kako da promenim izgled jednog karaktera (font), a da izbegnem int 10h. Smeta mi ono treperenje ekrana. Kako se to radi u onim nortonovim utility-jima (mislim na kurzor miša u modu 3)?
asembler.59 bkaradzic, -> #49, deimos
;;; 1. Trebala bi mi neka dokumentacija sa jako puno primera, bilo u ;;; obliku kompjuterskog doc-a/skupa sorseva, bilo kao knjiga ( u tom slucaju ;;; 3. Takodje bih bio zahvalan (a predpostavljam i drugi) kad bi neko ;;; okacio ovde A386 assembler (onaj slican A86 samo za 386+). Ovakve stvari mozes naci na internetu (ftpmail@grasp.insa-lyon.fr, ftpmail@lth.se,...), ili na nekom dobrom stranom BBS-u (preporucujem A.C.E: +33 1 4588 7548, jer ima sve sto te zanima - dir: 78. Programmation utilitaires). ;;; 2. Bio bih nekom zahvalan kad bi mi dostavio bar najkracu (template) ;;; verziju programa koji radi u 100% protected ili virtuelnom modu. Uz poruku je Tran-ov PMODE v3.07. Ako ti ovo nije dovoljno poslacu ti i PMODE v2.51 (ako ga nemas). fatboy / Hyperopia pmode.zip
asembler.60 biber,
????????????? Zasto ovo nece da radi ?????????????? jmp beg old_vect:dw 0,0 beg: mov ax,03508 ; Get Interupt Vector int 021 mov [old_vect],bx ; Sacuvaj stari interupt vektor mov [old_vect+2],es mov ax,02508 ; Postavi novi interupt vektor mov dx,inter ;int 021 mov dx,500 ; rezervisemo 500 paragrafa mov ah,031 int 021 ; Terminate & Stay Resident inter: jmp d[temp] ; novi interapt. Samo skace na stari Ovaj program promeni adresu interapta broj 8, tako da pokazuje na novu rutinu za obradu prekida ( labela "inter" ), koja samo skoci nazad na staru rutinu, ciju je adresu zapamtila u lokaciji "old_vect" Prema tome nista mudro, medjutim nece da radi. Zaglavi se !
asembler.61 pedjak, -> #60, biber
> ????????????? Zasto ovo nece da radi ?????????????? Kod koji si poslao ima više nejasnoća i grešaka. > mov ax,02508 ; Postavi novi interupt vektor > mov dx,inter > ;int 021 Pozivanje interapta se ne obavi jer se u ovom slučaju to tretira kao komentar. Dalje, ako bi se i izvršio, ne vidim odavde na šta ukazuje DS registar (verovatno si ovo isčupao iz nekog većeg koda). Trebao bi da ukazuje na code segment. Dalje, DX bi morao da sadrži ofset adrese prekidne rutine, tako da je pravilno: mov DX, OFFSET inter > inter: jmp dŠtempĆ ; novi interapt. Samo skace na stari Ne znam šta je u ovom slučaju to dŠtempĆ, ali bi valjda trebalo do glasi: jmp Šold_vectĆ Pre toga, DS moraš podesiti da ukazuje na tvoj kod segment, u kome je smeštena adresa stare rutine. Dalje, moraš obezbediti da skok bude dalek (far). Inače, to što si zamislio može da se reši i ovako: inter: push ds push cs pop ds pushf call far Šold_vectĆ pop ds iret
asembler.62 vasic, -> #60, biber
> ????????????? Zasto ovo nece da radi ?????????????? > beg: mov ax,03508 ; Get Interupt Vector > int 021 Ne znam koji asembler koristiš i kako on obeležava hex brojeve, ali uobičajeno bi bilo: beg: mov ax,3508h ; Get Interupt Vector int 21h > inter: jmp d[temp] ; novi interapt. Samo skace na stari A ovo mi nije jasno... d[temp]? Tu bih očekivao inter: jmp dword ptr cs:[old_vect] ali opet ne znam koji asembler koristiš i da li je ono 'd' skraćenica za 'dword ptr'. Ako jeste, onda je problem u onom 'cs:' koje ti nedostaje. Kada tvoja interapt rutina dobije kontrolu, jedini registar na čiji se sadržaj možeš osloniti je cs. A pošto je podrazumevani segmentni registar za direktno adresiranje ds, eto belaja.
asembler.63 bkaradzic,
Turbo Assembler v3.1 BUG! :( TASM nece da radi * i / racunske operacije sa 32bit brojevima!!! Primer 1: mov reg32/mem32,imm32(x / y) prevodi mov reg32/mem32,0 mov reg32/mem32,imm32(x * y) prevodi mov reg32/mem32,0 Primer 2: xor eax,eax mov edi,offset blabla mov ecx,20000h/4 rep stosd BUG verovatno vazi i za ostale verzije. :_( fatboy / Hyperopia
asembler.64 biber, -> #62, vasic
>> ali opet ne znam koji asembler koristis i da li je ono 'd' skracenica za >> 'dword ptr'. Ako jeste, onda je problem u onom 'cs:' koje ti nedostaje. Jeste to je to. Hvala tebi i "pedjak". Puno ste mi pomogli. PS. Pazi kako jedno malo cs: pravi probleme ;>
asembler.65 deimos,
Kako postaviti neki od tweak modova? (npr: 320x240, 360x480... )
asembler.66 biber, -> #64, biber
Uh, ponovo problemi. Gde se sad krije greska ? :( inter: push ...svi registri call neki_potprogram ( jako kratak, tako da ne dolazi do usporenja ) pop ...svi registri cs: dec b[every] jnz ne_stari cs: mov b[every],16 cs: <----- jmp d[old_vect] ne_stari:iret Dakle "inter" je interapt rutina koja zamenjuje int 08. S obzirom da sam uradio da se interapt 08 izvrsava 16 puta cesce nego u normalni ( DOS-ov ) interapt 08, definisao sam promenljivu "every", zahvaljujuci kojoj se stari interapt ( "old_vect" ) izvrsava tek svaki 16-ti put. Medjutim ovako napisan program nece da radi. Ukoliko labelu "ne_stari" stavim ispred naredbe oznacene strelicom ( "cs:" ) onda sve radi, ali naravno DOS-ov interapt 08 se onda izvrsava 16 puta cesce, sto nije bas ono sto mi treba. Unapred hvala na trudu!
asembler.67 pedjak, -> #66, biber
> Uh, ponovo problemi. Gde se sad krije greska ? :( > inter: push ...svi registri > call neki_potprogram ( jako kratak, tako da ne dolazi do usporenja ) > pop ...svi registri > jmp dŠold_vectĆ > ne_stari:iret Vidi... smisao stavljanja svih registara na stek (ili bar onih koje koristiš u svojoj prekidnoj rutini) je da se po izlasku iz rutine njihove vrednosti ne poremete i da na taj način ne utiču na kod koji se izvršavao pre prekida. Tvoja rutina neki_program sigurno menja vrednosti nekih registara, tako da je dobro da po ulasku u svoju prekidnu rutinu sačuvaš registre, ali vraćanje njihovih originalnih vrednosti je poslednji korak pri izlasku iz rutine. U gornjem kodu praviš upravu takvu grešku, pri izlasku iz prekidne rutine sadržaji registara će biti izmenjeni, tj. biće izmenjena vrednost flag registra. Pre nego što počneš da proveravaš da li je every=0 gurni flegove na stek i pre skoka na staru rutinu ih skini.
asembler.68 biber, -> #67, pedjak
>> U gornjem kodu pravis upravu takvu gresku, pri izlasku iz prekidne >> rutine sadrzaji registara ce biti izmenjeni, tj. bice izmenjena >> vrednost flag registra. Pre nego sto pocnes da proveravas da li je To mi je savrseno jasno, medjutim nije u tome caka. Evo pogledaj ova dva primera. Razlika je samo u mestu labele "ne_stari". Desni primer radi i nikako da odgonetnem zasto nece levi. Ako bi uspeo da provalis izveo bi me iz zone sumraka :) ( Inace radim sa A86 da ne bude zbunjivanja oko b[...] , d[...] i sl.) Ako je potrebno poslacu ceo listing sa svim inicijalnim delovima, ali mislim da je sve jasno i ovako. every: db 16 every: db 16 potprogram: potprogram: nop nop ret ret inter: pushf inter: pushf call potprogram call potprogram cs: cs: dec b[every] dec b[every] jnz nema jnz ne_stari cs: cs: mov b[every],16 mov b[every],16 popf ne_stari:popf cs: cs: jmp d[old_vect] jmp d[old_vect] ne_stari:popf popf iret iret
asembler.70 mmaric,
Da li neko ima lep algoritam za Search po memoriji od 0-4Gb ;) Da li neko programira u Protected Mod-u. Ako da neka poruku(e) dostavi na E-Mail. Da li neko zna ako se nalazim u 386 Protected Modu na koji nacin da razlikujem Exception-e od Hardveskih Int. kada se preklapaju. P.S. Treba li nekome rutina za menjanje textualnih stranica (B800h-B900h-BA00h ...). Eto, toliko od mene.
asembler.71 vasic, -> #66, biber
> Uh, ponovo problemi. Gde se sad krije greska ? :( > cs: > dec b[every] > jnz ne_stari > cs: > mov b[every],16 > cs: > jmp d[old_vect] > ne_stari: > iret Omatorilo se pa to ti je... Gledao sam sinoć ovaj sors i gledao i gledao... i ništa. :( Tek malopre kad uzeh da odgovorim na pedjak-ovu poruku moja superbrza memorija sa vremenom pristupa od 24h dala mi je rešenje. Elem, ono što ti je pedjak pričao o flegovima nema veze. Kad se desi interapt (bilo softverski ili hardverski) na stek ne idu samo cs i ip nego i flegovi. Iret će ih u povratku uredno pokupiti - nije u tome problem. Problem je u stonogi pod imenom 8259 Programmable Interrupt Controler. Da bi procesor primio zahtev za prekid nije dovoljno samo I flag bude setovan, već i da PIC propusti zahtev do procesora. A neće ga propustiti ako misli da je u toku obrada nekog prekida višeg prioriteta. I to je ono što se tebi dešava - izađeš iz interapt rutine bez obaveštenja PIC-u da je obrada prekida gotova, a pošto je tajmer interapt najvišeg prioriteta (IRQ0) više ni jedna od periferija nije u stanju da dopre do procesora. Naravno, BIOS rutina na svom završetku odradi posao sa PIC-om i zato varijanta u kojoj uvek zoveš stari handler ne blokira. Posle sve ove priče, rešenje je sasvim jednostavno. Treba između labele ne_stari i iret-a da ubaciš sledeće dve linije... mov al,20h out 20h,al ...i da ne zaboraviš da sačuvaš vrednost ax. :) Naravno, sve ovo važi samo za prekide koje generiše hardver. U slučaju softverski generisanih prekida (10h, 21h, 2Fh,...) PIC nema nikakvu ulogu i nikakvi out-ovi nisu potrebni.
asembler.72 banga, -> #68, biber
> Desni primer radi i nikako da odgonetnem zasto nece levi. > jnz nema jnz ne_stari ^^^^ a gde ti je ovo?
asembler.73 biber, -> #72, banga
>>> jnz nema jnz ne_stari >> ^^^^ a gde ti je ovo? Ma pusti, prepisujem, kombinujem, jodlujem ... i naravno da uvek nesto pogresno prepisem. Tu treba da stoji isto kao i sa desne strane tj. jnz ne_stari. Inace oba primera su ista, sem mesta gde se nalazi labela "ne_stari" Hvala na trudu oko analiziranja! Inace jos nisam resio problem, a potegao sam i za SoftIce-om. ( nemas pojma kako me mrzi da provaljujem kako se radi sa njim )
asembler.74 biber, -> #71, vasic
>> Omatorilo se pa to ti je... Gledao sam sinoc ovaj sors i gledao i >> gledao... i nista. :( Tek malopre kad uzeh da odgovorim na pedjak-ovu Gledam ja vec vise noci ... :( >> poruku moja superbrza memorija sa vremenom pristupa od 24h dala mi je Cuti, dobro je i to dok radi sa 0 WS. :)) >> Posle sve ove price, resenje je sasvim jednostavno. Treba izmedu labele >> ne_stari i iret-a da ubacis sledece dve linije... >> >> mov al,20h >> out 20h,al E ovo nikad ne bih provalio, mada sam u ocajanju poceo da analiziram DOS interapt rutinu, ali do ovoga nisam stigao. Nego jesi li video kako je DOS ruzno pisan ( kod ) Puno ti hvala na odgovoru i trudu oko analiziranja!
asembler.75 deimos,
Hitno! Ako neko ima neku dokumentaciju (pozeljno sa primerima u bilo kom jeziku) za pristupanje FDD/HDD-u na najnizem nivou, tj preko portova. Da pojasnim, treba mi konkretan opis sekvenci za citanje, pisanje, seek... Hvala unapred!
asembler.76 mmaric, -> #75, deimos
Mislim da tako nesto imas u HELP PC paketu , kon¸okkretno u fajlu ports.txt ili tako nesto. Ako ga ne nadjes ovde na Sezam-u pisi mi poslacu ti ga. Marko.
asembler.77 deimos, -> #76, mmaric
Imam HELP PC, ali mi ne resava problem. Kao prvo, tamo nema nista za HDD, a i podatci su dosta bajati, kao drugo, mislio sam da neko ima gotov primer u asm-u,c-u... :((
asembler.78 speedy, -> #77, deimos
Ja sam te stvare provalio disaseblirajuci BIOS-ovu rutinu za read i write... Glavna je fora da citas sa rep insw (znaci wordove)... Naravno pre toga cli... Otprilike je sledeca logika : napunis registre glave,sektora i cilindra kako treba i onda izvrsis out na command port sa odgovarajucom komandom... Onda Pre toga zakacis odgovarajuci interapt (cini mi se da je IRQ 15 za primary port a IRQ 14 za secondary) i kad se on desi procitas sektor (256 wordova). Onda opet cekas (ako treba), ucitas 256 worda sa data registra (1f0 za prvi port valjda) itd... Za FDD nisam gledao ali to je drugaciji sistem... Ako te jos nesto interesuje pitaj... Speedy
asembler.79 biber,
Da li je moguce sa HD komunicirati na sledeci nacin: Zada mu se komanda da pomeri glave na taj i taj cilindar, i za vreme dok HD to radi, glavni program radi nesto drugo. Kad glave stignu na odrediste HD generise interapt i onda mu se nalozi da ucita neki sektor sa tog cilindra, ili jos bolje sve sektore sa cilindra ( za odredljenu glavu )
asembler.80 janko, -> #79, biber
> Da li je moguce sa HD komunicirati na sledeci nacin: > Zada mu se komanda da pomeri glave na taj i taj cilindar, > i za vreme dok HD to radi, glavni program radi nesto > drugo. Kad glave stignu na odrediste HD generise interapt > i onda mu se nalozi da ucita neki sektor sa tog cilindra, > ili jos bolje sve sektore sa cilindra ( za odredljenu glavu ) Ovo je tehnika kojom bi se mogla paralelizovati obrada unutar istog programa sa učitavanjem sa diska. Još bolja specifikacija bi bila da se podistemu diska specificira adresa u memoriji na koju će se učitati deo fajla (dakle, da se radi sa većom apstrakcijom od ove čudne "kada se pomere glave i sl." ) i kada je taj deo fajla učitan da se nekako javi glavnom programu itd. Međutim, DOS i BIOS nisu tako pravljeni da ovo podržavaju. Štaviše, sumnja se da nijedan IDE disk ne može da izvede istu priču. Moguće je, međutim ovakvu stvar postići ukoliko se ima NT (ni Win95 nije dovoljan, po (staroj) dokumentaciji koju imam). Takođe, izgleda da ni na NT-u neće biti stvarne paralelizacije ako mašina nema SCSI diskove.
asembler.81 mminovic,
Hi! Zna li neko da li je moguće realizovati npr. kopiranje nekog .TTF u .EXE (negde na kraj) ,a onda zatim ako dati .TTF ne postoji na sistemu da bude stvoren jednostavnim vraćanjem na disk i nazivanjem .TTF? Ako ima nekih drugih ideja da se reši problem fonta... Pozdrav,Miroslav.
asembler.82 msavkovic,
──────────────────────────────────────────────────── ───── ─── ¨ ── ¨ ˙ ▄█▀█▄ ██▀█▄ ▄█▀█▄ ▄█▀█▄ ▄█▀█▄ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ * Computer News ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ * Domaća scena: Profesionalni program za ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ zaštitu softvera ██ ▀▀ ██ ██ ██ ██ ██ ▀▀ ██ ▀▀ * Demo scena ▀▀█▄ ██ ██ ██ ██ ██ ██▀▀ * Intervjui: Hoplite/Orange i Basehead/FM ██Ţ██ ██ ██ ██ ██ ██ ██Ţ██Ů██ * Muzika: Velvet Studio 1.0(demo), TB303,. ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ * Programiranje: Triple-sine 250byte ██ ██ ██▀▀ ██▀██ ██ ██ ██ ██ plazma, Brzo učitavanje PCX ██ ██ ██ ██ ██ ██ ██ ██ ██ * Igre: Wing Commander IV, Rayman,... ██ ██ ██ ██ ██ ██ ██ ██ ██ * Filmovi: Toy story, Mary Reilly,... ▀▀▀ ▀▀ ▀▀ ▀▀ ▀▀▀ ▀▀▀ issue #1 - 386+/VGA/GUS,PCS,DAC,SB - ──────────────────────────────────────────────────── ───── ─── ¨ ── ¨ ˙ U konferenciji Sezamnet, broj poruke 32.313
asembler.83 rkramer,
Da li iko zna kako se zove onaj drugi mod turbo-asm-a (jedan je IDEAL, a drugi?) TIA, speedy
asembler.84 evlad, -> #83, rkramer
Y> Da li iko zna kako se zove onaj drugi mod turbo-asm-a (jedan je Y> IDEAL, a drugi?) MASM ? valjda beše neka kompatabilnost sa masm 5.x sourcetom ...
asembler.85 ivko,
Moze li mi neko reci kako da kontrolisem registre EAX, EBX, ECX ... kod mikroprocesora 80386. Trebju mi kodovi tih komandi i njihovi parametri.
asembler.86 obren, -> #85, ivko
> Moze li mi neko reci kako da kontrolisem registre EAX, EBX, ECX > ... kod mikroprocesora 80386. Trebju mi kodovi tih komandi i > njihovi parametri. Ti registri se koriste ekvivalentno svojim "podregistrima" AX, BX... Pretpostavljam da si zaboravio da staviš jedno .386 na početku programa pa je asembler prijavljivao greške?
asembler.87 ivko,
U principu je OK mada se nismo najbolje razumeli. Ja nisam rekao da to necu koristiti iz asemblera vec direktno moram pisati kodove u memoriju racunara i odatle startovati programcic. Asembler mi je u mom (pomalo specijalnom) slucaju neupotrebljiv. HVALA za prethodni odgovor...
asembler.88 obren, -> #87, ivko
> U principu je OK mada se nismo najbolje razumeli. Ja nisam rekao > da to necu koristiti iz asemblera vec direktno moram pisati > kodove u memoriju racunara i odatle startovati programcic. > Asembler mi je u mom (pomalo specijalnom) slucaju neupotrebljiv. > HVALA za prethodni odgovor Opcodovi svih instrukcija (zaključno sa i486) imaju u Turbo Assembler Quick Reference Guide-u. Mogu da ti dam da iskopiraš ako se nisi snašao na drugom mestu...
asembler.89 ivko, -> #88, obren
Posto sam ja u vojsci, kontaktiraj mog burazera (011/444-2698 - Misa) oko 17h i ostavi svoj broj telefona ili meni na e-mail posto ovde ne mozes da me zoves a meni su veze slabe za prebacivanje modemom. Potrebne su mi te stvari posto ovde na kompjuteru u kasarni nema ama bas nista. Unapred hvala!
asembler.90 biber,
Kako su (fizicki) mapirani particionisani diskovi? Npr. na disku su dve particije, i disk je prazan. Ako snimim fajl na drugu particiju, na kom cilindru ce se fizicki nalaziti fajl: a) negde pri pocetku diska (oko prvog cilindra) b) negde na polovini diska
asembler.91 nenad, -> #90, biber
> Kako su (fizicki) mapirani particionisani diskovi? Mapirani su redom po sektorima, shodno logičkoj strukturi diska (glave, cilindri, sektori). Fizički to ne mora uopšte da odgovara stvarnosti, većina novih diskova ima najviše jednu do dve ploče. > Npr. na disku su dve particije, i disk je prazan. > Ako snimim fajl na drugu particiju, na kom cilindru > ce se fizicki nalaziti fajl: > a) negde pri pocetku diska (oko prvog cilindra) > b) negde na polovini diska Nalaziće se na delu diska odvojenom za drugu particiju. Šta kojoj particiji pripada i gde koja počinje i završava definiše se u particionoj tabeli. Na jednom fizičkom hard-disku može postojati najviše 4 particije (toliko mesta ima u particionoj tabeli). Particije mogu biti različitog "tipa" i formatirane na različite načine, dva najvažnija "tipa" su 'primarna' particija (koja može biti određena 'aktivnom' i sa nje se može podići sistem) i tzv. 'extended' particija koja u sebi sadrži lokalnu particionu tabelu i može sadržavati veći broj logičkih particija koji se posle pod DOS-om vide kao diskovi, recimo e, f, g...
asembler.92 dzakic, -> #137, zvezdan
> Nije biber kriv što je njegov program drastično brži u odnosu na > ostala rešenja. Čovek se ispraksovao na Spectrum-u gde nije ni mogao > da razmišlja o C-u, a ne kao mnogi koji danas odmah u startu počinju > da rade sa Visual C++ od 650 MB CD-a. Nadam se da niko ovde nije ni hteo da kaže da je pobednik 'kriv' što je radio u asembleru. Mnogi su ispekli zanat na Spektrumima i Komodorima, sećam se i dan danas nekih adresa koje reaguju na magične peek & poke :), verujem da pamtite adresu u rom-u procedure za ispis na ekran ili load i save. Mađutim, ma koliko nam svima asembler bio drag, viši programski jezici fakat rade isti posao, nešto sporije, ali sa daleko manje uloženog programerskog vremena. Cela kompjuterska industrija ide u tom pravcu da se brzinom hardvera nadoknađuje neefikasnost izvršnog koda. Pamtim rečenicu iz .doc-a jednog korisnog shareware paketa koja kaže nešto kao: There is considerable overhead using this method, but... why else developing Pentium ;) Ipak, tamo gde je brzina kritična, asembler će uvek naći svoju primenu i uz dobar algoritam iz mašine izvući maksimum. Jedan od primera je i pobednik upravo završenog takmičenja :) Pozdrav, Zak
asembler.93 biber, -> #136, dzakic
>> konkurenata. Ocigledno je da sledeci put moramo malo "skresati" izbor >> alata na vise programske jezike, posto nam je primarni cilj bio da :(( Necete valjda :( Inace svoje programe uglavnom radim u asembleru (sto znaci da necu moci vise ucestvovati na takmicenju), pa je tako bilo i sa ovim. Nisam ga uradio u asm da bih po svaku cenu pobedio. No dobro. Ako se vec oprastamo od asemblera u zadacima, da iznesem jedno zanimljivo zapazanje. Asembler za x86 procesore ima veliki broj instrukcija. Od toga se prakticno koristi relativno mali broj istih. Izlazi da visak uglavnom sluzi da poskupi i zakomplikuje izradu procesora (bolje se greje;). Konkretno, moje resenje je uradjeno sa par osnovnih instrukcija. Bez problema bi se moglo prepevati i za "anticki" Z80, i ne bi nista "zafalilo". Da li je buducnost u RISC-u?
asembler.94 biber, -> #91, nenad
>> Nalazice se na delu diska odvojenom za drugu particiju. Sta kojoj >> particiji pripada i gde koja pocinje i zavrsava definise se u >> particionoj tabeli. Na jednom fizickom hard-disku moze postojati Postoji li negde opis particione tabele? Nekakav fajl ili knjiga.
asembler.96 zvezdan, -> #92, dzakic
>> viši programski jezici fakat rade isti posao, nešto sporije, >> ali sa daleko manje uloženog programerskog vremena. Ovo je stvarno diskutabilno. Ako bi učesnici na takmičenju bili iskreni da priznaju koliko su vremena uložili u programiranje ovog zadatka pa da možemo i to da uporedimo. A da su "nešto sporiji" opovrgao je biberov program.
asembler.97 janko, -> #93, biber
> No dobro. Ako se vec oprastamo od asemblera u zadacima, da > iznesem > jedno zanimljivo zapazanje. Asembler za x86 procesore ima > veliki > broj instrukcija. Od toga se prakticno koristi relativno mali > broj istih. Izlazi da visak uglavnom sluzi da poskupi i > zakomplikuje > izradu procesora (bolje se greje;). Konkretno, moje resenje je > uradjeno sa par osnovnih instrukcija. Bez problema bi se moglo > prepevati i za "anticki" Z80, i ne bi nista "zafalilo". > > Da li je buducnost u RISC-u? Cela priča sa RISC-om (ovde ide crtica jer je RISC skraćenica, inače se crtice ne pišu kada se strane reči menjaju po padežima što veći broja autora u Računarima ne zna) je u stvari priča o tzv. localized cost principu: ako uvedeš neku instrukciju koja usporava dekodovanje instrukcije, a time i SVE OSTALE instrukcije, a sama se retko koristi, išao si na pogrešnu stranu. Osnovna ideja RISC-a je da za odlazak do samoposluge ne treba da trošiš 500 litara za let helikoptera, a CISC su išli drugačije "da svedemo sve na letenje, pa da vidimo". Ali osnovno je ovo: pravi RISC procesori skoro da UKIDAJU potrebu za ASM programiranjem! Iako imaju "mali" (nije više mali, pogledaj specifikaciju za PowerPC ili MIPS pa ćeš videti) set isntrukcija, još više su neugodni za lako programirane nego stariji (CISC filozofija je olakšati programiranje hardverom!). Današnji dobar C kompajler će često dati EFIKASNIJI kod nego što će to napisati asemblerski programer! Zato, vataj se za C(++) što pre!
asembler.98 biber, -> #97, janko
>> kompajler ce cesto dati EFIKASNIJI kod nego sto ce to napisati >> asemblerski programer! Zato, vataj se za C(++) sto pre! Nema sanse :) Po meni visi programski jezici su u prednosti kad je u pitanju ulaz i izlaz podataka. To je velika gnjavaza raditi u asembleru. Ali neke zahtevne module programa bi svakako trebalo raditi "rucno". Naravno, pod uslovom da je problem koji resavas zahtevan. Jedino covek zna (ponekad i intuitivno) kakav je tok programa, dok kompajler ipak prevodi mehanicki. Rekao bih da je prevodjenje "zivih" jezika sasvim lepa analogija ovome.
asembler.99 embe, -> #96, zvezdan
>>Ovo je stvarno diskutabilno. Ako bi ucesnici na takmicenju >>bili iskreni da priznaju koliko su vremena ulozili u >>programiranje ovog zadatka pa da mozemo i to da uporedimo. Vreme koje sam ja upotrebio je oko 6 sati. Zadatak sam poceo da resavam u nedelju, nesto posle 12 , i uz tri cetiri pauze, zavrsio oko 22:30. Sors sam zakacio tek oko 23:45, jer je bila guzva na Sezamu. Ova verzija je bila potpuno ispravna i radila je brzo ali sam ipak sutradan (ponedeljak) napravio minorne izmene (10 minuta posla) i poslao definitivno resenje. Znaci, ukupno vreme: 6 sati i 10 minuta :) >>A da su "nesto sporiji" opovrgao je biberov program. To da je biberov program brzi 5x od drugoplasiranog i 15x od mog, cetvrtoplasiranog, proisteklo je iz samog nacina testiranja. Ne sumnjam u to da je biberov algoritam dobar, ali STVARNA brzina algoritama nije izmerena. Smatram da je tolika razlika proistekla iz ogromne razlike u brzinama kod ulazno-izlaznih operacija, na relaciji asembler - visi programski jezici. Sto se tice OVOG samog algoritma i ciste numerike, NIKO ne moze da kaze, da je asembler brzi od C++, Paskala i ostalih jezika. Sve je to isto do u dlaku. Stvar je u ALGORITMU, a ne u jeziku. Zato, potrebno je naci nacin za testiranje algoritama a ne ulaza i izlaza. Ne znam asembler, pa ni ne mogu suditi o finesama u biberovom algoritmu. Ali bez svake sumnje algoritam je dobar. Pozdrav, EMBE
asembler.100 nenad, -> #94, biber
> Postoji li negde opis particione tabele? Nekakav fajl > ili knjiga. Trebalo bi da opis postoji i u ovim programerskim referentnim priručnicima koji postoje Sezamu (help PC, tech-ref...).
asembler.101 tomil, -> #94, biber
> Postoji li negde opis particione tabele? Nekakav fajl > ili knjiga. U "Računarima" br.57 (januar/1990.) na strani 68 imaš tekst "Rekurzivna trka po disku" od autora Vlade Kostića. Tu je između ostalog opisan i izgled tabele particija. Možda na Sezamu postoje stari brojevi "Računara" u elektronskom obliku, (treba proveriti sa redakcijom), a ako ne možeš da nađeš taj broj, ti viči, pa ću taj deo teksta prekucati. Uzput, čestitam ti na pobedi na takmičenju, pokazao si kako programiraju pravi programeri (pravi programeri, naravno, koriste isključivo assembler). Miša.
asembler.102 dpredovic, -> #98, biber
> Jedino covek zna (ponekad i intuitivno) kakav je tok programa, dok > kompajler ipak prevodi mehanicki. Jeste, ali kod procesora koji znaju da preklapaju instrukcije ako su zadatate po određenom rasporedu (Pentium+, RISC...) stvarno postaje pitanje koliko čovek sve to može da isprati. Kada u igru uđe i višeprocesorski rad, to je već na male goliće...
asembler.103 vitez.koja, -> #101, tomil
#=> pravi programeri (pravi programeri, naravno, koriste isključivo #=> assembler). Ovo smo apsolvirali odavno. Pravi programeri kucaju COPY CON: RESENJE.EXE problem je što galimpic traži neki izvorni kod i šta ti ja znam... sk
asembler.104 biber, -> #99, embe
>> relaciji asembler - visi programski jezici. Sto se tice OVOG samog >> algoritma i ciste numerike, NIKO ne moze da kaze, da je asembler >> brzi od C++, Paskala i ostalih jezika. Sve je to isto do u dlaku. >> Stvar je u ALGORITMU, a ne u jeziku. Zato, potrebno je naci nacin Svakako, da je najvazniji algoritam, ali i realizacija algoritma ima udela u brzini izvrsavanja. Takodje i kvalitet prevodioca. Zbog toga je asembler brzi od visih jezika. Tj. tacnije bi bilo reci da covek bolje prevodi neki algoritam u oblik razumljiv procesoru, nego bilo kakav program-prevodioc. Ako si nekad analizirao neki kompajliran program (disasemblirao ga) video si da se tu nalazi gomila (na oko) besmislenih naredbi koje prebacuju vrednosti iz jedne u drugu memorisku lokaciju, pri tome ukljucujuci gomilu poziva raznoraznih potprograma. Argumenti se prenose putem steka (dakle ponovo pisanje i citanje iz memorije) Covek ce sa pak, koristeci asembler, truditi da sto je moguce vise podataka drzi i prebacuje koristeci registre procesora koji su neuporedivo brzi od memorije. Pa zatim tu su ostali sitni dobici (trikovi za deljenje sa 10, proveravanje znaka operacije, "generisanje nule" i sl.) Sve zajedno kad se skupi izadje da je ipak asembler brzi. Medjutim ta prednost coveka (asemblera) nece trajati dugo. Kad u siru upotrebu udju viseprocesorski sistemi, tesko ce covek biti u stanju da prati izvrsavanje vise paralelnih tokova programa. Tu su prevodioci u prednosti. Mislim da je i janko nesto slicno mislio u nekoj od prethodnih poruka.
asembler.105 biber, -> #102, dpredovic
>> pitanje koliko covek sve to moze da isprati. Kada u igru ude i >> viseprocesorski rad, to je vec na male golice... Evo upravo sam nesto slicno napisao kao odgovor embe-u. Svakako. Vec sada nisam siguran da bi covek uspeo da napise program koji paralelno korisiti i procesor i koprocesor (386+387 pa na dalje). Sa druge strane opet nisam ubedjen ni da su kompajleri tako dobro napravljeni da prevode programe tako da razbacaju numericke i ostale instrukcije, kako ne bi procesor i koprocesor se medjusobno cekali. Za sada mrtva trka. Ali kako vreme ide verovatno necemo vise ni morati da kuckamo po tastaturama.