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,
)>- 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,
 ű>> 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,
> 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,
>> 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,
>> 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,
>+ 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,
>> >> 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,
>> 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,
)>- 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,
)>- 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,
)>->> 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,
> 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,
>> 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,
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,
>> 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,
)-> 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,
)>- 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,
>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,
>Vec si poceo? :) Ne brini, I am harmless. U svakom slucaju, puno hvala na informacijama.
asembler.26 konem,
> 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,
>> Ne znam kako da ti se zahvalim, sem :Thanks,biber.... Napisi neki PD program. U asembleru naravno. :)
asembler.28 kriss,
˙˙ 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,
˙˙ formi u PCu i Asmu: TecHELP, HelpPC, ASM - norton guide, ˙˙ asmtutor.zip... Ovaj zadnji je bar po meni beskoristan i zbunjuje.
asembler.30 kriss,
˙˙ 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,
>> 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,
>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,
> Ovo je skoro 100% po knjizi, amda moze i da se optimizuje. Pisao Kojoj knjizi..?
asembler.34 deimos,
>> > 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,
˙˙ 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,
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,
> 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,
>> 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,
> 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,
> 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,
> 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,
> 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,
> 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,
> 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,
 ű>> 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,
>> 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,
˙˙ 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,
> 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,
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,
;;; 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,
> ????????????? 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,
> ????????????? 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,
>> 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,
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,
> 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,
>> 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,
> 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,
> Desni primer radi i nikako da odgonetnem zasto nece levi. > jnz nema jnz ne_stari ^^^^ a gde ti je ovo?
asembler.73 biber,
>>> 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,
>> 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,
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,
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,
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,
> 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,
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,
> 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,
> 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,
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,
> 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,
> 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,
>> 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,
>> 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,
>> 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,
> 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,
>> 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,
>>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,
> 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,
> 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,
> 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,
#=> 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,
>> 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,
>> 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.
asembler.106 janko,
> 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. To svaki optimizujući kompajler radi bez problema. > neuporedivo brzi od memorije. Pa zatim tu su ostali sitni > dobici > (trikovi za deljenje sa 10, proveravanje znaka operacije, > "generisanje nule Sve te trikove zna i svaki dobar kompajler. Očigledno nisi skoro gledao kakav sors generišu dobri kompajleri. > Sve zajedno kad se skupi izadje da je ipak > asembler brzi. Veoma retko, samo kada se čovek polomi da optimizuje određenu malu petlju. Većinu koda koji izoptimizuje kompajler ne bi stigli ni svi Kinezi sveta da izoptimizuju...
asembler.107 janko,
Na temu diskusije "da li kompajleri znaju da pišu kao asm programeri": Evo kako Borland C++ 4.5 prevodi sledecu funkciju (za 32-bitni kod -- ko još koristi XT ili 286? -- a koliko asm programera zna da piše 386 i jači kod?): int mnozi( int a ) { return a * 31; } Prevod je: _mnozi proc near ; ; int mnozi( int a ) ; push ebp mov ebp,esp ; ; { ; return a * 31; ; mov eax,dword ptr [ebp+8] mov edx,eax shl eax,5 sub eax,edx ; ; } ; pop ebp ret _mnozi endp Primetite kako je izvedeno množenje sa 31, tako da se ne radi pravo MUL. Može li asm programer bolje? Ne. OK, reći će neko, ali tu je overhead poziv funkcije (na stek--sa steka). ako se to smatra kritičnim, doda se samo jedna ključna reč u deklaraciji funkcije: inline int mnozi( int a ) { return a * 31; } Pogledajmo sad prevod funkcije koja poziva našu "mnozi" Funkcija: int sloz( int c ) { return mnozi( c ) + 33; } Prevod: @sloz$qi proc near ; ; int sloz( int c ) ; push ebp mov ebp,esp ; ; { ; return mnozi( c ) + 33; ; mov eax,dword ptr [ebp+8] mov edx,eax shl eax,5 sub eax,edx add eax,33 ; ; } ; pop ebp ret @sloz$qi endp Dakle umesto poziva funkcije, sve je ugrađeno "na mesto". Da je i sloz() inline, ni za nju ne bi postojao overhead itd...
asembler.108 biber,
>> Sve te trikove zna i svaki dobar kompajler. >> >> Ocigledno nisi skoro gledao kakav sors generisu dobri kompajleri. Evo pogledao sam deo koda iz embe.exe Pazi kako se doturaju argumenti potprogramu (funkciji). push si ; ovo je argument call potprogram ..... ..... potprogram: push bp mov bp,sp push si push di mov di,w[bp+4] Posle ovih operacija se u di registru nadje vrednost ulaznog argumenta funkcije (potprograma), tj. ono sto je bilo u si pre pozivu potprograma. Sve zajedno prilicno neefikasno. Pogotovo sto ovakvih poziva imas na svakih nekoliko linija programa. Takodje u okviru potprograma imas poziv drugog potprograma a cesto i nekoliko nivoa poziva. Obren rece da je program preveden sa BC 3.1 i sa svim optimizacijama ukljucenim. Na koji kompajler si ti mislio kad si rekao "optimizujuci" ? Ajde prevedi embe.cpp sa njim pa mi okaci u mail. E da, na kraju, vidjao sam programe koji prilikom svakog poziva potprograma proverevaju jos i da li se stek prepunio. I to, naravno, tako sto pozovu potprogram koji ce to da proveri. Tek to je gubitak vremena.
asembler.109 embe,
>> optimizacijama ukljucenim. >> Na koji kompajler si ti mislio kad si rekao "optimizujuci" ? >> Ajde prevedi embe.cpp sa njim pa mi okaci u mail. Evo i ja da se ukljucim. Nije stvar u embe.cpp. Program je i pisan tako da se sastoji od nekoliko kratkih potprograma, umesto da se sastoji od samo jedne funkcije. O prednostima razlaganja programa na vise malih funkcija ne bih pricao. Mogao sam, ali nisam da ovaj program napisem u obliku jedne funkcije ali smatram da je takav nacin pisanja programa STETAN po kulturu programiranja. Ni na kraj pameti mi nije bilo da ovo "usitnjavanje" moze dovesti do bitnog usporenja programa. BTW, nasi algoritmi su razliciti pa je besmisleno porediti duzinu asemblerskog koda koji si ti napravio i onog kojeg vidis u debugeru, a sto se tice pozivanja potprograma, koliko mi se cini, u tvom algoritmu i nema potprograma i prenosenja argumenata. >> E da, na kraju, vidjao sam programe koji prilikom svakog >> poziva potprograma proverevaju jos i da li se stek prepunio. >> I to, naravno, tako sto pozovu potprogram koji ce to da >> proveri. Tek to je gubitak vremena. To sto si ti video je program kompajliran sa opcijom "Check stack overflow", koji omogucava da se proverava prepunjenost Stack-a, sto je vrlo korisno u fazi pisanja programa, jer greske u programu ciji je uzrok prepunjen stack su veoma veoma zametne za otkrivanje a manifestuju se haoticnim radom programa. U svakom slucaju, konacna verzija programa se kompajlira sa iskljucenom opcijom za proveru stack-a. To sto je provera stacka ostala u kodu, greska je zaboravnog programera a ne kompajlera, jer kompajleri po defaultu imaju ukljucenu ovu opciju, kao i opciju za debug informacije itd. Ovo naravno pricam za Borland kompajlere. I jos nesto, program embe.exe je kompajliran sa BC++ 3.1, a poznato je da je to kompajler star CETIRI godine i da je od tada mnogo novih verzija izaslo, a razlika se gotovo uvek ogledala u poboljsanim optimizacijama (izmedju ostalog). Pozdrav, Milan.
asembler.110 biber,
>> mov edx,eax >> shl eax,5 >> sub eax,edx Mudro, nema sta. Pretpostavljam da su i neki drugi mnozitelji uzeti u obzir. Mozda izlazi iz okvira teme, ali da li slicno razmisljaju i ostali prevodioci ( MS, Watcom )? Ipak i dalje ostaje ono doturanje parametara preko steka kao visak. Covek ipak bolje organizuje podatke. >> -- a koliko asm programera zna da pise 386 i U principu samo ubacis "E" ispred registra :) Ja bih pitao "a koliko asm programera postoji" Evo ova tema je mesecima prazna.
asembler.111 janko,
> Mudro, nema sta. Pretpostavljam da su i neki drugi > mnozitelji > uzeti u obzir. Mozda izlazi iz okvira teme, ali da li slicno > razmisljaju i ostali prevodioci ( MS, Watcom )? Sve što se može uzeti u obzir se uzima u obzir. Moderani kompajleri nisu džabe tako ogromni -- za neke optimizacije potrebno je izuzetno mnogo memorije da bi se svi parametri uzeli u obzir -- toliko da ne postoji čovek koji bi peške uspeo da to izvede (morao bi da piše po papiru veličine stadiona i da "igra šah" birajući najbolje kombinacije danima... a to se dogodi između klika na Run i startovanja programa... Opet da ti ponovim, sigurno je da SVE što ti umeš da izvedeš ume i kompajler. > Ipak i dalje ostaje ono doturanje parametara preko steka kao > visak. Covek ipak bolje organizuje podatke. Malo sutra, višak. Prokazao sam ti šta možeš da izvedeš u C++ -- da potpuno eliminišeš poziv funkcije. U Asmu to možeš, ako praviš makroe. Ali znaš koliko treba truda da umesto duže funkcije napišeš dug makro, i da vodiš računa o tome da makro i sam brlja registre. Ako ga napišeš sa push/pops obezbedio si ga, ali on je neefikasniji od kompajlerovog posla jer kompajler ZNA za svaki ekvivalent makro substitucije koji su registri angažovani i čime su popunjeni. To nijedan asembler ne zna, niti je moguće napisati takav makro. Znači ako ti se neki konstrukt pojavljuje na deset mesta morao bi na svakom RUČNO da ga pišeš i da bi opitmizovao upotrebu registara. Na C++ napišeš JEDNU funkciju na JEDNOM mestu, a kompajler sve optimizuje i direktno ugradi u kod kao da si ti to radio danima... A upotreba tzv. stek frejmova u "klasičnim" funckijama ti daje slobode koje su nezamenljive. aKo ti bilo koja od njih zatreba u ASM programu, i tebi je najefikasniji način da koristiš stek-frejm.
asembler.112 janko,
> >> -- a koliko asm programera zna da pise 386 i > > U principu samo ubacis "E" ispred registra :) Ajde da ti dam program koji si pisao za 8086 i rekao ti "hoću da koristi 386 instrukcije". Koliko ćeš ga menjati? Za moj C++ sors, samo prevedem drugim kompajlerom. > Ja bih pitao "a koliko asm programera postoji" > Evo ova tema je mesecima prazna. Ja sam asm programer, kada treba. ;) Ali treba samo u vrlo retkim situacijama. C i C++ mogu puno toga. Ja sam sa BC pisao .COM programe koji su imali samo po tridesetak bajtova, npr.
asembler.113 biber,
>> BTW, nasi algoritmi su razliciti pa je besmisleno porediti duzinu >> asemblerskog koda koji si ti napravio i onog kojeg vidis u debugeru, Mislim da nisi razumeo o cemu janko i ja pricamo. Nije o duzini koda nego o optimizaciji. >> a sto se tice pozivanja potprograma, koliko mi se cini, u tvom >> algoritmu i nema potprograma i prenosenja argumenata. Ne secam se, ali nije ni bitno. Kad bi ih bilo sigurno ne bih nekoliko puta gurao i skupljao podatke sa steka kao sto rade kompajleri. Ovo je samo jedan najocigledniji primer kako kompajler ipak losije radi od coveka. Ako malo vise zaceprkas po kodu nekog programa (tvoj je eto slucajno uzet za primer, mogao sam da analiziram i vinkov ili mhrkicev ili ...) videces da su i podaci organizovani na..., pa za coveka na cudan nacin. Npr. instrukcija mov [bx+di+14] trosi vise vremena od mov [bx] a ipak kompajleri teze prvoj varijanti. Jednostavno zato sto prevode mehanicki. >> stack-a. To sto je provera stacka ostala u kodu, greska je zaboravnog >> programera a ne kompajlera, jer kompajleri po defaultu imaju ukljucenu :)) Sem provere, zaboravio je i labele, pa sam sa uzivanjem mogao da analiziram program.
asembler.114 janko,
Hajde gospodo asemblerski programeri, pogodite i kako se radi mnozenje sa 10 nekog broja u eax na BC 4.5, ali da ne gledate u resenje (citaj kompajlirate njime). Resenje sutra.
asembler.115 bceklic,
> Ja bih pitao "a koliko asm programera postoji" > Evo ova tema je mesecima prazna. Imam iza sebe par mega asm sourceta sto me pretpostavljam stavlja u ovu grupu :) Nekada sam sve poslove radio u asm-u (lude godine..) ali u zadnje vreme pokusavam da upotrebu asm-a smanjim na minimum. Tako asm upotrebljavam samo kada je kriticna brzina izvrsavanja, oko poslova zastite softvera i antivirusne zastite. Za vecinu poslova koristim c/c++ a ako je u pitanju neka 'brza' aplikacija za rad sa bazama tu je naravno clipper ;). Povodom diskusije o optimizacijima koje nude danasnji kompajleri i opravdanosti koriscenja asm-a... I sam sam proveo izvesno vreme proucavajuci kod koji generisu neki od c kompajlera. Iako sam bio zadrti asm programer moram da priznam da danas ipak prihvatam cenu nesto sporijeg izvrsavanja na racun brze izrade, lakseg odrzavanja i portabilnosti. poz, Blagoje.
asembler.116 obren,
> Ne secam se, ali nije ni bitno. Kad bi ih bilo sigurno ne bih > nekoliko puta gurao i skupljao podatke sa steka kao sto rade > kompajleri. Ovo je samo jedan najocigledniji primer kako > kompajler ipak losije radi od coveka. Takozvani "stack frame" je opšteprihvaćen način prenosa podataka i neophodan je ako se želi povezivanje .OBJ datoteka pisanih u različitim jezicima. Druga prednost je za "reuse" podprograma: ti možeš napisati u C-u neku funkciju, prevesti je i povezati u LIB koji ćeš kasnije pozivati iz svojih programa i to će ˙sigurno˙ raditi. Ako ručno optimizuješ prenos parametara u ASM-u to radiš zavisno od situacije za koju ti treba. Verovatno ćeš postići spektakularne rezultate u konkretnom slučaju, ali je "reupotrebljivost" ;) te procedure vrlo mala. Pitanje je da li ćeš u nekom novom programu koji budeš pisao imati baš iste registe slobodne za prenos parametara i kakve ćeš kompromise morati da praviš da bi koristio "staru" funkciju. Kad smo već kod ovoga, kod C-a postoji i "fastcall" način prosleđivanja parametara, koji ne koristi STACK FRAME već argumente smešta u slobodne registre. Problem kod PC-a je što "slobodnih" registara nikad nema na pretek (kod Borlanda su to, čini mi se, AX, BX i DX).
asembler.117 janko,
> Hajde gospodo asemblerski programeri, pogodite i kako se > radi mnozenje sa 10 nekog broja u eax na BC 4.5, ali > da ne gledate u resenje (citaj kompajlirate njime). > > Resenje sutra. add eax,eax lea eax,dword ptr [eax+4*eax]
asembler.118 janko,
> Takozvani "stack frame" je opšteprihvaćen način prenosa podataka i > neophodan je ako se želi povezivanje .OBJ datoteka pisanih u > različitim jezicima. Druga prednost je za "reuse" podprograma: ti > možeš napisati u C-u neku funkciju, prevesti je i povezati u LIB > koji ćeš kasnije pozivati iz svojih programa i to će ˙sigurno˙ > raditi. Zapravo, ne! Stek frejm je mehanizam koji obezbeđuje REKURZIJU. Kada se funkcija prevede tako da održava stek frejm, garantovano će biti REENTRANT. Istorijski, stariji kompajleri nisu imali stek frejm -- FORTRAN npr. Zato FORTRAN procedure nisu reentrant. Za povezivanja OBJ nastalih različitim kompajlerima stek frejm kao takav je nebitan, linker to uopšte ne proverava, a još su prvi C kompajleri mogli da pozivaju fortranske procedure.
asembler.119 embe,
>> Mislim da nisi razumeo o cemu janko i ja pricamo. Nije o duzini >> koda nego o optimizaciji. Ma znam ja o cemu pricate. Ako je putanja izvrsavanja programa ista najnormalnije je da se brze izvodi program sa manje linija. O tome sam JA pricao.
asembler.120 biber,
>> Ajde da ti dam program koji si pisao za 8086 i rekao ti "hocu da >> koristi 386 instrukcije". Koliko ces ga menjati? Za moj C++ sors, >> samo prevedem drugim kompajlerom. Slazem se naravno da su visi programski jezici mnogo fleksbilniji. Svakako nije bez razloga sto se vecina programera okrece C-u.
asembler.121 janko,
> add eax,eax > lea eax,dword ptr [eax+4*eax] Ovo sam namerno ostavio kao primer jer ilustruje netačnost tvrdnje da je "programiranje za 386 i jače isto što i za 86 samo se dodaje e". Ovde su demonstrirane značajno veće mogućnosti adresnih modova u odnosu na starinski kod.
asembler.122 obren,
> Zapravo, ne! > Stek frejm je mehanizam koji obezbeđuje REKURZIJU. Kada se funkcija > prevede tako da održava stek frejm, garantovano će biti REENTRANT. Ma ok... nije u tome bila poenta. U principu je bitno samo kojim redosledom gurneš parametre pre poziva, a funkcija može da ih kupi kako zna i ume, ne mora biti klasičan stack frame. Međutim, ako pogledaš uputstvo za Turbo Assembler (povezivanju sa drugim jezicima) videćeš da je prvo objašnjen stack frame kao standardan mehanizam za prenos parametara među različitim jezicima. Naravno da linker ne proverava prilikom povezivanja, jer je to u principu deo programa u čiji sadržaj on ne ulazi... :) Replicirao sam o razlozima zašto C onako "glupo" prenosi parametre u odnosu na način kako bi to neko uradio u asmebleru...
asembler.123 janko,
> Replicirao sam o razlozima zašto C onako "glupo" prenosi parametre > u odnosu na način kako bi to neko uradio u asmebleru... I odgovor je zato da bi podržao rekurzivnost i reentrablinost funkcija. To je jedini razlog za postojanje stek frejma. Ako se to ne želi, stvarno postoje drugačiji mehanizmi prenosa parametara. Dokaz -- Fortran.
asembler.124 janko,
> Međutim, ako > pogledaš uputstvo za Turbo Assembler (povezivanju sa drugim > jezicima) > videćeš da je prvo objašnjen stack frame kao standardan mehanizam za > prenos parametara među različitim jezicima. Ne, uputstvo upravo objašnjava kako KONKRETNI kompajleri organizuju poziv funckija, i to zato da bi ti mogao da napišeš funkciju i poziv imitirajući kompajlerov stil. Da to nije nikakav standard trebalo bi da ti je očigledno: već Turbo Paskali i turbo C, oba od istog proizvođača, neće po defaultu generisati pozive funkcija i same funkcije na isti način. To čak ima uzroke i u definiciji ponašanja jezika: u SVAKOM C-u funckija nije nadležna za uklanjanje dostavljenih parametara, a u svakom Paskalu jeste. To je suštinska razlika, a proističe iz činjenice da se Paskal i C sorsovi prevode pod različitim pretpostavkama. (Ne čačkaj me na ovu temu, to je oblast kojom se bavim profesionalno).
asembler.125 obren,
Da ne repliciram odvojeno na tvoje poruke, sastavio sam citate iz obe: > I odgovor je zato da bi podržao rekurzivnost i reentrablinost > funkcija. To je jedini razlog za postojanje stek frejma. Ako se to ne > želi, stvarno postoje drugačiji mehanizmi prenosa parametara. > Dokaz -- Fortran. Da podržava gnežđenje, apsolutno se slažem (nisam nikad ni tvrdio suprotno), da postoje drugačiji načini prenosa parametara takođe, ali pitanje je da li ih iko koristi? ;) Ništa nije Bogom dano, ali neke stvari su opšte prihvaćene iako nisu propisane standardom... Ok, ajde ako imaš pri ruci, napiši kako prenosi parametre taj Fortran koji ne koristi stek frejm? > Da to nije nikakav standard trebalo bi da ti je očigledno: već Turbo > Paskali i turbo C, oba od istog proizvođača, neće po defaultu > generisati pozive funkcija i same funkcije na isti način. Što se tiče tvrdnje da stack frame nije nikakav standard, mislim da grešiš. Počevši od i80186 postoje i mašinske instrukcije koje ga formiraju (ENTER/LEAVE). Ne bi ih trpali u mikrokod da nisu videli da svi to rade na isti način. Svi kompajleri koji su mi došli pod ruku (tu spada i nekoliko Fortrana) standardno koriste za prenos parametara stek, a na ulazu u funkciju formiraju frejm na isti način: PUSH BP MOV BP, SP SUB SP, nnn ; količina prostora za lokalne promenljive ; neki Fortrani (!) mogu i da sračunaju nnn, ; slično onom što se pominje u novom standardu C-a ... (dohvatanje parametara relativno od BP-a. ofseti su različiti) (u zavisnosti od redosleda stavljanja parametara na stek) ... RET [nnn] ; [nnn] u slučaju Paskala > To čak ima uzroke i u definiciji ponašanja jezika: u SVAKOM C-u > funkcija nije nadležna za uklanjanje dostavljenih parametara, a u > svakom Paskalu jeste. To je suštinska razlika, a proističe iz > činjenice da se Paskal i C sorsovi prevode pod različitim > pretpostavkama. Veruj mi - zaista znam o čemu govoriš, ali kao što rekoh jedina razlika je u displejsmentu u odnosu na BP i u tome ko skida parametre. A sve zajdeno postoje dve varijante. Ja bar ne videh druge, a i te dve varijante su STANDARDNE i nazivaju se Pascal i C calling convention. > (Ne čačkaj me na ovu temu, to je oblast kojom se bavim profesionalno). Pa super, to je razlog više da te čačkam! :) Uvek sam raspoložen da nešto naučim od iskusnijeg kolege. Nadam se samo da ne gušimo ostale?
asembler.126 janko,
> Da podržava gnežđenje, apsolutno se slažem (nisam nikad ni tvrdio > suprotno), da postoje drugačiji načini prenosa parametara takođe, > ali pitanje je da li ih iko koristi? ;) Ništa nije Bogom dano, ali > neke stvari su opšte prihvaćene iako nisu propisane standardom... Ali to sve nema veze sa linkovanjem a pogotovu ne sa povezivanjem koda iz više jezika! > Ok, ajde ako imaš pri ruci, napiši kako prenosi parametre taj > Fortran koji ne koristi stek frejm? Standardni Fortrani (dakle oni kod kojih je rekurzija nemoguća!) su jednostavno statički alocirali promenljive za procedure. U doba sporijih mašina postojale su i varijante drugih jezika (Paskala, čak! čini mi se da je i Turbo Paskal to radio) koji su po defaultu tako prenosili parametre (kroz "lokalne" statičke promenljive) a tek po uključenju posebnog sviča ili ključne reči u definiciji podržavali rekurziju. > Što se tiče tvrdnje da stack frame nije nikakav standard, mislim da > grešiš. Počevši od i80186 postoje i mašinske instrukcije koje ga > formiraju (ENTER/LEAVE). Ne bi ih trpali u mikrokod da nisu videli > da svi to rade na isti način. Svi kompajleri koji su mi došli pod > ruku (tu spada i nekoliko Fortrana) standardno koriste za prenos > parametara stek, a na ulazu u funkciju formiraju frejm na isti > način: Vidi, odavno se ispostavilo da je to toliko korisno da je sasvim normalno da se koristi. Međutim da se koristi UVEK ISTO to nikad nije bilo. To što dva jezika koriste stek frejm ne znači da će i raditi zajedno. ENTER i LEAVE su poslednji trzaji CISC filozofije: pravi nove naredbe umesto da si potrošio to malo vremena i napravio ceo procesor malo brže ;) Te dve citirane "iste instrukcije" su iste prosto jer je to najbrži skup istrukcija za taj posao. :) Stek frejmovi i pored toga ne znači da su isti. Već i sama promena nadležnosti njegovog uništavanja utiče na to da nisu isti i da se ne mogu povezivati. > > To čak ima uzroke i u definiciji ponašanja jezika: u SVAKOM C-u > > funkcija nije nadležna za uklanjanje dostavljenih parametara, a u > > svakom Paskalu jeste. To je suštinska razlika, a proističe iz > > činjenice da se Paskal i C sorsovi prevode pod različitim > > pretpostavkama. > > Veruj mi - zaista znam o čemu govoriš, ali kao što rekoh jedina > razlika je u displejsmentu u odnosu na BP i u tome ko skida > parametre. A sve zajdeno postoje dve varijante. Ja bar ne videh > druge, a i te dve varijante su STANDARDNE i nazivaju se Pascal i C > calling convention. Naprotiv. Evo ti malo kontraprimera: 1. prevedi f-ju C-om, u small modelu 2. prevedi drugu f-ju C-om, u large modelu, koja poziva prvu 3. linkovanje prolazi bez greške. Da li rade? 4. Napravi varijacije u K&R stilu C-a (nemoj da dozvoliš da ti definiciju jedne f-je vidi druga). Da li rade. Odgovor je ne, jer svaki model generiše različite stek frejmove po definiciji (različite veličine elemenata stek frejma). Linker ti se po pravilu ne buni. Ono zbog čega ti frejmovi liče je samo zato što su SVI proizvošači C kompajlera sebe usklađivali sa MS. Ništa više. Ono što ti zoveš standardnom _pascal konvencijom je samo način na koji je MS koristio prenos parametara od početka Windowsa (jeste, sva ekranska okruženja su izvorno bila zamišljena za Paskal a ne za C, Mekintoš je dobrim delom i razvijan uz pomoć ObjektPaskala). I da ne davim dalje... Za više ćeš morati negde da me nađeš i podmitiš pivom da pričam šire :)
asembler.127 pedjak,
> pretpostavkama. (Ne čačkaj me na ovu temu, to je oblast kojom se > bavim profesionalno). Slobodno se raspiši, i mene zanima.
asembler.128 dpredovic,
> Da podržava gnežđenje, apsolutno se slažem (nisam nikad ni tvrdio > suprotno), da postoje drugačiji načini prenosa parametara takođe, ali > pitanje je da li ih iko koristi? ;) Ništa nije Bogom dano, ali neke Pazi, stvar je kompajlera kako će se prenos interno realizovati. Borlandovi kompajleri (kao) imaju neku fastcall konvenciju koja ponekad poneki parametar ne gura kroz stack. MSC je već pametniji pa kod njega (manje-više) svaka funkcija sa 1-2 parametra ode kroz registre. Kod Watcoma je to default tj. fastcall ne samo da važi za tvoje nego i za sve standardne funkcije.
asembler.129 nenad,
> Opet da ti ponovim, sigurno je da SVE što ti umeš da izvedeš ume i > kompajler. Eh, da je tako ne bi postojali kompajleri koji bolje i lošije optimizuju... Sve to što kompajler ume da izvede je smislio čovek, nije nemoguća situacija da neko ume ponešto bolje da izvede od Borlandovih i Microsoft-ovih programera - čak naprotiv. ;) Jasno je naravno da je za 99% primena bolje posao optimizacije poveriti ljudima kojima je to posao i koji to rade ceo život.
asembler.130 biber,
Zna li ko sta se desava kad, dok tece DMA prenos procesor u isto vreme pokusa da pristupi memoriji. Ko ceka DMA ili procesor? Da li se generise neki interapt pri tome?
asembler.131 obren,
> Zna li ko sta se desava kad, dok tece DMA prenos procesor u isto > vreme pokusa da pristupi memoriji. Ko ceka DMA ili procesor? Da li > se generise neki interapt pri tome? Zavisi da li je "burst" režim prenosa ili ne. Ako jeste, procesor mora da sačeka da se ceo blok prenese, a ako nije DMA za svaki bajt traži dozvolu za izlazak ba magistralu i može da izađe na istu tek kada mu procesor dozvoli. Interapt se generiše po završetku transfera. Ako ti treba dokumentacije od DMA imam nekih .DOC i .TXT fajlova, uglavnom vezanih za korišćenje DMA za "sviranje" na SB-u.
asembler.132 pdeze,
Pozdrav! Nov sam u Assembleru, pa jos nisam skontao neke stvari: procitao sam negde da na memorijski ofset, npr 1234, u data segment mogu upisati recimo BX registar na sledeci nacin: mov [1234], BX ali mi TASM uporno javlja gresku: Illegal immediate, mada ovo radi OK u Debuggeru. Gde je greska, kako ispraviti, ili ako ovako ne moze, koji je drugi nacin? Thanks unapred.
asembler.133 zormi,
* Zna li ko sta se desava kad, dok tece DMA prenos procesor u isto * vreme pokusa da pristupi memoriji. Ko ceka DMA ili procesor? Da li se * generise neki interapt pri tome? Ima više modova DMA prenosa, zavisi koji se koristi...
asembler.134 deimos,
>> mov [1234], BX Dakle, ono sto upisujes je u bx. Za primer cemo da ga stavimo u ax. mov dx, <segment> mov es, dx mov di,1234 stosw // na ES:DI upisujes word iz ax Prvo push-ujes , a na kraju pop-ujes regisatre. Ovo ti sigurno radi. Sto bi se reklo - po knjizi je. Moze i na milion boljih (kracih) nacina, ali posto ucis, eto ti jedna mini-lekcija. .dEiMoS.
asembler.135 obren,
> Nov sam u Assembleru, pa jos nisam skontao neke stvari: > procitao sam negde da na memorijski ofset, npr 1234, u data > segment mogu upisati recimo BX registar na sledeci nacin: > mov [1234], BX > ali mi TASM uporno javlja gresku: Illegal immediate, Stavi: MOV DS:[1234], BX (u IDEAL modu će proći i bez DS...) Pošto si, kako kažeš, nov u ASM-u, ostavi za početak tešku artiljeriju i uzmi "A86" (Shareware asembler, ima ga ovde u nekom direktorijumu). Munjevit je, automatski pravi .COM fajlove, što znači da ne moraš uopšte da pozivaš linker, a ne moraš ni da deklarišeš segmente i ostale šablonske delove programa. Ima detaljno uputstvo i vrlo je zgodan za eksperimentisanje...
asembler.136 cozymc,
Nista posebno, tek toliko da se i ja pridruzim, najboljem delu sezamNET, tj ASM, CODINGS, and ZERO LEVEL STUFF. Full frame or lame! scroll.exe
asembler.137 biber,
>> Nov sam u Assembleru, pa jos nisam skontao neke stvari: >> procitao sam negde da na memorijski ofset, npr 1234, u data >> segment mogu upisati recimo BX registar na sledeci nacin: >> mov [1234], BX Za pocetak ( a i na dalje, sto da ne) probaj da radis sa A86 asemblerom. Kod njega bi ovo proslo bez problema. Ukoliko na pocetku nemas deklaraciju segmenata, A86 podrazumeva da je u pitanju ".com" program i tako ga prevodi. Brz je, kratak, lepo te obavestava o greskama a u paketu sa njim ide sasvim upotrebljiv debager (real mode doduse). Meni se mnogo vise svidja nego masm ili tasm.
asembler.138 biber,
>> uzmi "A86" (Shareware asembler, ima ga ovde u nekom direktorijumu). Ima li ko A386 i D386 ?
asembler.139 deimos,
>> Ima li ko A386 i D386 ? Treba i meni. So, ako ga nadjes baci ga ovdi, plizzz. .dEiMoS.
asembler.140 biber,
U biosu postoje funkcije za direktno citanje sektora HD-a. Da li i windows ima slicne fn.? U nekom spisku kernel funkcija sam pronasao sam samo citanje fajla. Da li windows ne podrzava pristup sektorima? Je li moguce tako nesto isprogramirati?
asembler.141 janko,
> U biosu postoje funkcije za direktno citanje sektora HD-a. > Da li i windows ima slicne fn.? > > U nekom spisku kernel funkcija sam pronasao sam samo citanje > fajla. Da li windows ne podrzava pristup sektorima? Je li moguce > tako nesto isprogramirati? Windows 3.1 dozvoljava zvanje čistih DOS funkcija, pa je verovatno moguće i tako nešto, uz malo žongliranja. Međutim ukoliko je 32disk access sve to je vrlo opasno (pa možda i tada zabranjeno). Tada se mora komunicirati na nivou viruelnog drajvera. Win32 interfejs, međutim, koliko znam, ne dozvoljava ovako nešto na API nivou. Međutim, verovatno bi se to takođe moglo postiči pisanjem koda kojume da komunicira sa virtuelnim drajverom (kada je reč o W95, NT ni tada?) Dokaz za ovakvu teoriju je što za Win95 postoji disk defragmenter! Za NT, opet, koliko ja znam, ne.
asembler.142 biber,
>> moguce i tako nesto, uz malo zongliranja. Medutim ukoliko je 32disk >> access sve to je vrlo opasno (pa mozda i tada zabranjeno). Tada se Malo mi je nejasno zasto se ovo zove 32bit access? Ako ne gresim, kad je 32bit disk acces omogucen, windows za komunikaciju koristi sopstvene funkcije, a ne svicuje se stalno u real mod da bi pozivao bios rutine. E sad, li su te windows funkcije pisane u 32bitnom kodu pa se zato zove 32 bitni acess?
asembler.143 deimos,
RE: 32BDA Stvar se svodi na to da se koristi INSD umesto INSW i slicnih stvari. Kod nekih novijih bios-a ovo ne donosi poboljsanja (ili bar ne znacajna), jer isti rade bas na takav nacin. .dEiMoS.
asembler.144 janko,
> Malo mi je nejasno zasto se ovo zove 32bit access? > > Ako ne gresim, kad je 32bit disk acces omogucen, windows za > komunikaciju koristi sopstvene funkcije, a ne svicuje se stalno > u real mod da bi pozivao bios rutine. Tačno! > E sad, li su te windows > funkcije pisane u 32bitnom kodu pa se zato zove 32 bitni acess? Vidi, nije bitno ono što kaže deimos da li će ćapiti WORD ili DWORD. Poenta je samo u tome što pri obraćanju diska procesor ne mora da izlazi iz svog 32-bitnog režima što je najviše time-consuming. Glabni trik je u tome što te njegove sopstvene funkcije mogu biti napisane kao REENTRANT, dok ove BIOS-ove NISU SIGURNO. U situaciji kada se radi sa više taskova odjednom, pristupi disku treba da budu što je moguće više preklopljeni itd.
asembler.145 nenad,
> Dokaz za ovakvu teoriju je što za Win95 postoji disk defragmenter! > Za NT, opet, koliko ja znam, ne. Postoji defragmenter za NT-a, zove se DisKeeper. Pri instalaciji između ostalog zameni i fajlove NFTS.SYS i NTOSKRNL.EXE svojim verzijama. Na taj način radi na niskom novou. Postoji i drugi pristup, koji je primenjen kod nekoliko defragmentera za OS/2-ov HPFS. Pošto HPFS sam obezbeđuje (ukoliko je to moguće) da se fajl snimi na disk kontinualno oni praktično kopiraju fajlove tamo-amo po disku po nekom redu koji misle da će biti najzgodniji samom HPFS-u da sredi stvar. Verujem da postoje takvi utility programi i za NTFS.
asembler.146 biber,
>> Dokaz za ovakvu teoriju je sto za Win95 postoji disk defragmenter! Postoji li disk defragmenter za win 3.xx?
asembler.147 zeljkoj,
> Postoji li disk defragmenter za win 3.xx? Da. Recimo onaj iz NU.
asembler.148 bokir,
Da li neko moze da ostavi primer za INT 9 hendler? Pokusavao sam da napravim pop-up TSR, ali mi INT 9 nikako ne radi. Cak ni ako stavim samo praznu funkciju (samo IRET), tastatura se ponasa cudno: svaki pritisak na taster bar tri puta ponavlja znak. Pomozite, hitno mi je... ... Only dead Windows is good Windows
asembler.149 biber,
>>Da li neko moze da ostavi primer za INT 9 hendler? >>Pokusavao sam da napravim pop-up TSR, ali mi INT 9 nikako ne radi. ; Demonstracija INT 09 07.07.96 ; Pritiskom na F12 na ekran ce biti ispisano slovo "B" ; Pisano za rad sa A86 asemblerom jmp beg make_code equ 058 ; make code tastera F12 ; MAKE CODE je kod koji se dobija prilikom ; pritiskanja, za razliku od BREAK CODE ; koji signalizira otpustanje tastera old_int09: dw 0,0 ; ovde se cuva sadrzaj starog int 09 new_int09: push ax push bx push ds in al,060 cmp al,make_code je jeste_trazeni_kod nazad: pop ds pop bx pop ax cs: jmp d[old_int09] jeste_trazeni_kod: in al,061 mov ah,al or al,080 out 061,al mov al,ah out 061,al mov al,020 out 020,al mov ax,0b800 ; mov ds,ax ; stavi na ekran mov bx,09e ; slovo "B" mov [bx],08242 ; (u gornji desni ugao) pop ds pop bx pop ax iret beg: mov ax,03500+09 ; Get Interrupt Vector int 021 mov [old_int09],bx mov [old_int09+2],es mov ax,02500+09 ; Set Interrupt Vector mov dx,new_int09 int 021 mov dx,beg ; Terminate & Stay Resident int 027
asembler.150 bokir,
Hvala na pomoci, biber! Ovo sjajno radi! Imam jos par pitanja: 1. Za sta je port 20h? 2. Kako da se program instalira u HMA ili UMB?
asembler.151 dzakic,
> 1. Za sta je port 20h? Port 20h je port interapt kontrolera. Po sećanju, preko njega se programira frekvencija interapta 8 (ako nije baš 20h, tu je blizu :), a ono za šta se najčešće koristi jeste da se upisivanjem vrednosti 20h na port 20h vrši signalizacija interapt kontroleru da je završena obrada interapta i da je PIC (programable interrupt controler) slobodan da generiše sledeći interapt po prioritetu. Na primeru, pišeš interapt rutinu za obradu int 8. Za vreme izvršavanja tvog handlera, pritisnut je taster na tastaturi. Za obradu interapta tastature je zadužen int 9. On je niži po prioritetu od osmice i pritisak na taster neće prekinuti izvršavanja tvog int handlera. Ako tvoj handler ne bi izvršio jedno out 20h,20h, int tastature nikada ne bi bio izvršen. Zato se ovaj out stavlja na kraj tvoje procedure i tog trenutka PIC generiše int 9. Treba takođe voditi računa da će, ukoliko se prvo poziva originalni int 8 (iz biosa), out 20h, 20h već biti izvršen. Zato, ako ima potrebe, neke stvari treba uraditi pre a neke posle poziva originalne int rutine. Detaljnije o ovome možeš da nađeš u HELPPC-u (ima ga u nekom info direktorijumu), pored drugih jako korisnih informacija o hardveru. > 2. Kako da se program instalira u HMA ili UMB? Ovo je malo teže odgovoriti ovako online, ukratko: postoji int kojim se proverava prisustvo XMS managera (2Fh ako se ne varam). Ako ga nađe, on vrati pointer na entry u XMS manager koji nudi funkcije tipa alociranje i dealociranje UMB-a i HMA. Alociraš blok određene veličine u gornjoj memoriji, dobiješ pointer na dodeljen blok, iskopiraš svoj kod na to mesto i postaviš int vektore da ukazuju tamo. Da ti, opet, preporučim da skineš ovog puta techelp koji je za razliku od helppc-a bolji i detaljniji za ove softverske stvarčice.
asembler.152 biber,
Je li neko radio sa windows disasemblerom? (ima ga u sezamovim direktorijumima)
asembler.153 zeljkoj,
> Je li neko radio sa windows disasemblerom? (ima ga u > sezamovim direktorijumima) Kad već pomenu Windows ovde... Kako se uopšte pišu Windows programi u asembleru? Jel' mnogo komplikovanije nego pisanje DOS programa? Znam da sada, u vreme VB-a, Delphija, itd. nema smisla raditi u asembleru, pitam čisto onako, 'teorijski'. :)
asembler.154 janko,
> > Je li neko radio sa windows disasemblerom? (ima ga u > > sezamovim direktorijumima) > > Kad već pomenu Windows ovde... Kako se uopšte pišu Windows programi > u asembleru? Jel' mnogo komplikovanije nego pisanje DOS programa? > Znam da sada, u vreme VB-a, Delphija, itd. nema smisla raditi u > asembleru, pitam čisto onako, 'teorijski'. :) Tja... Windows 16-bit programi su malo dosadniji, jer moraš da paziš na sve one glupe segmente. 32-bitni su malo pristojniji. Ko zna da piše windows programe na C-u, i zna dobro asembler, automatski zna da piše i Windows programe na asembleru. I teško je skoro jednako, što se Windowsa tiče, jer je API isti i za C i za asembler.
asembler.155 janko,
> Ko zna da piše windows programe na C-u, i zna dobro asembler, > automatski zna da piše i Windows programe na asembleru. I teško je > skoro jednako, što se Windowsa tiče, jer je API isti i za C i za > asembler. zaboravih da napišem moju omiljenu važnu tvrdnju: pomoću C-a je najlakše pisati asemblerske programe. ;) To mogu i dokazati -- umem da pomoću C-a napišem .COM program od par desetina bajtova KOJI RADI NEŠTO KORISNO , ili rezidentni program koji radi složenu obradu a velik je par stotina bajtova itd...
asembler.156 kovacevicd,
Da li neko zna kojim OUT instrukcijama mogu poslati vrednosti SB-Pro da na izlazu DAC dobijem napon na određeni kanal levi ili desni kao i kojim INP instrukcijama da dobijem vrednost napona sa ADC konvertora. Inače hteo bih primere bez korišćenja DMA a hteo bih da iskoristim muzičku karticu za merenja u elektronici jer ima 2 x 16 bit ADC i DAC.
asembler.157 biber,
>> zaboravih da napisem moju omiljenu vaznu tvrdnju: pomocu C-a >> je najlakse pisati asemblerske programe. ;) To mogu >> i dokazati -- umem da pomocu C-a napisem .COM program od par desetina void pisi_B (void) { asm mov ax,0xe66 asm mov bx,7 asm int 16 } Jel' mislis na nesto ovako ;>
asembler.158 biber,
>> Da li neko zna kojim OUT instrukcijama mogu poslati vrednosti >> SB-Pro da na izlazu DAC dobijem napon na odredeni kanal levi ili Evo ti uz poruku fajl koji opisuje kako. >> a hteo bih da iskoristim muzicku karticu za merenja u elektronici >> jer ima 2 x 16 bit ADC i DAC. SB-pro ima 8-bitne pretvarace. sb_dsp.zip
asembler.159 janko,
> void pisi_B (void) > { > asm mov ax,0xe66 > asm mov bx,7 > asm int 16 > } > > Jel' mislis na nesto ovako ;> Naravno ne, gornji program kad linkuješ i dalje je velik. Trik je potpuno suprotan -- umesto klasičnog run-time smestiš svoj (to parčence mora na mašincu). Onda SVE ostalo pišeš na C-u (suprotno od ovog gore) s tim što ne smeš da koristiš bibliotečke funckije koje zavise od rt.
asembler.160 biber,
>> Naravno ne, gornji program kad linkujes i dalje je velik. Trik >> je potpuno suprotan -- umesto klasicnog run-time smestis svoj >> (to parcence mora na masincu). Onda SVE ostalo pises na C-u Naravno da ne :) U pitanju je bila sala. Pa mozes li da nam demonstriras to ovde? Da okacis taj rt? Svakako to ima veza sa temom. A i C dodatak koji se nadovezuje posle na rt nece skoditi. BTW sta bese sa tvojim Concurrent C++ (moze i na mail ako je prica suvise duga za "asembler")
asembler.161 kovacevicd,
> SB-pro ima 8-bitne pretvarace. Da li si siguran, ja mislim da on ima 16 bitne pretvarače i to stereo. Inače u fajlu se navode funkcije samo za SB običan a on je 8-bitni. Inače probao sam date instrukcije i radilo je. Da li imaš neke informacije o programiranju WSS (Windows system sound) , SB-PRO-a i SB-16.
asembler.162 janko,
> Pa mozes li da nam demonstriras to ovde? Da, rt jeste asembeler. Ali ostatak je C. Čitaš li C konf? Ja bih o tome tamo... Kad malo razmislim, i to bi vredelo za jedan članak u Računarima, kad već pišem. A znam da ću morati dosta da pišem i ako počnemo u konf. biče dosta pitanja... > Da okacis taj rt? Svakako to ima veza sa temom. A i > C dodatak koji se nadovezuje posle na rt nece skoditi. Može, sve. Evo ovako: ovde ide samo sors RT BEZ KOMENTARA. Tebi na eventualna pitanja odgovaram telefonom, a cela priča će biti u binarnom obliku samo ako pišem članak za Računare... > BTW sta bese sa tvojim Concurrent C++ (moze i na mail > ako je prica suvise duga za "asembler") E to je priča za C++ konf. :) Odgovor na ovo pitanje, onoliko koliko znam, tamo.
asembler.163 zormi,
*> SB-pro ima 8-bitne pretvarace. * * Da li si siguran, ja mislim da on ima 16 bitne pretvarače i to stereo. SB Pro originalni model može da semluje na 22 kHz stereo ili 44 kHz mono ali 8bitno u oba slučaja. SB Pro kompatibilci svi odreda mogu da rade na 44/48 kHz stereo 16bitno ali uz sopstvene driver-e.
asembler.164 biber,
>> Da li imas neke informacije o programiranju WSS (Windows system >> sound) , SB-PRO-a i SB-16. Za ovo prvo nemam, za drugo sam ti vec ostavio u konf. Trece imam ponesto al' ti to nece pomoci ako radis sa nekim klonom. Oni (valjda) rade preko svojih drajvera. Inace sve ovo je za DOS. Za windows nemam nista. Ima li ko? Mada, za tvoje potrebe (merenje elektricnih velicina) je sasvim dovoljno 8-bitno semplovanje, koje je jako lepo objasnjeno u fajlu koji sam vec kacio.( a bilo ih je jos gomila kacenih na sezamu)
asembler.165 kovacevicd,
Da li bi mogao da mi objasniš kako poslati na određen kanal levi ili desni direktno vrednost kao i za semplovanje levog ili desnog kanala mislim na SB-PRO. Inače imam neke adrese za SB_PRO LEFT_FM_STATUS 0x00 LEFT_FM_ADDRESS 0x00 LEFT_FM_DATA 0x01 RIGHT_FM_STATUS 0x02 RIGHT_FM_ADDRESS 0x02 RIGHT_FM_DATA 0x03 MIXER_ADDRESS 0x04 MIXER_DATA 0x05 da li bi mogao da mi objasniš ovo oko mixera za ove dve adrese? I ako bih sklonio kondezatore na izlazu i ulazu muzičke kartice i ugradio otpornike za direktnu spregu da li će biti nekih problema u radu i da li će to raditi. Inače zbog kondezatora kartica se može koristiti samo u neizmeničnim režimima rada ništa od jednosmernog režima postavim sada napon on se pojavi i onda smanji na 0 zbog kondezatora i potrošača.
asembler.167 kovacevicd,
Bio sam pitao u vezi programiranja mixer-a na SB-PRO-u pa sam našao uputstvo u arhivi PCGPE=PC game programmer's encyclopedia 'PCGPE.RAR' (613632 bytes) u konferenciji PC.PROG.5 poruka 31.470 datoteka SBPRO.TXT
asembler.168 legend,
Zamolio bih nekog da mi popiše dobre knjige za učenje asm, jer hoću da naučim, a nemam odakle :(. Ako neko zna gde ima da se nadje neki dobar faq o asm, nek mi kaže, bio bih mu veoma zahvalan. 10x Legend of LoC!
asembler.169 mdimitrijevic,
> Zamolio bih nekog da mi popise dobre knjige za ucenje asm, > jer hocu da naucim, a nemam odakle :(. Ako neko zna gde > ima da se nadje neki dobar faq o asm, nek mi kaze, bio bih > mu veoma zahvalan. Sto se knjiga tice stvarno ne znam ni jednu koja bi ti pomogla. Bar ja nisam naucio asembler iz knjiga. Mogu da pogledam kod sebe nekoliko FAQ-uova, pa cu poslati ako nadjem nesto pogodno za ucenje.
asembler.170 pdeze,
Znam da poruka bas i ne ide u ovu temu, ali tema ms.dos je malo odumrla :) Znaci: zna li ko koji se sve registri salju na stack kada se pojavi interrupt? A potreban mi je i redosled registara na stacku u tom slucaju. Hvala unapred!
asembler.171 obren,
> Znam da poruka bas i ne ide u ovu temu, ali tema ms.dos je malo > odumrla :) Naprotiv, poruka pre spada u ovu temu, nego u ms.dos :) > Znaci: zna li ko koji se sve registri salju na stack kada se pojavi > interrupt? A potreban mi je i redosled registara na stacku u tom > slucaju. Stek raste ka opadajućim adresama, a SP pokazuje na zadnju zauzetu lokaciju. Guraju se prvo flegovi pa kompletna povratna adresa CS:IP. Pošto je kod Intela uvek niži bajt svega na nižoj adresi, lako ćeš zapamtiti da se prvo gura CS pa IP, kako bi IP bio na nižoj adresi (tako raste stek). Slikovito: │ │ ├───────┤ │ ... │ <-- SP+6 ├───────┤ │ Flags │ <-- SP+4 ├───────┤ │ CS │ <-- SP+2 ├───────┤ │ IP │ <-- SP (u trenutku ulaska u ISR) └───────┘ Vrh steka
asembler.172 biber,
>> Znaci: zna li ko koji se sve registri salju na stack kada se pojavi >> interrupt? A potreban mi je i redosled registara na stacku u tom slucaju. Samo fleg registar. I povratna adresa naravno (CS:IP) To znaci da bi iz interapta mogao da se vratis i sa: popf retf
asembler.173 obren,
> To znaci da bi iz interapta mogao da se vratis i sa: > > popf > retf Ne bi mogao. Ovako sa POPF ne skidaš flegove nego IP, a onda RETF pogrešno pokupi Flags:CS kao povratnu adresu i program ode u hipresvemir ;)
asembler.174 biber,
>> > To znaci da bi iz interapta mogao da se vratis i sa: >> > >> > popf >> > retf >> >> Ne bi mogao. Ovako sa POPF ne skidas flegove nego IP, a onda RETF pogresno Tako je. Nisam razmisljao kad sam pisao. Naime, cesto sam koristo pushf call far ....(stvarna adresa interapta) pa napravio analogiju sa ovim (pogresnu :)
asembler.175 pdeze,
>> Znam da poruka bas i ne ide u ovu temu, ali tema ms.dos je >> malo odumrla :) > > Naprotiv, poruka pre spada u ovu temu, nego u ms.dos :) Pa, da. Ovo je jedna od mojih vecih gluposti u poslednje vreme. :( Poruka bi trebala da ide u temu ibm.pc. Hvala na objasnjenju.
asembler.176 npmiki,
Prelistavajuci neki intro sa TD286 naisao sam na : MOV FS,CX ???? sta je ovo FS , nisam mogao da nadjem nigde u literaturi ?
asembler.177 mdimitrijevic,
> MOV FS,CX ???? > sta je ovo FS , nisam mogao da nadjem nigde u literaturi ? FS je segmentni registar 386 i novijih racunara. Vecina novijih INTRO-a i DEMO-a je radjena za 386 i bolje racunare. Na taj nacin se dobija mogucnost da se koriste ekstra registri kojih ima vise kod 386 racunara. Kao i mnoge druge pogodne naredbe (32 bitni registri, MOVSD, itd).
asembler.178 npmiki,
Dali neko zna kako da uradim scrool u text modu ? Naravno , preko registara vga karte . Unapred zahvalan ps. scrool u grafici sam savladao , pa me zato ne interesuje .
asembler.179 mdimitrijevic,
Neko je trazio nesto o skrolovanju u text modu. Nisam stigao ranije da posaljem. Ovo je primer koji se nalazi u ASMSNIP arhivi. Mislim da je radjen za A86 asembler. Hteo sam da stavim komentare kod registara da bi znali kako se ovo radi, ali nemam vremena. U text modu se mogu dobiti split-screen efekti itd. Vecina stvari koje mozete da dobijete u grafickom nacinu moze i u text modu (osim grafike naravno :). panning.zip
asembler.180 mc.kuzma,
Da li neko ima asembler za ZX-a na PC-u? Hitno je...
asembler.182 tomil,
> Da li neko ima asembler za ZX-a na PC-u? >> Ako ipak nađeš Z80 asembler koji radi pod dosom, mail me :) Jel ovako nešto: This is the shareware distribution disk for TASM - a table driven assembler. The files on the disk include: TASM.EXE - TASM Assembler, executable TASM48.TAB - 8048 Instruction definition table TASM51.TAB - 8051 Instruction definition table TASM65.TAB - 6502 Instruction definition table TASM85.TAB - 8085 Instruction definition table TASM80.TAB - Z80 Instruction definition table TASM05.TAB - 6805 Instruction definition table TASM32.TAB - TMS320 Instruction definition table TASM68.TAB - 6800/6801 Instruction definition table TASM70.TAB - TMS7000 Instruction definition table TASMDOC.ZOO - TASM Documentation README - Brief Explanation of Disk contents COPYRIGH.T - Copyright notice ORDER.FRM - Order Form BOOZ.EXE - Archive extracter ili nešto od ovoga: Microtec ASM180 Release 3.0D - kros asembler za HD64180 ASMZ80.exe - Microtec Z80 assembler V4.4b XASMZ80.com - Avocet Z80 assembler V1.03M AVSIMZ80.exe - Avocet Z80 simulator/debuger V1.01 Uzgred replicirao sam na sledeću poruku: =============================== 5.181 PCPROG.6:asembler dzakic, 17.08.96. 14:17, 287 chr Odgovor na 5.180, mc.kuzma, 16.08.96. 18:06 --------------------------------------------------------- > Da li neko ima asembler za ZX-a na PC-u? > Hitno je... S obzirom da je hitno, a da asembler za ZX ne postoji (?) u PC varijanti, šaljem ti Devpac u verziji Vlade Kostića za Spektrum Simulator - nadam se da ga imaš. Ako ipak nađeš Z80 asembler koji radi pod dosom, mail me :) ----------------------------------------------- 5.181 --- Gde se izgubi? tabasm.zip
asembler.184 npmiki,
Ja sam trazio scroll u text modu . Hvala puno ! sajonara :)
asembler.185 ognjen,
Hocu da iz jednog programa (mali COM file), pozovem drugi (veci EXE) ali na samom kraju, tj. da se posle ne vracam u COM program. Kako to da izvedem? Int 021 f-ja 04c radi nesto slicno, ali meni ne treba povratak u COM program, samo treba da pozove EXE i da vise ne zauzima memoriju. Kako to da izvedem?
asembler.186 dzakic,
> Hocu da iz jednog programa (mali COM file), pozovem drugi > (veci EXE) ali na samom kraju, tj. da se posle ne vracam u COM > program. Kako to da izvedem? Int 021 f-ja 04c radi nesto slicno, > ali meni ne treba povratak u COM program, samo treba da pozove > EXE i da vise ne zauzima memoriju. Uh :). Sećam se da je bila jedna zanimljiva diskusija baš oko ovoga nekada davno, daleke '89 ili '90, u konferenciji pcsoft. Konferencija je još uvek tu, sačuvana je, pa pokušaj nekim find-om da pronađeš tu diskusiju. Ne sećam se, na žalost, šta je zaključeno na kraju, ali je bilo interesantnih predloga i rešenja, kao što je regularan izlazak iz programa i stavljanja imena sledećeg u keyboard buffer :).
asembler.187 zeljkoj,
> Uh :). Sećam se da je bila jedna zanimljiva diskusija baš oko > ovoga nekada davno, daleke '89 ili '90, u konferenciji pcsoft. Da, DejanR je isto to pitao 13.11.1989, :) poruka 8.6. Cela diskusija se nalazi i u Računarima 59, od marta 1990. - rubrika Priča se na Sezamu. :) BTW, u BASIC-u RUN "fajl.exe" radi upravo to.
asembler.188 tomislavr,
> Hocu da iz jednog programa (mali COM file), pozovem drugi > (veci EXE) ali na samom kraju, tj. da se posle ne vracam u COM > program. Kako to da izvedem? Int 021 f-ja 04c radi nesto slicno, > ali meni ne treba povratak u COM program, samo treba da pozove > EXE i da vise ne zauzima memoriju. Koliko znam nema regularnog načina da se ovo izvede pod DOS-om. Recimo Borland C ima P_OVERLAY konstantu kao način spawnovanja ali ona nema nikakvog efekta, odnosno ubačena je radi kompatibilnosti sa nekim drugim platformama. Dakle, ostaje ti hakeraj, mada pošto kažeš da .EXE program pozivaš iz malog .COM programa, pretpostavljam da i nije neki problem što će ti on ostati u memoriji dok se .EXE izvršava...
asembler.189 mdimitrijevic,
> interesantnih predloga i resenja, kao sto je regularan > izlazak iz programa i stavljanja imena sledeceg u keyboard > buffer :). Sta fali ovakvom resenju :) Ja sam ga koristio kada sam napisao program koji u odredjeno vreme startuje neki drugi program. Prosto samo bacim ime programa u keyboard buffer. Sto se tice poruke na koju si replicirao. Treba pronaci poruke uz koje su zakaceni fajlovi koji se zovu CHAIN*.*, nisam siguran za celo ime. Ako ih mozda nema na Sezamu mogu ja da potrazim kod mene.
asembler.190 pedjak,
> Uh :). Sećam se da je bila jedna zanimljiva diskusija baš oko > ovoga nekada davno, daleke '89 ili '90, u konferenciji pcsoft. Čini mi se da je na kraju Vlada Kostić pronašao u nekoj biblioteci za C funkciju koja upravo radi to. Na kraju su tu funkciju disemblirali i otkrili o kom pozivu se radi zapravo Treba proveriti u konferenciji.
asembler.191 biber,
>> platformama. Dakle, ostaje ti hakeraj, mada pošto kažeš da .EXE program >> pozivaš iz malog .COM programa, pretpostavljam da i nije neki problem >> što će ti on ostati u memoriji dok se .EXE izvršava... Svejedno je da li je COM mali ili veliki. COM program uvek zauzima 64Kb u memoriji.
asembler.192 obren,
> Svejedno je da li je COM mali ili veliki. COM program uvek > zauzima 64Kb u memoriji. Ali možeš da shrink-uješ memoriju koju program zauzima na neophodnu vrednost. Prost primer ti je da pozoveš COMMAND /C MI.COM gde je MI.COM onaj programčić za prikaz zauzeća memorije. Videćeš da se COMMAND sveo na 3-4 kilobajta pre nego što je pozvao MI, a isto može da uradi i tvoj program. Nego, konačno nađoh arivicu koja je svojevremeno bila okačena posle pomenute rasprave na ovu temu na Sezamu, negde '92. godine. Dakle rešenje postoji, ali nije nikakav poziv nedokumentovane funkcije. Pogledajte .ASM sors koji je priložen, jako interesantno... chain.zip
asembler.193 ognjen,
)-> Sto se tice poruke na koju si replicirao. Treba pronaci )-> poruke uz koje su zakaceni fajlovi koji se zovu CHAIN*.*, Ok, nasao sam. Koga zanima to su poruke 8.24 (elgantno) i 8.26 (hakersko resenje) u konferenciji PCSOFT.
asembler.194 bceklic,
> Nego, konacno nadoh arivicu koja je svojevremeno bila okacena > posle pomenute rasprave na ovu temu na Sezamu, negde '92. > godine. Dakle resenje postoji, ali nije nikakav poziv > nedokumentovane funkcije. Pogledajte .ASM sors koji je > prilozen, jako interesantno... Resenje je napravljeno specificno za TP. Samo resenje problema je u principu vezano upravo za jezik u kome se radi. Ako se radi u asm-u ono je najjednostavnije... Za vise jezike problem se komplikuje zbog potreba vracanja interapta koje preuzima odgovarajuca startup procedura. U sustini potrebno je: - vratiti sistem u prethodno stanje vracanjem preuzetih interapta - u potpunosti osloboditi zauzetu memoriju Najlakse se izvodi uz pomoc 21/4A pri cemu se prvo zatrazi ukupna raspoloziva memorija (trazi se nemoguce BX=FFFFH). Ovaj broj se moze izracunati i pretrazivanjem MCB-ova ciji je vlasnik program ali je prvo resenje lakse. Potom se raspoloziva memorija dodeli novom programu uz pomoc iste funkcije. - ucitati program i predati mu kontrolu U primeru se koristi 21/4B03 (load program). Za novi program se moze kreirati novi PSP ili iskoristiti PSP postojeceg i ucitati program preko postojeceg programa. Moguce je i iskoristiti i nedokumentavanu funkciju 4B01 (load but don't execute) (koju inace koriste debagari za ucitavanje programa). Moguce je i naravno napraviti sopstvenu rutinu za ucitavanje programa sto i nije resenje za pocetnike... Na kraju se covek upita cemu sve ovo. Zar nije elegantnije osloboditi nepotrebnu memoriju i izvrsiti program sa 4B00 a potom samo zavrsiti sa radom?
asembler.196 biber,
PROTDEMO is a demo program that is intended to show how to program the 80386 to go to protected mode, set up virtual mode interrupt handlers, do some console I/O using interrupts, and finally return to 80386 real mode. protdm.zip
asembler.197 biber,
P5 CODE MACRO FILE FOR USE WITH MICROSOFT MASM 5.1 OR LATER ASSEMBLER. These macros have been developed by Intel Corporation and have been verified on a working P5 system. You have Intel's permission to incorporate these macros into your product royalty free. p5masm.zip
asembler.198 bilder,
Kako da debagujem program koji koristi PMODE extender od Tran-a ? Probao sam TD i posle odredjenih instrukcija racunar se jednostavno resetuje !
asembler.199 mdimitrijevic,
> Kako da debagujem program koji koristi PMODE extender od > Tran-a ? Probao sam TD i posle odredjenih instrukcija > racunar se jednostavno resetuje ! Za sada nikako :( Posto PMODE (naravno) baci racunar u protected mode a TD nije protected mode debuger. Mozda je moguce sa Soft-Ice debuger-om ali ima prilicno los interfejs, pa je malo tezak za koriscenje. Uzgred, postoji TDX (Turbo Debuger za DPMI) ali on radi samo sa "svojim" formatom programa. Jedini debuger koji moze da debug-uje Protected Mode programe je WD (Watcom Debuger), ali on radi samo sa DOS4GW extender-om. Nije jedini ali ja samo za njega znam.
asembler.200 biber,
>> Kako da debagujem program koji koristi PMODE extender od Tran-a ? >> Probao sam TD i posle odredjenih instrukcija racunar se jednostavno >> resetuje ! Može li SoftIce? Bio je već kačen na Sezamu.
asembler.201 legend,
-=-> Može li SoftIce? Bio je već kačen na Sezamu. Koja poruka? Ako te ne mrzi, pogledaj ili nakači ponovo, leba ti... Legend of LoC!/eXplosives Alone till doom's day!
asembler.202 biber,
>>-=-> Može li SoftIce? Bio je već kačen na Sezamu. >> >> Koja poruka? Ako te ne mrzi, pogledaj ili nakači ponovo, leba ti... Na sezamu imaš naredbe za pretraživanje (čiju sintaksu ni ja neznam na pamet- uvek se poslužim HELPom) pa ćeš i ti možeš to da uradiš isto tako dobro ili loše koliko i ja :) Ako se fajl zagubio prilikom zamene softvera s početka ove godine, kaži pa ću da šaljem.
asembler.203 stameni,
Kod interapta 21h funkcija 35h nalazi adresu interapta datog u AL (dakle, mov ah, 35h / mov al, <broj> / int 21h). Funkcija 25h postavlja vektor na interapt čiji je broj dat u AL. Tako svi kažu ("Sve MS DOS funkcije", HELPPC, DOSREF, TECHHELP...), uključujući i spisak interaptova Ralfa Browna. Kod ovog poslednjeg piše takođe to isto, ali uz još neke dodatne informacije, koje me malo zbunjuju. Koliko sam shvatio, radi se o podfunkcijama funkcija 25h i 35h koje se dobijaju preko registra AL. E, tamo je navedeno da nekoliko prvih podfunkcija funkcije 25h koristi nešto što autor naziva "Phar Lap 386/DOS - Extender", a funkcije 35h "Flash Teck X-32 VM". Šta je to, i kako kod takvih računara (ako su to tipovi računara) funkcionišu ove dve podfunkcije? Koliko se sme računati na "opštost" ovih dveju funkcija?
asembler.204 legend,
-=-> Na sezamu imaš naredbe za pretraživanje (čiju sintaksu ni ja -=-> neznam na pamet- uvek se poslužim HELPom) pa ćeš i ti možeš to da -=-> uradiš isto tako dobro ili loše koliko i ja :) Ajd kad ti kažeš, ali kako je ime? Softice*? Sice*? Softi*? -=-> Ako se fajl zagubio prilikom zamene softvera s početka ove -=-> godine, kaži pa ću da šaljem. Ajd, da proverim pa ću da vičem... Legend of LoC!/eXplosives Alone till doom's day!
asembler.205 mdimitrijevic,
> Ajd kad ti kazes, ali kako je ime? Softice*? Sice*? Softi*? SICE*.* ili S-ICE*.*
asembler.206 mdimitrijevic,
> funkcije 25h koristi nesto sto autor naziva "Phar Lap 386/DOS - > Extender", a funkcije 35h "Flash Teck X-32 VM". Sta je to, i kako > kod takvih racunara (ako su to tipovi racunara) funkcionisu ove > dve podfunkcije? Koliko se sme racunati na "opstost" ovih dveju > funkcija? Dva nabrojana cudna imena su nazivi Dos Ekstendera i ne bi trebalo da te zbunjuju. Koriste se da bi pruzili mogucnost koriscenja celokupne memorije racunara u zasticenom rezimu rada (protected mode). Znaci to nisu tipovi racunara, a funkcije rade bas ono sto ti kazu svi helpovi i sto si i sam naveo. Znaci, nemas frke :)
asembler.207 nekromant,
Da li neko moze da mi posalje neku dokumentaciju u vezi Xmode-a, i uopste niskom programiranju VGA kartica.
asembler.208 mdimitrijevic,
> Da li neko moze da mi posalje neku dokumentaciju u vezi Xmode-a, > i uopste niskom programiranju VGA kartica. Evo nesto sto sam na brzinu skupio. Sve je na engleskom. Primeri su o programiranju VGA karti (X-MODE, Scroll ...). Primeri su u ASM-u, C-u i PASCAL-u. Nadam se da ce ti pomoci, ako negde zapnes javi se. vga_prog.zip
asembler.209 biber,
>> Ajd kad ti kažeš, ali kako je ime? Softice*? Sice*? Softi*? ICEDEBUG.RAR i S-ICE.ARJ To su DOS i WINDOWS verzije.
asembler.210 bilder,
Da li se na neki nacin moze ostvariti u nekom od modova sa 16 boja , recimo 10h ili 12h, hardverski skrol samo odredjenih ravni a ne svih kao sto je to slucaj ako pomenuti skrol radimo preko porta 3d4h i indeksa 0ch i 0dh ?!?
asembler.211 bilder,
Evo jos jednog pitanja.. ..rec je o alociranju extended memorije pod Tran-ovim PMODE-om naime posle sledeceg: _main: sti mov eax,1024*1024 ; 1Mb call _gethimem jc NotEnoughHiMem mov [Buf],eax ... bilo kakvo brljanje po upravo alociranom baferu rezultuje resetovanjem racunara ... da uzeo sam u obzir da je to linearni pointer i vrednost _code32a !!! sta da uradim pa da to ne bude tako ?!?
asembler.212 sasab,
Ima li neko disasembliranu rutinu za int17h iz nekog 286 BIOS-a? Bogi
asembler.213 mdimitrijevic,
> Da li se na neki nacin moze ostvariti u nekom od modova sa 16 boja , > recimo 10h ili 12h, hardverski skrol samo odredjenih ravni a ne svih kao > sto je to slucaj ako pomenuti skrol radimo preko porta 3d4h i indeksa 0ch > i 0dh ?!? Ne. Mozes jedino sa prebacivanjem blokova memorije (REP MOVSB).
asembler.214 mdimitrijevic,
> ..rec je o alociranju extended memorije pod Tran-ovim PMODE-om > naime posle sledeceg: Mozda je problem ako alocira EMS memoriju. Znam da je bilo nekih problema sa alociranjem bas kod EMS memorije. Poslacu poslednju verziju PMODE-a v1.24 pa probaj.
asembler.215 mdimitrijevic,
PMODE v1.24, najnovija verzija Tran-ovog Protected Mode Extendera. pmw124.zip
asembler.216 jexy,
; PMODE v1.24, najnovija verzija Tran-ovog Protected Mode ;Extendera. Izgleda da bas nisi u toku .. evo PMODE v2.51 i PMODE v3.06 od Tran-a pm-11-94.zip
asembler.217 mdimitrijevic,
Ono sto sam poslao je PMODE extender za WATCOM C. I v1.24 je poslednja koju su izbacili. Tj. poslednja koja se pojavila na FTP.CDROM.COM-u. Ovo sto si ti poslao je odvojeni extender za ASM.
asembler.218 mdimitrijevic,
Evo, da ne bi bilo zabune. FILE_ID.DIZ fajl za PMW124.ZIP, Tran-ov extender koji zamenjuje DOS4GW.EXE kod Watcom C programa. Ň════════════════════════════════════Ş │▒▒▒▒ PMODE/W v1.24 DOS Extender ▒▒▒▒│ │▒▒▒▒ For use with WATCOM C/C++ ▒▒▒▒│ │────────────────────────────────────│ │ Features: │ │ ˙ Extender size is less than 10k │ │ ˙ Extender is internal to the EXE │ │ ˙ Replaces DOS4GW.EXE │ │ ˙ Fully compatible with WATCOM C │ │ ˙ Fast execution │ │ ˙ Free for non-commercial use │ │ ˙ Protected mode EXE compression │ │────────────────────────────────────│ │ Changes in Version 1.24: │ │ ˙ EMM386/NOEMS bug fixed │ │ ˙ Added INT 31h/AX=0002h │ │ ˙ Improved PMWSETUP program │ │ ˙ See UPDATES.DOC for more changes │ ď════════════════════════════════════ż
asembler.219 jexy,
; Ono sto sam poslao je PMODE extender za WATCOM C. I v1.24 je poslednja ;koju su izbacili. Tj. poslednja koja se pojavila na FTP.CDROM.COM-u. ; Ovo sto si ti poslao je odvojeni extender za ASM. Da ja nisam mislio ,s' obzirom na naziv teme,da saljes extender za Watcom C ali nije ni bitno..vazno je da smo isterali to na videlo
asembler.220 stameni,
Jednom je, valjda u nekim starijim "Računarima" u "Bajtovima lične prirode", bio objavljen programčić-primer pisanja zvuka u asembleru. Kako nisam mogao da nađem u kom časopisu sam to čitao, malo sam se sam petljao u vezi sa zvukom, pa rezultate tog petljanja iznosim ovde. Možda nekome korisno posluži. Mada je program pisan za a86, lako se može ubaciti kao procedurica za neki drugi programski jezik. org 100h cli mov al, 0b6h ; b6h = 10110110b ; Prvo se priprema Programmable Interval Timer ; (PIT) za generisanje zvuka. Najpre se postavlja ; Mode Control Register na portu 43h (od 7. ka 0.): ; 10 - selektovanje countera 2 na portu 42h ; 11 - naglašava se da se šalje prvo LSB pa ; MSB frekfencije zvuka ; 011 - neka PIT generiše četvrtast signal ; 0 - binarni brojač out 43h, al ; Dakle, pripremljeni al gurnuti na 43h, mov al, 18h ; a zatim poslati out 42h, al ; LSB, mov al, 12h ; pa MSB out 42h, al ; frekfencije. in al, 61h ; Uključi zvučnik preko 8255 Programmable Periprhe- or al, 03h ; ral Interfacea, port B out 61h, al mov bx, 10 ; Malo se vrti xor cx, cx ; ne radeći loop1: loop loop1 ; ništa dec bx ; naročito :) jnz loop1 in al, 61h ; Isključi and al, 0fch ; zvučnik out 61h, al ; preko PPI-a. sti ret Asemblirati sa: a86 primer.asm primer.com
asembler.221 mdimitrijevic,
> Da ja nisam mislio ,s' obzirom na naziv teme,da saljes extender za Watcom > C ali nije ni bitno..vazno je da smo isterali to na videlo Da, pa vidi stvarno ! Uopste nisam primetio da je tema asembler.
asembler.222 stameni,
Kako poslati modemu na COM3 ili COM4 komandu ATD ? Ne treba mi ni jedna druga.
asembler.223 space.ace,
>> Kako poslati modemu na COM3 ili COM4 komandu ATD ? Ne treba mi >> ni jedna druga. Evo ti sors u asembleru, malo iskomentarisan. ---seci--- ;inicijalizuje COM3 mov ah, 00h ; funkcija 00h za inicijalizaciju porta mov al, 11100011b ; parametri porta (treba li da objasnim?) mov dx, 2 ; koji je port (com1-0, com2-1,com3-2, com4-3) int 14h ; interapt za rad sa portovima ; šalje na COM3 prvo 'a' mov ah, 01h ; funkcija za pisanje po portu mov al, 'a' mov dx, 2 ; mora da se navede i u koji port se piše int 14h ; pa 't' mov ah, 01h mov al, 't' mov dx, 2 int 14h ; pa 'd' (sve zajedno 'atd') što podiže slušalicu . mov ah, 01h mov al, 'd' mov dx, 2 int 14h ; ali ipak pre toga mora da se udari Enter mov ah, 01h mov al, 13 mov dx, 2 int 14h ; šalje poruku na ekran mov ah, 09h mov dx, offset(poruka) int 21h ; završava program mov ah, 4ch mov al, 0 int 21h poruka db 'ATD poslato na port!$' ; kraj programa ---dovde--- E sad, može i malo jednostavnije, ali ne mogu se u trenutku setim. Inače, ovo sam izveo bacanjem karaktera na comm port, funkcijom 01h interapta 14h (zato sam nekoliko puta ispisao mov ax, 01h, da bi se uočilo :). Nabavi HelpPC ili NG za ASM, tamo ima dosta o ovome... Ako ti još uvek nije jasno, opet pitaj...
asembler.224 obren,
Neko je tražio dokumentaciju o radu sa COM portovima. Uz poruku je veoma detaljan i kompletan DOC o UART (Universal Asynchronous Reciever/Transmiter) (C) Chris Blum. uart.zip
asembler.225 obren,
Kad smo već kod Crhis Bluma, u njegovom tekstu o UART-u pominje se i neka dokumentacija o programabilnom prekidnom kontroleru 8259pic. Svojevremeno sam mu pisao da mi to pošalje što je on i učinio (ko kaže da su oni Nemci loši momci ;). Uz poruku je taj fajl, uz napomenu da nije ništa posebno upotrebljivo, ništa konkretno o programiranju - jednostavno se objašnjava princip rada 8259-ke što doduše korisno dođe pri upotrebi HelpPC-a i sl. pic8259.doc
asembler.226 dzakic,
> Kako poslati modemu na COM3 ili COM4 komandu ATD ? Ne treba mi > ni jedna druga. Ukratko, BIOS neće radi sa com3 i com4 jer u bios bloku za njihovu adresu stoji 0. Dakle, treba uraditi nešto ovako: Program Addports; var comport: array[1..4] of word absolute $40:$00; begin if comport[1]=0 then comport[1]:=$3f8; if comport[2]=0 then comport[2]:=$2f8; if comport[3]=0 then comport[3]:=$3e8; if comport[4]=0 then comport[4]:=$2e8; end. Nakon toga, može se slati znak na port sa int 14h, fja 0 za inicijalizaciju, fja 1 za slanje znaka. Naravno, bolje je da za to koristiš neki fosil drajver.
asembler.227 stameni,
>> Nabavi HelpPC ili NG za ASM, tamo ima dosta o ovome... Da, pogledao sam neke "elektronske" helpove (pre svega interrupt liste INTER42.*) i video da ovaj primer koji si naveo treba da radi. Samo, meni ne radi :( Konkretno, posle ovoga: ;inicijalizuje COM3 mov ah, 00h ; funkcija 00h za inicijalizaciju porta mov al, 11100011b ; parametri porta (treba li da objasnim?) mov dx, 2 ; koji je port (com1-0, com2-1,com3-2, com4-3) int 14h ; interapt za rad sa portovima ne menjaju se ah (line status) i al (modem status) kao što bi, valjda, trebalo. Malo sam modifikovao al registar jer imam 2400 modem, pa se ni tada ne dešava ništa - niti se promene ah i al, niti program "digne slušalicu". >> Ako ti još uvek nije jasno, opet pitaj... Nije jasno. Razmišljao sam o tome da, što se tiče slanja na modem preko int 14h, računar nije brži no što modem prima, pa sam imao ideju da ubacim neke pauze kod slanja podataka. No, ta potencijalna brzina ne objašnjava nemenjanje ax u citiranom delu programa, a takođe prilikom traceovanja iz debuggera (i DEBUG i TD) naredbu po naredbu ne dolazi do dizanja slušalice. Huh, nije valjda problem toliko težak?
asembler.228 space.ace,
>> Ukratko, BIOS neće radi sa com3 i com4 jer u bios bloku za >> njihovu adresu stoji 0. Dakle, treba uraditi nešto ovako: Nije mi baš jasno, meni je modem na com3, onaj moj primer radi perfektno! Znači, ili nisi ti u pravu, ili nešto ovde ne štima :))
asembler.229 space.ace,
Nije mi jasno što ti ne radi? Na kom portu ti je modem? Ako ti je na com4, trebalo bi da promeniš dx, da staviš 3. Meni sve radi (oprobano više hiljada puta). Takođe sam i napravio da mi pošalje iz komandne linije neku komandu modemu (kao npr. da digne slušalicu, okrene neki broj, itd :). >> ne menjaju se ah (line status) i al (modem status) kao što bi, >> valjda, trebalo. Malo sam modifikovao al registar jer imam 2400 >> modem, pa se ni tada ne dešava ništa - niti se promene ah i al, >> niti program "digne slušalicu". Možda nisi tačno podesio AL registar (pošalji mi kako si to podesio). Možda u tom grmu leži zec. I dalje mi nije jasno što ne menja ah i al.
asembler.230 stameni,
>> >> Ukratko, BIOS neće radi sa com3 i com4 jer u bios bloku za >> >> njihovu adresu stoji 0. Dakle, treba uraditi nešto ovako: >> >> Nije mi baš jasno, meni je modem na com3, onaj moj primer radi >> perfektno! Kako kod tebe radi, nemam pojma, ali je činjenica da su adrese COM3 i COM4 portova kod mene 0 (proverio sam DEBUG-om i PV-om). Kako je kod tebe? Sve i kad promenim 0040:0004 na 03e8, onaj primer ne radi :(
asembler.231 stameni,
>> Nije mi jasno što ti ne radi? Na kom portu ti je modem? Ako ti >> je na com4, trebalo bi da promeniš dx, da staviš 3. Modem je na COM3, kao što sam i bio pitao, a dx je uredno 2. >> Možda nisi tačno podesio AL registar (pošalji mi kako si to >> podesio). Možda u tom grmu leži zec. Nisam otpočetka mislio na to, nego tek kad nije radilo (hint: rtfm ;). No, evo sadržaja al koji koristim (u odnosu na ono što si ti poslao promenjen je jedan bit, da bi bilo u skladu sa mojim 2400 modemom): 76543210 10100011 ----> AL 765 (101): 2400 bita u sekundi 43 (00) : bez pariteta 2 (0) : 1 stop-bit 10 (11) : 8 "korisnih" bitova Na kraju, dva početnička pitanja: 1) Kako u a86 koristiti binarne konstante (ako koristim sufiks 'b' kako da budem siguran da konstantu asembler ne prepozna kao deo heksa broja)? 2) Kako (kojim adresnim modom) gađati prvi megabajt memorije, odnosno kako uraditi mov 1234h:5678h, abh ?
asembler.232 ognjen,
)-> 1) Kako u a86 koristiti binarne konstante (ako koristim )-> sufiks 'b' kako da budem siguran da konstantu asembler ne )-> prepozna kao deo heksa broja)? 10101100xB
asembler.233 jexy,
Ima li ovde neko PMODE/W v1.22 od Tran-a !?!
asembler.234 mdimitrijevic,
> Ima li ovde neko PMODE/W v1.22 od Tran-a !?! Slao sam to u ovoj temi (cini mi se:) u ranijim porukama. Postoji PMW v1.24 (poslednja verzija).
asembler.235 jexy,
; Slao sam to u ovoj temi (cini mi se:) u ranijim porukama. Postoji ; PMW v1.24 (poslednja verzija). Znam imam i ja verziju 1.24 ali mi bas treba verzija 1.22 !! Pa ako neko ima...
asembler.236 mdimitrijevic,
> Znam imam i ja verziju 1.24 ali mi bas treba verzija 1.22 !! Evo ti, nemam pojma zasto ti treba starija verzija. Ň════════════════════════════════════Ş │▒▒▒▒ PMODE/W v1.22 DOS Extender ▒▒▒▒│ │▒▒▒▒ For use with WATCOM C/C++ ▒▒▒▒│ │────────────────────────────────────│ │ Features: │ │ ˙ Extender size is less than 10k │ │ ˙ Extender is internal to the EXE │ │ ˙ Replaces DOS4GW.EXE │ │ ˙ Fully compatible with WATCOM C │ │ ˙ Fast execution │ │ ˙ Free for non-commercial use │ │ ˙ Protected mode EXE compression │ │────────────────────────────────────│ │ Changes in Version 1.22: │ │ ˙ DPMI compliant INT 1Ch, 23h, 24h │ │ ˙ Utilities updated for WATCOM 10.5│ │ ˙ See UPDATES.DOC for more changes │ ď════════════════════════════════════ż pmw122.zip
asembler.237 ognjen,
Gde da nađem parametre diskete (broj glava, cilindara, i sektora)? U Diskette Parametar Table-u na adresi 0000:0078 se nalazi puno podataka, ali ni traga od ova tri najosnovnija. (bar tako kaže Techelp) U Boot sektoru diskete, ovakvi podaci bi trebali da se nalaze na nekim malim offsetima, ali šta ako se u boot ugnezdio neki virus (stoned, na primer) koje ove podatke ne čuva, već se tu nalazi virusni kod. Čitajući odatle, dobiću pogrešne podatke! Gde da nađem proklete parametre diskete?!
asembler.238 janko,
> U Boot sektoru diskete, ovakvi podaci bi trebali da se nalaze > na nekim malim offsetima, ali šta ako se u boot ugnezdio neki > virus (stoned, na primer) koje ove podatke ne čuva, već se tu > nalazi virusni kod. Čitajući odatle, dobiću pogrešne podatke! > > Gde da nađem proklete parametre diskete?! Boot sektor je dovoljno dobro mesto (jedino, čak ;> ) I virusi moraju da sačuvaju te početne podatke -- tek IZA se smeštaju. Probaj.
asembler.239 mdimitrijevic,
> Gde da nadem parametre diskete (broj glava, cilindara, i > sektora)? U Diskette Parametar Table-u na adresi 0000:0078 se Podaci u 'Disk Drive Parameter Table' su vezani vise za sam hardver disk drajva a ne za podatke o disketi. > U Boot sektoru diskete, ovakvi podaci bi trebali da se nalaze > na nekim malim offsetima, ali sta ako se u boot ugnezdio neki > virus (stoned, na primer) koje ove podatke ne cuva, vec se tu > nalazi virusni kod. Citajuci odatle, dobicu pogresne podatke! Boot sektor NECE biti prebrisan ovako kako ti mislis. Virus se ubacuje u startup kod na pocetku diskete, taj kod se ionako koristi za dizanje sistema (a to virusu i treba :), pa ga on po potrebi promeni. Znaci, Boot Sektor ce imati odgovarajuce podatke o disketi jer samo na taj nacin DOS moze da zna kakvoj disketi pristupa i o kakvim podacima se radi. > Gde da nadem proklete parametre diskete?! Kao sto rekoh, Boot Sektor, verovatno imas njegovu strukturu. Ako nemas, da saljem ?
asembler.240 ognjen,
)-> Virus se ubacuje u startup kod na pocetku diskete, taj kod se )-> ionako koristi za dizanje sistema (a to virusu i treba :), pa )-> ga on po potrebi promeni. Izvini, nije mi baš najjasnije. Da li bi mogao da mi objasniš razliku između startup koda i boot sektora. Boot sektor se (koliko ja znam) nalazi na h0 c0 s1, i zauzima 512 bajtova (jedan sektor). Šta je onda startup kod?
asembler.241 janko,
> Izvini, nije mi baš najjasnije. Da li bi mogao da mi objasniš > razliku između startup koda i boot sektora. Boot sektor se > (koliko ja znam) nalazi na h0 c0 s1, i zauzima 512 bajtova (jedan > sektor). Šta je onda startup kod? Samo mu ime kaže, kod kojim se inicira "dalje dizanje" sistema. U starija vremena se taj kod zvao još romantičnije "bootstrap kod". Naravno da je u boot sektoru diska.
asembler.242 stameni,
Zasto sledeci program ne salje modemu odredjeni string (u ovom slucaju ATD - videti kraj programa)? Mislim da sam radio po svim "pravilima", al' on ni da bekne. Modem je 2400 na COM3. program modem; uses crt, dos; const DelayRate = 100; { pauza izmedju dva poslata znaka } var regs: registers; procedure InitMemory; { adrese COM3 i COM4 } var ComPort: array[1..4] of word absolute $40:00; begin ComPort[1]:=$3f8; ComPort[2]:=$2f8; ComPort[3]:=$3e8; ComPort[4]:=$2e8; end; procedure InitModem(InitParam: byte); begin regs.ah := $00; regs.al := InitParam; regs.dx := $02; intr($14, regs); delay(DelayRate) end; procedure ProcessChar(ch: char); begin regs.ah := $01; regs.al := ord(ch); regs.dx := $02; intr($14, regs) end; procedure ProcessLine(line: string); var counter: byte; begin for counter := 1 to length(line) do begin ProcessChar(line[counter]); delay(DelayRate) end end; begin InitMemory; InitModem($A3); { 10100011 - 101: 2400 bps; 00: no parity; 0: 1 stop bit; 11: word length } ProcessLine('ATD') end.
asembler.243 biber,
Nekad na 286 racunaru sam mogao u BIOSu da ukljucim video ROM shadow, i zatim da upisujem sta mi je volja u ram u koji je prepisan sadrzaj video roma. Zasto to sad ne radi sa novim plocama?
asembler.244 stameni,
Kako poslati komandu fossilu X00 iz assemblera?
asembler.245 janko,
> Nekad na 286 racunaru sam mogao u BIOSu da ukljucim video ROM > shadow, i zatim da upisujem sta mi je volja u ram u koji je prepisan > sadrzaj video roma. Zasto to sad ne radi sa novim plocama? A zašto bi to radio, da pišeš preko video biosa? Ili si možda mislio da možeš da korstiš RAM kada ISKLJUČIŠ shadow? I u kom režimu koristiš tu novu ploču? Kao "goli" DOS ili sa nekim EMMxxx, HIMEM i slično? Šta u stvari hoćeš, da skratim pitanje...
asembler.246 bokir,
Imam pitanje u vezi programiranja u protected modu. Kako se pristupa direktno određenoj adresi? Recimo, kako bi sledecći kod izgledao u pm (izvinjavam se zbog YUSCIIja ;) : mov ax, 0A000h mov es, ax mov es:ŠbxĆ, cl
asembler.247 pedjak,
> Zasto sledeci program ne salje modemu odredjeni string (u ovom > slucaju ATD - videti kraj programa)? Mislim da sam radio po svim > ProcessLine('ATD') Nisam detaljno analizirao program, ali da probam na prvu loptu: probaj da gornju liniju zameniš sa ProcessLine('ATD'+#13). Ako ni to ne radi, razmislićemo dalje.
asembler.248 bokir,
Zašto mov es:ŠbxĆ, al izaziva exception, i kako to da izbegnem? ( Ono Š i Ć su uglaste zagrade ;)
asembler.249 mdimitrijevic,
> Zasto > mov es:SbxC, al > > izaziva exception, i kako to da izbegnem? Pitanje je kako si podesio ES i BX registre. Posalji deo koda u kome ih koristis pa da vidimo sta je problem. Jel ti okida QEMM exception ili sta ?
asembler.250 pedjak,
> Kako poslati komandu fossilu X00 iz assemblera? Korišćenjem odgovarajućeg poziva (videti specifikaciju koja dolazi uz sam X00)
asembler.251 bokir,
> Pitanje je kako si podesio ES i BX registre. Posalji deo koda u kome > ih koristis pa da vidimo sta je problem. Jel ti okida QEMM exception ili Izvinjavam se što sam bio neprecizan. Naime, pokušavam da uradim svoj prvi program u protected modu, i koristim Blinkerov DOS Extender. E, taj program bi trebao da inicijalizuje grafiku i ceo ekran popuni nekom bojom. Ove probleme sa javljanjem exceptiona sam sredio ;) I sad program radi savršeno u realnom modu (ispuni ceo ekran), a u protected modu samo jednu jedinu liniju. Ispostavilo se da jedan niz koji se sasvim fino inicijalizuje u realnom modu, u protected modu UVEK bude inicijalizovan nulama! ;( Zna li neko zašto se ovo dešava? Inicijalizaciona procedura je prikačena uz poruku. code.zip
asembler.252 biber,
>> A zašto bi to radio, da pišeš preko video biosa? Ili si možda >> mislio da možeš da korstiš RAM kada ISKLJUČIŠ shadow? Da bi bolje razumeo šta sam hteo da kažem evo banalan primer: hoćeš da umesto imena proizvođača grafičke kartice upišeš svoje ime. To je nekad moglo (286), sa uključenim bios shadow. Sad (486, 586) neće. >> I u kom režimu koristiš tu novu ploču? Kao "goli" DOS ili sa nekim Za vreme boota -> F5
asembler.253 janko,
> hoćeš da umesto imena proizvođača grafičke kartice upišeš svoje im > To je nekad moglo (286), sa uključenim bios shadow. Sad (486, > 586) > neće. Pretpostavljam da BIOS-i koriste prednost svih procesora od 386 naviše da zone u memoriji mogu biti zaštićene za upis (read only). Prednost je definitivna, jer neispravni programi kojima pointer "greši" ne mogu da zalude video...
asembler.254 janko,
> I sad program radi savršeno u realnom modu (ispuni ceo ekran), > a u protected modu samo jednu jedinu liniju. Neko je pisao, mislim baš u ovoj konferenciji, dosta davno o adresiranju memorije iz protected režima nekog ikstendera...
asembler.255 mdimitrijevic,
> Naime, pokušavam da uradim svoj prvi program u protected modu, > i koristim Blinkerov DOS Extender. Žao mi je, nisam upoznat sa ovim Extender-om. > I sad program radi savršeno u realnom modu (ispuni ceo ekran), > a u protected modu samo jednu jedinu liniju. Razlike između realnog i protected moda su velike (mada što se težine rada tiče najviše zavise od toga u čemu pišeš programe). Protected mode koristi 32-bitne registre za adresiranje, moraš da vodiš računa o selectorima i još po nekim stvarima. Ali, jednom kada prođeš te probleme kasnije će ti biti mnogo lakše. Na žalost kao što rekoh nemam pojma kako radi taj Blinkerov DOS Extender (koristim PMODE i Watcom C). Extender bi morao da ima način da ti vrati neke informacije, što možeš videti jedino u uputstvu. Ukoliko želiš da pišeš u asembleru moj je predlog PMODE od Trana. Ukoliko želiš da radiš dobro optimizovane protected mode programe u C-u, moj predlog je Watcom C++ v10.5. A uz njega pored DOS4GW imaš (opet) Tranov PMODEW extender. > Ispostavilo se da jedan niz koji se sasvim fino inicijalizuje u > realnom modu, u protected modu UVEK bude inicijalizovan nulama! ;( Kao što rekoh potpuno se drugačije adresira u protected modu. Niz (verovatno) ne bude inicijalizovan nulama od strane programa već to radi extender po definisanju niza.
asembler.256 micke,
***************************************************************************** Potreban mi je ASEMBLER za procesor 80086 pa ako neko ima neka mi baci u mail (micke). *****************************************************************************
asembler.257 biber,
Ima li ko 32-binu verziju Soft-Ice (za windows)? Je li to jos uvek shareware program?
asembler.258 bilder,
Prvi DEMO PARTY u YU a evo i oficijelne predinvitacije ;) ---------------------------------------------------------------- Yet Another Lame Party! Ovo je pred-poziv za YALP parti. "Pred" zbaci da bi se neki detalji mogli kasnije izmeniti. Konacna verzija ce uskoro biti rasirena. STA? Pomalo neobican demo compo parti. Svi radovi moraju da budu 256 bajtova ili kraci. Kategorije su: - C-64 demo - PC demo - Amiga demo - Pixel grafika - ANSI grafika - ASCII grafika - Muzika - Utility - C-64 igra - PC igra - Amiga igra U kategorijama navedenim bez platforme svi radovi za C-64, Amigu i PC ce biti u jednoj kategoriji. Za sada razmatramo da spojimo "Igra" i "Demo" (mozda cak i "Grafika"?) grupe u jedinstvene kategorije. Sta vi mislite? Ako dovoljno ljudi zatrazi druge kategorije ili druge kompjutere na kojima bi se radilo, dodacemo ih. Primetite da za potrebe ovog partija izricito poricemo razliku izmedju demoa i introa. Postoje bar tri vrlo razlicite definicije introa, tako da cemo smatrati sve "demolike" radove demoima. Nakon partija organizovacemo specijalno takmicenje - jos uvek sakupljamo ideje i za sada je najbolja takmicenje u frikovanju semafora (ponesite sami svoj alat). Ako imate ideju za ovaj deo, obavestite nas, i molimo vas da ne predlazete stare stvari vec provaljene na drugim partijima, kao takmicenja u bacanju diskova ili modema i sl. KAD? Sredinom januara 1997. Tacan datum jos nije odredjen, ali racunajte da ce biti 15-ti +/-3 dana. Parti ce trajati jedan dan i jednu noc. GDE? U Beogradu, u klubu "Fest" u Zemunu. Najverovatnije. Imajte na umu da ce jedina korist od ovog partija za klub biti pare koje ce zaraditi na picu. Imajte razumevanja za ovo i ne donosite svoj alkohol. ZA STA? Zalimo, ali nece biti nagrada od velike materijalne vrednosti. Ocekujte da nagrade budu reda velicine majica sa natpisom "Pobedio sam na YALP-u 1997!" Odavno smo odustali od potrage za sponzorima. Niko nije zainteresovan. S druge strane, obratite paznju na to da se ni ne naplacuje ucestvovanje na partiju. KO? Parti ce organizovati MindEscapE. Ocekujemo da vecina ili svi ucesnici budu iz Jugoslavije, ili cak samo iz Beograda, jer pretpostavljamo da niko nije toliko lud da putuje sve dovde samo da bi ucestvovao na bedno organizovanom jednodnevnom partiju na kojem je glavna nagrada majica ili tako nesto. Od pocetka je parti zamisljen kao dogadjaj za budjenje Jugoslavije. Naravno, rado cemo primiti i ucesnike iz inostranstva, narocito iz bivsih jugoslovenskih republika. U principu ne nameravamo da vam obezbedjujemo prenociste - imamo dovoljno problema i bez toga. Ako ne mozete da nadjete mesto gde biste odseli u Beogradu, mi cemo moci da udomimo nekoliko ljudi, ali ne vise od nekoliko! Kontaktirajte nas pre nego sto dodjete u Beograd bez hotelske rezervacije, inace rizikujete da spavate u prijateljskim, udobnim i zagrejanim ulicama punim idilicnih zimskih motiva. Takodje bi nam bilo drago da unapred znamo za ljude koji planiraju da dodju, da bismo imali predstavu koliko ce ih biti, i da bismo mogli da organizujemo parti shodno tome. Ako razmisljate o dolasku na parti, ne zaboravite da nam javite - ne treba nam definitivno "da", "mozda" ce biti dovoljno. KAKO? Nema mnogo ogranicenja. Osim toga sto sve mora biti dugacko 256 bajtova ili krace, radovi u "umetnickim" kategorijama (grafika i muzika) se mogu predati ili u manje-vise standardnom formatu ili kao izvrsni programi. Ako se predaju u izvrsnom obliku, ne smeju niposto biti slucajno generisani - takvi radovi spadaju u demo kategorije. Takodje, verujemo da se jednostavni deterministicki ili IFS fraktali predati kao graficki radovi u izvrsnom obliku (iako nisu zabranjeni ovim pravilom) nece preterano dopasti glasacima. Ako napravite divan matematicki algoritam koji _stvara_ lep graficki (ili zvucni) izlaz, njegovo mesto je u demo kategorijama. Izvrsni oblik za umetnicke radove treba da se koristi samo da bi se _spakovali_ radovi kad ih je lako spakovati, a nijedan standardni format ne moze da ih spakuje u 256 bajtova ili manje. Slike ne smeju da imaju pokretne delove, skrolove itd. - IFLI je naravno dozvoljen. Radovi ne bi trebalo da ostete nasu opremu, da ne bi neko ostetio i vas. Bilo bi lepo da DONESETE svoje radove na parti, ali cemo prihvatiti i one koje posaljete Internet e-mailom na donje adrese. Zapamtite da je samo ucestvovanje u takmicenju mnogo manje od prisustvovanja na partiju. ZASTO? Nikad nije odrzan demo-parti u Jugoslaviji. Par puta su ljudi pokusavali da organizuju nesto i nisu stigli dalje od planova. Izgleda da je najveci problem svih koji su ikada pokusali da organizuju nesto takvo ovde bilo nalazenje sponzora koji bi obezbedili mesto za parti, masine na kojima bi se radilo i nagrade. Naprosto, svako ko bi mogao da sponzorise parti ovde ne vidi to kao ista vise od detinjastog gubljenja vremena i novca. Mi smo odlucili da sami obezbedimo te stvari - nasli smo mesto na kojem cemo da odrzimo parti, donecemo svoje kompjutere (mozete i vi da donesete svoje!) i potrosicemo svoj sopstveni novac na skromne nagrade. Mozda ste shvatili, citajuci sav ovaj tekst, da ime partija nije sala. Stvarno ce biti lame. Ali bice prvi jugoslovenski demo parti i deo razloga sto nijedan nije odrzan do sada je to sto je svako radije birao da uopste ne odrzi parti nego da odrzi glupi mali lame parti. Kad bismo i mi to uradili, zavrsili bismo na isti nacin. Verujemo da je bolje imati los parti nego nemati dobar. Ako posluzi svojoj svrsi, ako probudi ljude ovde, onda nece ni biti toliko lame na kraju krajeva. Jos jedan problem koji su imali dosadasnji nesudjeni organizatori ovdasnjih partija je to sto NIKO NE RADI NISTA u Jugoslaviji. Nismo mi glupi, samo smo lenji. Verovatno i u svim drugim zemljama 99% ljudi igra svoje igrice od 20 CD-ova, ali tamo ipak postoje demo-sceneri. I ovde, u Jugoslaviji, postoje ljudi koji sede sa svojim asemblerima i pisu jednostavne male efekte, samo nikad ne razmisljaju ozbiljno o pravljenju pravih demoa - ne veruju da imaju sanse da urade ista uporedivo sa remek-delima severno-evropejaca. To je koren jos jedne ideje iza YALP-a: Kad bi ljudi ovde bili spremni da prave ozbiljne demoe, takmicili bi se na svetskim (ili evropskim) compoima, gde bi imali sansu da zarade vise slave i vrednije nagrade nego na nekom lame malom lokalnom partiju. Ocigledno je da to bas mnogo i ne rade. Dakle, trebalo bi da se takmice sa drugim lokalnim ljudima u tako maloj skali - 256 bajtova - taman dovoljno da prikazu neki jednostavan efekat koji su napravili. Nadamo se da ce posle ovoga ljudi ovde shvatiti da nisu ludi ako trose svoje vreme na kodiranje "beskorisnih" stvari poput demoa, da takve aktivnosti nisu bezvredne i da imaju smisla. ------------------------------------------------------------------------------- Ako imate bilo kakva pitanja ili predloge vezane za parti, ili ako zelite da nas obavestite o vasim planovima za dolazak, slobodno emajlirajte :) glavnog organizatora (Han Solo / Vortex) na neku od ovih adresa: - vladafi@classroom.opennet.org - mrki@afrodita.rcub.bg.ac.yu Takodje bismo cenili da prosledite ovaj fajl svima koji bi mogli da budu zainteresovani. Hvala vam, i vidimo se u Beogradu u januaru! organizatori
asembler.259 bilder,
Kako bi trebalo da se radi hardverski skrol u modu 12h ALI ako je aktiviran split screen postavljanjem linecomp registra ? Naravno ne treba pregaziti sadrzaj od 0a0000h gde se nalazi donji screen !
asembler.260 mdimitrijevic,
> Kako bi trebalo da se radi hardverski skrol u modu 12h ALI ako je > aktiviran split screen postavljanjem linecomp registra ? > Naravno ne treba pregaziti sadrzaj od 0a0000h gde se nalazi donji screen ! Pokušaću da nađem negde svoj sors koji radi za sve 16 bojne modove.
asembler.261 stameni,
>> > Zasto sledeci program ne salje modemu odredjeni string (u >> > ovom slucaju ATD - videti kraj programa)? >> Nisam detaljno analizirao program, ali da probam na prvu >> loptu: probaj da gornju liniju zameniš sa >> ProcessLine('ATD'+#13). To je to, sada radi.
asembler.262 stameni,
Nije mi jasna razlika između MOVS i MOVSB, pa ako neko zna... Bye :)
asembler.263 bokir,
> Nije mi jasna razlika između MOVS i MOVSB, pa ako neko zna... Sintaksa: MOVS dest, src MOVS nije prava asemblerska instrukcija. Nju asembler prevodi u MOVSB ili u MOVSW, u zavisnosti od toga da li je 'src' niz bajtova ili wordova. Pre MOVS, SI i DI registri moraju da budu postavljeni na 'src' i 'dest'. Za razliku od ovoga, MOVSB kopira isključivo jedan bajt.
asembler.264 banga,
> Nije mi jasna razlika između MOVS i MOVSB, pa ako neko zna... Pa valjda je u byte-u. Pogledaj u NG :)
asembler.265 jexy,
Da li postoji neki fazon da se u pmodu DMA 'natera' da vidi celih 32 bita a ne samo prvi megabajt ? (znaci ne da prebacujem u prvi megabajt da bih ostvario DMA transfer vec direktno iz ext. memorije )
asembler.266 nenad,
> Da li postoji neki fazon da se u pmodu DMA 'natera' da vidi celih 32 bita > a ne samo prvi megabajt ? (znaci ne da prebacujem u prvi megabajt da bih > ostvario DMA transfer vec direktno iz ext. memorije ) Mislim da to nije moguće, ne zbog PMODE-a već zbog arhitekture PC računara. Ako grešim, ispraviće me neko ko zna više od mene, ako sam u pravu - ispraviće me neko ko zna manje od mene. :)
asembler.267 jexy,
Nesto sam prelistavao ovu konferenciju i video da se pre odredjenog vremena ovde vodila krvava diskusija oko toga kako treba uraditi DMA transfer memorije u istu.Dakle ideja je stvarno odlicna ali da li je neko zaista uspeo da ostvari takav DMA transfer,ako jeste..
asembler.268 stameni,
Evo primera jednog rezidentnog programa. To je mali screen blanker, koji se posle instaliranja aktivira i deaktivira uzastopnim pritiscima tastera PrtSc. Nije loše uočiti postupak kojim se ekran pali/gasi: u pitanju je igranje portovima 03dah i 03c0h (za detalje pogledati techref, recimo). Kako je stvar prilično niskog nivoa, radi i u grafici (isprobano u 640 * 480). Ideju za rad dela programa koji instalira rezidentni deo dobio sam u 1084. "bajtu lične prirode", a za rezidentni deo sam video negde u "snippets" bibiloteci za C. Eksperimentišite, menjajte, javljajte! <----cut----> ; Blankovanje ekrana preko tastera PrtSc ; Asemblirati sa: tasm blank.asm ; Linkovati sa: tlink /t blank.obj ; .model tiny .code org 0100h start: mov ax, 02500h + 05h ; Preuzima se interrupt 05h lea dx, new_int05 int 021h mov dx, 1 + offset status ; dx = dužina rezidentnog dela int 027h ; u bajtovima; int 27h je ; Terminate and Stay Resident ; interrupt new_int05: ; ovde počinje sâm handler cli pushf push ax push dx mov ah, byte ptr status or ah, ah jz restore ; status je bio 0, pa treba ; prikazati ekran, inače ga xor ah, ah ; ugasiti (ekran :) mov byte ptr status, ah mov dx, 03dah in al, dx xor al, al mov dx, 03c0h out dx, al jmp EndHandler ; idi na kraj restore: inc ah mov byte ptr status, ah ; ažurirati status ; a zatim mov dx, 03dah ; prikazati ekran in al, dx mov al, 20h mov dx, 03c0h out dx, al EndHandler: pop dx pop ax popf sti iret ; završiti rad handlera status: db 1 ; handlerova promenljiva; ako ; je status = 1, treba isklju- ; čiti ekran, a ako je status = ; 0, treba ga uključiti end start <----cut---->
asembler.269 stameni,
>> ; Blankovanje ekrana preko tastera PrtSc Evo prevedene verzije... blank.com
asembler.270 stameni,
Dva pitanja: Zašto kod Turbo Assemblera (2.01) u ideal modu mora da se umesto mov [test], ax koristi mov [word ptr test], ax kad se "lepo vidi" da je u prvom slučaju odredišna adresa 16-bitna (ax je 16-bitan)? Sme li se iz interrupt handlera pozivati neki drugi interrupt? Jesu li prekidi re-entrant? Okucah, prebrojah i utvrdih da ima zapravo tri pitanja ("... od vas se traži samo jedno, a to su dve stvari: rad, red i disciplina...").
asembler.272 obren,
> Zasto kod Turbo Assemblera (2.01) u ideal modu mora da se umesto > > mov [test], ax > > koristi > > mov [word ptr test], ax > > kad se "lepo vidi" da je u prvom slucaju odredisna adresa 16-bitna > (ax je 16-bitan)? Ideal mod jeste nešto zahtevniji po pitanju preciziranja tipa operanada, ali u ovom konkretnom slučaju to ne bi treblo da je slučaj. Moguć uzrok problema je (pored bajatog asemblera, nabavi neku noviju verziju) činjenica da je "test" mnemonik postojeće instrukcije pa to možda može da pravi problem? Trebao si da navedeš i kako si definisao "test" u DATASEG-u, možda bi bilo jasnije u čemu je problem. > Sme li se iz interrupt handlera pozivati neki drugi interrupt? Generalno sme, ali uvek može da ima izuzetaka (npr. pozivanje int 21h iz nekog drugog interapta podleže prethodnij proveri da li je DOS zauzet, odnosno da li je prekid u kome se nalaziš nastupio upravo u prekidu koga planiraš da pozoveš - al' ga sročih ;) > Jesu li prekidi re-entrant? Opet, sve zavisi od prekida do prekida.
asembler.273 stameni,
>> Moguć uzrok problema je (pored bajatog asemblera, >> nabavi neku noviju verziju) činjenica da je "test" mnemonik >> postojeće instrukcije pa to možda može da pravi problem? >> Trebao si da navedeš i kako si definisao "test" u DATASEG-u, >> možda bi bilo jasnije u čemu je problem. O:) Labela nije bila "test", to sam ja radio koristeći neku drugu nisku, pa onda ušao u editor i odradio jedan Search & Replace zamenjujući originalnu labelu, ne vodeći računa o mnemonicima. Eh :) Problem ostaje; evo šta sam maločas napravio (ovaj put import iz datoteke sa diska): ----<cut>---- ideal model tiny codeseg org 0100h start: xor ax, ax mov [word ptr abcd], ax ; Ovo prolazi, dok mov [abcd], ax ; ovde izbacuje error (ne warning (?)) ; Operand types do not match ; i to i u ideal i u masm modu mov ax, 4c00h int 21h abcd: dw 0, 0 end start ----<cut>---- Dakle, mod je ideal, model tiny, a abcd je promenljiva iz kod segmenta. Nije u pitanju ni definicija abcd (jednako se ponaša i sa db i sa dw). Ako neko ima noviji asembler, ne bilo mu teško da ovo izasemblira... >> > Jesu li prekidi re-entrant? >> >> Opet, sve zavisi od prekida do prekida. Kratko obrazloženje: radim progamčić koji bi trebalo da odradi write protection diska (koji se, eventualno, zada), radi čega pokušavam da handleujem 13h u kome pokušavam da izbacim string uz pomoć 21h, no nešto ne ide... No, videćemo...
asembler.274 obren,
> mov [word ptr abcd], ax ; Ovo prolazi, dok > mov [abcd], ax ; ovde izbacuje error (ne warning (?)) > ... > abcd: dw 0, 0 Pa ovako, TASM je jednoprolazni asembler, tako da u trenutku kada si koristio "abcd" on ne zna da li je word ili byte pa moraš eksplicitno da mu naglasiš (preko word ptr). Da si "abcd" deklarisao ispred mesta na kome ga koristiš, asembler bi već znao da se radi o wordu i sve bi prošlo bez problema. > Kratko obrazloženje: radim progamčić koji bi trebalo da odradi > write protection diska (koji se, eventualno, zada), radi čega > pokušavam da handleujem 13h u kome pokušavam da izbacim string uz > pomoć 21h, no nešto ne ide... No, videćemo... Uh, to što si zamislio će malo teže da ide. Preporučujem ti da dobro proučiš materiju pre nego što počneš da pišeš tako nešto. Radije prvo probaj da napišeš par "običnih" TSR-programa, dakle onih koji ne diraju disk servise sve dok ne stekneš malo više iskustva. U protivnom možeš lako dovesti do korupcije podataka na disku ako se zezaš sa trinaesticom...
asembler.275 stameni,
>> > mov [word ptr abcd], ax ; Ovo prolazi, dok >> > mov [abcd], ax ; ovde izbacuje error (ne warning >> > (?)) ... >> > abcd: dw 0, 0 >> >> Da si "abcd" deklarisao >> ispred mesta na kome ga koristiš, asembler bi već znao da se >> radi o wordu i sve bi prošlo bez problema. Isprobao sam maločas i neće (TASM je 2.01) :(. Je l' kod tebe prolazi? Ako da, koja je verzija asemblera? Mislim da nema potrebe praviti problem tamo gde ga nema: ne smeta meni da kucam byte / word / dword ptr tamo gde neće drukčije (jeste da malo zbunjuje, ali...). Inače, koliko sam primetio, nije obavezno stavljati ptr u ideal modu, dok je za masm neophodno. >> Preporučujem ti da >> dobro proučiš materiju pre nego što počneš da pišeš tako >> nešto. Radije prvo probaj da napišeš par "običnih" >> TSR-programa, dakle onih koji ne diraju disk servise sve dok >> ne stekneš malo više iskustva. Odakle da počnem? Imam nekolike helpove koje sam uglavnom pokupio sa Sezama, ali nisam siguran da je negde baš potpuno objašnjeno pisanje TSR-programa. Trebalo bi da ima dosta dobrog teksta u registrovanom DOSREF-u, ali nisam siguran da toga ima kod nas... Dobro bi mi došao pointer na datoteke koje mogu naći ovde negde. Ako si mislio na papirnati help, šta konkretno preporučuješ? Može li se nekako do toga doći? Smatram sebe početnikom u programiranju, mada sam jedan program (TSR) nedavno napisao i okačio source ovde negde. Mislio sam da ću najbolje napredovati na konkretnim zadacima, ali sam se izgleda precenio :) However, spreman sam da radim na sopstvenom usavršavanju ;) >> U protivnom možeš lako dovesti >> do korupcije podataka na disku ako se zezaš sa trinaesticom... :) Dobro, privremeno ću ostaviti na stranu trinaesticu, hvala na upozorenju. Nisam imao pojma da je ona toliko gadna.
asembler.276 obren,
> Isprobao sam maločas i neće (TASM je 2.01) :(. Je l' kod tebe > prolazi? Ako da, koja je verzija asemblera? Buni se zato što si 'abcd' obeležavao kao labelu, odnosno što si stavio dvotačku posle 'abcd'. Sledeći primer lepo prođe (TASM 3.1): ideal model tiny codeseg org 0100h start: jmp begin abcd dw ? ; možeš i dw 0 begin: xor ax, ax mov [abcd], ax mov ax, 4c00h int 21h end start > Odakle da počnem? Imam nekolike helpove koje sam uglavnom > pokupio sa Sezama, ali nisam siguran da je negde baš potpuno > objašnjeno pisanje TSR-programa. 1) Pogledaj na primer TECHREF, HELPPC i Ralph Brown-ovu listu interapta mada je ova zadnja prilično prenatrpana svim i svačim što je čini pomalo teškom za snalaženje. Pogledaj dos funkciju 34h, poglavlje o TSR programima u TechRef-u, interapt 28h, pročitaj šta je to Disk Transfer Area pošto već hoćeš da radiš sa diskom. 2) Ako imaš kolekciju starih brojeva "Računara", potraži (odlične) članke Zorana Životića i mislim Bojana Petrovića na temu rezidentnih programa. 3) Probaj da iz dibagera ili Sourcera analiziraš tuđe programe (pa i viruse ;) i tako skidaš "cake". Ipak, kad malo bolje poledaš, danas je već prilično deplasirano baktati se sa tim stvarima pošto je DOS a samim tim i TSR programi polako otišao u zasluženu penziju. Sa druge strane, sistemsko programiranje je jedna jako zanimljiva stvar, i nikako ne može da šteti ako upoznaš dušu svoje mašine pre nego što pređeš na Javu, Delphi i ostale bildere ;)
asembler.277 nethsah,
treba mi neki dobar assembler...
asembler.278 stameni,
>> Buni se zato što si 'abcd' obeležavao kao labelu, odnosno što >> si stavio dvotačku posle 'abcd'. Sledeći primer lepo prođe >> (TASM 3.1): E, u dvotački je bila stvar! :) Nisam znao da to može praviti probleme, hvala na savetu! Sad radi k'o satić. >> Sa druge >> strane, sistemsko programiranje je jedna jako zanimljiva >> stvar, i nikako ne može da šteti ako upoznaš dušu svoje mašine >> pre nego što pređeš na Javu, Delphi i ostale bildere ;) Nego šta, zato se i petljam time :) Hvala za info i pointere, a kad naletim na problem, eto mene opet ovde :) Takođe, eto mene ovde ako naiđem na nešto interesantno.
asembler.279 stameni,
>> treba mi neki dobar assembler... Probaj a86, dobar je i košta džabe ;) te ga ima i u dir-u.
asembler.280 nethsah,
haval za savet...
asembler.281 mdimitrijevic,
> Pa ovako, TASM je jednoprolazni asembler, tako da u trenutku kada si > koristio "abcd" on ne zna da li je word ili byte pa moraš eksplicitno > da mu naglasiš (preko word ptr). Da si "abcd" deklarisao ispred mesta > na kome ga koristiš, asembler bi već znao da se radi o wordu i sve bi > prošlo bez problema. Tasm jeste jednoprolazni asembler, ali mu se može narediti da prođe kroz kod više puta. To se određuje direktivom /M<broj prolaza>. Recimo /M9 za devet prolaza kroz kod. >> pokušavam da handleujem 13h u kome pokušavam da izbacim string uz >> pomoć 21h, no nešto ne ide... No, videćemo... Zašto string ne ispišeš preko INT 10h. On ima nekoliko rutina koje mogu sasvim lepo da ispišu string, ili da ideš na to da string ispišeš slovo po slovo (preko INT 10h) zbog kompatibilnosti sa svim, pa i XT računarima.
asembler.282 stameni,
>> Zašto string ne ispišeš preko INT 10h. On ima nekoliko rutina >> koje mogu sasvim lepo da ispišu string, ili da ideš na to da >> string ispišeš slovo po slovo (preko INT 10h) zbog >> kompatibilnosti sa svim, pa i XT računarima. Pitanje je bilo postavljeno meni. Nisam se bio setio da može preko BIOS-a. Pogled u Interrupt Lists otkriva da je u pitanju funkcija 13h (a verovatno može i na nekoliko drugih načina, od kojih je jedan slovo po slovo, kao što si rekao). Nisam siguran da bi pisanje preko int 10h rešilo neke probleme u vezi sa pozivanjem int 21h iz handlera int 13h.
asembler.283 jexy,
;; >> treba mi neki dobar assembler... ;; ;; Probaj a86, dobar je i kosta dzabe ;) te ga ima i u dir-u. Zasto da uzima truo asembler, vec lepo ne uzme Tasm v4.0 koji je inace nesto skuplji a mnoogo bolji.Kod lokalnog pirata kosta cela 2 dinara druze :)
asembler.284 jexy,
;; Nisam siguran da bi pisanje preko int 10h resilo neke probleme ;; u vezi sa pozivanjem int 21h iz handlera int 13h. Ako hoces da zoves int 21h iz TSR-a, moras da preuzmes i sam 21h koji postavlja neke tvoje promeljive o zauzetosti DOS-a.Na osnovu njih mozes da vidis da li je int 21h slobodan ili ne.Ovo me je podsetilo kako smo razbili sistem u skoli :).Naime napravili smo mali TSR koji hvata tastere preko int 9h a trpa ih u neki bafer, a preko int 8h,13h,21h smo kontrolisali upis bafera u odredjeni fajl.Kako niko nista nije posumnjao uskoro smo dobili sifru supervisor-a O:). BTW, Sva eksperimentsanja ovog tipa izbegavaj da radis kod kuce.Sve sto smo uradili napravljeno je u skoli.
asembler.285 mdimitrijevic,
> Nisam siguran da bi pisanje preko int 10h rešilo neke probleme > u vezi sa pozivanjem int 21h iz handlera int 13h. Izgleda da se ne razumemo (?). Ako pišeš preko Int 10h onda ti ne treba pozivanje Int 21h. Ne vidim gde je problem. Ukoliko sve uradiš preko Int 10h, i ukoliko preuzmeš Int 13h, koji je uzgred prilično rizičan za preuzimanje, onda samo proveravaš da li je pokušaj pristupanja (čitanja) diska zabranjen i ako jeste vratiš grešku. E sad, ispisivanje poruke o zabrani pisanja bi morao da odradiš jedino ako je računar u tekst modu, mada može i ako je u grafičkom modu ali je to malo komplikovanije i povećava sam kod programa koji bi trebalo da bude što manji. Pokušaj da napraviš neku osnovu, kasnije je mnogo lakše nadograđivati program. I jedan dobronameran savet, ukoliko nisi previše siguran u to što radi Int 13h, piši program na tuđem računaru :)
asembler.286 stameni,
>> > Nisam siguran da bi pisanje preko int 10h rešilo neke >> > probleme u vezi sa pozivanjem int 21h iz handlera int 13h. >> >> Izgleda da se ne razumemo (?). Ako pišeš preko Int 10h onda ti >> ne treba pozivanje Int 21h. Ne vidim gde je problem. Iskreno, nije mi baš najjasnije šta sam tim gore hteo da kažem O:) Ako se ne varam, mislio sam da ispisivanje i može da ide preko int 10h, ali ostaje problem oko (potencijalnog; isprobao sam kasnije a nemam pojma jesam li o neuspehu ovde pisao) poziva int 21h radi "nečega", jer je int 21h potreban za get / set interrupt vector. Valjda. >> Pokušaj da napraviš neku osnovu, kasnije je mnogo lakše >> nadograđivati program. Urađeno i source sa komentarima (custom2) okačen uz poruku. Pokušao sam da ga modifikujem da preuzme int 26h (zbog saveta koji si mi dole naveo, a koji sam takođe dobio od Obrena), misleći da ga možda pozivaju ostali intovi. Pogrešno sam mislio. A da ga je bilo lako napisati prepravljanjem sourcea "starog" programa -- bilo je. >> I jedan dobronameran savet, ukoliko >> nisi previše siguran u to što radi Int 13h, piši program na >> tuđem računaru :) Odustajem od int 13h :) dok se ne usavršim. :) wpr.asm
asembler.287 mdimitrijevic,
> Iskreno, nije mi baš najjasnije šta sam tim gore hteo da kažem > O:) Ako se ne varam, mislio sam da ispisivanje i može da ide preko > int 10h, ali ostaje problem oko (potencijalnog; isprobao sam > kasnije a nemam pojma jesam li o neuspehu ovde pisao) poziva int > 21h radi "nečega", jer je int 21h potreban za get / set interrupt > vector. Valjda. Ukratko, ti pozivaš Int 21h za get/set int vector PRE nego što program postane rezidentan ! Pošto se postavi potrebni interapt vektor Int 21h se ne mora i ne treba pozivati, jer će doći do blokiranja i kojekakvih problema. Na kraju krajeva moguće je postaviti svoj interapt vektor i bez Int 21h, prostim direktnim čitanjem i upisom u Vector tabelu. > Urađeno i source sa komentarima (custom2) okačen uz poruku. > Pokušao sam da ga modifikujem da preuzme int 26h (zbog saveta koji > si mi dole naveo, a koji sam takođe dobio od Obrena), misleći da > ga možda pozivaju ostali intovi. Pogrešno sam mislio. A da ga je > bilo lako napisati prepravljanjem sourcea "starog" programa -- > bilo je. Kod ovakvog programa dobro je obezbediti se od mogućih "pogrešnih podataka", jer ukoliko se umesto na određeno mesto, nešto upiše na neko drugo može doći do velikih problema. Int 13h piše direktno na disk tako da možeš uništiti bukvalno sve na disku upisom u BOOT sektor, FAT tabelu itd. Između ostalog potrebno je kontrolisati sve pozive Int 13h i proveravati da li se pokušava bilo kakvo čitanje, pisanje ili preuzimanje informacija o "zaštićenom disku". Evo recimo jedne prostije ideje za zaštitu, sa kojom na kraju krajeva može da se napravi manje problema :). Napisati program koji sprečava prelazak/ promenu direktorijuma na neki unapred zadati. Što će reći na svaki pokušaj CD C:\PROBA da odbije da uđe u njega. Ajde da vidimo imaš li neku ideju kako ovo da uradiš. Rado ću ti pomoći da ovo napišeš, ali prvo očekujem da dođeš bar do početne ideje, tj. šta bi trebalo koristiti za izradu programa (koji Int itd.).
asembler.288 stameni,
>> Napisati program koji >> sprečava prelazak/ promenu direktorijuma na neki unapred >> zadati. Što će reći na svaki pokušaj CD C:\PROBA da odbije da >> uđe u njega. Ahm, dakle imam i domaći zadatak? :) Okay, jedna verzija programa, koja ne radi iz meni nepoznatih razloga, je okačena uz poruku, a ideja je opisana malo dole. >> Pošto se postavi potrebni >> interapt vektor Int 21h se ne mora i ne treba pozivati, jer će >> doći do blokiranja i kojekakvih problema. A šta ako mi je potrebna neka funkcija interrupta 21h koja nije Set Interrupt Vector? Pitam zato što mi na preuzimanje interrupta 21h u domaćem zadatku Turbo Debugger 2.01 redovno resetuje računar. :( >> Na kraju krajeva moguće je postaviti svoj interapt vektor i >> bez Int 21h, prostim direktnim čitanjem i upisom u Vector >> tabelu. Inače, koliko je ovo "bezbedna" metoda? Mislim da je u redu kad je u pitanju int 21h, jer poziv njemu ne bi trebalo da može da se desi ako je upisana, recimo, samo jedna reč vektora. Problem bi mogao da nastane kod hardverskih prekida, ako nije kompletiran pointer na interrupt. Evo i algoritma za domaći ;) Ideja je da se preuzme 21h i handleuje funkcija 3bh, Set Current Directory. Prema "Svim MS DOS funkcijama" (umetak iz nekih "Računara" od Zorana Životića) ta funkcija realizuje internu DOS naredbu chdir. String koji se šalje funkciji nalazi se na adresi DS:DX, i on se upoređuje sa onim koji korisnik zada. Ako su jednaki, sprečava se prelazak u direktorijum. Moguć problem je da string koji se prosleđuje funkciji 3bh nije "expandovan", odnosno da se, na primer, na sledećoj poziciji: C:\PROBA> cd test C:\PROBA\TEST> funkciji prosleđuje smao string "TEST", a ne i "C:\PROBA\TEST". To već ne bih umeo da rešim bez rekurzivnog pozivanja, što mi se baš i ne radi, ako može da se izbegne :) Detaljniji opis algoritma sledi, pa koga interesuje neka čita. Koga baš mnogo interesuje neka skine i komentarisan source programa... koji, istina, još ne radi O:) Prvo se preko interrupta 21h funkcija 35h sačuva pokazivač na originalan 21h. Zatim se taj pokazivač postavi na sâm handler, pa se završava "loader". Od tog trenutka trebalo bi da radi samo handler. Handler ispituje je li upao poziv funkcije 3bh. Ako nije, skače se na stari interrupt 21h, da bi se odradile ostale funkcije. Ako jeste, bajt po bajt se porede string koji je ušao u handler na DS:DX i onaj kome treba da bude onemogućeno ulaženje; uzeo sam da se ovaj drugi završava nulom. Ako se došlo do nule, znači da su svi ostali znakovi jednaki (*), pa treba onemogućiti promenu u taj direktorijum. Ako pre nule bude nekih različitosti, prelazi se na kraj handlera (**), inače se preko interrupta 10h (funkcija 13h) ispisuje poruka o grešci i završava rad handlera. Bugovi koji su mi pali na pamet u toku kucanja ovog teksta: (*) Ne prelazi se u direktorijum ako je ime datog direktorijuma deo imena direktorijuma unesenog u handler, jer je dati null- terminated, a uneti ima iza nule prvog još nekoliko znakova. Veliki problem. (**) Treba da se pređe ne na kraj handlera, nego na stari 21h, da bi se odradila komanda cd. Mali problem. Najveći problem je što mi Turbo Debugger (2.01) redovno resetuje računar čim pokuša da odradi Set Interrupt Vector. Nemam pojma što se to dešava. Da li valja ideja, bar? :) nocd.asm
asembler.289 mdimitrijevic,
Izvinjavam se na dužini poruke, ali oni koji prate ovu TEMU će u svakom slučaju biti zainteresovani da ovo pogledaju. Prilazem NOCD.ASM koji radi pod cistim DOS-om. Program je mogao i bolje da se napise ali je ovo samo primer. Ako se mozda provukla neka greska onda je to zato sto sam ga napisao na brzinu. Važna napomena je da sve ovo ovde izneto NE RADI pod 4DOS-om, on malo drugačije postavlja aktivni direktorijum. > Ahm, dakle imam i domaći zadatak? :) Okay, jedna verzija > programa, koja ne radi iz meni nepoznatih razloga, je okačena uz > poruku, a ideja je opisana malo dole. Razloge zašto primer koji si poslao ne radi ćeš otkriti kasnije u poruci. Ali, glavni razlog je što je skoro sve pogrešno napisano :) > A šta ako mi je potrebna neka funkcija interrupta 21h koja nije > Set Interrupt Vector? Pitam zato što mi na preuzimanje interrupta > 21h u domaćem zadatku Turbo Debugger 2.01 redovno resetuje > računar. :( Ukoliko iz interapta želiš da pozivaš funkcije Int 21h moraš da preuzmeš i njega, onda da pratiš da li je DOS slobodan (recimo ako bi hteo nešto da snimaš u fajl itd.), pa da radiš ono što si naumio. Da bi uradio nešto ovako komplikovano moraš dobro da paziš na registre, flag-ove, stek i sve ostalo :) Turbo Debugger ti resetuje računar zato što je kod koji predstavlja novi Int 21h pogrešno napisan, totalno pobrljavi i dolazi do boga pitaj čega u memoriji. > Inače, koliko je ovo "bezbedna" metoda? Mislim da je u redu kad > je u pitanju int 21h, jer poziv njemu ne bi trebalo da može da se > desi ako je upisana, recimo, samo jedna reč vektora. Problem bi > mogao da nastane kod hardverskih prekida, ako nije kompletiran > pointer na interrupt. Kako misliš da Int 21h postavlja interapt vektor ? I on mora da ga upiše u Vektor tabelu isto kao što bi to i mi uradili. Morali bi da maskiramo interapte i upišemo u Vektor tabelu. > Evo i algoritma za domaći ;) Ideja je da se preuzme 21h i > handleuje funkcija 3bh, Set Current Directory. Prema "Svim MS DOS Baš tako. > Moguć problem je da string koji se prosleđuje funkciji 3bh nije > "expandovan", odnosno da se, na primer, na sledećoj poziciji: > C:\PROBA> cd test > C:\PROBA\TEST> > funkciji prosleđuje smao string "TEST", a ne i "C:\PROBA\TEST". To > već ne bih umeo da rešim bez rekurzivnog pozivanja, što mi se baš > i ne radi, ako može da se izbegne :) Postoji "nedokumentovana" funkcija 60h koja od skraćene putanje vraća punu putanju do direktorijuma, fajla itd. Ovaj problem bi rešavao tako što preuzmeš trenutno aktivni direktorijum i na njega nakalemiš ono što ti je prosleđeno. Ako je aktivni direktorijum C:\PROBA a braniš ulazak u C:\PROBA\TEST, onda ako dobiješ ime direktorijuma koje nema C:\ napred, a aktivni disk je C onda dodaješ TEST na C:\PROBA\ i onda testiraš. Shvataš, načIn ? Naravno, ima tu nekoliko varijacija na temu. > (*) Ne prelazi se u direktorijum ako je ime datog direktorijuma > deo imena direktorijuma unesenog u handler, jer je dati null- > terminated, a uneti ima iza nule prvog još nekoliko znakova. > Veliki problem. > (**) Treba da se pređe ne na kraj handlera, nego na stari 21h, da > bi se odradila komanda cd. Mali problem. Moja ideja je da (za prvu *) ne treba dozvoliti ulazak ni u poddirektorijume direktorijuma koji štitimo. Ali ako želiš da ga pustiš unutra onda prvo prebrojiš koliko znakova ima direktorijum u koji se prelazi pa ako prelazi broj znakova direktorijuma koji štitimo onda ga prekačemo. > Da li valja ideja, bar? :) Ideja valja. Sada mala analiza koda NOCD.ASM: Ne smeš tek tako da šalješ na stek jer ako pozivni program ima mali stek onda nastade sr*nje. Ili upišeš sadržaje registara u memoriju ili postaviš svoj stek. push ax push bx push cx push es push bp Ubacio si u BX ofset labele DISABLED umesto ofset od STRING. Onda, porediš preko AX (16-bitno) u redu ako je dužina putanje koju štitiš parna, ako nije porediće se jedan bajt koji može biti različit (i biće u 99.999...99% slučajeva). Onda ako putanje nisu jednake skačeš na END_HANDLER a nisi skinuo sa steka AX, BX, CX, ES, BP. Da ne pominjem da ako direktorijum nije taj koji tražimo onda se blokira ceo računar. Int 10h si pogrešno pozvao, zaboravio si da postaviš BH,BL,DH,DL,AH,AL tj. BH=video strana, BL=atribut, DH=red, DL=kolona na ekranu (ili obrnuto), AH=13h, AL=1 (ispis znakova uz pomeranje kursora). ; ds:dx pokazuje na početak imena ; direktorijuma u koji se pokušava ulaz mov bx, offset disabled ; što se upoređuje sa stringom disabled mov bp, dx loop1: mov ax, [cs:bx] or ax, ax ; Kraj stringa? jz disabled ; Da, stringovi su jednaki cmp ax, [ds:bp] ; Poređenje pojedinačnih slova jnz end_handler ; Stringovi su različiti inc bx ; Sledeće slovo prvog stringa inc bp ; Sledeće slovo drugog stringa jmp loop1 ; Nazad u petlju ; Prethodni redovi su mogli i uz rep scasb, da je poznata ; dužina imena direktorijuma u koji treba zabraniti ulazak disabled: mov ax, 13h ; Ispis poruke preko int 10h mov cx, [len] push cs pop es mov bp, offset tekst int 10h pop bp ; Vratiti registre sa stacka pop es pop cx pop bx pop ax end_handler: popf iret ; Povratak iz handlera nocd.asm
asembler.290 stameni,
>> Važna napomena je da sve ovo ovde izneto NE RADI pod 4DOS-om, >> on malo drugačije postavlja aktivni direktorijum. Činjenica da ovo do sada nisam znao mi u poslednje vreme komplikuje život.. :( >> Postoji "nedokumentovana" funkcija 60h koja od skraćene >> putanje vraća punu putanju do direktorijuma, fajla itd. Valja upamtiti, nisam znao. Može se proveriti i u Interrupt Lists i DosRef, što sam i uradio, i, interesantno, ne piše da je nedokumentovano, što znači da se može 'ladno koristiti. >> Ovaj >> problem bi rešavao tako što preuzmeš trenutno aktivni >> direktorijum i na njega nakalemiš ono što ti je prosleđeno. >> Ako je aktivni direktorijum C:\PROBA a braniš ulazak u >> C:\PROBA\TEST, onda ako dobiješ ime direktorijuma koje nema >> C:\ napred, a aktivni disk je C onda dodaješ TEST na C:\PROBA\ >> i onda testiraš. Shvataš, načIn ? Shvatam otprilike, samo što se petljati ovako kad postoji funkcija 60h? Mislim, preko 60h se dobije adresa (segment:offset) stringa koji se pokušava uneti i on se uporedi sa onim koji je zabranjen, itd. Odnosno, recimo da je zabranjen C:\PROBA\TEST. Pokušava se unos direktorijuma TEST. F-ja 60h vrati da je TEST u punom obliku C:\PROBA\TEST, ta dva se uporede i, kako su jednaki, zabranjuje se promena direktorijuma. Nadam se da nema zabune ako kažem da sam smatrao da je direktorijum C:\PROBA\TEST zaštićen (drukčije ime nego u postavci zadatka)? >> > (*) Ne prelazi se u direktorijum ako je ime datog >> > direktorijuma deo imena direktorijuma unesenog u handler, >> > jer je dati null- terminated, a uneti ima iza nule >> > prvog još nekoliko znakova. Veliki problem. >> Moja ideja je da (za prvu *) ne treba dozvoliti ulazak ni u >> poddirektorijume direktorijuma koji štitimo. Ali ako želiš da >> ga pustiš unutra onda prvo prebrojiš koliko znakova ima >> direktorijum u koji se prelazi pa ako prelazi broj znakova >> direktorijuma koji štitimo onda ga prekačemo. Mislim da se ovde nismo do kraja razumeli. U redu je da su i poddirektorijumi zaštićeni. Šta, međutim, ako nuli iz imena (odnosno na kraju imena) "zabranjenog" ;) direktorijuma odgovara neki smisleni znak kod onog drugog stringa? Nisi o tome vodio računa, no nije strašno. Evo o čemu se radi. Zabranjen je C:\PROBA\TEST i na kraju je stavljena 0. Pokušaj CD C:\PROBA\TE će biti ispravno shvaćen, i, ako taj direktorijum postoji, u njega će se preći; u redu. Ako se pokuša CD C:\PROBA\TEST2, biće ispitano da li je došlo do nule u prvom stringu, i ako jeste neće ni biti ispitivano dalje, odnosno kompjuter će misliti da su stringovi jednaki i zabraniće promenu direktorijuma. Na to sam mislio kod prve (*). Valjda je to jedini propust koji sam uočio u tvom programu. (...) petlja: mov al, byte ptr cs:[bx] or al,al jz ZABRANI cmp al, byte ptr ds:[bp] jne izadji inc bx inc bp jmp petlja ZABRANI: mov ah, 13h ; Ispis poruke preko int 10h (...) Ideja je da se prvo porede dužine imena direktorijuma, što nije problem za onaj koji se zada, nego za onaj u koji se pokuša prelaz. Da li je string koji vraća 60h nečim "terminisan"? >> Ne smeš tek tako da šalješ na stek jer ako pozivni program ima >> mali stek onda nastade sr*nje. Ili upišeš sadržaje registara u >> memoriju ili postaviš svoj stek. Ovo je primer neiskustva. Al' dobro sad... >> Ubacio si u BX ofset labele DISABLED umesto ofset od STRING. >> Onda ako putanje nisu jednake skačeš na END_HANDLER a nisi >> skinuo sa steka AX, BX, CX, ES, BP. Primer nekoncentracije. Da sam bio u prilici da pregledam debuggerom, primetio bih to. >> Int 10h si pogrešno pozvao, zaboravio si da postaviš >> BH,BL,DH,DL,AH,AL Za ovaj propust već nemam opravdanje. Imao sam glupu ideju da će ostali registri biti postavljeni po defaultu. GREŠKA TEŠKA. Vrlo dobro. Mislim da sam prilično naučio na ovom primerčiću. Hvala na uputstvima i sourceu problema. Zakeranje za kraj: iz probnog perioda ti je zaostala promenljiva (labela) len, koju si deklarisao, a ne koristiš je. cu :)
asembler.291 mdimitrijevic,
>>> Važna napomena je da sve ovo ovde izneto NE RADI pod 4DOS-om, >>> on malo drugačije postavlja aktivni direktorijum. > > Činjenica da ovo do sada nisam znao mi u poslednje vreme > komplikuje život.. :( Ne samo podešavanje aktivnog direktorijuma :( već i mnoge druge stvari (kojih sada ne mogu da se setim, davno sam radio te primere) ne rade kao pod običnim DOS-om. >>> Postoji "nedokumentovana" funkcija 60h koja od skraćene >>> putanje vraća punu putanju do direktorijuma, fajla itd. > > Valja upamtiti, nisam znao. Može se proveriti i u Interrupt > Lists i DosRef, što sam i uradio, i, interesantno, ne piše da je > nedokumentovano, što znači da se može 'ladno koristiti. Veruj da je nedokumentovana. A čim se to kaže onda znači da sledeće verzije DOS-a možda neće isto raditi sa tom funkcijom. Mada, pisao sam programe za potpuni pregled sistemskih informacija (možeš ga naći na Sezamu, potraži ga sa DIR MDINFO*.* /S /A) računara koji su koristili moge "nedokumentovane" pozive i do sada nije zapelo, a dobro je istestirano. U njemu imaš poprilično informacija vezanih za DOS i ostali softver i hardver. > Shvatam otprilike, samo što se petljati ovako kad postoji > funkcija 60h? Mislim, preko 60h se dobije adresa (segment:offset) > stringa koji se pokušava uneti i on se uporedi sa onim koji je > zabranjen, itd. Odnosno, recimo da je zabranjen C:\PROBA\TEST. > Pokušava se unos direktorijuma TEST. F-ja 60h vrati da je TEST u > punom obliku C:\PROBA\TEST, ta dva se uporede i, kako su jednaki, > zabranjuje se promena direktorijuma. > Nadam se da nema zabune ako kažem da sam smatrao da je > direktorijum C:\PROBA\TEST zaštićen (drukčije ime nego u postavci > zadatka)? > Mislim da se ovde nismo do kraja razumeli. U redu je da su i > poddirektorijumi zaštićeni. Šta, međutim, ako nuli iz imena > (odnosno na kraju imena) "zabranjenog" ;) direktorijuma odgovara > neki smisleni znak kod onog drugog stringa? Nisi o tome vodio > računa, no nije strašno. Naravno, složili smo se još na početku da ovo nije savršeno rešenje. Evo, pokušaj da uradiš ovaj primer još bolje, čisto zbpg vežbe. > Primer nekoncentracije. Da sam bio u prilici da pregledam > debuggerom, primetio bih to. Kad već pomenu debugger, ako si pokušao sa Turbo Debugger-om da prođeš kroz ovaj rezidentni primer video si da onda uopšte ne radi !!! Napišeš mali ASM sors koji samo poziva funkciju 3Bh da promeni aktivni direktorijum, i stepuješ kroz interapt 21h (naravno pre toga startuj NOCD). Primetićeš da se vrednosti registara na početku UOPŠTE ne upisuju u memoriju !!! Ovo je očigledno veliki BUG Turbo Debugger-a. > Vrlo dobro. Mislim da sam prilično naučio na ovom primerčiću. > Hvala na uputstvima i sourceu problema. Nema problema. Uvek mi je zadovoljstvo da pomognem kad imam vremena. > Zakeranje za kraj: iz probnog perioda ti je zaostala > promenljiva (labela) len, koju si deklarisao, a ne koristiš je. Šta da kažem, kriv sam :) Pokrivam se ušima.
asembler.292 lepiaf,
Hi! Molim vas ako neko zna da mi pomogne. Problem je: potrebno mi je da oznacim izvesni sektor na disketi (ne na HD-u) kao los, i stoga, da ga napravim neupotrebljivim za citanje. Kako to mogu da uradim? Problem je prilicno hitan... Unapred hvala pozdrav
asembler.293 bokir,
> Molim vas ako neko zna da mi pomogne. Problem je: potrebno mi je da > oznacim izvesni sektor na disketi (ne na HD-u) kao los, i stoga, da ga > napravim neupotrebljivim za citanje. Kako to mogu da uradim? Problem je > prilicno hitan... Ako imaš Norton Utilities, program DiskTools ima kao jednu od opcija markiranje sektora na disketama.
asembler.294 bokir,
Treba mi bilo kakav info o programiranju VESA 2.0. Čuo sam da može mnogo da ubrza rad sa grafikom i da ima podršku za protected mod. Interesuje me kako sve to iskoristiti...
asembler.295 jjerry,
Eeej,ljudi, da li neko,slucajno, ima ideju kako se prave interapt hendleri i,na kraju krajeva, sta su.Inace treba mi za prepoznavanje SB-a. Kaze ovako: ako je potpis ma ofsetu 103h interapt hendlera "SBSIM" onda je taj SBSIM instaliran.(SBSIM-Sound Blaster simplified interface ) Evo vam info pa ako ima neko neke ideje ,bio bih mu zahvalan. :)
asembler.296 stameni,
>> Eeej,ljudi, da li neko,slucajno, ima ideju kako se prave >> interapt hendleri i,na kraju krajeva, sta su. Pitanje je previše uopšteno, pa nisam siguran da li ću pogoditi ono što tebi treba. Postoje dve vrste (uopšteno) interaptova -- hardverski i softverski. Hardverske izaziva hardver računara, a softverski su uglavnom u stvari način da se brzo i uz malo memorije pozivaju funkcije OS-ova i drugog softvera. Interaptova ukupno može biti do 256 i označeni su brojevima 0-255 (tj. 00-ffh). Pozicija u memoriji svakog interapta određena je tabelom koja se nalazi u prvom kilobajtu memorije (0000:0000-0000:03ffh); za svaki se koristi po 4 bajta, dva za segment a dva za ofset. Interapt hendler je program koji se upiše negde u memoriju, a zatim izmeni podatke u tabeli prekida tako da pokazuju na njega. Od trenutka kad se izmeni tabela prekida, hendler je dužan da vodi računa o tome da odradi i ono što ima sam da odradi i ono što je stari interapt trebalo da odradi. Da bi to bilo uspešno, neophodno je da se sačuvaju registri mikroprocesora na početku rada handlera u nekoj strukturi (stek, deo memorije...), i da se sa te strukture vrate registri pri završetku rada hendlera. Ako želiš da se detaljnije posvetiš ovoj inače veoma interesantnoj (i nezahvalnoj za rad u današnje vreme) temi, prouči Interrupt Lists Ralfa Brauna, DosRef, HelpPC, kao i sve što možeš da nađeš na Sezamu. Pogledaj ovu temu dvadesetak poruka unazad, bilo je nekoliko primera interapt hendlera. Nikad nisam programirao SB, pa ne mogu da ti konkretno odgovorim na pitanje. Uz poruku je primer INT 9 hendlera, prema "Bajtu lične prirode 1085" iz "Računara 120", odakle može puno toga da se nauči. Autor je Boris (biber@sezam). Puno resetovanja :) i puno uspeha! int09.asm
asembler.297 jjerry,
Prvo 10X za one fajlove i sve one podatke,al' ipak,trebace mi dosta vremena dok to malo ukacim i sve to. Dakle Thanks anyway i Pozdrav !
asembler.298 biber,
> Kaze ovako: ako je potpis ma ofsetu 103h interapt hendlera "SBSIM" onda je > taj SBSIM instaliran Otprilike ovako: mov ah,35h mov al,interupt_vector_number int 21 ; time si dobio adresu "interapt hendlera" ; (registri ES:BX) es: mov ax,[bx+offset] ; dodaješ taj ofset od 103h mov cx,[bx+offset+2] mov dl,[bx+offset+4] cmp ax,"BS" jne nije_instaliran cmp cx,"IS" jne nije_instaliran cmp dl,"M" jne nije_instaliran ;ako je stigao doovde onda je instaliran Možda se potkrala neka greška, jer pišem dok sam na vezi, ali je principski to to.
asembler.299 biber,
Ima li neko dokumentaciju za programiranje SVGA kartica kompatabilnih sa VESA standardom? Konkretno, treba mi 320x200 u hi i true color modovima.
asembler.300 jexy,
;; ;; Ima li neko dokumentaciju za programiranje SVGA kartica ;; kompatabilnih sa VESA standardom? ;; ;; Konkretno, treba mi 320x200 u hi i true color modovima. Pretpostavljam de je skoro sve od rutina sto ti je potrebno jeste setovanje moda,promena 'banke' i eventualno postavljanje pocetne adrese ispisa ili nesto u tom fazonu. Najbolje resenje je da koristis VBE 2.0 mada saljem dokumentacije za VBE 1.2 kao i VBE 2.0 pa ti vidi. vbespec.zip
asembler.301 sasab,
Zna li neko kako da izvučem serijski broj biosa (valjda je to)? Mislim na onu kobasicu od dvadesetak cifara koja se ispisuje na dnu ekrana pri butovanju. "Podizvođač" sam na nekom programu, a glavni insistira na zaštiti preko ovog broja. Bogi
asembler.302 tomcat,
Zdravo, mucim se zadnja dva dana da napravim TSR (kostur je u paskalu) koji radi bi trebeo da radi sledecu (prostu) stvar: nakachi se na INT 9 i za svaki pritisnuti taster na tastaturi on podmetne svoj (npr. iz nekog stringa ili citanjem iz text. datoteke) Ono sto mi ne polazi za rukom je da nateram masinu da ignorise pritisnuti karakter. Pretpostavljam da to nije veliki problem, mozda samo manipulacija head&tail-om keyboard buffera ali mi nikako ne polazi za rukom. Nadam se da neko zna da resi ovaj problem. Unzpred sam zahvalan za pomoc. Vlada.
asembler.303 jjerry,
Nisam bas siguran,ali znam da uradim par stvari preko DOSovog interapta,da izvucem koji je sve hardver u masini,razne statuse ,pa i neke ID bajtove.Ako ti to moze pomoci,poslacu ti ili ovde ili na mail pa ti reci. Pozdrav !
asembler.304 tomcat,
Zdravo svima! (dodato kasnije :) - posto ne znam da li ce svi imati strpljenja da procitaju sve, jedno pitanje - koji je najbrzi algoritam da ustanovim sah-poziciju na sahovskoj tabli?) Pre neko vreme sam iskopao odnekud moj program za igranje saha koji sam poceo da pisem pre par godina na Amigi 500. Posto sam koristio metod "grube sile", sve je bilo jako sporo. Sada kada sam ga iskompajlirao na PC-ju (6x86@120Mhz) ispostavio sam da moze da gura do 6 polu-poteza unapred uz razumno cekanje (1 min). Pa sam odlucio da celu stvar optimizujem. Optimizacija je moja omiljena rec :) Program je pisan u paskalu i kompajliram ga TurboPascalom 7.0. Pitam se da li uopste postoji neki drugi kompajler, posto je ovaj jako star i ne generise 32-bitni kod. Sada cu izneti dve procedure koje su mi time-kriticne i koje sam prepravio u asembleru te bih molio da ako neko vidi nacin da se to napise bolje, neka odmah javi ! :) 1) procedure add(var lm:moves;var tp:integer;x,y,x1,y1:integer); begin lm[tp,1]:=x; lm[tp,2]:=y; // moves=array [1..80,1..5] of integer; lm[tp,3]:=x1; // napomena: integeri su 16-bitni lm[tp,4]:=y1; inc(tp); end; preradjeno u: procedure add(var lm:moves;var tp:integer;x,y,x1,y1:integer); begin asm mov ax,000Ah // ax:=10; (5x2 byte) les di,tp // [di]:=tp; mul es:word ptr [di] // pomnozimo ax sa tp inc es:word ptr [di] // inc(tp), kad smo vec tu les di,lm // smestimo lm u di add di,ax // i dodamo ax da dobijemo addresu -> lm[tp+1,1] end; // sada ide 32-bitni kod, kojeg TP ne ume da // generise inline ( // znam da je malo "prljavo" $66/$8B/$46/$08/ // mov eax, [bp+08] -> x=[bp+0Ah], y=[bp+08h] $66/$26/$89/$45/$F6/ // mov es:[di-0Ah],eax -> lm[tp,1]:=y, // lm[tp,2]:=x $66/$8B/$46/$04/ // mov eax, [bp+04] -> x1=[bp+06h],y1=[bp+04h] $66/$26/$89/$45/$FA // mov es:[di-06h],eax -> lm[tp,3]:=y1, // lm[tp,4]:=x1 ); end; Postignuto ubrzanje je ogromno ali mi se cini da ima mesta za jos... Kod mene ova procedura uzme oko 2 sekunde od tog 1 min, kada racunar "gleda" 6 polu-poteza unapred. Nije puno ali nije ni malo kada bude trebalo gledati 10 polu-poteza. Ova druga je mnogo vaznija i kriticnija. Evo je: 2) function eval(var a:tabla):integer; var sum:integer; //funkcija sabira polja a[i,j] i vraca zbir begin //tabla=array [1..12,1..12] of integer sum:=0; for i:=3 to 10 do for j:=3 to 10 do inc(sum,a[i,j]); // sum:=sum+a[i,j]; eval:=sum; end; zamenjeno sa: function eval(var a:tabla):integer;assembler; label l1,l2; asm xor ax,ax // ax ce igrati ulogu sum-a les di,a // adresa pocetka matrice (a[1,1]) smestena u di add di,66 // na to dodamo 66 (33*2 byte, krece se od a[3,10]) mov dx,8 // 10-3+1 vrsta l2: mov cx,8 // sabiramo 8 clanova jedne kolone l1: add ax,word ptr es:[di] // ax:=ax+a[i,j] sub di,2 // j:=j-2; loop l1 add di,40 // (12+8)*2 byte razlike dec dx // sledeca vrsta and dx,dx jnz l2 // ako je dx=0 onda kraj end; // u ax-u ostaje rezultat! Ova funkcija uzima oko 12 sekundi od 1 min. To je vec ozbiljno i zahteva dodatne optimizcije. Pitate se gde je ostatak od oko 45 sekundi. Pa vecina ostalog vremena ode na funkciju kojom se proverava da li data pozicija predstavlja sah. Neverovatan problem! Eto, to je to. Kada malo sam pogledam ovo sto napisah vidim da se niko ziv ne bi zezao sa ovim. Ali ako ovo cita neki "manijak" za optimizaciju (kao sto sam ja), i kojem je moto "usteda na jednoj instrukciji moze biti veoma dragocena pri 10^7 iteracija", i ako taj neko ima dovoljno vremena da prouci ovih 40-tak redova koda i uoci nesto korisno, ja cu biti veoma zahvalan. Inace, mozda je glupo da pitam, da li je mozda jos neko pravio svoj sahovski program? (hehe, ko da nemaju ljudi sta pametnije da rade). Bas bi zeleo da ih pustimo jedan na drugog. Mene je "vestacka" inteligencija oduvek privlacila, zato sam i napisao ovo cudo. Ahh, zove se Gandalf inace. Izvinjavam se zbog duzine ovo poruke onima kojima je to zasmetalo.
asembler.305 magn,
Kako promeniti boju ispisa na ekranu u jednom delu reda? Znam kako se boje menjaju na celom ekranu ali mi to ne zadovoljava potrebe.
asembler.306 stameni,
>> Kako promeniti boju ispisa na ekranu u jednom delu reda? Znam >> kako se boje menjaju na celom ekranu ali mi to ne zadovoljava >> potrebe. Ako sam te dobro shvatio, mogao bi da ručno menjaš atribute, recimo ovako: procedure SetAttrib(x, y, status: byte); begin mem[$b800:2*x+160*y+1] := status end; Dakle, od početka video memorije (segment $b800) gađaš atribut po atribut. Atributi se nalaze na neparnom offsetu.
asembler.307 sasab,
> interapta,da izvucem koji je sve hardver u masini,razne statuse ,pa > i neke ID bajtove.Ako ti to moze pomoci,poslacu ti ili ovde ili na Bio bih zahvalan.
asembler.308 jexy,
Imam nekih gadnih problema sa TD-om. Naime desava mi se to da kada idem step-by-step (F8) kroz program TD jednostavno preskoci (!?!?!) neke instrukcije ili se 'zaglavi' na nekoj od instrukcija i nece da ide dalje !!!! Takodje mi se desavalo da posle recimo 'mov di,0ah' u DI se nalazi neki levi broj koji veze nema sa ovim prethodnim ili sadrzaj DI ostane nepromenjen. Probao sam to da degbagujem sa WD-om koji ide uz Watcom v10.5 i on je sve to dobro uradio ali se kod njega desavaju druge stvari :(. Na primer posle mov eax,10 shl eax,16 u eax se nalazi 0 !!!! Ako neko ima ideju sta bi to moglo biti neka javi. BTW, program koji sam testirao radi u real modu.
asembler.309 qpele,
Imam nekih gadnih problema sa TD-om. Naime desava mi se to da kada idem step-by-step (F8) kroz program TD jednostavno preskoci (!?!?!) neke instrukcije ili se 'zaglavi' na nekoj Je si li probao sa F7 ?
asembler.310 jexy,
;; Je si li probao sa F7 ? Da i nema nikakve razlike.. i dalje se zaglupi..
asembler.311 firus,
Je> Ako neko ima ideju sta bi to moglo biti neka javi. Jedno glupo pitanje. Da li je to tvoj program? Ako nije tvoj, jako je moguće da se radi o antidebug zaštiti. X
asembler.312 jexy,
;; ;; Jedno glupo pitanje. Da li je to tvoj program? ;; ;; Ako nije tvoj, jako je moguce da se radi o antidebug zastiti. ;; :) Pa naravno da je moj program..
asembler.313 biber,
>> l2: >> mov cx,8 // sabiramo 8 clanova jedne kolone >> l1: >> add ax,word ptr es:[di] // ax:=ax+a[i,j] >> sub di,2 // j:=j-2; >> loop l1 >> add di,40 // (12+8)*2 byte razlike >> dec dx // sledeca vrsta >> and dx,dx >> jnz l2 // ako je dx=0 onda kraj >> end; // u ax-u ostaje rezultat! Malo brže je (bar na nekim procesorima) umesto: sub di,2 napisati: dec di dec di Takođe, posle "dec dx" nije potrebno "and dx,dx" jer se pri "dec dx" automatski postavlja ZF. Dalje, ako je brzina imperativ, nemoj da sabiranje stavljaš u petlju, nego "ručno" ispiši sva sabiranja. Čini mi se da ih imaš svega pedesetak. add ax,(adresa elementa a[3,3]) add ax,(adresa elementa a[3,4]) add ax,(adresa elementa a[3,5]) itd.
asembler.314 tomcat,
> Malo brze je (bar na nekim procesorima) > umesto: sub di,2 > > napisati: dec di > dec di Tako sam i ja prvobitno napisao i onda se iznenadio kada je sub di,2 bio nekih 15 % brzi (na Cyrix-u). > Takode, posle "dec dx" nije potrebno "and dx,dx" jer se pri "dec dx" > automatski postavlja ZF. Hvala. To sam prevideo. > Dalje, ako je brzina imperativ, nemoj da sabiranje stavljas u petlju, > nego "rucno" ispisi sva sabiranja. Cini mi se da ih imas svega pedesetak. > > add ax,(adresa elementa a[3,3]) > add ax,(adresa elementa a[3,4]) > add ax,(adresa elementa a[3,5]) Ima ih 64. I u pravu si ustedece 64x10 clockova. Jedino treba ispisati sve i tada je vrlo osetljivo na promene. > itd. Sta jos? :)
asembler.315 jexy,
;; procedure add(var lm:moves;var tp:integer;x,y,x1,y1:integer); ;; begin ;; lm[tp,1]:=x; ;; lm[tp,2]:=y; // moves=array [1..80,1..5] of integer; ;; lm[tp,3]:=x1; // napomena: integeri su 16-bitni ;; lm[tp,4]:=y1; ;; inc(tp); ;; end; Prvo, nemoj da mnozis tp sa 10 vec to zameni sa siftovanjima pa ces samo zbog toga dobiti veliko ubrzanje ako se rutina poziva mnogo puta tako da bih ja ovo u asm-u uradio ovako.. procedure add(var lm:moves;var tp:integer;x,y,x1,y1:integer);assembler; asm les di,tp mov ax,es:[di] dec ax { prvi clan je lm[1,1] a ne lm[0,0] } mov dx,ax inc word ptr es:[di] shl ax,3 {; tp*8} add dx,dx {; tp*2} add ax,dx {; tp*10} les di,lm add di,ax {; es:di -> lm[tp,1]} db 66h;mov ax,[bp+8] {; mov eax,[bp+8] ax=y} db 66h;ror ax,16 {; ror eax,16} db 66h;stosw; {; lm[tp,1]:=x; lm[tp,2]:=y } db 66h;mov ax,[bp+4] {; mov eax,[bp+4] ax=y1} db 66h;ror ax,16 {; ror eax,16 } db 66h;stosw; {; lm[tp,3]:=x1; lm[tp,4]:=y1 } end;
asembler.316 tomcat,
Nesto sto me je zapanjilo. Sledece naizgled najprostija petlja na planeti kompajlirana Turbo Pascalom 7 je skoro 10 puta sporija nego kad se napise u asembleru. ----------- sum:=0; for i:=1 to 8 do for j:=1 to 8 do sum:=sum+a[i,j]; ----------- Vreme za 5,000,000 iteracija: TP7=43.6 sec ASM=4.6 sec
asembler.317 jexy,
;; ;; Ima ih 64. I u pravu si ustedece 64x10 clockova. Jedino treba ;; ispisati sve i tada je vrlo osetljivo na promene. ;; To se moze uprostiti ako doticnu rutinu pises odvojeno i zatim je ulinkujes u PASCAL zato jer onda mozes koristiti makroe koji mnogo skracuju pisanje. Takodje ako znas da konacna vrednost SIGURNO staje u 16 bita odnosno da se pri sabiranju nece javiti prekoracenje onda mozes da koristis 32-bitne registre i razlika u brzini bi bila velika.. Evo kako bi trebalo da izgleda eksterni .asm fajl (npr. eval.asm) koga, nakon sto napravis eval.obj, ulinkujes u PASCAL sa jednim {$l eval.obj} function eval(var a:tabla):integer;external; ..i onda normalno radis sa funkcijom. BTW, ovde sam pretpostavio zbir svih vrednosti staje u 16 bita i da nema negativnih vrednosti. Ako to nije ispunjeno onda ti preostaje da koristis add ax,[...] umesto add eax,[...] ---------------------------------------------------- .386 code segment use16 assume cs:code public eval eval proc near a equ [bp+4] ; +2 zbog push bp push bp mov bp,sp push ds lds si,a ; ds:si -> a[1,1] add si,(2+2*12)*2 ; krecemo od a[3,3] xor eax,eax I=0 REPT 8 J=0 REPT 4 ; REPT 8 ako rez. ne staje u 16 bita add eax,[si+(I*12+J)*2] ; *2 zato sto su word tipa J=J+2 ; J=J+1 ako rez. ne staje u 16 bita ENDM I=I+1 ENDM shld edx,eax,16 ; ovo ne treba ako add ax,dx ; rez. ne staje.. pop ds pop bp ret 4 eval endp code ends end
asembler.318 jjerry,
Evo jedno,verovatno laičko, pitanje : Ovaaj..dakle,kako da proceduru u jednom ASM fajlu ulinkujem sa C++ programom.Tacnije ,trebaju mi procedure i neke definicije iz tog fajla da bi ih povez'o sa hederom i ¨normalno¨ koristio.U asm fajlu imam sve Public deklaracije,neke procedure imaju i argumente..itd. Pomagajte !
asembler.319 biber,
>>> add ax,(adresa elementa a[3,3]) >>> add ax,(adresa elementa a[3,4]) >>> add ax,(adresa elementa a[3,5]) >>> itd. >> >> Sta jos? :) "Itd." se odnosilo na oner silne add instrukcije. Nisam se dosetio ničeg više.
asembler.320 jjerry,
Hi,zanima me ovako nesto... Posto od skora pisem u asembleru (mozda bi se cak moglo reci da jos ucim) sreo sam se sa SHL,SHR,ROL,ROR itd. dakle,shift i rotate komande...Posto mi nisu jasne kako rade i cemu sluze (iako naslucujem iz naziva),moze li neko da mi opise te komande,sta rade,koje flegove setuju,i par primera. Hvala unapred :)
asembler.321 firus,
Jj> naslucujem iz naziva),moze li neko da mi opise te komande,sta Jj> rade,koje flegove setuju,i par primera. Znaš šta su meni rekli kad sam to pitao? "Skini HELPPC." Sad ja tebi to kažem. :) Ako ne shvatiš ni posle toga, pitaj ponovo, onda ću da ti objasnim. X
asembler.322 jjerry,
Ma znaam za sve te HELPPC fore (iako nemam taj HELPPC) imam onaj Norton Guide bazu za asembler (stvar je super ,inace : opsirno,detaljno) al' ja opet ne kapiram na kom principu i sta ustvari rade one SHL(R) i ROL(R) komande :) Opet kazem ,malo opsirnije,sa primerima :) 'Ajd' pozdrav !
asembler.323 banga,
> opsirno,detaljno) al' ja opet ne kapiram na kom principu i sta > ustvari rade one SHL(R) i ROL(R) komande :) SHL pre posle 11010001 10100010 isto što i *2, u ovom slučaju ima OF ROL " 10100011 Primer je za 8 bita Za flagove i ostalo ćitaj bolan. A kako ćeš to da primeniš zavisi od tebe
asembler.324 firus,
Jj> opsirno,detaljno) al' ja opet ne kapiram na kom principu i sta Jj> ustvari rade one SHL(R) i ROL(R) komande :) Prvo pročitaj ovo. Jel ovo bolje od tog što ti imaš. Ja bi rekao da jeste. --- CUT HERE --- SAL/SHL - Shift Arithmetic Left / Shift Logical Left Usage: SAL dest,count SHL dest,count Modifies flags: CF OF PF SF ZF (AF undefined) Shifts the destination left by "count" bits with zeroes shifted in on right. The Carry Flag contains the last bit shifted out. --- CUT HERE --- Jj> Opet kazem ,malo opsirnije,sa primerima :) Evo ga i primer. :)) Uzmeš neki broj, recimo 00110111 i nalazi se recimo u AX registru. Daš mu SHL AX,3 i šta će se desiti? Pa lepo ti kaže ono gore, ubaciće tri nule na početak i ovo pomeriti udesno za tri mesta. Znači posle ovoga u AX ostaje 00000110. Da si stavio SHR AX,4 dobio bi 01110000. Jel konačno jasno. X p.s. A da, uzmi Help PC. :)
asembler.325 jjerry,
Za "ono gore" znam ,imam to.. :) Al' opet mi bas nije bilo preterano jasno...:) OK hvala,al' sad me samo interesuje kakva bi bila neka prakticna primena tih komandi :) Npr. da se dobije Hi i Lo part nekog broja ? OK je za SHL(R),a sta je sa ROL(R) i kakva je razlika izmedju SAL i SHL ? Izvin'te ako sam udavio i opet kazem 10X puno !!! Pozdrav !
asembler.326 r.i.s,
Zna li ko kako je moguce detektovati da li je ekran u modu sa 43 odnosno 50 linija (EGA/VGA) mod ? Klasicni BIOS poziv mov ah,0fh int 10h ne pomaze.
asembler.327 obren,
> Zna li ko kako je moguce detektovati da li je ekran u modu > sa 43 odnosno 50 linija (EGA/VGA) mod ? > > Klasicni BIOS poziv mov ah,0fh int 10h ne pomaze. To bi trebalo da radi, verovatno da negde grešiš. Ako nisi do sada, obrati pažnju da se pri pozivu te BIOS funkcije prljaju SP, BP, AX, SI i DI registri. U svakom slučaju lakše je te informacije dobiti iz tzv. "BIOS data area" gde na adresama 0000:0484h (byte) i 0000:044Ah (word) možeš saznati koji je broj redova (-1) odnosno kolona u trenutnom video modu. P.S. Ako nemaš nabavi Norton Guide za ASM, HelpPC ili TechRef (ima ih na Sezamu).
asembler.328 bokir,
NortonGuides za TASM 4.0 Ideal mode ng_tasm4.zip
asembler.329 bokir,
NortonGuides sa Intel instrukcijama od XT-a do Pentiuma. Uključuje CPU, FPU i MMX instrukcije, zajedno sa opcode-ovima. ng_x86.zip
asembler.330 acap,
Trazim pomoc u vezi asemblerske grafike i pravljenja introa. Interesuju me efekti i pointeri na prethodne zanimljive poruke. Mbasta.
asembler.331 jexy,
;; Trazim pomoc u vezi asemblerske grafike i pravljenja introa. ;; Interesuju me efekti i pointeri na prethodne zanimljive poruke. ;; ;; Mbasta. U ovoj confi poruka takvog tipa je vrlo malo da ne kazem da ih uopste i nema. Ako imas pristup internetu onda ti preporucujem da pogledas sledece sajtove: http://www.cdrom.com/pub/demos - Ogromna Hornet arhiva, ima na tone sorsova ftp://x2ftp.oulu.fi/pub/msdos/programming - Takodje jos jedan gigant Moja preporuka ti je da prvo poskidas tutorijale nekih jednostavnijih efekata tipa plasma, fire, etc. pa ces kasnije moci i sam da kontas neke komplikovanije sorsove..
asembler.332 mango,
Posto treba da radimo seminarski rad iz asemblera za skolu, a ja sam u stisci sa vrmenom, da li bi neka dobra dusa htela da mi baci na mail neki jednostavniji program (sors)sa eventualnim komentarima na problematicnim mestima? Npr. neki programcic koji radi nesto sa diskovima isl. Stvar je prilicno hitna. Thanx.
asembler.333 vector,
Treba mi program 'exe2bin'. Ako ga neko ima, molio bih da mi posalje na mail.
asembler.334 jjerry,
Hi,treba mi nesto vezano za asemblerove DB,DW,DD,DT..komande. Kada definisem neki string npr. String DB 'aaa$' cemu sluze neki brojevi ispred i iza stringa npr. String DB 0,'aaa$',0AH,0EJ itd. Konkretno,da li se time moze formatirati ispis,tako da se menja boja ispisa ili da se sledeci string pojavi u drugom redu itd. ? Pozdrav ! Jjerry
asembler.335 jjerry,
Sorry,u prosloj poruci sam rek'o 0Ah,0EJ..:)) Umesto 0EJ treba da stoji 0EH ,to je valjda shvaceno..:)
asembler.336 jjerry,
Evo jednog programceta koji vraca informacije vezane za misa. Skinite (pogotovu vlasnici Geniusa i ostalih ne MSmouse miseva) i napisite ovde ili na mail (bolje na mail) da li je vratio tacne informacije,da li je bilo problema itd. Hvala ! Jjerry minfo.exe
asembler.337 space.ace,
> Hi,treba mi nesto vezano za asemblerove DB,DW,DD,DT..komande. > Kada definisem neki string npr. String DB 'aaa$' cemu sluze neki > brojevi ispred i iza stringa npr. String DB 0,'aaa$',0AH,0EJ itd. Kada definišeš string, obično se deklariše sa DB (Declare Byte), i moraš ga terminisati znakom$. Brojevi posle toga su ti kodovi za Line Feed i Enter, mada možeš pogledati u HelpPc-u specijalne kodove. Njima, kao što si i sam rekao, formatiraš ispis. Možeš ih staviti ispred, iza, u sredinu, gde želiš :)
asembler.338 raven,
Da li neko zna da li je moguce da kada se nakacim na neki hardverski interapt, na primer tastaturu (09h) da li je moguce pod dosom otvoriti odnosno uopste raditi sa fajlovima. preko dosovog interepta..I ako nije kako to da uradim preko BIOS-a..posto nemam potpunu dokumentaciju, a davno je bilo kada sam se zezao sa time..:) Raven.
asembler.339 banga,
> Da li neko zna da li je moguce da kada se nakacim na neki > hardverski interapt, na primer tastaturu (09h) da li je moguce > pod dosom otvoriti odnosno uopste raditi sa fajlovima. preko > dosovog Odgovor je da, ali nije jednostavno. Skini za početak napr. dos\prog\asm\tbones07.zip pa prouči probleme. Ne sećam se da li u "kosturu" ima i rad sa fajlovima, ali za početak prvo savladaj ovo. A kod rada sa fajlovima imaš dodatni tajming problem jer ne možeš da čučiš u svom interptu koliko ti hoćeš
asembler.340 destructor,
Nije striktno asembler, ali tu je negde ... Znaci: Potreban mi je algoritam za generisanje slucajnih brojeva, koji se moze relativno kratko kodirati u asembleru (brzina je dobrodosla), a da ima neki pristojan period. Eto .. toliko
asembler.341 obren,
> Znaci: Potreban mi je algoritam za generisanje slucajnih > brojeva, koji se moze relativno kratko kodirati u asembleru > (brzina je dobrodosla), a da ima neki pristojan period. Evo ti sors rand() funkcije iz Borland C-a, lako ćeš ga prepevati na ASM. Nije neki kvalitet (školski primer random generatora) ali je jako brzo i jednostavno za kodiranje... ------------------ cut here ------------------ #define MULTIPLIER 0x015a4e35L #define INCREMENT 1 static long Seed = 1; void srand(unsigned seed) { Seed = seed; } int rand(void) { Seed = MULTIPLIER*Seed + INCREMENT; return((int)(Seed >> 16) & 0x7fff); } ------------------ cut here ------------------ Ako ti treba surovi kvalitet ;) a ne brzina, onda pogledaj sors vezan uz poruku, tvrde da je najbolji poznati RND generator (čak ako i nije najbolji, jako je kvalitetan). best_rnd.c
asembler.342 jjerry,
Hi, Kako da pomocu funkcije 02h interapta 21h odstampam dvocifren broj.. (Podsecam da je to funkcija koja trazi ASCII scan code karaktera u DL-u).Pomislio sam da rastavljam cifre sa npr. broj je ab a = int(ab / 10) ; b = ab - 10 * b pa onda da ih printujem svaku pojedinacno,ako ima neko resenje molio bih da posalje i kratak sors..Makar samo principe. Hvala !
asembler.343 obren,
> Kako da pomocu funkcije 02h interapta 21h odstampam dvocifren broj.. > (Podsecam da je to funkcija koja trazi ASCII scan code karaktera u > DL-u). Pomislio sam da rastavljam cifre sa npr. broj je ab > a = int(ab / 10) ; b = ab - 10 * b > pa onda da ih printujem svaku pojedinacno, ako ima neko resenje > molio bih da posalje i kratak sors. Za tako nešto se može iskoristiti instrukcija AAM koja radi upravo ono što ti treba: AH = AL div 10 AL = AL mod 10 Znači, stavi broj u AL i izvrši instrukciju AAM, nakon toga imaš u AH cifre desetica a u AL cifre jedinica. Cela sekvenca bi bila otprilike: mov al, 21 aam ; sada je ah=broj/10, al=broj%10 mov dl, ah ; treba prvo odštampati cifre desetica mov dh, al ; pa cifre jedinica add dx, 3030h ; dodaj i višem i nižem bajtu po ASCII kod nule ('0') mov ah, 02h ; DOS funkcija 02h, character output int 21h xchg dl, dh ; sad nam trebaju jedinice koje su u ah int 21h ; ah=2 iz prethodnog poziva
asembler.344 jjerry,
Hvala ti,otprilike sam na to mislio,ali sam nesto pokusavao sa IDIV pa IMUL..Za ovo AAM nisam znao.. Jos jednom 10X !!!
asembler.345 vector,
U pitanju je A86 shareware assembler. Ukoliko postoji greska u izvornom kodu, program (A86) pri kompajliranju nece ispisati na ekran o cemu se radi, vec ce sve podatke o greskama uneti u sam izvorni fajl, sto je vrlo iritirajuce ukoliko je program iole veci. Ja bih hteo da mi program podatke o greskama ispisuje na ekran, a ne u izvorni fajl. Da li je to uopste moguce? (mozda preko nekog svica?)
asembler.346 jjerry,
E ljudi,evo vam jedan programcic koji testira Trident SVGA cip. Pa,ko ima Tridentove kartice..neka proveri,please... Bacite na mail sta vam je rek'o :) Poz. trident.exe
asembler.347 obren,
> U pitanju je A86 shareware assembler. Ukoliko postoji greska u izvornom > kodu, program (A86) pri kompajliranju nece ispisati na ekran o cemu se > radi, vec ce sve podatke o greskama uneti u sam izvorni fajl, sto je vrlo > iritirajuce ukoliko je program iole veci. Zaista bi bilo lepo da poruke o grešci ispisuje _i_ na ekran, ali mislim da je ono što on radi jako korisno, pošto ćeš u slučaju greške svakako ponovo ulaziti u editor. U tom slučaju samo ispraviš grešku a njegovo upozorenje na tom mestu možeš slobodno da ostaviš - automatski će ga izbaciti ako se greška više ne javlja pri novom prevođenju. > Ja bih hteo da mi program podatke o greskama ispisuje na ekran, a ne u > izvorni fajl. Da li je to uopste moguce? (mozda preko nekog svica?) Mislim da nema načina... :(
asembler.348 vector,
Ů▄▀Ţ Zaista bi bilo lepo da poruke o gresci ispisuje _i_ na ekran, ali Ů▄▀Ţ mislim da je ono sto on radi jako korisno, posto ces u slucaju greske Ů▄▀Ţ svakako ponovo ulaziti u editor. U tom slucaju samo ispravis gresku a Ů▄▀Ţ njegovo Jeste korisno, ali sta raditi u slucaju da sors programa zauzima 100K ili vise? Traziti preko editora znak '~' cime A86 obelezava gresku u sorsu? :)
asembler.349 space.ace,
> Ja bih hteo da mi program podatke o greskama ispisuje na ekran, a ne u > izvorni fajl. Da li je to uopste moguce? (mozda preko nekog svica?) Ne verujem da je slično moguće, ali je u izvornom kodu lakše naći grešku ako u u njemu stoji podatak (pointer) na grešku. Ako ispraviš grešku i ponovo propustiš kroz a86, te greške će nestati iz izvornog koda a kod će se lepo kompajlirati. So, možda je ovako i lakše.
asembler.350 obren,
> Jeste korisno, ali sta raditi u slucaju da sors programa zauzima 100K ili > vise? Traziti preko editora znak '~' cime A86 obelezava gresku u sorsu? :) A kako bi i inače tražio grešku da ti kod tolikog programa napiše nešto poput: Error trt-mrt, line 89 Error štuc-muc, line 1230 Error ovo-ono, line 6843 . . . Jel onda beležiš na papir brojeve linija gde su bile greške pa onda ideš kroz editor pa trebiš? ;) Po meni je jako dobro što u sorsu naznači greške jer ionako ti je cilj valjda da te greške ispraviš. U tom slučaju imaš sva mesta obeležena i čas posla se ispopravlja šta ne valja. Kod TASM-a nikad ne mogu da zapamtim više od 2-3 prijavljene greške u jednom cugu, već moram prvo njih da ispravim pa ponovo TASM, pa ponovo par ispravljenih grešaka... Naravno ima i specijalizovanih editora (Qedit i sl.) koji mogu da se konfigurišu tako da na osnovu outputa TASM-a omoguće skakanje na greške, ali na kraju ipak ispada lakše da ti je sve označeno u sorsu nego da skakućeš između Error prozora u editoru i samog ASM sorsa. Naravno, kao što sam već i rekao, zgodno bi bilo da se vide greške _i_ na konzoli pored označavanja u sorsu, ali generalno mi se sviđa ta ideja sa markiranjem, pošto A86 ionako automatski poizbacuje ta upozorenja ako više nema grešaka na označenim mestima.
asembler.351 firus,
> U pitanju je A86 shareware assembler. Ukoliko postoji greska u > ... > ... > Ja bih hteo da mi program podatke o greskama ispisuje na ekran, > a ne u izvorni fajl. Da li je to uopste moguce? (mozda preko > nekog svica?) A da ti to lepo zapakuješ i pošalješ pa da ga "upgrade-ujemo" ?!
asembler.352 zdravkod,
Kako da kazem CD-u PLAY ??? Koji interrupt gde sta kako ??? jel zna neko ..
asembler.353 van.gog,
Ako bi neko bio ljubazan da mi napshe proceduru za startovanje nekog programa (EXEC proceduru) odnosno kako se koristi fia. 4B (int21) i da li ja treba ta pravim PSP ili je to ukljuceno u samu 4B fiu. ... i jos ... kako odrediti vrednosti za ss,cs i ostale registre koji se prosledju u parametar bloku za isto-pomenutu fiu. (NEMOJTE DA SALJETE ISECKE IZ HELPPC-a i sl.) Molim za malo koda ;> VAN.GOG!
asembler.354 bokir,
> Ako bi neko bio ljubazan da mi napshe proceduru za startovanje > nekog programa (EXEC proceduru) odnosno kako se koristi fia. Evo malo koda :) exec.asm
asembler.355 vector,
A86 macro assembler, V4.02 updated with INCLUDE files, listings, no limit on size of source files, fwd refs in complex expressions, END operand, default ORG END in DATA SEGMENT, and more! Contains info about A386/D386. From Eric Isaacson Software. a86v402.zip
asembler.356 vector,
D86 debugger, V4.02, updated with keystroke scripts, macro keys, Undo command, and file copy and delete. Contains info about A386/D386. From Eric Isaacson Software. d86v402.zip
asembler.357 vector,
Predlazem da se stare verzije A86 shareware asemblera obrisu iz direktorijuma i da se umesto njih stavi nova (v4.02). :)
asembler.358 soul,
Enter: East Gate. Intro no. 000. Hope to see you soon. egate0.zip
asembler.359 van.gog,
Aloha ... Evo ovako ... malo sam modifikovao onaj exec prog od pre par poruka u cilju jelte' experimentisanja ... dakle poziva se sa ah,4b (exec) ali sa AL,1 (create PSP, load but not EXEC) a kasnije kad izvucem CS i IP iz param bloka zajedno sa SS i SP i stavim na stack (CS i IP), uradim jedno RETF (JUMP FAR) on pozove prog koji treba da se startuje al kaze nema MEM?!? E sad ... kako to da resim ??? (promnenite samo ime programa koji se pokrece) e.asm
asembler.360 van.gog,
Aloha. Evo nadjoh o CD-u napokon. Ali (eh) problem. Prog je u asm-u al vezan CPP-om pa evo prosledjujem source. Ako neko pokrene CD-ovim (ili necim drugim) neka mi se obavezno javi ... thanx cd.rar
asembler.361 jjerry,
E,'ajde nek mi neko napise funkciju za dobijanje copyright stringa za MS MOUSE u C++-u..Samo cu vam reci da je INT 33h,f-ja AX=004Dh i da vraca copyright string u ES:DI..Meni vraca djubre,e sad ili ja nemam dobar drajver,ili je kod los :) Poz.
asembler.362 jjerry,
Cemu konkretno sluze [] zagrade oko imena nekih promenljivih ili registara kao npr. [ES:DX],[blabla] itd. ?
asembler.363 vector,
<--- E,'ajde nek mi neko napise funkciju za dobijanje copyright stringa <--- za MS MOUSE u C++-u..Samo cu vam reci da je INT 33h,f-ja AX=004Dh i <--- da vraca copyright string u ES:DI..Meni vraca djubre,e sad ili ja <--- nemam dobar drajver,ili je kod los :) Kod mene je sadrzaj ES:DI memorijske lokacije pre i posle poziva te funkcije potpuno isti. BTW, odakle ti informacija o toj funkciji? Ni IntrList (v1.2) ni HelpPC (v2.1) nemaju podataka o tome...
asembler.364 stameni,
>> <--- za MS MOUSE u C++-u..Samo cu vam reci da je INT 33h,f-ja AX=004Dh >> i <--- da vraca copyright string u ES:DI.. >> Kod mene je sadrzaj ES:DI memorijske lokacije pre i posle poziva te >> funkcije potpuno isti. BTW, odakle ti informacija o toj funkciji? >> Ni IntrList (v1.2) ni HelpPC (v2.1) nemaju podataka o tome... Samo da dojavim da je su i kod mene pre i posle poziva funkcije je te lokacije neizmenjene. Štaviše, mislim da se od registara jedino menja IP ;) Drajver za miša je Geniusov, verzija 8.08. Imaš dosta staru IntList, što ponekad može biti prednost, jer je lakše pronaći "pravu stvar" u manjim fajlovima, a kad nađeš, siguran si da će da radi i na DOS-u < 3.00 :) U verziji 4.2 je uredno (reklo bi se) dokumentovana funkcija, nemam pojma što ne radi.
asembler.365 vector,
<--- Samo da dojavim da je su i kod mene pre i posle poziva funkcije <--- je te lokacije neizmenjene. Stavise, mislim da se od registara <--- jedino menja IP ;) Drajver za misa je Geniusov, verzija 8.08. Menja se i DI registar, medjutim na ES:DI se nista ne nalazi. :) Takodje imam Geniusov mouse drajver. <--- Imas dosta staru IntList, sto ponekad moze biti prednost, jer Gde naci noviji IntrList? :)
asembler.366 jjerry,
Hmmm...podatak je iz Ralph-Brownove interrupt liste..evo,lepo pise poziva se sa 004Dh u AX-u i vraca pointer na kopirajt string u ES:DI..Da ti nisi gled'o ES:DX ?
asembler.367 vector,
<--- Hmmm...podatak je iz Ralph-Brownove interrupt liste..evo,lepo pise <--- poziva se sa 004Dh u AX-u i vraca pointer na kopirajt string u <--- ES:DI..Da ti nisi gled'o ES:DX ? Ne, gledao sam ES:DI, bas kako sam i rekao :) BTW, kako gledas te podatke iz njegove interapt liste? Preko tekst editora? Ili imas nesto poput WindowBook programa?
asembler.368 stameni,
>> Menja se i DI registar, medjutim na ES:DI se nista ne nalazi. :) Šta da kažem, meni ne menja ni DI, a tamo gde pokazuje ES:DI stvarno nema ničeg. >> Gde naci noviji IntrList? :) Ima na Sezamu u dos\prog\info verzije 4.8 i 5.1 (možda i neke novije). However, preporučuju ne bacati ni 1.2, ako već imaš; nije veliko (verovatno), pa dobro dođe ponekad "za prvu pomoć" :)
asembler.369 jjerry,
JJ=> Ne, gledao sam ES:DI, bas kako sam i rekao :) OK :) JJ=> BTW, kako gledas te podatke iz njegove interapt liste? Preko tekst JJ=> editora? Ili imas nesto poput WindowBook programa? Ne..imas to u DOS\PROG\INFO..ja gledam preko Norton Commandera,svaki ASCII editor ce posluziti :)
asembler.370 stameni,
>> JJ=> BTW, kako gledas te podatke iz njegove interapt liste? Preko >> tekst JJ=> editora? Ili imas nesto poput WindowBook programa? >> >> Ne..imas to u DOS\PROG\INFO..ja gledam preko Norton >> Commandera,svaki ASCII editor ce posluziti :) Trebalo bi da je u arhivama programče koje se zove Intervue, kojim se efikasno mogu pratiti podaci. Ima i programčića (sa sorsovima) koji konvertuju liste u popularne help formate, al' o tome ne znam puno, jer ih ne koristim.
asembler.371 jjerry,
Hmmm..ovde ne pishe za koju verziju drajvera je funkcija,ali ajde da probamo nesto drugo..ovde kaze da f-ja vraca ili string "*** This is Copyright 1983 Microsoft" ili "Copyright 19XX...".Dalje kaze da u Genius verziji 9.06 potpis "KYE" dolazi odmah posle one poruke..Dakle,da saberemo kol'ko su poruke dugacke,uvecamo DI za tol'ko,i ako pise "KYE" onda raaaadiiiiiiii...!! :)) Poz.
asembler.372 vector,
<--- >> Gde naci noviji IntrList? :) <--- <--- Ima na Sezamu u dos\prog\info verzije 4.8 i 5.1 (mozda i neke <--- novije). However, preporucuju ne bacati ni 1.2, ako vec imas; nije <--- veliko (verovatno), pa dobro dode ponekad "za prvu pomoc" :) Pod ovim 'noviji IntrList' sam mislio na program kompanije WindowBook, a to je neki hipertekst reader Ralf Brownove liste interapta. :)
asembler.373 vector,
<--- Trebalo bi da je u arhivama programce koje se zove Intervue, <--- kojim se efikasno mogu pratiti podaci. <--- Ima i programcica (sa sorsovima) koji konvertuju liste u <--- popularne help formate, al' o tome ne znam puno, jer ih ne <--- koristim. Ok, presnimio sam INTER51x.ZIP fajlove i otpakovao ih. Zatim sam startovao IL2HDK program i konvertovao listu u nekakav .hdf fajl. Sta dalje? U inter51*.zip arhivama nema programa koji cita takve .hdf fajlove, dok u uputstvu pise da se oni moraju kompajlirati pomocu nekog programa (ne secam se tacnog imena). Ima li resenja? (u INTER48E.ZIP arhivi se nalazi nekoliko programa koji konvertuju listu u neke help formate, medjutim, to meni nista ne koristi jer nemam nijedan program koji cita to) Moze li se negde naci .NG baza ove interrupt liste?
asembler.374 biber,
> A86 macro assembler, V4.02 updated > with INCLUDE files, listings, no limit > on size of source files, fwd refs in Da li neko ima A386 (verziju ovog asemblera za 386+ procesore)?
asembler.375 biber,
> U pitanju je A86 shareware assembler. Ukoliko postoji greska u izvornom > kodu, program (A86) pri kompajliranju nece ispisati na ekran o cemu se > radi, vec ce sve podatke o greskama uneti u sam izvorni fajl, sto je vrlo > iritirajuce ukoliko je program iole veci. > > Ja bih hteo da mi program podatke o greskama ispisuje na ekran, a ne u > izvorni fajl. Da li je to uopste moguce? (mozda preko nekog svica?) Postoji svic za tako nesto, koga naravno ne znam napamet, a i nisam ga nesto ni koristio. Ipak je dobra ideja da se greske upisu u sors. U svakom slucaju procitaj uputstvo koje ide uz program u obliku txt fajla i naci ces svic.
asembler.376 stameni,
>> Pod ovim 'noviji IntrList' sam mislio na program kompanije WindowBook, >> a to je neki hipertekst reader Ralf Brownove liste interapta. :) Ja sam mislio na noviju *bazu*. No, kakav je taj WindowBook? Ako valja i ako je public, šta misliš da ga okačiš file moderatorima?
asembler.377 stameni,
>> Ok, presnimio sam INTER51x.ZIP fajlove i otpakovao ih. Zatim sam >> startovao IL2HDK program i konvertovao listu u nekakav .hdf fajl. >> Sta dalje? U inter51*.zip arhivama nema programa koji cita takve >> .hdf fajlove, dok u uputstvu pise da se oni moraju kompajlirati >> pomocu nekog programa (ne secam se tacnog imena). Ima li resenja? Priložen je progam INTERVUE i jedan batch (valjda beše IV.BAT) koji ga instalira i kasnije poziva ako te mrzi da kucaš celo INTERVUE. Ja koristim (isključivo) njega, jer donedavno nisam imao te... transformere ;) a u međuvremenu sam navikao na dotičnog. Nema source. >> Moze li se negde naci .NG baza ove interrupt liste? To bi bila prava stvar. Ako imaš NG compiler (il' kako se već zove), imaš uz inter???.zip program kojim možeš da praviš takve fajlove.
asembler.378 vector,
<--- Da li neko ima A386 (verziju ovog asemblera za 386+ procesore)? Koliko sam shvatio iz uputstva A86 (v4.02), test verzija A386 se moze dobiti jedino registracijom ovog A86 asemblera.
asembler.379 vector,
<--- Ja sam mislio na noviju *bazu*. No, kakav je taj WindowBook? <--- Ako valja i ako je public, sta mislis da ga okacis file <--- moderatorima? IntrList (WB) nije ni shareware ni public domain. :) Cini ga 1 .exe fajl velicine jednog megabajta. Podaci su dosta matori, medjutim, program je zaista odlican. Uz poruku sam prikacio nekoliko slika iz programa. :) d00.arj
asembler.380 zeljkoj,
> Moze li se negde naci .NG baza ove interrupt liste? Ja sam celu interapt listu konvertovato u Windows .HLP format (pomoću priloženog programa), još 1995. (verzija 4.8).
asembler.381 jjerry,
100% vam je poznata 0Ah f-ja interapta 33h za definisanje softverskog (i hardverskog) text kursora..Fora je sto u CX treba da se stavi AND maska,a u DX XOR maska kursora..Svasta sam radio al' nikako da dobijem "dobre" kursore :( Ima l' neko resenje..i ako moze format tih maski. Pozdrav !
asembler.382 stameni,
>> <--- Ja sam mislio na noviju *bazu*. No, kakav je taj WindowBook? >> IntrList (WB) nije ni shareware ni public domain. :) Sad je jasnije, sve vreme sam mislio da koristiš staaaru verziju Interrupt Lists Ralfa Browna. Šta da radiš kad se slično zovu...
asembler.383 vector,
<--- Sad je jasnije, sve vreme sam mislio da koristis staaaru <--- verziju Interrupt Lists Ralfa Browna. Sta da radis kad se slicno <--- zovu... To i jeste stara verzija njegove liste, medjutim, upakovana je u jedan program u kome sve gledas pomocu hiperteksta, a taj program kompanije WindowBook Inc. se zove IntrList. :)
asembler.384 jjerry,
Evo...bavio sam se malo izvlacenjem stringova iz memorije,pa evo jednog programceta koje stampta MS-DOS version string..Ja imam MS-DOS 6.22 (pod Win95 7.0) ali pre nego sto ga startujete,proverite lokacije od 9000:CF90h do 9000:D004h P.S Sasvim slucajno sam pronasao da tu stoji DOS string uz pomoc nekog pretrazivaca memorije.. :)) dos_str.exe
asembler.385 jjerry,
E pa ljudi,konacno sam uspeo.. Funkcija 004Dh je sasvim tacna i pravilno dokumentovana ! Kao sto je i pisalo..posle poziva te f-je,u ES:DI se nalazi copyright string za microsoft.A u Genius mouse 9.06 (moja verzija) potpis "KYE" zaista odmah prati pomenuti string.. Evo vam EXE-fajla..ako treba sors (kao dokaz :> poslacu ;) Poz. mousestr.exe
asembler.386 jjerry,
Primeticete da su duzine EXE programa koji trazi MS-DOS string i Mouse copyright string jednake :) Ne znam zasto,ali u oba slucaja je duzina jednaka 537 bajtova..Cak je i sadrzaj fajla vrlo slican :)
asembler.388 vector,
<--- Primeticete da su duzine EXE programa koji trazi MS-DOS string i <--- Mouse copyright string jednake :) Ne znam zasto,ali u oba slucaja <--- je duzina jednaka 537 bajtova..Cak je i sadrzaj fajla vrlo slican :) Velicina prvog fajla je 573, a drugog 537 bajtova. Nisu bas jednaki ;)
asembler.389 vector,
<--- E pa ljudi,konacno sam uspeo.. <--- Funkcija 004Dh je sasvim tacna i pravilno dokumentovana ! <--- Kao sto je i pisalo..posle poziva te f-je,u ES:DI se nalazi <--- copyright string za microsoft.A u Genius mouse 9.06 (moja verzija) <--- potpis "KYE" zaista odmah prati pomenuti string.. <--- Evo vam EXE-fajla..ako treba sors (kao dokaz :> poslacu ;) Ovaj .exe radi lepo, zaista je pisalo '*** This is Copyright 1983 Microsoft ***'. Medjutim, ne razumem kako prvi put to nisam video. Siguran sam da sam startovao debug, ukucao niz komandi: a 100 mov al, 4d int 33 ... i posle trejsovanja te 2 instrukcije ukucao: d es:2025, i apsolutno sam siguran da se nista nije pojavilo osim djubreta ;) Medjutim, sad lepo radi? Hmm, ..., ajde ipak, ;) mozda sam stavio 'd ds:2025' ili tako nesto... anyway, evo A86 sorsa koji radi posao... mouse.arj
asembler.390 jjerry,
Evo vam onaj sors za MSMOUSE Copyright string.Ovaj put je TASM verzija ;) mousestr.asm
asembler.391 jjerry,
Evo imam par pitanja ovde... Dakle..Kad se program startuje (prepusti se njemu kontrola) DS i ES se menjaju i pokazuju na pocetak programovog PSP-a (DS:0000 i ES:0000). Konkretno,kada trazim neki fajl,i da bi video sta sam nasao moram da pregledam DTA ? I da li se taj DTA ;) uvek nalazi na ofsetu 80h od pocetka PSP-a ? P.S Ako bi mogao neko strucan za tu oblast :) da mi posalje jedan primer,cisto radi ilustracije :)
asembler.392 jjerry,
Ajmo..sta je to FCB i cemu sluzi ? Nego..kad pozovem f-ju 11h\21h (Find 1st file - FCB) jel' treba da sacekam neko vreme ili je vec tu rezultat u AL a DTA pun ? Koja je procedura za trazenje fajlova ? Nema sanse da je samo "gola" funkcija :) Pozoves i - eto ti :)
asembler.393 jjerry,
Evo vam jedno programche za koje sumnjam da radi,iako ne daje neke bezveze rezultate..Dakle,ja na pocetku f-jom 1A\21 stavim DTA na neku bezveze adresu,onda izvucem tu istu adresu i uporedim je sa PSP:80h i on uporno tvrdi da je DTA bas tu (??!) Ko zna gde gresim nek' javi :) dta.asm
asembler.394 jjerry,
JJ=>... i posle trejsovanja te 2 instrukcije ukucao: d es:2025, i apsolutno ^^^^ Sto bas 2025 ? Naso si da je u DI bilo 2025 ??
asembler.395 vector,
Ů▀Ţ Sto bas 2025 ? Naso si da je u DI bilo 2025 ?? Ta funkcija mi obicno vraca 2025h u DI. :)
asembler.396 space.ace,
> Ajmo..sta je to FCB i cemu sluzi ? Nego..kad pozovem f-ju 11h\21h To je File Control Block, zaostalo još od DOS-a 1 :). Bolje koristi 4EH (findfirst) i 4FH (findnext), samo u DS:DX strpaš pointer na ime fajla i gotovo. Za detalje oko atributa (CX) pogledaj neki help. > tu rezultat u AL a DTA pun ? Koja je procedura za trazenje fajlova ? > Nema sanse da je samo "gola" funkcija :) Pozoves i - eto ti :) To je u stvari skup funkcija, i to findfirst i findnext, a rade na sledećem principu: proveri prvi fajl da li odgovara kriterijumu (findfirst) ako ne odgovara, proveri sledeći (findnext), itd.
asembler.397 sigmund,
Vidi poruku u cccc 9.434
asembler.398 mdimitrijevic,
> Dakle..Kad se program startuje (prepusti se njemu kontrola) DS i ES > se menjaju i pokazuju na pocetak programovog PSP-a (DS:0000 i ES:0000). > Konkretno,kada trazim neki fajl,i da bi video sta sam nasao moram da > pregledam DTA ? I da li se taj DTA ;) uvek nalazi na ofsetu 80h od > pocetka PSP-a ? DTA se skoro uvek nalazi na ofsetu 80h. Možeš postaviti svoju adresu za DTA, isto tako možeš preuzeti trenutnu adresu DTA. Preuzimanje adrese DTA: MOV AH,2Fh INT 21h ES:BX - adresa DTA Postavljanje adrese DTA: MOV AH,1Ah DS:DX - adresa nove DTA INT 21h Pozdrav, Marjan
asembler.399 bokir,
Evo jednog shareware asemblera: CrossFire Assembler xfire510.zip
asembler.400 vector,
> Ako neko pokrene CD-ovim (ili necim drugim) neka mi se obavezno > javi ... thanx Nisam pokrenuo, ali sam iskopao ovaj FAQ o programiranju CD-ROMova iz ASM Snippets arhive. Sadrzaj fajla: Section 0 - Availability 0.01. How can I get the latest copy of this FAQ? Section 1 - MSCDEX Status 1.01. How do I know if MSCDEX is installed? 1.02. How do I determine the MSCDEX version? Section 2 - CD-ROM Existence 2.01. How many CD-ROMs are present? 2.02. Which drives are CD-ROMs? 2.03. How do I get the name of the CD-ROM device driver? Section 3 - Drive Interface 3.01. How do I open the door? 3.02. How do I close the door? 3.03. How do I unlock the door? 3.04. How do I lock the door? 3.05. How do I reset the drive? 3.06. How do I get drive status? Section 4 - Drive Capacity 4.01. What sector size is supported? 4.02. How many sectors are on the disk? 4.03. How much data is on the disk? Section 5 - Volume Table of Contents 5.01. How do I get the abstract file name? 5.02. How do I get the bibliography file name? 5.03. How do I get the copyright file name? 5.04. How do I read the Volume Table of Contents (VTOC)? Section 6 - Audio 6.01. How do I find out how many tracks are on a CD? 6.02. What are Red Book and HSG formats? 6.03. How can I determine where a particular track starts? 6.04. How do I play audio? 6.05. How do I pause audio playback? 6.06. How do I resume audio playback? cdromfaq.arj
asembler.401 vector,
Ajde ovako. Imam fajl XYZ.DAT i od njega treba da napravim fajl XYZ.DB koji u sebi sadrzi nesto ovako: db 04C,02F,001,010,0FF,0FF,013,064,0AB,008,099,0AC,0BC,0F3,0EF,085,021 db 027,0A3,08F,0C2,038,0D5,098,057,018,024,063,0EE,075,09A,048,053,0FF Naravno, kao sto se i moze pretpostaviti, bajt 4C (hex) je prvi bajt ulaznog fajla XYZ.DAT, 2F je drugi bajt, 01 je treci, itd, itd. Znaci, treba mi nesto sto ce fajlove da mi prebacuje u DB format. Znam da zeljeni fajl mogu da linkujem sa sorsom svog programa, medjutim, treba mi bas ovo. Rekoh da se ne mucim - ovako nesto sigurno postoji, valjda je nekom zatrebalo? :)
asembler.403 zeljkoj,
> Ajde ovako. Imam fajl XYZ.DAT i od njega treba da napravim fajl > XYZ.DB koji u sebi sadrzi nesto ovako: Evo, napisao sam programčić koji radi upravo to. Iz komandne linije uzima ime fajla koji treba obraditi, a izlaz ispisuje na ekran (možeš ga usmeriti u fajl pomoću > ). Prilično je spor, jer čita bajt po bajt, ali valjda će poslužiti... file2db.exe
asembler.404 vector,
> Evo, napisao sam programcic koji radi upravo to. Iz komandne linije uzima > ime fajla koji treba obraditi, a izlaz ispisuje na ekran (mozes ga > usmeriti u fajl pomocu > ). Prilicno je spor, jer cita bajt po bajt, ali > valjda ce posluziti... Program je OK, samo mi treba jos nesto: obavezan je karakter '0' pre svakog bajta, dok 'h' (posle bajta) nije potreban, zbog toga sto A86 kompajler hex brojeve obelezava nulom ispred broja. Pored toga, trebalo bi samo smanjiti broj tih bajtova u jednom redu sa 20 na 15. :)
asembler.405 firus,
> Ajde ovako. Imam fajl XYZ.DAT i od njega treba da napravim fajl > XYZ.DB koji u sebi sadrzi nesto ovako: Seo sam i napisao jedan takav utility. Šaljem ga prikačen uz poruku. Poziva se iz komandne linije sa: DB ime_ulazne_datoteke širina [ime_labele] gde je širina broj elemenata koji slede iza DB, a opcioni parametar labela je ime labele koja se daje tome DB bloku. Kao rezultat rada dobijaš .INC datoteku (valjda je neka konvencija da se include datoteke za asembler (prez)imenuju sa .INC B). BTW, tekst koji se ispisuje je na engleskom, jer sam nekako navikao da utility-je tako radim (ko zna, možda dospe i u inostranstvo, pa da se ne pate sa srpskim ;) P.S. Eh, da, program je freeware na nivou sorsa. db.zip
asembler.406 vector,
> Seo sam i napisao jedan takav utility. Saljem ga prikacen uz > poruku. Poziva se iz komandne linije sa: Thx, program je OK. :)
asembler.407 mdimitrijevic,
> Program je OK, samo mi treba jos nesto: obavezan je karakter '0' pre > svakog bajta, dok 'h' (posle bajta) nije potreban, zbog toga sto A86 > kompajler hex brojeve obelezava nulom ispred broja. Pored toga, trebalo bi > samo smanjiti broj tih bajtova u jednom redu sa 20 na 15. :) Evo ti mog programa BIN2TXT koji sam napisao još 1995 za svoje potrebe. Pruža ti mogućnost podešavanja ispisa BYTE-a, WORD-a i DWORD-a, takođe biraš kolika je tabulacija i broj podataka u redu. Postoji i mogućnost izbora od kog bajta iz datoteke da počne sa čitanjem itd. Probaj, ovo će ti verovatno rešiti problem. Naravno moras preusmeriti ispis u datoteku sa '>'. bin2txt.exe
asembler.408 vector,
Koji je najbrzi nacin za prenos nekoliko K sa jedne memorijske lokacije na drugu? Da li je u pitanju `rep movsw'?
asembler.409 mdimitrijevic,
> Koji je najbrzi nacin za prenos nekoliko K sa jedne memorijske lokacije > na drugu? Da li je u pitanju `rep movsw'? REP MOVSD ukoliko koristiš 386+ procesor. Inače REP MOVSW. Moguće je ponekad ostvariti veće brzine ukoliko koristiš STOSD i petlju sa CX, ali to zavisi od onoga što pokušavaš da uradiš. Jer ukoliko radiš filovanje 3D objekta može se desiti da ti adresa koju puniš sa REP MOVSB bude na neparnom broju u kom slučaju imaš malo usporenje itd. A i ovo zavisi da li se radi o 386+ ili o Pentiumu. Takođe treba se osloniti na to da adresa rutine bude na parnoj adresi jer će u slučaju ulaska u keš procesora mnogo brže da se izvršava. Ovo se sve odnosi na pisanje DEMO-a gde ti je važna brzina do maximuma. Takođe sam na ovaj način pisao jedan komercijalni program za puštanje animacija gde je trebalo puštati animacije u visokoj rezoluciji (VESA 2.0) uz najmanje moguće usporenje tj. uz najveću moguću brzinu (uz korišćenje linearne memorije VESA 2.0).
asembler.410 jjerry,
>>Jer ukoliko radis filovanje 3D objekta >>moze se desiti da ti adresa koju punis sa REP MOVSB bude na >>neparnom broju u kom slucaju imas malo usporenje itd. Pojasni malo :) posto sam video mnogo onih demo-a koje spominjesh sa interesantnim 3D objektima,pa me malo interesuje :) Pozdrav! §JţÔÔśř
asembler.411 mdimitrijevic,
>>> Jer ukoliko radis filovanje 3D objekta >>> moze se desiti da ti adresa koju punis sa REP MOVSB bude na >>> neparnom broju u kom slucaju imas malo usporenje itd. > > Pojasni malo :) posto sam video mnogo onih demo-a koje spominjesh > sa interesantnim 3D objektima,pa me malo interesuje :) Pojasni šta da pojasnim :) Interesuje te kako se radi filovanje 3D poligona ili uopšte kako se rade kompletne rutine ? Što se onog gore tiče (citiranog), radi se o tome da umesto MOVSB treba da piše STOSB (lapsus tastaturis) i o tome da se parnim adresama brže pristupa tako da ako pišeš brzu rutinu za 3D filovanje uradiš ALIGN na parnu adresu tako će i sama petlja biti mnogo brža a i deo za filovanje može da upadne ceo u interni keš (ovo se najviše odnosi na Pentium, ali se ovakve optimizacije rade od 386 do Pentiuma). Takođe se rutine pišu tako da se podese na odgovarajući način da bi keš procesora u najvećem broju pristupa nalazio baš onu naredbu koju treba. To mi je malo teško da objasnim. Itd....
asembler.412 jjerry,
>>> Pojasni malo :) posto sam video mnogo onih demo-a koje spominjesh >>> sa interesantnim 3D objektima,pa me malo interesuje :) >> >> Pojasni sta da pojasnim :) Interesuje te kako se radi >>filovanje 3D poligona ili uopste kako se rade kompletne rutine ? Ma samo filovanje 3D poligona...izgleda mnogo interesantno,posto nikad nisam pravio 3D animaciju svojim rendererom :) >> Sto se onog gore tice (citiranog), radi se o tome da umesto >>MOVSB treba da pise STOSB (lapsus tastaturis) i o tome da se parnim >>adresama brze pristupa Razumelo se :) Btw. zashto se parnim adresama brzhe pristupa ? Pozdrav! §JţÔÔśř
asembler.413 mdimitrijevic,
>>> Pojasni sta da pojasnim :) Interesuje te kako se radi >>> filovanje 3D poligona ili uopste kako se rade kompletne rutine ? > > Ma samo filovanje 3D poligona...izgleda mnogo interesantno,posto > nikad nisam pravio 3D animaciju svojim rendererom :) Ovoga sam se plašio :) Filovanje 3D poligona je poprilično kompleksna oblast ako pričamo o matematički pravilnom filovanju tj. pravom osvetljenju i teksturisanju. Ne samo što je takvo izračunavanje kompleksno već je i zahtevno što se vremena tiče. Ali to već znaš s obzirom da radiš sa programima za animaciju. No da se prebacim na fazon DEMO-a i INTRO-a. Prednost takvih programa je što unapred znaju sadržaj scene koju će obrađivati tj. scena je pripremljena na način na koji će se rutina za 3D najbolje iskazati. Tako recimo vrši se prekalkulisanje normala, pripremanje kompletne putanje objekata unapred itd. Sve se to uradi pre početka filovanja i onda se samo u svakom prolazu koriste prekalkulisane vrednosti. Postoji kao što znaš obično FLAT filovanje koje se ujedno i najlakše radi. Njega prosto vršiš sa REP STOSB (STOSW, STOSD zavisi) po horizontalnim linijama jer je to najbrži način. Pokupe se vrednosti za početnu i krajnju X kordinatu (to jest povuče se horizontalna linija između dve stranice trougla) i jednostavno je filuješ sa REP STOSB. No ovo se može vršiti sa prikupljanjem početnih i krajnjih X kordinata posebno za sve tri linije ili u jednoj petlji preći za sve slučajeve odjednom no to zavisi od toga kakva je rutina za filovanje. E da, koristi se trougao kao osnova za sve kompleksnije poligone jer je to najmanji oblik koji definiše jednu ravan, tako da sa tri tačke imamo sve što je potrebno za posmatranje poligona u 3D. Da ne pominjem što je filovanje trouglova mnogo brže nego mnogouglova. Onda ima GOURAUD senčenje koje može dosta lepo da izgleda ako se pripremi dobra paleta (ranije je u DEMO-ima GOURAUD senčenje poturano kao PHONG) GOURAUD senčenje se može uraditi na više načina i to zavisi od toga koliko vremena želimo da uštedimo. Ja ću reći samo da se kod ovog senčenja izračuna ugao pod kojim pada svetlost na svaku od tri normale na tačke trougla u prostoru. Onda se filuje kao i FLAT samo se interpolacijom dolazi do boje za svaku tačku poligona tj. uradi se prelaz od početne do krajnje boje u horizontalnoj liniji trougla. Naravno paleta mora biti pripremljena da sadrži boje od najtamnije do najsvetlije ili obrnuto. Naravno sve ovo primenjeno na texture mapping se vrši preko indeksa u paleti da bi se dobilo senčenje tekstura, no da batalimo to. PHONG senčenje je već nešto zanimljivo. Ono predstavlja izračunavanje ugla pod kojim pada svetlost na SVAKU tačku poligona. Samim tim se dobija potpuna realnost senčenja. Da bi se postigla brzina, to se ne radi :) već se primenjuju preračunavanja koja omogućavaju da se delimičnim gubljenjem na preciznosti (svođenjem na manji broj decimala) dođe do brzine. Sve ovo postaje mnogo komplikovanije kada se razmisli o tome da se različiti materijali ponašaju potpuno različito tj. različito odbijaju svetlost, poseduju refleksiju i imaju različite teksture. METAL senčenje je otprilike običan PHONG samo sa malo promenjenom formulicom za izračunavanje odbljeska. METAL se često koristi sa nekom mapom refleksije. No, pravi programi za 3D modeliranje i senčenje trude se da sve navedene osobine materijala i svetla izračunaju što preciznije. Naravno, jasno je da oni to ne rade baš uvek dobro, jer i ti programi moraju da štede na vremenu koliko je moguće. Dobru primenu optimizacije možemo da vidimo kod 3D Studio MAX-a koji ima mogućnost prikaza scene u prozoru kao GOURAUD senčenje sa više izvora svetla. No siguran sam da bi sve to moglo još brže da se napiše ;) Ma, ubio bih se kada bih morao da sve ovo objašnjavam. Najlepša stvar kod svih ovih rutina je da se pronađe način da se senčenje izvede što brže, a da se eventualni propusti sakriju. Potrebno je mnogo mozganja da se izmisli način da nešto uradiš brže u asembleru. U to spadaju brojanje clock-ova po rutinama, align podataka na parne adrese (što i nije toliko značano kod Pentiuma, jer njegov cache radi malo unapred tj. vrši procesiranje više instrukcija odjednom, što onda za sobom povlači takvo preuređivanje redosleda naredbi koje bi dovelo do toga da se jedna za drugom postave instrukcije koje mogu zajedno da uđu u procesiranje), pisanje rutina (petlji) tako da upadnu u cache. Recimo dok sam jedno vreme razvijao svoju rutinu za 3D, sva merenja sam radio na nivou milisekundi. Tako da sam kod većih scena, kod manjih izmena, imao ogromna ubrzanja. Itd, itd ... > Razumelo se :) Btw. zashto se parnim adresama brzhe pristupa ? Verovao ili ne, ne mogu da se setim zašto se brže pristupa parnim adresama odnosno deljivim sa 2/4/8. Očigledno više ne mogu sve da popamtim :( Ali, setiću se već. P.S. Sve što sam napisao je VRLO nedorečeno, ali toliko opširna tema ne može tek tako lako da se napiše.
asembler.414 jjerry,
10x Quote bi mnogo mesta zauzeo.. Btw. poznate su mi sve tehnike senchenja..samo mi nije bilo jasno kako se prikazuje uopshte to shto filujesh.. Poz. §JţÔÔśř
asembler.415 jolicm,
Zdravo narode . trebaju mi saveti za rad programa u zaštićenom modu rada procesora. Naime napravio sam davno ASM rutine za indeksiranje za Clipper programski jezik, ali kada hoću rad u zaštićenom modu, glavni program u Clipperu pukne na mojoj ASM rutini. :( Upomoć ljudi !
asembler.416 mdimitrijevic,
> Btw. poznate su mi sve tehnike senchenja..samo mi nije bilo jasno > kako se prikazuje uopshte to shto filujesh.. Filovanje uopšte nije problem. Zamisli da imaš dva niza: startx[200] i endx[200] (u startu su ti sva polja niza startx popunjena sa 320 ili većim brojem (sve zavisi od rezolucije u kojoj ti radi rutina, tako da i umesto 200 treba veći broj da bi primio sve moguće Y kordinate), dok endx popuniš sa -1. Iskoristi bilo koju rutinu za crtanje linija samo umesto da iscrtaš tačku, upiši (recimo da su kordinate tačke X i Y) ovako: startx[Y]=X ili endx[Y]=X u koju ćeš upisati zavisi od toga da li je Y kordinata druge tačke linije veća ili manja od Y kordinate prve tačke linije. Ako je manja druga Y kordinata onda upisuješ u startx. Zašto je to tako. Svi poligoni su kreirani tako što su linije (tačke) koje ih definišu u smeru kazaljke sata. Inače ako su u suprotnom smeru onda to znači da se one ne vide tj. da svetlost ne pada direktno na poligon. Ovo je malo uprošćeno objašnjenje ali pomoći će za početak. E da, važno je da porediš prethodnu vrednost u startx i endx tako što pre nego što upišeš novu vrednost X, proveriš da li je X manje od startx[Y], ako jeste upiši novo X ako nije ništa. Isto tako za endx proveravaš da li je X veće od one upisane za taj Y red. Naravno ovo se sve odnosi na povlačenje linija kod već projektovanih 3D tačaka u 2D. Uglavnom posle svega ovoga imaš dva niza kod kojih lepo povučeš horizontalne linije između startx i endx za svaku Y kordinatu. Ovo je najprostiji vid i osnova filovanja. Postoje mnogo komplikovanije rutine koje sve ovo rade u jednoj petlji (nema potrebe za dva niza i ostalim peripetijama). Kada se poseduje ovakva rutina za popunjavanje poligona moraju se imati rutine za projekciju 3D->2D, kontrola i projekcija iz kamere, izvori svetla, rotacija objekata, kamere, svetla itd. Da ne pominjem texture-mapping. Sa takvim, osnovnim rutinama koje se mogu naći bilo gde, može se napisati program koji će da renderuje bilo koju scenu. Problem je "samo" u tome što bi to bilo očajno sporo (naravno kada bi se sve to uradilo bez pravog znanja i fenomenalne optimizacije). Kod ozbiljnije rutine uz primenu sasvim poznatih formula mogao bi se uraditi Raytracing bez problema.
asembler.417 stameni,
Malo sam zbunjen sledećim, pa ako neko zna neka viče. Elem, zna se da je funkcija 4ch interrupta 21h jedan (možda i jedini) preporučljiv način da se završi program -- sama brine o otvorenim datotekama, ne zavisi od segmentnih registara, i preko registra al prosleđuje DOS-u vrednost koja se može dalje obraditi u batch fileovima itd. Probao sam da sledeći kratak mašinski program mov ax, 4c00 int 21 u gornjem obliku ukucam u DOS-ov Debug i u Turbo Debuggere 2.01 i 3.1. Pre pokretanja programa sam očekivao da mi kao rezultat bude vraćena poruka tipa "Program terminated normally" (uz exit code 0, razume se), al' jok -- večito bivam puknut u DOS (?) bez ikakvog objašnjenja. Da stvar bude misterioznija, probao sam da sa Borlandovim Turbo Pascalom 6.0 (instrukcija halt) i C++ 3.1 (naredba return), posle kompajliranja, naravno, ispitam kako se oni ponašaju kod gornje funkcije, i pokazalo se da je i Borland koristi, ali uspešnije od mene, jer se program završi baš "kako treba". DOS je 6.2 sa 4DOS-om 5.5, a isprobano je i sa (skoro) čistim DOS-om, pod gorenavedenim debuggerima. Šta se to dešava?
asembler.419 mdimitrijevic,
> Treba mi neko ko zna da skine zastitu HardLock. Ovo će ići malo teže. A i "protivzakonito" je :) > Ukoliko je to ne predstavlja problem, moze li neko da mi > objasni na Mail kako se to radi. Da bi se skinula HardLock zaštita potrebno je malo više znanja od onog koje se može dobiti preko Mail-a. Previše je to kompleksan i zahtevan posao da bi ga se neko prihvatio. Naravno, uvek se može desiti da je zaštita vrlo prosta, ali je to malo teži slučaj. Mogao bi da se raspitaš da li je neko već skinuo zaštitu sa tog programa pa da iskoristiš već urađen CRACK fajl.
asembler.420 zdravkod,
Kako da procitam vrednost iz BS:BX? Zdravko
asembler.421 zdravkod,
DS:BX Greska, izvinjavam se.
asembler.422 stameni,
>> DS:BX Greska, izvinjavam se. Zavisi od toga šta se nalazi u DS:BX. Ako je u pitanju samo neka vrednost u registru, jednostavno kažeš MOV AX, BX. Ako bi hteo da pročitaš 16-bitnu vrednost koja je na adresi DS:BX, kažeš MOV AX, [BX] (bez potrebe za inicijalizacijom registra DX, koji bi prema tome što kažeš već bio postavljen). Itd. Da ne bih sada nabrajao sve adresne modove, ako do sada nije jasno, navedi malo preciznije šta bi hteo da uradiš, pa da vidimo...
asembler.423 zdravkod,
Koliko ja razumem u DS:BX se nalazi dword, valjda doubleword, odnosno 32bit vrednost. Zdravko
asembler.424 stameni,
>> Koliko ja razumem u DS:BX se nalazi dword, valjda doubleword, >> odnosno 32bit vrednost. Posle ovoga: MOV AX, DS SHL EAX, 16D ADD AX, BX u EAX biće upisana vrednost DS:BX.
asembler.425 stameni,
Ovo ' D' je oznaka da je u pitanju dekadni, a ne heksadekadni sistem!
asembler.426 zdravkod,
Kad otkucam to i pokusam da kompajliram (inace pisem u pascalu u asm odeljku) kaze mi "Unknown identifier za EAX. Zdravko
asembler.427 stameni,
>> Kad otkucam to i pokusam da kompajliram (inace pisem u pascalu u >> asm odeljku) kaze mi "Unknown identifier za EAX. Greška nastaje jer kompajler nema pojma o tom registru (koji, inače, postoji na 386+). Možda upali stavljanje sviča $G na "on" ($G+, mada sumnjam), ali ako radiš u Pascalu, imaš ovo rešenje: uses dos; function obradi(var r: registers): longint; begin obradi := r.ds * 65536 + r.bx end; Može se naterati komapajler da sažvaće i EAX registar pomoću inline mašinskog koda, mada mislim da za tim nema potrebe. U C-u bi trebalo da se mogu koristiti i promenljive _AX, _BX i slične.
asembler.428 zdravkod,
Bojim se da ni ov ne pomaze... Ceo problem se sastoji u tome da hocu da iscitam serijski broj hard diska. Kad pozovem funkciju 69 interapta 21 u HELPPC-u kaze da serijski broj vraca u DS:DX. Pokusao sam mali milion nacina, ali svaki put mi ispise neke nebuloze. Evo saljem i program ako ce to da pomogne... Zdravko ds_dx.pas
asembler.429 stameni,
>> Bojim se da ni ov ne pomaze... Ceo problem se sastoji u tome da >> hocu da iscitam serijski broj hard diska. Kad pozovem funkciju 69 >> interapta 21 u HELPPC-u kaze da serijski broj vraca u DS:DX. Mislim da si mi ovom porukom razjasnio mnoge stvari. Elem, u pitanju je registarski par koji sadrži pokazivač na strukturu. Dakle, treba čitati memoriju adresiranu registrima, a ne samu vrednost registara. Ta struktura, piše u HELPPC-u i u Interrupt Lists, od ofseta 2 sadrži jednu četvorobajtnu promenljivu (dword) koja posle poziva prekida biva napunjena sa osam binarno kodiranih cifara, a to je ono što nam treba. Binarno kodiranje se sastoji u tome što se u viši polubajt (nibble) upiše jedna cifra, a u niži polubajt druga cifra. Dakle, potrebna nam je i jedna konverziona rutina iz dekadnog u heksadekadni sistem. Heksadekadni broj će biti niska (string) dužine 2. Kako obezbediti memoriju za DS:DX registarski par? Ima više načina. Jedan je da se napravi promenljiva tipa string dužine 24 bajta (jer je tolika ukupna dužina potrebne memorijske strukture), i onda proslediti njen segment i ofset registrima DS i DX. Nakon pozivanja prekida taj string će biti promenjen, nakon toga čitamo bajtove na ofsetima 5, 4, 3 i 2 i jedan po jedan konvertujemo ih u nisku, koju na kraju prikažemo. I to je to. Evo programa: ----<cut>---- program DiskSerialNumber; {$R+} uses dos; function Dec2Hex(x: byte): string; var ret: string[2]; begin case x div 16 of 0..9: ret := chr((x div 16) + 48); 10..15: ret := chr((x div 16) + 55) end; case x mod 16 of 0..9: ret := ret + chr((x mod 16) + 48); 10..15: ret := ret + chr((x mod 16) + 55) end; Dec2Hex := ret end; function GetDiskSerialNumber(drive: byte): string; var r, s: string[24]; regs: registers; begin s := ''; regs.ah := $69; regs.al := $00; regs.bl := drive; regs.ds := seg(s); regs.dx := ofs(s); MsDos(regs); if regs.flags and FCarry = 0 then r := Dec2Hex(ord(s[5])) + Dec2Hex(ord(s[4])) + ':' + Dec2Hex(ord(s[3])) + Dec2Hex(ord(s[2])); GetDiskSerialNumber := r end; begin writeln(GetDiskSerialNumber(0)) end. ----<cut>---- Argument koji se prosleđuje funckiji za nalaženje serijskog broja je 0 za tekući drajv, 1, za A:, 2 za B: itd. Probaj ovo, pa ako ima nejasnoća ti viči.
asembler.430 ksanyi,
Hi! Dali neko ima funkciju za računanje tangensa hiperboličkog? Unapred hvala!
asembler.431 zdravkod,
Kako da skocim na neku odredenu adresu u memoriji. Konkretno treba da skocim na FFFF:0000. Zdravko
asembler.432 jjerry,
Shta to hocesh da uradish ? Resetujesh kompjuter ? Sorry jerbo se ne secam :( ali sam siguran da je vec bilo ovde negde,mozda cak ni ne tako davno.
asembler.433 zdravkod,
Jel moze neko da mi objasni kako da iz nekog asembler programa pozovem negi drugi .COM program (na foru ucitam ga u memoruju i onda skocim na pocetak tog programa u memoriji). Ovo sam probao i kompjuter se zablokira. U najboljem slucaju program se izvrsi pa onda ispise neke brljotine po ekranu pa onda zablokira. Ako moze detaljnije objasnjenje... Zdravko
asembler.434 mdimitrijevic,
> Jel moze neko da mi objasni kako da iz nekog asembler programa > pozovem negi drugi .COM program (na foru ucitam ga u memoruju i > onda skocim na pocetak tog programa u memoriji). Ovo sam probao i > kompjuter se zablokira. U najboljem slucaju program se izvrsi pa > onda ispise neke brljotine po ekranu pa onda zablokira. Ako moze > detaljnije objasnjenje... Taj COM program moraš da učitaš na adresu CS:0100h gde ti je CS segment u koji si učitao COM fajl. Takođe DS, ES, SS, CS moraju pokazivati na isti segment tj. onaj koji si rezervisao za COM fajl. SP može da bude FFFE. Takođe postoji dosta programa koji proveravaju svoj PSP (na primer u potrazi za podacima iz komandne linije) tako da bi valjalo da ga kreiraš. E da, pošto treba da pozivaš neki drugi program onda moraš da sačuvaš SVE (najbolje je) registre pre JMP-a na početak COM programa, i da ih vratiš na kraju. Isto tako potrebno je da preuzmeš npr. INT 21h funkciju 4Ch da bi sačekao završetak programa i vratio sve kako je i bilo. E sad, ima nekih programa koji izlaze sa RET, a ima (verovatno negde na svetu :) i programa koji izlaze preko INT 21h funkcija 0 ili preko Int 20h, no ovo je zastareli metod. Čuvanje registara je važno ako treba da se iz pozvanog programa 'vratiš' u svoj. E sad, nešto sam sigurno zaboravio, ali mnogo je to različitih informacija da bih se svega setio. S obzirom da je ovo gore navedeno komplikovaniji način, a pretpostavljam da nisi baš profesionalac, mogao bi da se pozabaviš DOS funkcijom, naravno, INT 21h 4Bh kojoj prosleđuješ način na koji hoćeš da se učita program (da se učita, da se učita i izvrši pa onda vrati u tvoj program, da se učita i kreira PSP itd. tako neke kombinacije), pointer na ime programa i pointer na nekakve parametre. Valjalo bi da imaš neki pregled interapta. Ukoliko nemaš predlozio bih ti da skineš sa Sezama. HELPPC, TECH HELP, DOS REFERENCE itd. su dobri. Sve navedeno pišem napamet, tako da ne zameri na eventualnoj grešci. Ako malo pobliže objasniš šta konkretno hoćeš (da li želiš da se, posle startovanja COM programa 'vratiš' u svoj ili da taj program prezume komandu itd.
asembler.435 zdravkod,
Pa potrebno mi je samo startovanje tog programa, dakle onaj program koji se startuje treba da preuzme potpunu kontrolu... Takode je vazno da se ne koriste DOS interapti. Bio bih zahvalan ako bi mogao da napises primer, jer nisam bas vest sa assemblerom i ne verujem da bi mogao da izvedem sve ono sto si naveo u prethodnoj poruci... Zdravko
asembler.436 mdimitrijevic,
> Pa potrebno mi je samo startovanje tog programa, dakle onaj program > koji se startuje treba da preuzme potpunu kontrolu... Takode je > .... > da napises primer, jer nisam bas vest sa assemblerom i ne verujem > da bi mogao da izvedem sve ono sto si naveo u prethodnoj poruci... A da ti objasniš za šta ti konkretno treba da pozivaš iz svog asemblerskog neki COM program. Možda postoji lakši način da se reši tvoj problem.
asembler.437 zdravkod,
Pa, ovako... Zeleo bih da taj .COM program upisem u boot sector. U boot sector moze da se upise samo program duzine do 512 bajtova. Moja namera je da taj program u boot sectoru ucita u memoruju neki drugi program vece duzine i da ga izvrsi, tj preda mu potpunu kontrolu... Zdravko
asembler.438 mdimitrijevic,
> Pa, ovako... Zeleo bih da taj .COM program upisem u boot sector. U > boot sector moze da se upise samo program duzine do 512 bajtova. > Moja namera je da taj program u boot sectoru ucita u memoruju neki > drugi program vece duzine i da ga izvrsi, tj preda mu potpunu > kontrolu... Aha, samo da se nisi malo zaleteo ? Ako si već početnik onda je nemoguće da bi nešto slično mogao da uradiš. Opisaću ti neke stvari koje su važne oko takve jedne rutine, ali naglašavam da pišem napamet, tako da ako ima grešaka ne zamerite. To što ti želiš rade virusi. Odmah da napomenem da viruse nije teško napisati, teško je napisati dobre viruse :) E sad, u trenutku startovanja boot sectora DOS nije startovan, samim tim ne postoji način da se lako pročita neki fajl sa diska i učita u memoriju. Morao bi da znaš gde se tačno (fizički) na disku nalazi početak fajla da bi ga pročitao preko na primer Int 13h (BIOS poziva). Moguće je naći poziciju fajla tako što preko direktnog čitanja diska (uz poznavanje struktura svih DOS tabela na disku) nađeš traženi fajl. Ovo bi teško strpao u 512 bajtova (u to bi trebalo da stane i učitavanje itd.). Virusi to rešavaju na taj način što kod virusa strpaju negde na disk (na poziciju koja je nepromenjiva) pa onda po čitanju boot sectora pročitaju taj kod i izvrše ga. Pa preuzimaju Int 13h da bi poturali pravi boot sectoru programima koji ga čitaju itd. itd. ... E sad, da ne razvlačim priču, pošto bi nekako uspeo da startuješ taj COM program, on bi morao da nastavi sa podizanjem sistema, jer, logično, ako sistem nije podignut onda nema ništa od rada na kompjuteru. Podizanje sistema opet ima neke svoje cake. Sve u svemu, ne isplati se da se baviš ovim, osim ako te baš ne interesuje pravljenje virusa :) Ako ti za neku stvar baš treba ovakav program, reci o čemu se radi, možda neko ima program koji bi mogao da ti pomogne. Pravo da ti kažem, da imam dovoljno vremena, bilo bi mi pravo zadovoljstvo da se ponovo pozabavim asemblerom i uradim ti ovaj program.
asembler.439 zdravkod,
Da, svestan sam svih komplikacija itd... Stvar je u tome da ja ne zelim da pravim virus!!! Cak ne zelim da ucitavam DOS... Jednostavno, poenta je u tome da hocu da na ovaj nacin, pri bootovanju, startujem jedan programcic koji je malo veci od 512 bajtova... P.S: I nisam bas toliki novajlija...
asembler.440 mdimitrijevic,
> zelim da pravim virus!!! Cak ne zelim da ucitavam DOS... > Jednostavno, poenta je u tome da hocu da na ovaj nacin, pri > bootovanju, startujem jedan programcic koji je malo veci od 512 > bajtova... Napisao sam koje su komplikacije da se tako nešto uradi. Ako bi recimo radio preko diskete (mada može i preko hard diska) koja bi bila specijalno pripremljena da uradi samo ovu stvar, bilo bi malo lakše. Mogu da pokušam da nađem neki primer boot sectora koji radi raznorazne stvari. Mislim da ga, negde na disketama, imam, ali ... Ako radiš sa konkretnim vrednostima, napišeš boot sector koji čita, sa neke "fizičke" adrese, sa diska seriju bajtova COM programa na početak nekog segmenta i to na ofset 0100h, zbog skokova, petlji itd. Primeniš ona pravila koja sam napisao u nekoj od prethodnih poruka. Onda na kraju boot sectora skočiš (sa JMP seg:0100h) na tu adresu i to je to. Znaš i sam da u takvom COM programu nema DOS funkcija i ostalih lepota. Taj COM program bi morao pažljivije da se napiše. E sad, pošto se posle boot sectora neće startovati, DOS, Windows, Unix ili bilo koji drugi, operativni sistem onda je sasvim proizvoljna segment adresa na koju ćeš učitati željeni program. Takodje ne moras da brines o ostalim zajebancijama oko podizanja operativnog sistema. Kada snimaš na disketu ili hard rutinu koja će se startovati, moraš da paziš da se Int 13h i DOS sektori itd. ne poklapaju. Takođe možeš da snimiš fajl pod običnim DOS-om, pročitaš gde se "fizički" na disku nalazi serija bajtova (COM program) i ugradiš ih pravo u rutinu u boot sectoru. > P.S: I nisam bas toliki novajlija... OK, olako sam ocenio ko je novajlija, a ko nije.
asembler.441 mdimitrijevic,
> Mogu da pokušam da nađem neki primer boot sectora koji radi raznorazne > stvari. Mislim da ga, negde na disketama, imam, ali ... Naš'o nešto slično. Primer je u C-u pa nemam pojma koliko će ti pomoći :( Ovo je primer, iz PCINTERN kolekcije rutina, koji formatira disketu i upisuje svoj boot sector sa porukom o autoru itd. Primer bi mogao da iskoristiš kao osnovu za upis tvog boot sectora. Samo obriši poziv funkcije koja formatira i ostavi deo za upis boot sectora. Primer ne radi sa hard diskom. dfc.zip
asembler.442 stameni,
>> Ovo je primer, iz PCINTERN kolekcije rutina, koji formatira disketu i >> upisuje svoj boot sector sa porukom o autoru itd. Može li se saznati nešto više o ovim rutinama? Koliko to zauzima kad bi se slalo na Sezam -- ne videh po direktorijumima nešto što se slično vika, a izgleda da je fina stvar... U posedu sam Interrupt Lists 5.3, skinuto čini mi se sa CD-ova koje prodaje SezamPro, a ovde je valjda poslednja verzija 5.1; da li je potrebno da šaljem novu verziju? Mislim da razlike nisu baš bitne...
asembler.443 mdimitrijevic,
> Može li se saznati nešto više o ovim rutinama? Koliko to > zauzima kad bi se slalo na Sezam -- ne videh po direktorijumima > nešto što se slično vika, a izgleda da je fina stvar... Može da se sazna, a može i da se dobije :)) Ima nekoliko zanimljivih primera za početnike i za napredne programere. Sorsovi su u C-u i ASM-u. pcintern.zip
asembler.444 stameni,
>> Može da se sazna, a može i da se dobije :)) Hvala :) Deda Mraz ima iste inicijale kao ti :)
asembler.445 mdimitrijevic,
>>> Može da se sazna, a može i da se dobije :)) > > Hvala :) Deda Mraz ima iste inicijale kao ti :) Prepoznao si me :))) Moraću da menjam username :) Volim da pomognem ako mogu. Vidim da se datoteke koje sam slao u ovu konfu uveliko skidaju (i one ranije i ove nove). Drago mi je da je tako.
asembler.446 zdravkod,
Kako da iscitam Boot sector hard diska-a?! Probao sam sa interaptima 13 i 25 i oni dobro rade kada je u pitanju diskata, medutim kad hocu da na isti nacin da iscitam sa harda vracaju mi neke gluposti... Zdravko
asembler.447 jujo,
# Kako da iscitam Boot sector hard diska-a?! Probao sam sa # interaptima 13 i 25 i oni dobro rade kada je u pitanju diskata, # medutim kad hocu da na isti nacin da iscitam sa harda vracaju mi # neke gluposti... # Zdravko Pa stavi kao broj diska 0x80 (za PRVI HD U SISTEMU) a ne 2 ili tri kako pretpostavljam
asembler.448 zdravkod,
Nisam pravio tu gresku... Kod Int 25 je za hard disk 2, dok je ovde 80h... Sigurno je sve dobro, ali on mi uporno vraca Invalid Media Type.. Zdravko
asembler.449 jujo,
# Nisam pravio tu gresku... Kod Int 25 je za hard disk 2, dok je ovde # 80h... Sigurno je sve dobro, ali on mi uporno vraca Invalid Media # Type.. # Zdravko Evo ti prog koja sam ja pisao pa vidi gde si se izradio. Ovo je C verzija jer neznam gde sam stavio ASM verziju... ali su kljucni delovi u ASM-u Ovo je pisano za BC 3.1 ============================================================================= #include <dos.h> #include <bios.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define PART1 0x01be #define PART2 0x01ce #define PART3 0x01de #define PART4 0x01ee #define BYTE unsigned char #define WORD unsigned short #define DWORD unsigned long typedef struct { BYTE BootIndicator; BYTE bgSector; BYTE bgSectorH; BYTE bgCylinder; BYTE SystemIndicator; BYTE edSector; BYTE edSectorH; BYTE edCylinder; DWORD numSecP; DWORD numSec; } BIOS_PARTITION; typedef struct { int shead; int scyl; int ssec; int ehead; int ecyl; int esec; } PARTITION; typedef struct { BYTE boots[512]; BIOS_PARTITION *p[4]; PARTITION pp[4]; int nhead, ncyl, nsec; int drivenum; } DRIVE; typedef struct { char name[15]; int id; } SYSTEMS; SYSTEMS sys[]= { {"UNKNOWN ", 0 }, {"DOS12 ", 1 }, {"XENIX ", 2 }, {"XENIX ", 3 }, {"DOS16 ", 4 }, {"EXTEND ", 5 }, {"BIGDOS ", 6 }, {"HPFS ", 7 }, {"SPLIT ", 8 }, {"BootMgr ",0x0a }, {"DM ",0x50 }, {"NOVELL ",0x51 }, {"GB ",0x56 }, {"SPEED ",0x61 }, {"NET286 ",0x64 }, {"NET386 ",0x65 }, {"PCIX ",0x75 }, {"Linux ",0x83 }, {"CP/M ",0xdb }, {"BBT ",0xff }, {"NULL ", -1 } }; DRIVE drv[4]; SYSTEMS *getSystem(int s) { int i; for (i=0;;i++) { if (strcmp(sys[i].name, "NULL ")==0) return sys; if (sys[i].id==s) return sys+i; } } int makeSector(int p1, int p2) { return p1 | (p2 & 63); } int makeCyl(int p1, int p2) { return p2 | ((p1 & 192)<<2); } void calculateDrive(DRIVE *d, int maxhead) { int i; int boot, ssec, scyl, esec, ecyl; long rsec, tsec; for (i=0; i<4; i++) { ssec=makeSector(d->p[i]->bgSector, d->p[i]->bgSectorH); scyl=makeCyl(d->p[i]->bgSectorH, d->p[i]->bgCylinder); esec=makeSector(d->p[i]->edSector, d->p[i]->edSectorH); ecyl=makeCyl(d->p[i]->edSectorH, d->p[i]->edCylinder); d->pp[i].shead= i==0 ? 1:0; d->pp[i].ehead= maxhead-1; d->pp[i].ssec= ssec; d->pp[i].esec= esec; d->pp[i].scyl= scyl; d->pp[i].ecyl= ecyl; } } void getDriveParams(int drive) { int sec, cyl, head=0; asm { push ax; push bx; push cx; push dx; push di; push es; clc; xor ax, ax; mov ah, 0x08; mov dx, drive; add dx, 0x80; int 0x13; mov ax, cx; and ax, 0x3f; mov sec, ax; mov byte ptr head, dh inc head mov ax, cx; /* ax=cx */ xor ah, ah; /* ah=0 */ shl ax, 2 /* */ mov al, ch /* */ add ax, 1 mov cyl, ax; /* */ pop es; pop di; pop dx; pop cx; pop bx; pop ax; } drv[drive].nsec=sec; drv[drive].ncyl=cyl; drv[drive].nhead=head; } void readPart(int drive) { int res; res=biosdisk (_DISK_READ, 0x80+drive, 0,0,1,1,drv[drive].boots); drv[drive].p[0]=(BIOS_PARTITION *)(drv[drive].boots+PART1); drv[drive].p[1]=(BIOS_PARTITION *)(drv[drive].boots+PART2); drv[drive].p[2]=(BIOS_PARTITION *)(drv[drive].boots+PART3); drv[drive].p[3]=(BIOS_PARTITION *)(drv[drive].boots+PART4); drv[drive].drivenum=drive; getDriveParams(drive); calculateDrive(&drv[drive], drv[drive].nhead); } void showPartition(char *m, int boot, char *system, int ssec, int scyl, int esec, int ecyl, long rsec, long tsec) { printf("\n%s%s", m, boot==0x80 ? "* ": " "); printf(" %s", system); printf("| %5d", ssec); printf(" %5d |", scyl); printf(" %5d", esec); printf(" %5d |", ecyl); printf(" %8lu ", rsec); printf(" %8lu |", tsec); printf(" %-8.2fMb", tsec/2.0/1024.0); } void showPartTable(DRIVE *d, char *mm); void showLogicalPartition(int drive, int part) { DRIVE d; int head, sec, cyl; int res; res=biosdisk (_DISK_READ, 0x80+drive, drv[drive].pp[part].shead, drv[drive].pp[part].scyl, drv[drive].pp[part].ssec, 1, d.boots); d.p[0]=(BIOS_PARTITION *)(d.boots+PART1); d.p[1]=(BIOS_PARTITION *)(d.boots+PART2); d.p[2]=(BIOS_PARTITION *)(d.boots+PART3); d.p[3]=(BIOS_PARTITION *)(d.boots+PART4); calculateDrive(&d, drv[drive].nhead); showPartTable(&d, ">"); } void showPartTable(DRIVE *d, char *mm) { SYSTEMS *s; int i; int boot, ssec, scyl, esec, ecyl; long rsec, tsec; for (i=0; i<4; i++) { s=getSystem(d->p[i]->SystemIndicator); boot=d->p[i]->BootIndicator; ssec=d->pp[i].ssec; scyl=d->pp[i].scyl; esec=d->pp[i].esec; ecyl=d->pp[i].ecyl; rsec=d->p[i]->numSecP; tsec=d->p[i]->numSec; if (s->id!=0) showPartition(mm, boot, s->name, ssec, scyl, esec, ecyl, rsec, tsec); if (mm[0]!='>') if (s->id==5) showLogicalPartition(d->drivenum, i); } } void showTable(DRIVE *d, char *mm) { int i; printf("\n\nHEAD:%-5d CYL:%-5d SEC:%-5d", d->nhead, d->ncyl, d->nsec ); printf("\nBT System |SSector SCyl |ESector ECyl |RelSector TotSectors| Size"); showPartTable(d, mm); } void main (void) { clrscr(); //prvi disk readPart(0); showTable(&(drv[0]), ""); // drugi disk readPart(1); showTable(&(drv[1]), ""); } =============================================================================
asembler.450 pvlada,
Da li neko može da mi napiše algoritam za generisanje slucajnog (random) broja ? Pozdrav Vlada
asembler.451 obren,
> Da li neko može da mi napiše algoritam za generisanje slucajnog > (random) broja ? Evo ti sors funkcije rand() iz BC-a 3.1 (najprostiji mogući, kongruentni), pa je prepevaj na ASM pošto je trivijalno. #include <stdlib.h> #define MULTIPLIER 0x015a4e35L #define INCREMENT 1 static long Seed = 1; /*---------------------------------------------------------------------* Name srand - initializes random number generator Usage void srand(unsigned seed); Description see rand below Return value Nothing *---------------------------------------------------------------------*/ void srand(unsigned seed) { Seed = seed; } /*---------------------------------------------------------------------* Name rand - random number generator Usage int rand(void); Description rand uses a multiplicative congruential random number generator with period 2^32 to return successive pseudo- random numbers in the range from 0 to 2^15 - 1. The generator is reinitialized by calling srand with an argument value of 1. It can be set to a new starting point by calling srand with a given seed number. *---------------------------------------------------------------------*/ int rand(void) { Seed = MULTIPLIER * Seed + INCREMENT; return((int)(Seed >> 16) & 0x7fff); }
asembler.452 speedy,
> Da li neko moze da mi napise algoritam za generisanje slucajnog (random) > broja ? > > Pozdrav Vlada Mozda bi ti bilo "dovoljno slucajno" da iz PIT-a (tajmer cip koji otkucava 18.2x u sekundi, refresuje memoriju, upravlja zvucnikom...) pokupis (counter latch) vrednost iz timera 1... Ako ti treba neki primer mailuj me da prekopam po sorsevima. Za help pogledaj u HelpPC, pcGPE ili nesto slicno ili me mailuj da ti to posaljem.
asembler.454 sqweaky,
Uz poruku je FAQ o asembleru (tasm, masm... ). asmfaq.zip
asembler.455 dule.n,
Ima li neka dobra duša koja zna kako se programiraju video kartice? Interesuju me rezolucije od 640x480 pa naviše, sa 16 ili 256 boja. Sa interaptom 10h je sve jasno ali je, naravno, mnogo sporo. Znači, treba se okrenuti direktnom upisu u video memoriju. Jasno mi je, principijelno, kako je organizovan pristup video memoriji. Da je na adresama od A0000 pa sledećih 64k prozor u celu video memoriju a da se onda upis u željeni deo memorije vrši pomeranjem tog prozora i upisivanjem "kroz" njega. E, interesuje me kako se sve to odrađuje, tj. pre svega kako se pomera taj prozor. Relativno mi je hitno, a bio bih do neba zahvalan onome ko mi razreši ove nedoumice. :(
asembler.456 kojai,
>> Ima li neka dobra dusa koja zna kako se programiraju video kartice? >> Interesuju me rezolucije od 640x480 pa navise, sa 16 ili 256 boja. >> Sa interaptom 10h je sve jasno ali je, naravno, mnogo sporo. Znaci, >> treba se okrenuti direktnom upisu u video memoriju. Jedini nacin da pokrenes rezoluciju ti je preko interapta 10h... Ima jos jedan nacin, kojim se moze generisati rezolucija ekrana, ali to ne znam coveka koji je uradio! :) Princip je sledeci... Posto nemas pod int 10h SVGA rezolucije, moras da u al segment upises broj koji zavisi od kartice koje imas... Ako se dobro secam to je broj 40F..h(ne secam se :)), ali imas ga u vesa.doc, koji mozes da skines i sa sezama... Kada pokrenes rezoluciju koju zelis moras da odredis page na koji upisujes nesto... Znaci ako je page 0 upisujes u A000h i on ce ti ga ispisivati u prvih 64k ekrana, onda promenis page i ponovo upisujes u narednih 64k... Tako dok ne iscrtas bitmap! Ono ako lepo odradis ne radi sporo... Ja sam uspeo da bitmap(1024x768, 256c) iz video memorije lepim na ekran pri brzini 8 frame/sec... Pozdrav!
asembler.457 dule.n,
│ Jedini nacin da pokrenes rezoluciju ti je preko interapta 10h... │ Ima jos jedan nacin, kojim se moze generisati rezolucija ekrana, ali to │ ne znam coveka koji je uradio! :) └─────────────────── Ma nije problem u postavljanju rezolucije tj. video moda. Tu se uradi jedno int 10 i gotovo, nece jedan interapt da koči rad, problem je kad imaš interapt za svaku tačku koju iscrtavaš. │ Princip je sledeci... Posto nemas pod int 10h SVGA rezolucije, moras da │ u al segment upises broj koji zavisi od kartice koje imas... Ako se │ dobro secam to je broj 40F..h(ne secam se :)), ali imas ga u vesa.doc, │ koji mozes da skines i sa sezama... └─────────────────── Mislim da je 4fh, probao sam i to ali izgleda da moja video kartica nije VESA kompatibilna (TSENG ET4000, ISA kartica). U međuvremenu sam iskopao rešenje za 640x480x16 što mi je zadovoljavajuće za potrebe koje imam. U svakom slučaju, hvala ti.
asembler.458 kojai,
Imam problem oko inicijalizacije DMA... Naime nikako ne uspevam kako valja da napisem sve, tako da wave koji pustam nije wave nego neka brljotina! Trebaju mi rutine za pustanje vise wavova, ekvilajzere, povecanje i smanjenj: amplitude, distorzije, cutoff(sa skidanjem visokih)... Postojao je nekada fajl u kome se nalazilo sve ovo, ja ga nemam :((, a ako ga neko ima molim ga da posalje, ili ako neko zna kako ovo da resim neka napise nesto! Pozdrav!
asembler.459 jujo,
# Imam problem oko inicijalizacije DMA... # Naime nikako ne uspevam kako valja da napisem sve, tako da wave koji # pustam nije wave nego neka brljotina! # Trebaju mi rutine za pustanje vise wavova, ekvilajzere, povecanje i # smanjenj: amplitude, distorzije, cutoff(sa skidanjem visokih)... # # Postojao je nekada fajl u kome se nalazilo sve ovo, ja ga nemam :((, a # ako ga neko ima molim ga da posalje, ili ako neko zna kako ovo da resim # neka napise nesto! # # # Pozdrav! Hmmm...pa imas to vec gotovo i lepo zapakovano u npr. MiKMOD-u ili MIDAS-u. U stvari za koju te platformu interesuje rutina.... yooyo:
asembler.460 kojai,
Nema problema saznao sam kako da resim moje muke... Resio sam to u Direct Soundu pod NT-om! Mogu da pustam vise wavova itd...
asembler.461 jjerry,
Da li neko ima (ili mozhda zna Web na kome postoji) opis VESA funkcija ? (prelazhenje u 640x480+ modove,crtanje piksela,palete itd.) 10x
asembler.462 dalek,
Da li neko ima masm ili tasm. Ako ima nek mi posalje hvala
asembler.463 jujo,
# Da li neko ima (ili mozhda zna Web na kome postoji) opis VESA # funkcija ? (prelazhenje u 640x480+ modove,crtanje piksela,palete # itd.) # # 10x Imam sors ali u C (Watcom...). Javi ako ti mozda moze koristiti... yooyo:
asembler.464 jujo,
# Da li neko ima (ili mozhda zna Web na kome postoji) opis VESA # funkcija ? (prelazhenje u 640x480+ modove,crtanje piksela,palete # itd.) # # 10x Imam sors ali u C (Watcom...). Javi ako ti mozda moze koristiti... yooyo:
asembler.465 jjerry,
Kako ne..poshalji samo :)
asembler.466 jjerry,
Kako da u asembleru ,odnosno bolje u asemblerskom bloku u okviru paskala operishem sa fixed-point promenljivama,npr. tipa single ?
asembler.467 jjerry,
Opet trazhim info o VESA modovima. Najpozheljnije bi bilo u asembleru ali u principu mozhe bilo shta sem bejzika.:)
asembler.468 jujo,
# Opet trazhim info o VESA modovima. Najpozheljnije bi bilo u # asembleru ali u principu mozhe bilo shta sem bejzika.:) Pa u nekom konfu sam poslao vgadoc4b.zip. Potrazi ga.. yooyo:
asembler.469 jujo,
# Kako da u asembleru ,odnosno bolje u asemblerskom bloku u okviru # paskala operishem sa fixed-point promenljivama,npr. tipa single ? # Evo ti u C-u. Naravno Watcom, 32bit.. Sabiranje, oduzimanje i poredjenje je isto kao i sa int-ovima (32bit). #define FIXP long FIXP FIXPmul(FIXP a, FIXP b); #pragma aux FIXPmul="imul edx ",\ "shrd eax,edx,16 ",\ parm caller [eax] [edx] value [eax]; FIXP FIXPdiv(FIXP a, FIXP b); #pragma aux FIXPdiv="xor eax, eax" \ "shrd eax, edx, 16" \ "sar edx, 16" \ "idiv ebx" \ parm caller [edx] [ebx] \ value [eax] \ modify [eax ebx edx]; #define DBL2FIXP(__a) ((__a)*65536) #define FIXP2DBL(__a) ((__a)/65536.0) #define INT2FIXP(__a) ((__a)<<16) #define FIXP2INT(__a) ((__a)>>16) yooyo:
asembler.470 jjerry,
Da li mozhe neko od iskusnijih programera da me uputi malo u oblasti vezane za protected mode ,odnosno zashticeni rezhim. Odnosno,konkretnije,kako procesor dolazi u stanje zashticenog rezhima ili to nije neophodno posebno raditi? Dalje,shta sve omogucava zashticeni rezhim u odnosu na obichan,tj. real mode ? Da li je,i zashto potrebno vrshiti real-mode interaptove i,uopshte,kakva je razlika izmedju real-mode i protected mode interaptova ? Kako se pristupa vishem wordu extended registara (mislim na E+ax,bx itd.) ? Ok,to bi bilo to :) pa ako nekog suvishe ne mrzi,10x svakome ko se potrudi da odgovori na i jedno od ovih pitanja :) Pozdrav..
asembler.471 kojai,
>> Da li mozhe neko od iskusnijih programera da me uputi malo u >> oblasti vezane za protected mode ,odnosno zashticeni rezhim. Prelazi se sa dva reda programa... Inicijalizuje ga 20 redova(sto je platforma)! A ostalo je zajebano... Izuzetno! :(
asembler.472 jjerry,
Kako da funkcijom 9 dosovog interapta ispishem neki string nepoznate duzhine,koji se npr. zavrshavam nulom ,odnosno,kako da mu "stavim" '$' na kraj ? :)
asembler.473 jujo,
# Da li mozhe neko od iskusnijih programera da me uputi malo u # oblasti vezane za protected mode ,odnosno zashticeni rezhim. # Odnosno,konkretnije,kako procesor dolazi u stanje zashticenog # rezhima ili to nije neophodno posebno raditi? Evo ti jedan pmode extender. U stvari to je source koji se koristi sa tvojom rutinom, a ima zadatak da prebaci masinu u protected mode, a zatim poziva tvoj kod. Tvorci su Dardevil i Tran, koji su jos poznati po 9kb pmode extenderu koji menja DOS4GW u Watcom programima. U arhivi imas i par primera koji ilustruju kako se koristi ovo cudo. A i sam sors koji prebacuje masinu u p-mode je DOBRO komentarisan. ----- # Dalje,shta sve omogucava zashticeni rezhim u odnosu na obichan,tj. # real mode ? Pa najglavije je to da nemas vise ogranicenja od 64Kb po segmentu, mapiranje memorije, virtuelna memorija.... # Da li je,i zashto potrebno vrshiti real-mode # interaptove i,uopshte,kakva je razlika izmedju real-mode i # protected mode interaptova ? Real mode interapti koji npr. primaju neki registarski par (ES:BX) kao pointer na neki bafer misle da se taj bafer nalazi u prvom megabajto RAM-a. E kad pises programe u PMODE-u u 99% slucajeva ti baferi se nalaze na adresama koje su preko 1Mb. Kad se zeznes pa posaljes pointer na tu adresu u realmode int, masina se obesi. Da bi se ovo izbeglo, koristi se DMPI poziv da se simulira REALMODE interapt i onda je sve OK. Prilikom simulacije RM interapta, masina se ZAISTA vraca u RM, ali samo na kratko. Primeri ovih interapta su 10h, 13h, 21h... Pmode interapti nemaju ovih problema. # Kako se pristupa vishem wordu extended registara # (mislim na E+ax,bx itd.) ? Hmmm, nikako diraktno. Mozda sa siftovanjem ili sa nekom instrukcijom koja swapuje sadrzaj 2Worda u jednom EXtended registru. # Ok,to bi bilo to :) pa ako nekog suvishe ne mrzi,10x svakome ko se # potrudi da odgovori na i jedno od ovih pitanja :) Nije me mrzelo... yooyo: pmode251.zip
asembler.474 jjerry,
Shto se onih real interptova tiche,video sam jedan primer gde se koristi funkcija 300h interapta 31h,navodno DPMI interapta,koja se poziva sa brojem real int-a u ax-u. Mozhe tako ? :) I btw. 10x za ovo :)
asembler.475 jjerry,
Ok je ono..reshen problem..ispisujem znak po znak sve dok na ofsetu [dx+n] ne nadjem nulu..
asembler.476 stameni,
>> Ok je ono..reshen problem..ispisujem znak po znak sve dok na ofsetu >> [dx+n] ne nadjem nulu.. Nije mi jasno zašto ti je string terminisan nulom? Možda program u ASM-u povezuješ sa C-om? Ako si u prilici da koristiš funkciju 9 interrupta 21h, zašto to izbegavaš? Umesto 0 tamo je '$', kao što znaš... Izvini na ovim pitanjima, trudim se da pomognem koliko mogu.
asembler.477 jjerry,
Pa zato shto recimo kada pozovesh funkciju 4F00h interapta 10h odnosno vracanje podataka o VESA rezhimu,u baferu koji se napuni na ES:DI,na nekom ofsetu postoji i doubleword koji predstavlja far pointer na OEM string (npr. "Matrox Mystique VBE/MGa" itd.) a taj string kao i svi stringovi u tom baferu su terminisani nulom. Inache,kao shto rekoh,uspeo sam to.. P.S Nisam bre valjda toliko blesav pa da se muchim kad vec mogu lako :) Pozdrav :)
asembler.478 stameni,
>> Pa zato shto recimo kada pozovesh funkciju 4F00h interapta 10h >> odnosno vracanje podataka o VESA rezhimu,u baferu koji se napuni na >> ES:DI,na nekom ofsetu postoji i doubleword koji predstavlja far >> pointer na OEM string (npr. "Matrox Mystique VBE/MGa" itd.) a taj >> string kao i svi stringovi u tom baferu su terminisani nulom. Mada si problem rešio petljom (ako se ne varam), evo sekvence koja to radi (mada je opet petlja u pitanju, zbog prefiksa rep): ; mov ax, sgm ; mov es, ax ; mov di, ofs mov cx, max_len xor al, al cld repne scasb jne not_found dec di mov al, '$' mov [es:di], al Ovo je spremno za štampanje preko 21h.
asembler.480 pesnik,
Ima li neko dokumentaciju za CD-ROM kao device. Int, regs, itd. Hvala. pozdrav
asembler.481 jujo,
# Ima li neko dokumentaciju za CD-ROM kao device. Int, regs, itd. # Hvala. # # pozdrav Imam dokumentaciju o mscdex-u, pa ako moze da koristi.... Ako negde naletis na dokumentaaciju u kojo je CD-u direktno pristupa bio bih ti zahvalan... yooyo: mscdex.zip
asembler.482 pesnik,
>> Ako negde naletis na dokumentaaciju u kojo je CD-u direktno >> pristupa bio bih ti zahvalan... Svrljao sam po sinternetu, medjutim verovatno nisam dobro trazio. Ako nesto nadjem, saljem. pozdrav
asembler.483 jjerry,
Potrebna mi je pomoc u vezi jedne funkcije koja obavlja isto shto i shl/shr n (odnosno mnozi/deli sa 2^n) ali sa fixed point tipom. Funkciju pokushavam da uradim uz pomoc FPU instrukcija. Inache,kad hocu u okviru paskala da ispishem vrednost koju funkcija vraca,stalno se ispisuje 'NAN'.Shta ovo NAN znachi ?
asembler.484 jjerry,
Gluposti...Evo su funkcije koje za realan broj a i integer B vracaju a*2^b ili a/2^b : asm fild b fld a fscale fstp a end; ,s tim shto bi funkcija za shiftovanje desno imala josh jedno 'fchs' izmedju 'fild b' i 'fld a'.
asembler.485 obren,
> Inache,kad hocu u okviru paskala da ispishem vrednost koju funkcija > vraca,stalno se ispisuje 'NAN'.Shta ovo NAN znachi ? Vidim da si problem rešio, a NAN znači "Not A Number". Jednostavno, kombinacija bitova ne predstavlja ni jedan smislen broj u pokretnom zarezu.
asembler.486 jjerry,
Aha...Da,to ima smisla. Btw. da li znash shta uophte rade instrukcije fincstp/fdecstp. Po dokumentaciji,one uvecavaju/smanjuju stack pointer za 1. Ali zashto su onda one potrebne,jer chim se neshto baci na FPU stack,npr. ST(0),sledeca vrednost ce ici automatski u ST(1),pa u ST(2) itd. ? Pozdrav..
asembler.487 stameni,
Sourcerom sam dobio program koji ne prolazi asembliranje. Greška je u redu koji glasi: PSP_cmd_tail+1 equ 82h kao i u redovima koji zavise od ove promenljive. Kako prevazići problem?
asembler.488 jujo,
# Sourcerom sam dobio program koji ne prolazi asembliranje. # Greska je u redu koji glasi: # PSP_cmd_tail+1 equ 82h # kao i u redovima koji zavise od ove promenljive. # Kako prevazici problem? PSP_cmd_tail+1 equ 82h | Pa nemoze + ovde.... yooyo:
asembler.489 sabre,
(send assembler..... Ne postoji tema assembler.) Imam sledeci problem... Nemam nikakve dokumentacije o grafickim karticama pa ne znam kako da resim sledeci problem! Otvorio sam dva virtuelna ekrana u memoriji i sada pokusavam da skrolujem... E sada kada u taj drugi ekran koji se ne vidi pisem(crtam deo slike koji treba da se vidi) i kada hocu da ga prikazem, tj da prikazem nastavak te slike, znaci drugi ekran, mnogo sporo mi radi posto radi pomocu 10h interapta... Bukvalno mi za 320x200 secka... Sta da radim, odnosno kako to da sredim da ne ide preko interapta... Inace ako neko ima uputstva o bilo kakvim kartama neka salje, ali mi ne treba ono primer: INT 10h AH=204h nego celokupna dokumentacija o kartici! Btw. Svaka cast DirectX-u! :)
asembler.490 stameni,
>> # Sourcerom sam dobio program koji ne prolazi asembliranje. >> PSP_cmd_tail+1 equ 82h >> | >> Pa nemoze + ovde.... Znam. Ipak mi je Sourcer (ne onaj kačen ovde) to napravio, pa me to malo čudi :(
asembler.491 stameni,
>> E sada kada u taj drugi ekran >> koji se ne vidi pisem(crtam deo slike koji treba da se vidi) i kada hocu >> da ga prikazem, tj da prikazem nastavak te slike, znaci drugi ekran, >> mnogo sporo mi radi posto radi pomocu 10h interapta... Bukvalno mi za >> 320x200 secka... Sta da radim, odnosno kako to da sredim da ne ide preko >> interapta... Prvo moraš da napišeš brzu rutinu za crtanje tačke, gađanjem video memorije (bez BIOS-a, jer je tako, kao što si i sam video, sporo). Za mod 13h i rezoluciju 320x200x256 video memorija počinje na A000h. Svakom pikselu odgovara jedan bajt. Prvi bajt (na ofsetu 0000h) je (mislim) u levom gornjem uglu ekrana, drugi bajt ispod njega, treći ispod i tako sve do 200. Zatim moraš da smisliš brz način za prebacivanje slike u video RAM (tj. na ofset A000h). Mislim da je to najbrže preko DMA (nisam najsigurniji; ovde će se već naći neko ko zna). Ako ti se ne programira DMA, pogledaj naredbe MOVSB/MOVSW/MOVSD i REP prefiks. Probaj da premestiš samo one delove slike koji su promenjeni, mislim da stvar može da se ubrza. Dokumentacija su VGADOC (ima ovde) i spisak instrukcija procesora, kao i razni helpovi.
asembler.492 sabre,
>> Prvo moras da napises brzu rutinu za crtanje tacke, gadanjem >> video memorije (bez BIOS-a, jer je tako, kao sto si i sam video, >> sporo). Za mod 13h i rezoluciju 320x200x256 video memorija pocinje >> na A000h. Svakom pikselu odgovara jedan bajt. Prvi bajt (na >> ofsetu 0000h) je (mislim) u levom gornjem uglu ekrana, drugi bajt >> ispod njega, treci ispod i tako sve do 200. Da da znam ja to vrlo dobro i to ne radim preko 10h interapta... Ja ne upisujem na poziciju A000h(posto ne radim u 320x200) vec upisem u neki deo memorije i onda ga ispageujem i iscrtam... To nije problem. Mogu da prikazujem 800x600x256 brzinom 20+ ekrana, to nije problem... Ali zanima me kako kartici da kazem da hocu da mi drugi virtualni ekran lepi preko postojeceg! Necu da radim stalno iscrtavanje zato sto dolazi do blinkanja, a "prelepljivanje" radi izuzetno tecno... To sam video pod DirectX-om kolika je razlika kad se icrtava(mada je tamo 1024x768 oko 70 frejmova :)) i uspori i kada se skroluje...
asembler.493 jujo,
# Da da znam ja to vrlo dobro i to ne radim preko 10h interapta... Ja ne # upisujem na poziciju A000h(posto ne radim u 320x200) vec upisem u neki # deo memorije i onda ga ispageujem i iscrtam... To nije problem. Mogu da # prikazujem 800x600x256 brzinom 20+ ekrana, to nije problem... Ali zanima # me kako kartici da kazem da hocu da mi drugi virtualni ekran lepi preko # postojeceg! Necu da radim stalno iscrtavanje zato sto dolazi do # blinkanja, a "prelepljivanje" radi izuzetno tecno... To sam video pod # DirectX-om kolika je razlika kad se icrtava(mada je tamo 1024x768 oko 70 # frejmova :)) i uspori i kada se skroluje... U standardnom VGA modu nemoze nikako. Mod 10h "vidi" samo prvih 64kb memorije video kartice. Mode X vec moze. Sto se VESE tice, postoje lepo dokumentovane pozive BIOS-a kako da swichujesh ekrane. Za to ti treba kao prvo VESA2 BIOS, a ekrane swichujesh pomeranjem adrese pocetka video memorije. To zaista brzo radi ali ima jedan problem. Ta memorija se nalazi na kartici i procesor nije u stanju da je keshira, tako da je direktno crtanje po video memoriji sporije od crtanja po ostatku memorije. yooyo:
asembler.494 stameni,
Tek sad videh da si tražio DirectX - o tome znam jako malo jer nisam u prilici da se time detaljnije pozabavim :( Izvinjotina na pokušaju.
asembler.495 sabre,
>> Sto se VESE tice, postoje lepo dokumentovane pozive BIOS-a kako da >> swichujesh ekrane. Za to ti treba kao prvo VESA2 BIOS, a ekrane >> swichujesh pomeranjem adrese pocetka video memorije. To zaista >> brzo radi ali ima jedan problem. Ta memorija se nalazi na kartici >> i procesor nije u stanju da je keshira, tako da je direktno crtanje >> po video memoriji sporije od crtanja po ostatku memorije. Ha... Sta da ti kazem daj mi dokumentaciju! :)
asembler.496 jujo,
# Ha... Sta da ti kazem daj mi dokumentaciju! :) Ha... pa nadji negde VGADOC4b.zip. Ostavio sam ga u nekoj konfi... yooyo:
asembler.497 stameni,
Koje dokumente o programiranju u zaštićenom modu preporučujete? Ima li toga na Sezamu? Možda ima na nekoj ftp adresi? Heeeelp!
asembler.498 sqweaky,
Da li 386+ procesori mogu da pristupe 32-bitnim registrima (npr. EAX) kada su u realnom režimu ili moraju da pređe u protected mod? Takođe, da li mogu da koristim instrukcije koje operišu sa 32-bitnim podacima (lodsd, stods) u realnom modu? Miloš
asembler.499 jjerry,
>>Da li 386+ procesori mogu da pristupe 32-bitnim registrima (npr. >>EAX) kada su u realnom rezimu ili moraju da prede u protected mod? >>Takode, da li mogu da koristim instrukcije koje operisu sa >>32-bitnim podacima (lodsd, stods) u realnom modu? Naravno da mogu,sve shto ti treba je .386/P386N stavka ili (neobavezno) USE32 posle deklaracije segmenta i IDEAL modu. Pa ti mozhesh da napravish prog. u obichnom TASM-u,bez extendera , dakle u RM,chisto testa radi,koji koristi E(AX,BX...).
asembler.500 jjerry,
Potrebna mi je brza SQRT funkcija radjena u asembleru,ne narochito hitno.Samo da ima shto manje mul/div operacija,a preciznost od 4 decimale je sasvim dovoljna...Inache,kao parametre prima fixed point brojeve (32 bita,gornjih 16 integer,donjih 16 fraction). Pozdrav..
asembler.501 stameni,
>> Potrebna mi je brza SQRT funkcija radjena u asembleru, Izbistri koprocesorsku funkciju FSQRT.
asembler.502 jjerry,
Znam ja koprocesorske funkcije od ranije ,i ova ima i pristojan broj ciklusa,za sqrt rutinu,od 70 do neshto preko 100,koliko se secam; ali sam mislio da l' mozhe neshto da se uradi bez koprocesora...Inache,u shkoli sam uchio kao jednu od mogucnosti tzv. Njutnovu iterativnu metodu,ali ona u svakom ciklusu ima bar jedan realni DIV... P.S Ustvari i nema preterane potrebe za brzinom,poshto sam hteo to da ubacim u rutinu za normalizaciju normal-vektora,vishe me je zaintrigiralo ovako...
asembler.503 ventura,
Jel ima neko programce (ili moze da napravi) koje bi promenilo seriski broj hard diska u MBR-u? -Na kojoj se adresi nalazi seriski broj hard diska?
asembler.504 jjerry,
Kako se u asembleru adresiraju matrice,tj. 2D nizovi ? Mozhda bi neko mogao da mi poshalje primer korishcenja matrica u asembleru..
asembler.505 stameni,
Našao sam nekoliko rutina za računanje kvadratnog korena među onim snippetsima za asembler. Ako ti je još to potrebno, reci da ti šaljem na mail, jer mislim da nije baš u redu slati deo arhive u conf.
asembler.506 jjerry,
>> Nasao sam nekoliko rutina za racunanje kvadratnog korena >>medu onim snippetsima za asembler. Ako ti je jos to potrebno, Naravno,sve dok operishu sa fixed-point brojevim (16 bit integer,16 bit fraction)... 10X a bundle.. J.J
asembler.507 dzakic,
> Kako se u asembleru adresiraju matrice,tj. 2D nizovi ? Mozhda bi neko > mogao da mi poshalje primer korishcenja matrica u asembleru.. Struktura 'matrica' ne postoji u asembleru. Ukoliko znaš da radiš sa običnim 1D-nizovima, onda napravi niz dužine 0..MAXX*MAXY-1, i pristupaj elementu sa Element[i,j]:=Niz[i*MAXX+j], gde je i iz intervala [0..MAXY-1], a j [0..MAXX-1]. Za ovo je potrebno malo snalaženja sa registrima da se izračuna offset elementa unutar niza (ADD i MUL), ali je izvodljivo.
asembler.508 stameni,
>> Struktura 'matrica' ne postoji u asembleru. Ukoliko znaš da radiš sa >> običnim 1D-nizovima, onda napravi niz dužine 0..MAXX*MAXY-1, i >> pristupaj elementu sa Element[i,j]:=Niz[i*MAXX+j], gde je i iz intervala >> [0..MAXY-1], a j [0..MAXX-1]. U stvari, formula je Element[i, j] := Niz[i, j * MAXX]. Petljavina sa registrima ide otprilike ovako: ----<cut>---- max_x equ 4 ; matrica je [0..max_x-1, 0..max_y-1] x equ 2 ; element je na [x, y] y equ 3 mov al, y ; al := y mov bh, max_x ; u bh ide maksimalna vrednost za x mul bh ; ax := al * bh add ax, x ; ax := ax + x mov bx, offset matrica add bx, ax ; ovde bx pokazuje na bajt u matrici ; na koordinatama (x, y) mov ah, [bx] ; i to se ovde čita matrica: db ... ----<cut>----
asembler.509 dzakic,
> U stvari, formula je Element[i, j] := Niz[i, j * MAXX]. Tebi se očigledno više sviđa Fortran-stil skladištenja matrice. Naravno, potpuno je svejedno kako matricu čuvamo u memoriji dokle god program sa njom ispravno radi.
asembler.510 stameni,
>> > U stvari, formula je Element[i, j] := Niz[i, j * MAXX]. >> ^ >> Tebi se očigledno više sviđa Fortran-stil skladištenja matrice. Zapravo, pogrešio sam u kucanju. Naime, na označenom mestu umesto ',' treba da stoji '+'. Međutim, kad bolje razmislim, vidim da sam te pogrešno kritikovao; ti tvrdiš Niz[i * MAXX + j], a ja, uz ovu ispravku, Niz[i + j * MAXX]. Svejedno je, s tim što je moja ideja imala sintaksnu grešku ;) Ipak, onaj kod koji sam poslao -- radi.
asembler.511 stameni,
Kako detektovati da li je računar u turbo režimu ili ne? Kako uključiti, a kako isključiti turbo?
asembler.512 jjerry,
Necu ti bash odgovoriti na pitanje ,al' 'ajde.. Lm,noviji kompjuteri su automatski u tzv. turbo rezhimu,tako da,tehnichki,ne postoji turbo i obichan rezhim. Ako taj princip nije do sada kod svih proizvodjacha napushten,sigurno ce se napustiti vrlo brzo,pa se postavlja pitanje ima li svrhe raditi bilo shta sa tim. Pozdrav..
asembler.513 milosavljevic,
Hi! Treba mi Turbo Assembler. Goran.
asembler.514 pesnik,
Ljudi, jel ima neko MS MASM compiler arhivu? Bio bi zahvalan ako bi to neko odnekud iscupao. pozdrav, pesnik
asembler.516 vule.,
Kako da postavim text mod od 50 linija ili malo nizi ?
asembler.517 vasic,
> Kako da postavim text mod od 50 linija ili malo nizi ? To radiš tako što učitaš font odgovarajuće visine. Znači, pošto u standardnom tekst modu imaš 400 tačaka po vertikali, učitaš font visine 10 i dobićeš 40 redova na ekranu. Uz poruku kačim moj programčić koji radi takve stvari. Pisan je u C-u ali ono što tebe interesuje nalazi se u jednom asm bloku na kraju tako da ipak ne ispada iz okvira teme. :) lf.c
asembler.518 sjocic,
Ima li neko source kod (asm) nekog digitrona (za Dos) i readme.com (view, list) fajla (isto u asm-u) ?
asembler.519 evol,
Jedno debilno pitanje... Preuzeo sam COM4 tj. nisam ga preuzeo posto ne mogu da popunim one tablice kod portova... Ako je neko radio neka mi posalje da se ne maltretiram, posto je COM4 poznat po tome sto zajebava oko odziva, tj. mora da se lepo popuni tablica(tablice) da bi kada se nakacim korektno vracao svaku promenu... Isa
asembler.520 stameni,
Evo jedne prastare glavolomke, koju duze vreme pokusavam da resim, bez uspeha. Sada je u pitanju problem, koji pokusava da resi drugar u okviru domaceg zadatka. Dakle: kako u asembleru nacrtati tacku u 640 x 480 x 16? Sva magija koju smo drugar i ja koristili nije pomogla. :( F1, please!
asembler.521 emajsijuen,
>> Dakle: kako u asembleru nacrtati tacku u 640 x 480 x 16? Evo ide neka putpixel rutina pisana u assembleru (u okviru pascala). Imam negde na disku jos jednu (koja je valjda nesto brza od ove), pa cu ti poslati cim stignem... Pozdrav, Vlada... asmgraph.pas
asembler.522 stameni,
Drugara interesuje algoritam (ili potprogram) za deljenje dva racionalna broja, bez koprocesora ili "naprednijih" instrukcija -- program treba da se izvršava i na 8086. Pošto znam da ima još onih sa ETF-a koje to zanima ;), ne bi bilo loše da ako neko ima to (deljenje) rešeno, baci isto ovde, na radost i sreću ;) svih kojima to treba :) Možda ima u Knuthovim knjigama algoritam (ne znam, nemam to), pa ako neko može da pogleda i prepiše odatle -- bilo bi fino...
asembler.523 jjerry,
>> Drugara interesuje algoritam (ili potprogram) za deljenje >>dva racionalna broja, bez koprocesora ili "naprednijih" A u kom obliku su predstavljeni racionalni brojevi - kao brojilac i imenilac ili kao ceo i decimalni deo ?
asembler.524 stameni,
>> A u kom obliku su predstavljeni racionalni brojevi - kao brojilac i >> imenilac ili kao ceo i decimalni deo ? I deljenik i delilac se sastoje iz celog i decimalnog dela.
asembler.525 sjocic,
├> Drugara interesuje algoritam (ili potprogram) za deljenje ├> dva racionalna broja, bez koprocesora ili "naprednijih" ├> instrukcija -- program treba da se izvršava i na 8086. Pošto ├> znam da ima još onih sa ETF-a koje to zanima ;), ne bi bilo ├> loše da ako neko ima to (deljenje) rešeno, baci isto ovde, na ├> radost i sreću ;) svih kojima to treba :) Ajte ljudi, pomozite čoveku ! :)
asembler.526 burazer,
Da li neko ima assembler to c translator iliti converter?
asembler.527 ventura,
> Da li neko ima assembler to c translator iliti converter? Uff... bojim se da to ne postoji.. ima opcija da pri kompajliranju C sorsa, stavis Generate ASM Source, ali neverujem da ima nesto obratno...
asembler.528 nbjvsb,
>> Da li neko ima assembler to c translator iliti converter? Rekao bih da je to čudo nemoguće napraviti. Prosto, svaki C kompajler pravi drugačiji mašinski, pa samim tim i potencijalni .asm kod. Još nešto - gomila C funkcija urađena je upravo u asembleru, a čisto sumnjam da bi prevodioc za takvu gomilu linija umeo da daje imena funkcija (npr. printf("blabla") ). Da ne pominjem sve one silne jumpove... Mogućnost prevođenja asm koda u bilo koji viši programski jezik ravna je mogućnosti pravljenja programa koji će iz WAV/MP3 fajla izvući note :-)
asembler.529 burazer,
Cudo jedno da na internetu postoji tako neesto i zove se assembler to c translator samo sto ja nisam u mogucnosti da dam $870 za isti. Na primeru koji je dat uz oglas, lepo se vidi da konvertuje assemler u C i to radi brzinom 400-500 linija u sekundi.
asembler.530 ventura,
> Cudo jedno da na internetu postoji tako neesto i zove se > assembler to c translator > samo sto ja nisam u mogucnosti da dam $870 za isti. > Na primeru koji je dat uz oglas, lepo se vidi da konvertuje assemler > u C i to radi brzinom 400-500 linija u sekundi. Cool... a na sta taj source posle lici... izgleda na nesto poput ovoga... . . . main() { asm{ pop ax; pop ds . . . } . . . } Ilito nesto jos zajebanije... *str = "0D6E14"; strcpu(ffe34, 14E5); dobro bi bilo da nam bacis ovde primer prevedenog sourca.. pa da vidimo..
asembler.531 jjerry,
>>Cudo jedno da na internetu postoji tako neesto i zove se >> >>assembler to c translator Sudetji po ovome shto je ventura napisao nije nikakvo chudo.. A drugo,zashto bi ikome bilo potrebno da prevodi sa asemblera na C ? C programer ne bi trebalo da ne zna ASM i obratno,pa se onda postavlja pitanje zashto prevoditi kad se podjednako dobro snalazish u oba jezika ? Daj mi pragmu i ASM sors i retji tju ti za shta procedura sluzhi..bez translatora i sranja.. Poz,J.J..
asembler.532 wlaad,
jel' ima josh neko onu zbirchicu 4K demoa sa nekog assemblyja (94 il 95)? znam da je neko slao u neku grupu, al' se ne setjam ni ko je slao, ni koja je grupa, so.. 10x.
asembler.533 ventura,
> jel' ima josh neko onu zbirchicu 4K demoa sa nekog assemblyja (94 il 95)? > > znam da je neko slao u neku grupu, al' se ne setjam ni ko je slao, > ni koja je grupa, so.. Imam ja sve vaznije demoe, pre '97 samo reci ime, i poslacu ti ga...
asembler.534 ventura,
Pisem neki TSR, pa mi treba neko ko stvarno zna ASM... mail...
asembler.536 jjerry,
Kako se konvertuje real-mode pointer u protected mode pointer ? Poz,JJ..
asembler.537 silence,
Ako nekom nekad padne na pamet da krene da uči asembler, ili već nešto piše, onako početnički (možda i ne samo početnički), a usfali mu kakva informacija ili hint, evo adrese sa univerzitetskim kursem asemblera prof. Randall Hyde-a: http://webster.cs.ucr.edu/ To je adresa osnovne stranice, dalje će te se lako snaći. Sem asemblera, na istoj adresi može se naći i Pattern Matching rutine (kao i sama teorija) za Delphi, linkovi za C/C++ tutorijale, itd. Na istom serveru, na stranici 'Recources On The Net': http://webster.cs.ucr.edu/pro_lang/inet_links/proglang.htm dat je obiman pregled linkova (tutorijali, FAQ-ovi, itd) za sve (?) programske jezike. Možda je neki jezik i izostavljen - proverite sami. Ja ih izbrojah tamo ravno 45 (komada)!!! Da, prisutni su i Dylan, i Python, i Eiffel... :)
asembler.538 milko,
Pomenuti je i autor knjige 'Art of assembly language programming'. Koju preporucujem svakom asm koderu. Imam je u el. formatu i teska je oko 10mb. Pa ako neko otje, nek me mailne da se dogovorimo oko prenosa. Btw, obavezno otitji na www.x86.org .
asembler.539 silence,
> Pomenuti je i autor knjige 'Art of assembly language programming'. Rekao bih da se upravo ta knjiga nalazi na adresi koju sam dao u prethodnoj poruci. Hvala za www.x86.org!
asembler.540 milko,
Upravo odatle sam je i dl. Ima li neko UCR Standard Library, ciji je autor, autor knjige 'Art of asm'? Pomenuti lib ide uz knjigu u papirnatoj formi koliko znam, a ima da se dl na intu.
asembler.541 milko,
Obavezno pratiti news grupu comp.lang.asm.x86 . Btw, na www.wotsit.org ima takodje gomila korisnog materijala.
asembler.542 milko,
NetWide Assembler 0.97 iliti nasm0.97! Dl obavezan
asembler.543 milko,
nestade struje.:( ponovo... nasm097.zip
asembler.544 roach,
Evo knjige Art Of Assembly Language Progging, by Hyde Randall. Milosh.Zorica artofasm.zip
asembler.545 stameni,
P2 Processor Developer's Manual (.PDF) #1/2 p2devman.arj
asembler.546 stameni,
P2 Processor Developer's Manual (.PDF) #2/2 p2devman.a01
asembler.547 stameni,
Intel Architecture Optimization Manual (.PDF) #1/1 optim.arj
asembler.549 stameni,
System Programming Guide (.PDF) #1/2 sysprog.arj
asembler.550 stameni,
System Programming Guide (.PDF) #2/2 sysprog.a01
asembler.551 stameni,
Instruction Set Reference (.PDF) #1/2 isr_v2.arj
asembler.552 stameni,
Instruction Set Reference (.PDF) #2/2 isr_v2.a01
asembler.553 silence,
> Upravo odatle sam je i dl. Ima li neko UCR Standard Library, ciji > je autor, autor knjige 'Art of asm'? Pomenuti lib ide uz knjigu u > papirnatoj formi koliko znam, a ima da se dl na intu. Na Internetu je na: ftp.cs.ucr.edu u direktorijumu: /pub/pc/ibmpcdir Evo ostatka teksta iz fwd.html-a koji govori o načinu logovanja i fajlovima koji su potrebni. Log onto ftp.cs.ucr.edu using the anonymous account name and any password. Switch to the "/pub/pc/ibmpcdir" subdirectory (this is UNIX so make sure you use lowercase letters). You will find the appropriate files by searching through this directory. The exact filename(s) of this material may change with time, and different services use different names for these files. Generally posting a message enquiring about the UCR Standard Library or this text will generate appropriate responses.