PCPROG.3

26 Jul 1993 - 22 Apr 1994

Topics

  1. algoritmi (290)
  2. dizajn (19)
  3. ms.dos (270)
  4. windows (360)
  5. asembler (213)
  6. basic (10)
  7. jezici (148)
  8. pascal (878)
  9. cccc (554)
  10. cpp (195)
  11. clipper (1125)
  12. baze.podataka (232)
  13. razno (540)

Messages - asembler

asembler.1 mark,
Ja se izvinjavam ako je vec bilo , ali meni treba programce koje resetuje komp. EXE verzija , naravno :)) MArko
asembler.2 mmile,
│Ja se izvinjavam ako je vec bilo , ali meni treba programce koje │resetuje komp. EXE verzija , naravno :)) └────────── Bilo je vec ali nema veze... Ceo fazon je u JMP ffff:0000 Ako pri tome hoces i test memorije i sl. tj warm boot na adresi 0:472h treba da stoji 1234h. cold.com
asembler.3 mmile,
u vezi reseta : ako je na 0:472 1234 onda je boot bez testa memorije, a ako je druga vrednost onda se testira i memorija.sorry sve je iz glave.
asembler.4 mazi,
Ajd ako neko zna, nek odgovara (manjak literature, šta ćeš...) Definisao sam char varijablu, npr. PRIMER DB "BlaBla" E, sad bi mi njena adresa trebala u SI registru, tj mesto gde se ta varijabla nalazi tačno u memoriji. Nikako mi ne uspeva da to postignem. Znam da sam to ranije (Davnoooo) radio, i imam to negde u nekom programu, al dok sve pregledam, osedeću. Ajd, ako znate, odgovarajte. Večno zahvalan... Ivan.
asembler.5 nkbog,
> PRIMER DB "BlaBla" > > E, sad bi mi njena adresa trebala u SI registru, tj mesto gde se > ta MOV SI, OFFSET PRIMER ; pretpostavka da je u DS segment, pa je sada DS:SI ; adresa promenljive NB.
asembler.6 milos,
e, nkbog, zar ne misliš da je lepše LEA SI, PRIMER nego MOV SI, OFFSET PRIMER :))))) Nemoj da buniš čoveka
asembler.7 mazi,
<> MOV SI, OFFSET PRIMER ; pretpostavka da je u DS segment, pa je sada DS:SI <> ; adresa promenljive Fala mnoooogo. E, sad, što reče Miloš, LEA Bla, bla, ma svejedno, ne dam se zbuniti. Elem, do groba zahvalan :)) Ivan.
asembler.8 .obj,
> e, nkbog, zar ne misliš da je lepše LEA SI, PRIMER nego MOV SI, OFFSET > PRIMER Jes' da je lepše, ali je duže i sporije. :)
asembler.9 milos,
>> Duže i sporije ??????? (razjasni malo, nije mi čisto please)...
asembler.10 .obj,
Kojim instrukcijama se isključuju oba keša na 486?
asembler.11 dejanr,
>> Kojim instrukcijama se isključuju oba keša na 486? Što se tiče internog keša, to je stvar 486 i rešenje je dokumentovano. Treba postaviti na jedinicu bitove CD i NW registra CR0 i onda izvršiti INVD. Postoji signal FLUSH\ koji periferija emituje kada želi da 486 isprazni keš (ali ne i da ga isključi). Što se eksternog keša tiče, bojim se da tu nema instrukcije, jer 486 za njega, da tako kažem, "ne zna". Mora se programirati keš kontroler, a sam način zavisi od konkretnog keš kontrolera na toj ploči.
asembler.12 ialeksic,
Da li neko zna o tome gde se moze naci specifikacija BSC sinhronog komunikacionog protokola i uptstva sa primerima za programiranje USART (8251A) cipa?
asembler.13 djelovic,
> Da li neko zna o tome gde se moze naci specifikacija BSC si > komunikacionog protokola i uptstva sa primerima za programiran > (8251A) cipa? Probaj u inter36 listi, ili u HelpPC. Oba imaš u direktorijumu INFO.
asembler.14 ialeksic,
>>> Probaj u inter36 listi, ili u HelpPC. Oba imas u ... Trebala bi mi (barem) informacija tipa one koja ima u HelpPC-u za UART cip. Kartice sa ovim cipom (za sinhrono/asinhronu komunikaciju) nisu masovnije zastupljene u "klasicnim" PC konfiguracijama pa verovatno zato i nema njenog opisa u HelpPC-u. Sto se tice inter36 liste ona mahom samo opisuje vec iskoriscene slotove za interupt drajvere od proizvodjaca raznih (slozenijih) programa, a moja namera je da napisem drajver za jednu adapter karticu (za karakter sinhronu komunikaciju) koja lici na IBM BSC (Bynary Synchronous Communications) Adapter. Najdalje dokle sam u potrazi stigao, je IBM PC (XT!) Technical Reference koji sadrzi tehnicku specifikaciju kartice ali gotovo bez imalo mesa i nekog makar uproscenog primera radi skracenja lutanja. Na pameti mi je da bi takav neki primer mogao sadrzati i neki univerzitetski udzbenik ili slicno, pa ako neko ima,... postu primamo 0-24h :)
asembler.15 moma,
>> Da li neko zna o tome gde se moze naci specifikacija BSC sinhronog >> komunikacionog protokola i uptstva sa primerima za programiranje USART >> (8251A) cipa? Po pitanju 8251A, pogledaj u nekoj sledecih knjiga: ----------knjiga-----------------izdao----------------strana----- Projektovanje mikroprocesorskih Tehnika-Kijev 1988g. 234-244 elektronskih uredjaja Mikroprocesori porodice Radio i svjaz 334-341 8086/8088 Moskva 1987g. Prirucnik: Mikroprocesori i Radio i svjaz 67 - 76 mikroprocesorska int.kola(I deo) Moskva 1988g. Naci ces tu puno toga o 8251, pocev od elektricnih parametara, preko vremenskih dijagrama i primera programiranja, do uslova skladi- scenja i vibracija koje cip podnosi. Na ruskom su. Potrazi ih u "Jugoslovenskoj knjizi". Nekad je bilo inostrane literature i u "Mladosti", kako je sada ne znam. Naravno, mnogo bolje bi ti dosao neki Intelov katalog, samo ako uspes da ga nadjes. Ja sam ga svojedobno trazio, ali izgleda da korisnike Sezama slabo zanima hardwer (niko ga nema). Pozdrav, Moma
asembler.16 djelovic,
> Da li neko zna o tome gde se moze naci specifikacija BSC sinhronog > komunikacionog protokola i uptstva sa primerima za programiranje USART > (8251A) cipa? Ne razumem se previše u brojeve čipova (to ostavljam mjovi :-)), ali ako je USART neki naslednik UART-a, čipa za kontrolu COM portova, onda ti mogu pomoći. Jeste li?
asembler.17 ialeksic,
>>>...ako je USART neki naslednik UART-a, cipa za kontrolu COM portova, >>>onda ti mogu pomoci. Jeste li? Nisam bas ekspert za INTEL-ovu genealogiju, tako da ne znam tacno da li je naslednik. Mislim da pripada istoj familiji, a poseduje svojstva UART-a tako sto podrzava komunikaciju u asinhronom rezimu, ali se uglavnom koristi za realizaciju takozvanih (karakter) sinhronih komunikacionih protokola kao sto je IBM-ov BSC. To bi trebalo i ime da sugerise: USART (Universal Synchronous/Asynchronous Receiver/Transmitter). Istorijski (paleontoloski), IBM i drugi proizvodjaci MAIN FRAME i MINI racunara koristili su (a i jos uvek koriste) sinhrone karakter protokole kako bi multipleksirali vise terminala (ili racunara) po jednoj komunikacionoj liniji. Uprosceno govoreci, osnovna razlika izmendju asinhrone i sinhrone komunikacije je u tome da u asinhronoj, ne postoji vremenska medjuzavisnost u kojoj se salju karakteri (koji cine poruku) po liniji, dok se u sinhronoj, nakon uspostavljenje sinhronizacije posiljoca i primaoca, podaci salju u jednom bloku karaktera koja podrazumeva da ce se po liniji karakteri pojavljivati jedan za drugim u istom vremenskom intervalu. Originalno, IBM je jos u XT-u ponudio karticu za podrsku emulaciji terminala koji radi u BSC protokolu realizovanu sa USART-om. Ova kartica koristi slicno serijskoj (UART) IRQ3 i IRQ4 interapt nivoe, ali za razliku od serijske, koja koristi 2f8/3f8 (COM2/COM1), ona koristi 380/3A0 port adrese za komunikaciju. Dakle, svaka pomoc je dobrodosla :).
asembler.18 bulaja,
Ima li neko implementaciju u asembleru nekog algoritma za kompresiju? Potrebna mi je bilo kakva funkcija za pakovanje stringova, dosta ce biti da pakuje kao stari ARC (moze i losije:) al' mora da radi brzo :).
asembler.19 niklaus,
> Ima li neko implementaciju u asembleru nekog algoritma za > kompresiju? Potrebna mi je bilo kakva funkcija za pakovanje > stringova, dosta ce biti da pakuje kao stari ARC (moze i losije:) > al' mora da radi brzo :). Ne mogu ti dati baš ASM (baš ga ne razbijam), ali ti usmeno (čitaj: via SEZAM) mogu objasniti logiku para arhivera, odn. da se bolje izrazim algoritamsku strukturu. (:niklaus:)
asembler.20 kriss,
>> Ima li neko implementaciju u asembleru nekog algoritma za >> kompresiju? Pogledaj SEZAM.5 poruka 6.67. Nadam se da će ti nešto pomoći.
asembler.21 janko,
> Ima li neko implementaciju u asembleru nekog algoritma za > kompresiju? Potrebna mi je bilo kakva funkcija za > pakovanje stringova, dosta ce biti da pakuje kao stari ARC > (moze i losije:) al' mora da radi brzo :). Nisi baš precizan. Ako stvarno misliš na stringove slova, pa još kratke (manje od tristotinak bajtova po stringu) tu se ne mogu mnogo uspešno primenjivati metodi kompresije koji fino rade na dužim fajlovima. Ako stringove možeš sve zajedno da komprimuješ odjednom, onda je već lakše, i mogući je veći stepen kompresije. Drugo, zašto baš na asembleru? Šta fali C-u? LZW algoritam implementiran u C-u imaš kao ilustraciju teksta iz nekog broja Računara (RSOFT) i zgodno je to što algoritam nije proširen nikakvim džidažma-budžama, već samo ilustruje ideju. Za kratke tekstove je neoptimalan, jer ne koristi adaptivnu širinu koda. Lično, implementirao sam LZW sa tim poboljšanjima, i još nekim, pa tako imam rutine koje rade na skoro potpuno istom principu kao UNIX-ov compress, te imaju i praktično isti stepen kompresije. Komprimuju fajl nešto brže od najsporijeg PKZIP 2.04 pakovanja. Dekomprimovanje nisam merio.
asembler.22 dejanr,
>> LZW algoritam implementiran u C-u imaš kao ilustraciju teksta iz >> nekog broja Računara U pitanju su tekstovi "LZW - kompresija podataka" iz "Računara 59" i "Računara 60", autor je Jasmin Đipanov (braca na Sezamu). U situacijama kada je potrebno rešiti neki programerski problem, nije loše pregledati RIND - za ovih (skoro) deset godina "Računari" su se bavili brojnim temama, solidna je verovatnoća da će se naći nešto od intresa.
asembler.23 bulaja,
│Nisi bas precizan. Ako stvarno mislis na stringove slova, pa jos kratke (manje │od tristotinak bajtova po stringu) tu se ne mogu mnogo uspesno primenjivati │metodi kompresije koji fino rade na duzim fajlovima. Ako stringove mozes sve │zajedno da komprimujes odjednom, onda je vec lakse, i moguci je veci stepen │kompresije. Drugo, zasto bas na asembleru? Sta fali C-u? └─── Potrebna mi je funkcija koju mogu bez problema da linkujem sa Clipper-om, posto mi je nesto slabo islo povezivanje sa C-om (nikako da nadjem taj cuveni llibca.lib :). Ne treba mi za tako kratke stringove, optimalno bi mi bilo da dugacki string podelim na blokove od nekoliko Kb i kompresujem svaki blok pojedinacno. Za taj tekst u Racunarima znam (i ja sam se svojevremeno igrao malo za LZW), ali dok ne resim probleme C -> Clipper (ako je neko resio, nek javi u clipper temi:) interesuje me samo Asembler.
asembler.24 djelovic,
> Potrebna mi je funkcija koju mogu bez problema da linkujem sa Clipper-om, > posto mi je nesto slabo islo povezivanje sa C-om (nikako da nadjem taj > cuveni llibca.lib :). Za kompresiju teksta u memoriji ti neće trebati nikakve biblioteke (!) tako da nećeš imati problema sa bilo kojim C kompajlerom. Svi, na kraju krajeva, mogu da prave i ASM sors. > Ne treba mi za tako kratke stringove, optimalno bi mi bilo da dugacki > string podelim na blokove od nekoliko Kb i kompresujem svaki blok > pojedinacno. Ako ti ovo nije programski zahtev (?), onda ćeš mnogo bolje proći kompresujući sve to odjednom.
asembler.25 bulaja,
│Za kompresiju teksta u memoriji ti nece trebati nikakve biblioteke (!) tako │da neces imati problema sa bilo kojim C kompajlerom. Svi, na kraju krajeva, │mogu da prave i ASM sors. └─── A iz ASM source-a pozivaju funkcije iz standardne biblioteke :). Problem povezivanja Clipper-a i drugih C-ova osim Microsofta lezi u nekompatibilnosti izmedju float formata, tako da se za bilo sta sto koristi float MORA koristiti MSC, i u tom slucaju se mora linkovati i taj cuveni llibca.lib.
asembler.26 djelovic,
> A iz ASM source-a pozivaju funkcije iz standardne biblioteke :). > Problem povezivanja Clipper-a i drugih C-ova osim Microsofta lezi u > nekompatibilnosti izmedju float formata, tako da se za bilo sta sto > koristi float MORA koristiti MSC, i u tom slucaju se mora linkovati i > taj cuveni llibca.lib. Da, ali koje ćeš ti to standardne rutine da koristiš za kompresiju?!!! Možda printf? Ne treba ti! fopen? Ne treba ti! Pošto radiš kompresiju parčeta memorije i rezultate stavljaš u memoriju, ti tu zapravo ne pozivaš ni jednu jedinu rutinu iz biblioteke, i ne koristiš float brojeve! Kompresija se obavlja jednostavnim matematičkim operacijama, šiftovanjima i pravljenjem tablica, te za taj deo posla biblioteke nisi potrebne!
asembler.27 ssokorac,
Znam da je nešto očajno glupo :), ali ja ne vidim :). vidseg dd 0b8000000h mov CX, 2 WowFlash: mov BX, CX mov CX, 07D0h les DI,DWORD PTR VidSeg lds SI,DWORD PTR VidSeg Flush: lodsw XOR AH, 07Fh stosw loop Flush mov CX, BX loop WowFlash Ovo bi trebalo da invertuje ekrani zatim ga vrati nazad. Stvarno ga invertuje, ali _neće_ da ga vrati nazad. Ako program pozovem dva puta, prvi put invertuje, drugi put vrati, kao da se WowFlash izvrši samo jednom. Menjao sam sve živo i na kraju došao do čak ovako glupog loop WowFlash pomoću BX :), ali čak ni tada neće :(. Očigledno negde drugde grešim, valjda? P.S. Da, naravno da sam početnik :)
asembler.28 v.nesic,
> Ovo bi trebalo da invertuje ekrani zatim ga vrati nazad. Stvarno ga > invertuje, ali _neće_ da ga vrati nazad. Ako program pozovem dva puta, prvi > put invertuje, drugi put vrati, kao da se WowFlash izvrši samo jednom. Kolko ja vidim ovako od oka (asembler je na disketama :(( ) ti ekran prevrćeš tri puta. Stavi na početku mov CX,1 i trebalo bi da radi ok.
asembler.29 kriss,
Elem, da li neko zna emu služi ono Word/Byte ptr trtmrt žžž
asembler.30 bojanp,
> Ovo bi trebalo da invertuje ekrani zatim ga vrati nazad. Stvarno ga > invertuje, ali _neće_ da ga vrati nazad. Ako program pozovem dva puta, > prvi put invertuje, drugi put vrati, kao da se WowFlash izvrši samo > jednom. Menjao sam sve živo i na kraju došao do čak ovako glupog loop > WowFlash pomoću BX :), ali čak ni tada neće :(. Očigledno negde drugde > grešim, valjda? Problem je u tome što posle instrukcije lds si, dword ptr VidSeg registar ds ne adresira više memoriju koja pripada data segmentu, već video memoriju tako da instrukcije les i lds ne pročitaju stvarnu vrednost VidSeg promenljive. Dakle program koji radi je: ------------------------------------------------------------ vidseg dd 0b8000000h mov CX, 2 WowFlash: push ds <----- ! mov BX, CX mov CX, 07D0h les DI,DWORD PTR VidSeg lds SI,DWORD PTR VidSeg cld <----- 1 Flush: lodsw XOR AH, 07Fh stosw loop Flush mov CX, BX pop ds <----- ! loop WowFlash ------------------------------------------------------------ 1 - ovo je takođe neophodno da bi se kod instrukcija stos i lods uradilo uvećavanje, a ne smanjinvanje si i di registara. Ukoliko se to izostavi tada zavisiš od trenutnog stanja direction flag-a. Pozdrav, Bojan
asembler.31 v.nesic,
> Elem, da li neko zna emu služi ono > > Word/Byte ptr trtmrt Ako je Word ptr X, tada je X+1 pokazuje na sledeću reč, inače na sledeći bajt.
asembler.32 nkbog,
> Ako ti ovo nije programski zahtev (?), onda ćeš mnogo bolje proći > kompresujući sve to odjednom. Možda bolja kompresija, ali ne i brža. U principu je bolje da kompresuje po frejmovima. Naravno, ukoliko se radi o standardnim stringovima (realne reči et al), onda bi Hafmanova kompresija bila dobro i brzo rešenje (sve je unapred proračunato - samo se koristi fiksna tabela i par šiftovanja/ orovanja), a i sve odjednom (jer nema potrebe za pretraživanjem u nazad). NB.
asembler.33 nkbog,
> vidseg dd 0b8000000h > mov CX, 2 >WowFlash: mov BX, CX > mov CX, 07D0h > les DI,DWORD PTR VidSeg > lds SI,DWORD PTR VidSeg >Flush: lodsw > XOR AH, 07Fh > stosw > loop Flush > mov CX, BX > loop WowFlash Sa LDS si promenio data segment. Kada sledeći put kažeš: LDS SI,DWORD PTR VidSeg ne čitaš iz originalnog segmenta već iz segmenta 0B800h. UBR, ima još jedan bag (koji je čest i kod iskusnijih programera): pre lodsw/stosw petlje treba staviti PUSHF CLD ; idemo na gore (uvećvamo SI/DI za 1 (2 ili 4)) a posle petlje: POPF NB.
asembler.34 ssokorac,
─┼┤ ekran prevrćeš tri puta. Stavi na početku mov CX,1 i trebalo bi da ─┼┤ radi ok. Da, stvarno, ali nije to to :(. Ispravio sam na 1, ali i dalje ništa :(.
asembler.35 janko,
>>> LZW algoritam implementiran u C-u imaš kao ilustraciju >>> teksta iz nekog broja Računara > U situacijama kada je potrebno rešiti neki programerski > problem, nije loše pregledati RIND - za ovih (skoro) deset > godina "Računari" su se bavili brojnim temama, solidna je > verovatnoća da će se naći nešto od intresa. Sasvim sigurno neću pogledati RIND :( kada dajem nekom odgovor da nešto ima u nekom broju Računara, jer odgovore pišem of lajn. Zašto RIND ne bi bio of lajn? I da se baza apdejtuje svakog meseca, a da možemo da je preuzmemo ili celu ili samo poslednje promene?
asembler.36 janko,
>> Potrebna mi je funkcija koju mogu bez problema da >> linkujem sa Clipper-om, posto mi je nesto slabo islo >> povezivanje sa C-om (nikako da nadjem taj cuveni > llibca.lib :). > > Za kompresiju teksta u memoriji ti neće trebati nikakve > biblioteke (!) tako da nećeš imati problema sa bilo kojim > C kompajlerom. Svi, na kraju krajeva, mogu da prave i ASM > sors. Ne baš tačno. Npr.: long a, b, c; ... c=a*b; već traži biblioteku! Između ostalog, i rutine za obično množenje long-ova su deo biblioteke i u MSC i u BC (!) Eto, u poularnim C implementacija i naizgled nevin kod zavisi od biblioteka. >> Ne treba mi za tako kratke stringove, optimalno bi mi >> bilo da dugacki string podelim na blokove od nekoliko Kb >> i kompresujem svaki blok pojedinacno. > > Ako ti ovo nije programski zahtev (?), onda ćeš mnogo > bolje proći kompresujući sve to odjednom. Kod LZW ovo "mnogo ćeš bolje proći" ne stoji, (!) zbog prirode algoritma i njegovih verzija. Pogotovu, ne stoji kod verzija onog tipa, kako su bile implementirane u programima compress pre v. 2.0 i verzijama kakvima se komprimuju slike u nekim popularnim grafičkim formatima. Bulajo, ono što meni nije jasno, šta se dobija kompresijom stringova u memoriji, osim njihove nečitljivosti? Ako je program u Kliperu, ušteda memorije nije bitna, pa bi ti stringovi bolje živeli u jednoj .DBF. A ako je do nečitljivosti, postoje daleko lakši (i brži) načini nego što je kompresija podatatka.
asembler.37 dejanr,
>> Zašto RIND ne bi bio of lajn? I da se baza apdejtuje svakog >> meseca, a da možemo da je preuzmemo ili celu ili samo poslednje >> promene? U planu je da se napravi takva baza i program sličan RIND-u za njeno pretraživanje ali ne verujem da ću to skoro stići da dovršim.
asembler.38 ssokorac,
─┼┤ PUSHF ─┼┤ CLD ; idemo na gore (uvećvamo SI/DI za 1 (2 ili 4)) ─┼┤ ─┼┤ a posle petlje: ─┼┤ POPF Šta se dešava kada se ne stavi CLD? Kako se menjaju SI/DI ? Thanks svima na pomoći, sada radi :).
asembler.39 nkbog,
> Šta se dešava kada se ne stavi CLD? Kako se menjaju SI/DI ? Ne znaš unapred. Kada je D setovan idemo na dole (SI/DI - 1 (2 ili 4)), a kada je resetovan idemo na gore (+1 (2 ili 4)). Pošto ne znaš šta se dršavalo pre pokretanja tvog programa ne možeš biti siguran šta je u D flegu kad stigneš do LODSW. NB.
asembler.40 bulaja,
│Bulajo, ono sto meni nije jasno, sta se dobija kompresijom stringova u │memoriji, osim njihove necitljivosti? Ako je program u Kliperu, usteda │memorije nije bitna, pa bi ti stringovi bolje ziveli u jednoj .DBF. A │ako je do necitljivosti, postoje daleko laksi (i brzi) nacini nego sto │je kompresija podatatka. └─── Pazi ovako :). Ne treba mi kompresija podataka u memoriji, vec imam bazu sa gomilom tekstova koje bi bilo lepo spakovati da ne zauzimaju toliki prostor na disku. Tekstovi su reda velicine od 20 do 100 K, pa je na 100 tekstova usteda vrlo znacajna :). Naravno ne cuvaju se u .DBF (ni u .DBT:), vec ili u posebnim tekst fajlovima ili u jednom zajednickom. Tekstovi se samo pregledaju (view), pa bi onda moglo da se uradi da se pakuje po segmentima i on-the-fly raspakuje samo onaj segment teksta koji trenutno treba prikazati na ekranu (ne bas samo ono sto je na ekranu, ali optimalni bi bio bafer od nekih 10 Kb). Potreban mi je prenos stingova preko memorije, jer mi je lakse iz Clippera da kontrolisem koji deo datoteke treba raspakovati. Mada ako je algoritam dovoljno brz, najlakse bi mi bilo da raspakuje ceo file na disku, pa da se onda ne patim mnogo sa buferom u browseru :). LZW pakuje tekstove oko 60%, ali meni bi bio dovoljan i stepen kompresije od oko 40%, samo da je raspakivanje sto brze :).
asembler.41 niklaus,
> U planu je da se napravi takva baza i program sličan RIND-u za > njeno pretraživanje ali ne verujem da ću to skoro stići da > dovršim. Just take your time, ali da valja... (: (:niklaus:)
asembler.42 janko,
> kontrolisem koji deo datoteke treba raspakovati. Mada ako > je algoritam dovoljno brz, najlakse bi mi bilo da > raspakuje ceo file na disku, pa da se onda ne patim mnogo > sa buferom u browseru :). Onda, pozovi PKUNZIP i PKZIP kao eksternu komandu -- teško da ćeš sam napraviti nešto brže, makar i u mašincu.
asembler.43 bulaja,
│Onda, pozovi PKUNZIP i PKZIP kao eksternu komandu -- tesko │da ces sam napraviti nesto brze, makar i u masincu. └─── Tesko da bih to nazvao elegantnim resenjem :).
asembler.44 majkl,
> Potreban mi je prenos stingova preko memorije, jer mi je > lakse iz Clippera da kontrolisem koji deo datoteke treba > raspakovati. Zbog indeksa? Ako je u pitanju samo čitanje, postoji u ITP9103.ARJ (skinuto sa sezama) Pascal sors za odredjivanje sloga na osnovu ključa u NDX datoteci. Treba kreirati odgovarajuću bazu i kreirati NDX. Bazu posle možeš da baciš, a koristeći NDX direktno pristupaš odgovarajućem parčetu teksta.
asembler.45 ndragan,
/ prostor na disku. Tekstovi su reda velicine od 20 do 100 K, pa je na / 100 tekstova usteda vrlo znacajna :). Naravno ne cuvaju se u .DBF (ni Imao sam jednu ideju (koja je pala u vodu kada se pojavio PKarc), a to je da se u svakom tekstu pojavljuje gomila dugačkih reči koje se ponavljaju, već samim tim što tekst ima temu :). Od cele ideje je ostala jedna rutina za pravljenje top liste najčešće ponavljanih reči; odbacuju se nastavci, naravno, i ostaje uglavnom korenje. Te reči bi se mogle kodirati u dva bajta i to je već poprilično pakovanje, a ostatak bi se mogao prepustiti nekom lakšem algoritmu za kompresiju. Nešto slično je bilo u help fajlu za TP2.0 (cp/m). Da ne spominješ ti ovaj problem po drugi put? Nešto me hvatao deža vi i dok sam čitao i dok sam pisao.
asembler.46 a.kircanski,
Ajde da mi neko kaže kako da u adresu npr ah:bh upišem neku vrednost? Naravno da sam početnik, vidi se :-) sale.
asembler.47 .bale.,
> Ajde da mi neko kaže kako da u adresu npr ah:bh upišem neku vrednost? Mislio si, valjda, na AX:BX? Moraš, na primer, prvo AX da iskopiraš u neki od segmentnih registara (najbolje DS, jer on ide u paru sa BX), pa onda upotrebiš registarsko indirektno adresiranje, MOV byte ptr [BX], CL ili MOV word ptr [BX], CX, na primer.
asembler.48 a.kircanski,
_-=> Mislio si, valjda, na AX:BX? Moraš, na primer, prvo AX da To sam mislio. Rasejan sam ovih dana ;-) _-=> iskopiraš u neki od segmentnih registara (najbolje DS, jer _-=> on ide u paru sa BX), pa onda upotrebiš registarsko _-=> indirektno adresiranje, MOV byte ptr ŠBXĆ, CL ili _-=> MOV word ptr ŠBXĆ, CX, na primer. ok, thanks.
asembler.49 bulaja,
**** new file **** R:\IBMPC\PROGRAM\*.* ---------------------- asmwiz16 zip 81586 Assembly Wizard's Lib v1.6, razne funkcije za asembler Assembly Wizard's Library v1.6 for assembly language (most assemblers are supported). Text and graphics, buffered file I/O, kbd, mouse, exception handler, string support, hi-res timers & countdowns, lots more. Tiny model (.COM format). By Tom Hanlin. <Preuzeto sa Imtel BBS-a>
asembler.50 kriss,
Ajde da mi neka dobra duša napiše šta se dešava u sledećim slučajevima (mislim na flegove, naročito ZF i CF): CMP ax,bx ako je: 1) ax = bx 2) ax >= bx 3) ax > bx 4) ax <= bx 5) ax < bx 6) bx=0, pa je ax=0 (znači ax=bx=0) I još jedno pitanje: DIV BX (koliko sam ukapirao, tu se deli DX-AX sa BX) Jel u yom slučaju dolazi do deljenja 32-bitnog DXAX broja (fizički se nadoveže DX na AX, recimo DX=1234 AX=5678, pa je DXAX=12345678) ili se stvori nešto drugo tipa DX-AX? P.S. Što ti je zanimljivo kad nemaš literaturu :(
asembler.51 mjova,
> CMP ax,bx ako je: samo karakterisitčni slučajevi, ostali su kombinacije: > 1) ax = bx ZF > 3) ax > bx ništa > 5) ax < bx CY > 6) bx=0, pa je ax=0 (znači ax=bx=0) (isto kao i 1) cmp je zamena za izraz ax-bx (u ovom slučaju). razlika jednakih brojeva 'pali' ZF (jer je razlika jednaka nuli, logično?). razlika većeg i manjeg broja neće 'upaliti' ništa. razlika menjeg i većeg broja 'pali' CY (indikator da je došlo do 'prenosa'). > Jel u yom slučaju dolazi do deljenja 32-bitnog DXAX broja jes, deli se DX:AX sa onim što navedeš iza. rezultat se smešta u AX (količnik) i DX (ostatak). > P.S. Što ti je zanimljivo kad nemaš literaturu :( probaj eksperimentalnu metodu, pali uvek!
asembler.52 pedjak,
> Ajde da mi neka dobra duša napiše šta se dešava u sledećim > slučajevima (mislim na flegove, naročito ZF i CF): > CMP ax,bx ako je: Uh, to ne znam napamet, a nemam pri ruci literaturu :) > DIV BX > (koliko sam ukapirao, tu se deli DX-AX sa BX) > Jel u yom slučaju dolazi do deljenja 32-bitnog DXAX broja > (fizički se nadoveže DX na AX, recimo DX=1234 AX=5678, pa je > DXAX=12345678) ili se stvori nešto drugo tipa DX-AX? Dobro si ukapirao.
asembler.53 kenza,
Hi! Neko je ovde ranije kacio kratku asm rutinu za cold ili warm reboot.Trazio sam i nisam nasao :( So... ;)
asembler.55 i.sajic,
Imam tri teska pitanja. Svaka cast onom ko zna odgovor: 1. Pravio sam neke interapt hendlere. Hteo sam da imam kontrolu pre i posle pozivanja starog interapta. Zato stari interapt ne pozivam sa jmp dword cs:oldint nego sa pushf call dword ptr cs:oldint (gore sam ispustio ptr :( ) Medjutim, drugi metod ne funkcionise korektno "samo" u sledecim izuzecima: INT 16, INT 21, INT 2E, INT 2F. Ustanovio sam da u okviru INT 21 najvise problema stavara servis 40h (Write to file or device using handle). Kako korigovati program ?
asembler.56 i.sajic,
2. Zna li neko kako postaviti globalnu uslovnu prekidnu tacku (global conditional breakpoint) u TD (turbo debugger-u) na bilo koju instrukciju tipa, recimo, RET ili bilo sta drugo. Ako pokusamo sa uslovom tipa byte ptr cs:ip EQ C2h nista se ne postize. Mozete da probate = umesto EQ, a C2h je jedan od mogucih prevoda mnemonika RET (tek za informaciju)...
asembler.57 mjova,
> pushf > call dword ptr cs:oldint (gore sam ispustio ptr :( ) > Medjutim, drugi metod ne funkcionise korektno "samo" u > sledecim izuzecima: INT 16, INT 21, INT 2E, INT 2F. > Ustanovio sam da u okviru INT 21 najvise problema taj metod mora da funkcioniše u svim situacijama, osim u kad ne. ;)) neke prekide ne semeš pozivati jer se oni pozivaju u raznim situacijama: IRQ (npr int 9), obrade greške (int 24h), itd... drugo, neki su samo vektori pa se nikad i ne pozivaju (4ah). no, na sreću, tih je malo pa se teško nabasa na njih ;)). dakle, ove int koje si naveo su sasvim ok i čim se neki od vektora slobodno poziva sa INT nn, onda se on može sasvim lepo pozvati i sa pushf/call kombinacijom. u problemu koji si ti opisao vreovatno figuriše nešto drugo što te čini tužnim ;). naime, ovakve stvari se obično rade u TSR programima, pa treba obratiti veliku pažnju na čuvanje registara. ako si siguran da ti se ˙oldint˙ sigurno nalazi u CS, onda to nije problem, ali ako ˙misliš˙ da će tu biti, e onda budi siguran da nije sve baš kako treba ;). prekide 16h, 21h i 2fh sam vrlo uspešno preuzimao i sve je bilo ok. preriljaj kôd još malo pa se javni.
asembler.58 i.sajic,
Zahvaljujem mjovo na brzini kojom je stigao odgovor. Pokusao sam da pojednostavim problem, pa saljem mali asembler program od tridesetak linija gde se u prekidu 21h nista ne desava, i kod mene program ne funkcionise korektno (uglavnom problem sa servisom 40h) int21.asm
asembler.59 mjova,
> Pokusao sam da pojednostavim problem, pa saljem mali > asembler program od tridesetak linija gde se u prekidu 21h > nista ne desava, i kod mene program xe ;) problem je vezan za flegove koje određeni prekidi vraćaju. naime, 16h vraća u vidu CY ili ZF (ne znam napamet), da li se nešto nalazi u baferu. takođe, neke 21h fn rade slično (a verovatno i ostali intovi koji te muče). (thanks to dzakic!) dakle, treba da vidiš šta je vratio stari int i da to zameniš na steku sa onim što će biti podignuto prilikom iret-a. obrati pažnju na to da je na stek prvo spušten Flag reg (pushf), pa tek onda ide CS:IP. dakle, možeš 'gađati' na stacku direktno mesto gde je FLAG (zak mi reče da se razlikuje SP kod XT i AT+ procesora) ili da 'kao' podigneš sa steka redom tri vrednosti, pa da strpas nazad sa PUSHF itd...
asembler.60 i.sajic,
Postovanje za DZakica i MJovu! Hvala na resenju. Sada sve radi savrseno.
asembler.61 mivel,
BTW, komplikacije oko vraćanja fleg registra iz poslednjeg pasusa odgovora 5.59 jednostavno nestaju upotrebom: RETF 2 ;far return & discard 2 bytes
asembler.62 dejanr,
========== ibm.dos/long.messages #417, from egdavis, 10202 chars, Sat Oct 16 19:03:26 1993 ---------- TITLE: Essay on 386/486 Exception This is an essay for our first level inhouse Technical Support UAE's, General Protection Faults, System Integrity Errors, Exceptions, Faults, Traps and other Beasty and Goulies of the 386/486 chips. HISTORY When the 386 chip came out, it was used as a fast 8088 or a fast 286 chip. Then new software was written that could utilitze some of the new hardware imporvements in the design. QEMM was one of the first used on-site. But some programs would get QEMM error #13 and sometimes #12. Reading the manuals it stated that these QEMM errors were not a fault with QEMM but rather with the program that was running. Windows 3.0 brought this to new hights with it's "Unrecoverable Applicaation Error" (UAE). These UAE's were not very informative. In Windows 3.1 Microsoft did away with all UAE's. They did this by improving some of the Windows programming, but a lot were with application and hardware problems. But they improved the messages, by telling what kind of fault it was. They also provided better diagnostic software (Dr Watson for Windows programs, but nothing for DOS programs). But the basic fact remains, all of these problems are NOT detected by the software running, but are detected by the 386/486 chip which passes the information to the software which then does with the information what it is programmed to do (for DOS this usually meant just hanging the computer). EXPERIENCE AT DCPP Table #1 shows the 386/486 exception codes. Intel reserved the first 32 exception codes (out of 256) for the Intel chips. Unfortunately, IBM used some of these for the IBM PC, so there is some overlap. This can make for some interesting problems. Exception #5 is exceeding a BOUND. I have seen a program with this problem, repeatly generate exception #5, which the PC interpeted as asking for a screen print for 250 times until the PC was rebooted. When using QEMM, an exception #13 was the most common exception that was produced. Exception #13 was produced when a program tried to access memory that another program owned. Most of the time this was when a program tried to access, some of the upper memory which QEMM had remapped from extended into the empty upper memory blocks. An in house program that would get a #13 after about 15 minutes of use. If run without QEMM, the PC would hang after about 15 minutes. DOS is not as smart as QEMM in telling you what the actual problem was. But that was the past. Presently, we used DOS 5.0 with Windows in a very complex configuration. Without windows running, we can get some faults that are detected when CEMM is running. The three I have seen are #6, #12 and #13. Most have been #13, several #12 and one #6. In all cases the PC had to be rebooted. In these situations, CEMM was the active program when the 386/486 detected the exception and passed the information to the active program. CEMM responded with the message, but there was not much it could do to rectify the problem. With Windows running, the situation is vastly more complex. You have several programs running (although only one is active at a time). If the 386/486 chip detects an exception, it passes the exception thru Windows to the active program at that time. Windows sees this and tries to take appropiate action to rectify the problem, or possibly minimize the damage. In 3.1 it also provides some diagnostics to the user. Addtionally, if the program was a Windows (as opposed to DOS), and DR Watson was running, Windows tries to record a lot of diagnostic data to trouble shoot the problem. Of course, if the problem is severe enough, DR Watson may crash before, it can perform its job. How does Windows notify the user depends upon what program was active when the 386/486 detected the exception. If it was a DOS program it generates an SIE, if it was a Window program, it gives another dialog box saying the effected program and the location of the error. So the exceptions are from the 386/486 chip, the method Windows uses to display the information is significantly different for Windows program versus DOS programs. Most of the Windows exceptions are #13 (general protection fault usually of the segment overrun type by looking at Dr Watson results), with a couple of #12 (stack fault). Note Windows does not give the number but rather uses the name of the exception. For DOS programs there is less information. Windows gives the type of error for which program and then it kills the affected program. There are not other diagnostics. There are some third party programs that can give more details. Most of the DOS exceptions are #6 (Invalid opcode), with a couple of #13 (general protection faults). The key to determining the fault is to read the message before clicking OK. The results are not stored. The middle phrase is the key. "System Integrity has been violated due to ???????????." The question marks is the error. Most at DCPP are Invalid opcode, but not all. We have also seen several non-maskable interrupts (#2) due to memority parity error, in both Windows and DOS. In all cases the the system stops (either by the 386/486 chip or other hardware), after the system displays the message. In DOS it will tell you the actual memory location. If Windows is running, you get the message, without a memory location. The reason it does not give the actual memory location is because the memory address is not real but rather virtual memory location which is usually different than the actual memory location. To summarize, the 386/486 chip detects the exceptions. It then passes the information to the Control Program ( CEMM, EMM, QEMM, Windows, OS/2, NT) for appropiate action. If the program cannot resolve the problem, it provides some error message, and the good ones will attempt to minimize the damage. ROUTINE USES OF EXCEPTIONS In the first section, I alluded to the fact that some exceptions were intentionally used by some programs in normal operation. Exception #1 (single step) is how program debuggers, go through a program one instruction and a time, pausing to give the programmer time to examine the results. Many programs ( Windows 386 enhanced, OS/2, NT) use the page fault to determine when to bring information to and from its swap file when it implements Virtual Memory Manage- ment. To make more memory availible, Windows reserved part of the hard disk to act as "Virtual Memory". Thus Windows could use 4 Mb of hard disk space to supplement 8 Mb of RAM for a total of 13 Mb. When Windows runs short of RAM, its Virtual Memory Manager (VMM) copies the information from RAM to the swap file. It copies them in 4k chunks called pages. The 4K size hard coded in the 386/486 chip, because it is designed to provode instruction to support virtual memory. As a program runs, it might try to access some section of memory that has "Been paged out" earlier. When it does the 386/486 chip issued a page fault (exception #14). Windows sees this exception and passes control to its Virtual Memory Manager. The VMM then copies the page back from the swap file into memory so the other program can continue. It may have to page another 4K to the swap file, to make room for the page coming back. This hap- all tranparent to the user. Well he may notice that his program is running slower, and he sees activity on the hard disk. Of course, no error message is generated for this exception, because the exception was handled properly without any error. There are several levels of program priority (actually they are rings). Windows internally issues general protection faults ( #13) to transition from one ring to another. These too are transparent to the user. Table of Intel Exceptions Interrupt Intel reserved Notes Hex Decimal uses --- --- ----------------- ------------------------------------ 00H #0 Divide by zero Can be a program problem or a hard- ware configuration problem. 01H #1 Single Step Used by program debuggers 02H #2 Nonmaskable This is generated by a memory Interrupt parity error and the machine stops. 03H #3 Breakpoint trap Used by program debuggers 04H #4 Overflow Trap 05H #5 BOUND range IBM also used this for the screen exceeded print also. 06H #6 Invalid opcode This is caused when a program tries to execute an instruction in memory, but that location contains something which is NOT a valid CPU instruction. 07H #7 Math Co-processor is not availible 08H #8 Double-fault IBM also used this for the timer tick Exception. interrupt (IRQ 0). 09H #9 Math Co-processor IBM also used this for the keyboard segment overrun interrupt (IRQ 1). 0AH #10 Invalid Task IBM also used this for IRQ 2 (which State segment is used by most LAN cards. 0BH #11 Interrupt Table IBM also used this for COM2 (IRQ 3) too small or double fault 0CH #12 Stack Exception IBM also used this for COM1 (IRQ 4) 0DH #13 General Protect- This is when a program tries to ion Exception, access memory that does no belong or segment to it (usually to another program). overrun. IBM also used this for LPT2 (IRQ 5) 0EH #14 Page Fault This is when a program tries to access memory that is no longer present (out to the swap file) IBM also used this for floppy (IRQ 6) 0FH #15 (Reserved) IBM also used this for LPT1 (IRQ 7) 10H #16 Co-processsor IBM also used this for Video BIOS error interrupt services. 11H #17 Aligmnet Check IBM also used this for Equipment check BIOS interrupt services
asembler.63 mjova,
> TITLE: Essay on 386/486 Exception super tekst! prevod bi vio zgodan za BLP.
asembler.64 mdimitrijevic,
Zna li iko koliko clock-ova traje ovaj niz naredbi. Znate na sta mislim. Mislim koliko procesoru traju ti clockovi. Ima to u HELPPC ali nije to to. Nije bas objasneno. ( Tajming Instrukcija je to braco :))) mov cx,1000 pon: mov al,10 dec cx cmp cx,0 jne pon Prost deo i samo me to zanima :)) Pozdrav, Marjan Dimtirijevic
asembler.65 pbojan,
>> Zna li iko koliko clock-ova traje ovaj niz naredbi. Znate na >> sta mislim. Mislim koliko procesoru traju ti clockovi. Ima to >> u HELPPC ali nije to to. Nije bas objasneno. ( Tajming >> Instrukcija je to braco :))) Mozda bi bilo dobro da kazes o kom procesoru se radi? Clockovi se malkice razlikuju od jednog do drugog.
asembler.66 pbojan,
Ima li neko neki disassembler nalik na Sourcer (ili bas neku novu verziju njega) koji je u stanju da ukapira 386/387 instrukcije? Bitno je, dakle, da ima mogucnosti otprilike kao gore navedeni, a moguce i vise ;). Zapravo, bilo bi jako lepo da postoji nesto novije od 1.87 verzije Sourcera, posto mi se on veoma odgovara ;).
asembler.67 niklaus,
(:> Zna li iko koliko clock-ova traje ovaj niz naredbi. Znate na (:> sta mislim. Imaš u Norton Guide bazi za asembler. ZIPovana ima 157kB. Ako treba, reci... (:niklaus:)
asembler.68 dr.grba,
>> Imaš u Norton Guide bazi za asembler. ZIPovana ima 157kB. >> Ako treba, reci... Šta čekaš, čoveče? Bači to ovamo! Nestrpljivi
asembler.69 mdimitrijevic,
Pogledacu u ASM.NG ( imam ga i brdo drugih ali mi nije palo na pamet da pogledam :). Ako ne radi javljam se opet. 1000Mhz/nMhz=X nanosekundi kaze HELPPC. Ovako se izracuna koliko nanosekundi traje jedan clock za odredjenu brzinu u MHZ. Sto znaci neka je uvek isti broj clock-ova ali se odnosi na drugu brzinu :). n = brzina u MHZ racunara ( 20,33,50,66,100,300 MHZ :)) Pozdrav, Marjan Dimitrijevic
asembler.70 zormi,
* Ima li neko neki disassembler nalik na Sourcer (ili bas neku novu verziju * njega) koji je u stanju da ukapira 386/387 instrukcije? Bitno je, dakle, * da ima mogucnosti otprilike kao gore navedeni, a moguce i vise ;). Tebi ustvari treba SOURCER 486 PRO PAK. Mislim da ga ovde još niko nema, tražio sam po Taiwan-u i Hong Kongu ali ondašnji pirati samo gledaju belo kad čuju naziv.
asembler.71 pbojan,
Ako je: 66h 9Ch = pushfd sta je: 67h 66h 9Ch? Sta tu predstavlja prefix 67h, na kom se Sourcer zbunjuje (a TD ne)?
asembler.72 niklaus,
Evo za nestrpljive... Asembler Norton Guide. Stvarno dobar (čitaj: opširan, a opet sažet)! (:niklaus:) (:niklaus:) asm_ng.zip
asembler.73 mdimitrijevic,
Zna li neko kako se gasi kesh na 386 i 486 masinama???? Pozdrav, Marjan Dimitrijevic P.S. Naravno interesuje me sa programerske strane :).
asembler.74 dr.grba,
>> Evo za nestrpljive... Asembler Norton Guide. >> Stvarno dobar (čitaj: opširan, a opet sažet)! Nešto ga ne vidim ): 'Ajde ponovo, leba ti.
asembler.75 pbojan,
>> Zna li neko kako se gasi kesh na 386 i 486 masinama???? Sto bi rekao Mjova, sto se ne obratis na pravo mesto? :)
asembler.76 niklaus,
Asembler Noprton Guide baza vezana uz poruku 5.72. Veoma jaka baza. Prilična količina (ne)potrebnih podataka. (; Ako ne kljucate po dvorištu, nećete imati problema sa korišćenjem. ┌───────────────────────────────────────────────────────┐ │ Apelujem na bulaju, da se ne samo ova baza prebaci │ │ u dir, već da se osnuje zasebni direktorijum ne samo │ │ za *.NG datoteke, već NORTON alatke uopšte. │ │ Barem toliko smo dužni čoveku kalibra Peter Nortona. │ └───────────────────────────────────────────────────────┘ (:niklaus:)
asembler.77 bulaja,
│Apelujem na bulaju, da se ne samo ova baza prebaci │u dir, vec da se osnuje zasebni direktorijum ne samo │za *.NG datoteke, vec NORTON alatke uopste. │Barem toliko smo duzni coveku kalibra Peter Nortona. └─── A koja je to od Nortonovih alatki PD (ukljucujuci i NG)? :)
asembler.78 niklaus,
(:> A koja je to od Nortonovih alatki PD (ukljucujuci i NG)? :) Aiii, koja ispala. Izvinjavam se dobrim duhovima SEZAMa. (; (:niklaus:)
asembler.81 peca.st,
!-> c) Zna za/preporučuje neko drugo uputstvo Norton guide, neko je kačio u konf nedavno... Strašna stvar, ima sve, interapti, instrukcije, sve detaljno opisano. Peđa.
asembler.82 mjova,
asm, preuzeta devetka int_9.arj
asembler.83 mjova,
asm, com, A Replacement for Interrupt 14 tsrcomm.arj
asembler.84 a.kircanski,
Dokumentacija za FR.com Fr.com je zasticen autorskim pravima kod firme Margin Soft, te ako zelite da ga koristite morate se pridrzavati dole navedenog: -Program je PUBLIC DOMAIN te ga smete kopirati, i cak je pozeljno da to cinite -NE SMETE NI U KOM SLUCAJU NAPLACIVATI OVAJ PROGRAM, NITI GA DAVATI UZ NEKI DRUGI SOFTVERSKI ILI HARDVERSKI PAKET KOJI SE NAPLACUJE. -Bez dozvole pisca programa niste ga ovlasceni menjati, ni na koji nacin. Jedino vam je dozvoljeno da ovaj dokumenat prevedete u neki od standardnih YU rasporeda. -Program je jos u razvoju, te ne mozemo garantovati da ce raditi, i da nece ostetiti neki deo vaseg sistema. -Uz program je prilozen asemblerski source, iz koga ste slobodni da uzimate delove i koristite ih u svojim programima, ali tako izmenjene asemblerske fajlove ne smete dalje distribuirati. -PISAC PROGRAMA NI U KOM SLUCAJU NIJE ODGOVARAN ZA MOGUCU STETU KOJU MOZE NAPRAVITI PROGRAM, MADA DO SADA NIJE BILO NIKAKVIH INDIKACIJA.... Ako se slazete sa gore navedenim, u tom slucaju ste slobodni da koristite program... Svaki komentar piscu je pozeljan.... Pisac vas takodje moli da ukoliko uspete da napisete program sa istom funkcijom, a koji zauzima manje memorije (od 144bajta ili 9 blokova) da mu posaljete kod koji je bolji.... Napomena o funkciji programa: Vrlo cesto mi se dogadjalo da napravim fatalnu gresku kucajuci unapred (u type ahead buffer-u), te se pojavila potreba da to obrisem. Kod ranijih verzija DOS-a (<5.0) cesto se problem resavao pritiskom na "pause" taster cija je interupt rutina brisala buffer. Kako u dos-u 5.0 to nije bilo moguce, resio sam da napisem program u C++-u koji ce da radi istu stvar. Nazalost on je kao rezidentan zauzimao 6.8Kb. Isti program napisan i preveden u Pascalu je uzimao istina nesto manje memorije (4Kb), ali to je jos uvek bilo puno. Prva verzija u asembleru je bila mnogo veca nego trenutna (544 bajta), ali sam kasnijim doradama (prepisivanjem interrupt rutine u nekorisceni deo PSP-a ( > 5Ch)), i uklanjanjem enviromenta, (posle puno bezuspesnih pokusaja, program je proradio). VAZNO, posto je prilozen i ASM kod, NE NE NE pokusavajte da pisete u PSP ispod 5Ch, ja sam pokusao, i posle toga (386DX/33/4MB/AMI-90) sam morao da koristim sistemsku;>>>, i da SVE podatke CMOS-a ponovo postavim. Nekako misteriozno moj program mi je upropastio CEO CMOS #č$%#%&:<; Ja nemam ideja kako da dalje skratim rezidentni deo koda... Tranzistentni deo koda je napisan rdjavo, i bolje se nemojte ugledati na njega.... Inace ja sam relativan pocetnik u asembleru, te mi nemojte prigovoriti ako imam nekih pocetnickih gresaka... Ovaj fajl cu distribuirati na SEZAM preko mog brata Aleksandra Kircanskog (kome posebno zahvaljujem), ciji je pseudonijum A.KIRCANSKI, ipak bih vas molio da pisete na ETF:UBBG:EJOVANOZ, (adresa ne izgleda bas ovako, ali snacicete se)... Bojan Jovanovic UPDATE (setio sam se kroz 2 min:))) FR.COM NIKAKO NE PUSTAJTE AKO IMATE INSTALIRAN QEMM SA STEALTH:M, JER ON PISE DIREKTNO U VIDEO MEMORIJU, TE MOZE DOCI DO PADA SISTEMA, ILI NECEG JOS GOREG. IPAK AKO SE NEKO ODVAZI DA OVAJ PROGRAM PUSTI NA SISTEMU SA ST:M OPCIJOM, MOLIM GA DA MI JAVI REZULTATE. Bojan Ovo je napisao moj buraz pa pogledajte.... AK cy fr.arj
asembler.85 ficus,
Hi zna li neko kako da procitam seriski broj bios-a ili nesto slicno treba mi za zastitu inapred zahvalan Ficus -----
asembler.86 eagle,
> zna li neko kako da procitam seriski broj bios-a ili nesto > slicno Imaš na F000:FFF5-FFFC datum kreiranja.
asembler.87 dsisic,
> treba mi za zastitu. Mislis li da je zastita koja koristi serijski broj biosa svrsishodna?
asembler.88 kenza,
(;>> zna li neko kako da procitam seriski broj bios-a ili nesto (;> Imas na F000:FFF5-FFFC datum kreiranja. Ajde daj parce code-a koje cita ceo datum odatle ;)
asembler.89 dr.grba,
>> zna li neko kako da procitam seriski broj bios-a ili nesto slicno >> treba mi za zastitu Mislim da je ovo loš način zaštite. Šta ako korisniku tvog programa npr. crkne matična ploča, pa dobije drugu, sa drugim BIOS-om? Hard disku se, recimo, ništa nije desilo i samo je đuture sa kontrolerom uboden u novu ploču. Šta tad? Hoćeš li trčati da im se izvinjavaš?
asembler.90 dejanr,
>> Mislim da je ovo loš način zaštite. Šta ako korisniku tvog programa npr. >> crkne matična ploča, pa dobije drugu, sa drugim BIOS-om? Hard disku se, >> recimo, ništa nije desilo i samo je đuture sa kontrolerom uboden u novu >> ploču. Šta tad? Hoćeš li trčati da im se izvinjavaš? Otići će da mu ponovo instalira program i to mu naplatiti. Pošteno :)
asembler.91 peca.st,
!-> Ajde daj parce code-a koje cita ceo datum odatle ;) Malo pre sam probao da pročitam sa tih adresa datum, ali mi je samo nule vraćao! Eagle, da nisi pogrešio adresu? Peđa.
asembler.92 eagle,
> Ajde daj parce code-a koje cita ceo datum odatle ;) ;) mov ax,čdata mov es,ax ; čdata -> es mov ax,0F000h mov ds,ax ; F000 -> ds lea di,biosdate ; adresa na koju se kopira mov si,0FFF5h ; adresa sa koje se kopira mov cx,8 ; duzina datuma rep movsb ; kopiranje Ovo čita datum u neki string BiosDate u data segmentu.
asembler.93 kriss,
˙˙ Mislim da je ovo loš način zaštite. Šta ako korisniku tvog Slažem se načelno, ali je 'dobar' koliko to zaštita može da bude. ˙˙ đuture sa kontrolerom uboden u novu ploču. Šta tad? Hoćeš li ˙˙ trčati da im se izvinjavaš? Kao prvo - ploča se ne menja svaki dan; Kao drugo - neka se tad čovek javi i kaže ;Vaš prg. mi je prijavio tu i tu grešku, šta sad?' a ti mu kažeš otkucaj to i to i gotovo. Za naše uslove (piratizovano tržište) je više nego dobar, kad već ne postoje neki jasni zakoni o autorskim pravima. P.S. Ni ja nisam za taj vid zaštite ali ako baš mora ... ;)
asembler.94 ficus,
:) Mislim da je ovo los nacin zastite. Sta ako korisniku tvog programa npr. :) crkne maticna ploca, pa dobije drugu, sa drugim BIOS-om? Hard disku se, :) recimo, nista nije desilo i samo je duture sa kontrolerom uboden u novu :) plocu. Sta tad? Hoces li trcati da im se izvinjavas? A sto bi mu s izvinjavao on ce me lepo pozvati indtalirati stvar ponovo i eto. ja cu mu za razliku od vecine drugih ostaviti instal disketu koja trazi neki broj koj je u stvari sifra za ser. br. biosa i eto ali problem je procitati ser. broj biosa a ne datum valjda postoji neki nacin i za to ja sam kopo po help-u i nista na se nadam da neko zna ili adresu ili int koji je cita. so ... Ficus
asembler.95 dekiper,
> Hi > zna li neko kako da procitam seriski broj bios-a ili nesto slicno > treba mi za zastitu > inapred zahvalan Ficus Pa to čak i (kako kaže gos'n Tuđman) zrnojedi na grani znaju :))) Šalim se. Do sada se niko nije za ovo ozbiljnije interesovao, a to je jedna od ovako "žešćih" stvari koju sam zapamtio: Segment: F000H Ofseti: FFF5 i FFF6 (mesec, dve cifre); FFF8 i FFF9 (dan, dve cifre) i FFFB i FFFC (godina, dve cifre). Pažnja. Ima pauza između bajtova. To je zato što je svaki treći u stvari znak "/" koji razdvaja podatke. Sve dobijene brojeve treba prebaciti u karaktere. Pošto radiš u TP-u probaj ovako: Program BiosDate; Var i:Word; Begin Writeln; For i:=$FFF5 To $FFFC Do Write(Chr(MemŠ$F000:iĆ)); Writeln; End. Ovaj program kod mene daje: 07/07/91 što je tačno (proverio u SETUP-u). Početnu adresu sam načuo u nekoj priči, a onda sam shvatio da treba malo brljati i namučio sam se dok nisam shvatio da postoje oni slashovi koji razdvajaju i dok se nisam setio da ih prevedem u karaktere. (mada je to bilo i jedino logično rešenje jer svaki od brojeva (bajtova) koji se vrate predstavljaju ASCII kod cifre dok je slash (svaki treći) konstantno 2F. Pozdrav, Deki
asembler.96 vita,
> Mislim da je ovo loš način zaštite. Šta ako korisniku tvog > programa npr. Pa jel imas neki bolji sistem?? Vita
asembler.97 kenza,
(;> Ovo cita datum u neki string BiosDate u data segmentu. Hvala ti ;) very muchachos :)
asembler.98 niklaus,
(:> Imaš na F000:FFF5-FFFC datum kreiranja. Nedovoljno dobro... Različitih datuma (i BIOS verzija raznih firmi) ima tek 50ak (mada se broj neprestano povećava). Zaštita bi imala smisla u kombinaciji sa još podataka o računaru. (:niklaus:)
asembler.99 niklaus,
(:> Otići će da mu ponovo instalira program i to mu naplatiti. Pošteno :) Slušajte čiču... ((: (:niklaus:)
asembler.100 dr.grba,
>> Kao prvo - ploča se ne menja svaki dan; Kao drugo - neka se tad >> čovek javi i kaže ;Vaš prg. mi je prijavio tu i tu grešku, šta >> sad?' a ti mu kažeš otkucaj to i to i gotovo. Za naše uslove Dobro, samo sam postavio hipotetičnu situaciju. Poi ko zna koji put na Sezamu, rasprava bi nas vrlo brzo dovela do već dobijenog odgovora: nema stoprocentne zaštite. --> "Alo, Simo? Zdravo! Ej, onaj program što sam ti dao, ma znaš onaj što nije hteo da radi kod tebe... Da, e taj! Zvao sam autora! Samo otkucaj..... i ima da proradi! Da, baš to! E, da! Ajd' zdravo!..."
asembler.101 bulaja,
│Nedovoljno dobro... │Različitih datuma (i BIOS verzija raznih firmi) ima tek 50ak (mada se │broj neprestano povećava). └─── Sto znaci da je verovatnoca da se dva BIOS date-a poklope oko 2%, tj. zastita je 98 % sigurna! Ja bih to nazvao vrlo dobrom, skoro savrsenom (s obziorm na minimalni rizik da se nesto zabrlja) zastitom :).
asembler.102 niklaus,
(:> Sto znaci da je verovatnoca da se dva BIOS date-a poklope oko 2%, (:> tj. zastita je 98 % sigurna! Ja bih to nazvao vrlo dobrom, skoro (:> savrsenom (s obziorm na minimalni rizik da se nesto zabrlja) (:> zastitom :). Šta misliš otkud kod nas toliko razbijenih programa. Da ne spominjem da je svaki od njih koristio mnogo složenije sisteme, a ne ovakve providne. Sistemi zaštite koje je teško razbiti, čak i kada znaš kojom je metodom pro- gram zaštićen. Poželjno je ubaciti i još jednu "providnu" zaštitu, tipa ona sa serijskim brojem HDa, na kome je program instaliran. Šta kada se prebaci na drugi disk, pitaćete? Dolazite u f-ji servisera i taj posao naplaćujete, kao što reče rista... (: (:niklaus:) ps Kvaliteta zaštite je direktno proporcionalna kvalitetu programa koji štiti.
asembler.103 mikia,
Zna li neko da li je moguce staviti vrednost na stek bez PUSH naredbe? Preko [sp+...] ili [bp] mikia.
asembler.104 eagle,
> Zna li neko da li je moguce staviti vrednost na stek bez PUSH > naredbe? Preko Šsp+...Ć ili ŠbpĆ Ovo bi trebalo da radi isto što i push ax: sub sp,2 mov bp,sp mov ŠbpĆ,ax
asembler.105 vpudar,
Hitno potrebna jedna informacija, please, potreban mi je tajming za instrukciju: JMP [BX] Ili, jednostavnije, koliko je to sporije u odnosu na: JMP BX Pravim neki optimizovani kompajler (i ovo je od presudne važnosti), pa ako neko ima Intelovih knjiga, molim da mi pogleda broj taktova (po mogućstvu, za XT/286/386/486)
asembler.106 eagle,
> Hitno potrebna jedna informacija, please, potreban mi je > tajming za instrukciju: JMP ŠBXĆ > Ili, jednostavnije, koliko je to sporije u odnosu na: JMP BX Ovako stoji u ASM.NG : ────────────────────────────────────────────────────────────────────────── Operands Clocks Transfers Bytes Example memptr16 18 + EA - 2-4 JMP SAME_SEG regptr16 11 - 2 JMP BX ────────────────────────────────────────────────────────────────────────── EA Component 8088 Clocks Example Register indirect 5 MOV AX,ŠBPĆ BX, BP, SI, DI Dakle, 18 + 5 = 23 na XT-u. Otprilike duplo sporije.
asembler.108 vpudar,
-> Dakle, 18 + 5 = 23 na XT-u. Otprilike duplo sporije. OK. Sada sam i ja pronašao nešto (u HelpPC-u), interesantno je kako se računa na 386/486, npr., ako se ne varam, čini mi se da kod 486 nema razlike između JMP BX i JMP [BX], po 5 taktova u najbržoj varijanti!? A isto tako, JMP LABEL (3 takta) ispadne brže od JMP BX!?
asembler.109 eagle,
> kako se računa na 386/486, npr., ako se ne varam, čini mi se da > kod 486 nema razlike između JMP BX i JMP ŠBXĆ, po 5 taktova u > najbržoj varijanti!? A isto tako, JMP LABEL (3 takta) ispadne > brže od JMP BX!? Tu bi se verovatno trebao dodati još koji takt, za prenos iz memorije.
asembler.110 peca.st,
!-> A isto tako, JMP LABEL (3 takta) ispadne brže od JMP BX!? Kad smo već kod broja ciklusa potrebnih za neku naredbu, zanimljivo je da je, recimo: mov ax,0 sporije od xor ax,ax i to za jedan takt. (naravno, rade isto) Peđa.
asembler.111 eagle,
> Kad smo već kod broja ciklusa potrebnih za neku naredbu, > zanimljivo je da je, recimo: mov ax,0 sporije od xor ax,ax i to > za jedan takt. (naravno, rade isto) Za ax je već u startu sporije, zato što je sama instrukcija duža za jedan bajt (nula je u ovom slučaju word).
asembler.112 kriss,
Evo pitanja tipično početničkog :) žemu služi onaj kros-referens fajl (.xrf) koga generiše asembler?
asembler.113 kriss,
Izglada da sam slep: -> Gde je greška? :) .MODEL SMALL,PASCAL ; .CODE ; PUBLIC LCH ; ; LCH PROC ; ; SET_CURSOR_POSITION: ; ; MOV DX,184FH ; row 25, column 80 MOV AH,02H ; XOR AL,AL ; INT 10H ; ; WRITE_CHARACTER: ; ; MOV AL,'╝' ; MOV AH,0AH ; MOV CX,0001H ; INT 10H ; ; LCH ENDP ; ; END ; Ovo bi trebalo da u desnom donjem uglu lupi znak ╝, međutim neće :( Da li možda ima neke veze sa aktivnom stranom texta? P.S. Da, treba da se ulinkuje u .pas :)
asembler.114 dzakic,
> Ovo bi trebalo da u desnom donjem uglu lupi znak ╝, međutim neće > :( Da li možda ima neke veze sa aktivnom stranom texta? Funkcija 0A video bios-a traži i broj video strane u bh. Stavi nulu, trebalo bi da počne nešto da se dešava. Pogledaj funkciju 0F, ona piše po aktvinoj strani.
asembler.115 eagle,
> Ovo bi trebalo da u desnom donjem uglu lupi znak ╝, međutim > neće :( Da li možda ima neke veze sa aktivnom stranom texta? Ima, treba u bh upisati aktivnu stranu. Dodaj: XOR bh,bh
asembler.116 kriss,
Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__?
asembler.117 dzakic,
> Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__? Ne znam napamet koliko, ali sam siguran da je ovo prvo kraće (za bajt, mislim) i brže par taktova. Druga instrukcija je pogodnija kad postoji i ofset nekog registra, recimo trtmrt[bp+si].
asembler.119 bigbrada,
!##! Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__? That's the same thing :) Brada.
asembler.121 bole,
>>Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__? >>That's the same thing :) Nije mi bas najjasnije da li se pri mov dx, offset trtmrt (ili lea dx, trtmrt) u dx stavlja adresa (offset trtmrt) ili vrednost koja se tu nalazi? 10x
asembler.122 nikac,
NI> Nije mi bas najjasnije da li se pri mov dx, offset trtmrt (ili NI> lea dx, trtmrt) u dx stavlja adresa (offset trtmrt) ili vrednost NI> koja se tu nalazi? Stavlja se ofsetni deo adrese (iliti pomeraj) u dx. Ako hoces da u dx stavis sadrzaj __trtmtr__ onda lepo kazes samo: mov dx,trtmtr ili ako hoces indirektno: mov bx,offset trtmrt (ili lea bx,trtmrt :) mov dx,ŠbxĆ
asembler.123 miroslavn,
Imam 2 mala pitanjca: 1) koji je to media type, ako je MediaID=F6 ? 2) Šta tačno naredba PUSHA stavlja na stek ? (koje registre)
asembler.124 nikac,
NI> Imam 2 mala pitanjca: NI> NI> 1) koji je to media type, ako je MediaID=F6 ? NI> NI> 2) Šta tačno naredba PUSHA stavlja na stek ? (koje registre) Pod jedan neznam, a pusha stavlja na stek sledece registre sledecim redom: ax, cx, dx, bx, sp, bp, si, di (da bas tim redom).
asembler.125 kriss,
Jedno pitanje u vezi turbo dibagera: kako da određeni program učitam od određene adrese? Tj, kako da 'podesim' da mi cs bude recimo, 4000h? A ip, recimo 0100h :)
asembler.126 mjova,
> Jedno pitanje u vezi turbo dibagera: kako da određeni > program učitam od određene adrese? Tj, kako da 'podesim' > da mi cs bude recimo, 4000h? A ip, recimo 0100h :) nikako. zašto bi to i radio? u svojoj praksi nisam naišao na takvu potrebu - baš me zanima zašto ti to treba? ako uradiš .com, onda će on biti sigurno učitan u memoriju na ofsetu 0x0100. segment ne možeš podesiti. mada postoje neka rešenja, ali ih ne dozvoljava td već se sam moraš setiti ;). napraviš rezidentni program koji će se učitati tamo gde ti treba. zatim poteraš td, a kao parametar, daš mu neki 'lažni' .exe koji će služiti tek da mu zamaže oči. dakle, bilo koji .exe sa diska. e, onda uradiš single-step (ako nije destruktivan) pa jednom od opcija 'skočiš' na tvoju adresu i proglasiš je 'novom' (ctrl-g, ctrl-n - možda treba alt, nisam siguran - probaj sa alt-F10).
asembler.127 mstanic,
>> Jedno pitanje u vezi turbo dibagera: kako da određeni >> program učitam od određene adrese? Tj, kako da 'podesim' >> da mi cs bude recimo, 4000h? A ip, recimo 0100h :) Sve registre možeš menjati na vrednosti koje želiš. No, to verovatno znaš. E, sad kako učitati program ?:] "Učitaš" program na standardan način i zatim upotrebiš "move" komandu, koju imaš dok si u "data window" i koja služi da premešta blokove po memoriji.
asembler.128 kriss,
˙˙ nikako. zašto bi to i radio? u svojoj praksi nisam naišao na ˙˙ takvu potrebu - baš me zanima zašto ti to treba? Već sam se snašao, samo da ti odgovorim: naletao sam na programe koji su explicitno bili učitavani od određene adrese, i svi džampovi su bili cs:ip. E pa je tom priliko dolazilo do 'udri da ti vratim' ručnog debagiranja, što me je užasno nerviralo. Eto :)
asembler.129 mjova,
dve funkcije za upoređivanje teksta. poštuju 'divljake' ;) * i ?, pa se može lepo upotrebiti za 'maskiranje' imena datoteka. nešto slično se nalazi u sdf*.arj (ima na sezamu), a ovo je malo unapređeno po pitanju funkcionalnosti. postoje dve fn koje rade istu stvar, ali nad različitim argumentima. prva funkcija je: ; int DosFileCmp(char far *mask, char far *s, int len); ; FileMask - maska za upoređivanje (terminiran '\0') ; s - tekst bafer koji treba da odgovara masci ; terminiran je razmakom ' ' ili dužinom ; len - dužina bafera druga: ; int TextCmp(char far *Mask, char far *s); ; Mask - maska za upoređivanje (terminiran '\0') ; s - tekst bafer koji treba da odgovara masci ; (terminiran '\0') doscmp.arj
asembler.130 mdimitrijevic,
Treba mi rutina u ASM-u za crtanje linije. ( 320x200x256 ) Sta ima u arhivi DDJ9311.ZIP na FON-u. Ne skida mi se 480KB za dzabe. Pozdrav, Marjan Dimitrijevic
asembler.131 markom,
■■■ Treba mi rutina u ASM-u za crtanje linije. ( 320x200x256 ) Bilo je u nekim Računarima, ali se ne sećam tačno u kojim, Dejane ... Marko
asembler.132 niklaus,
(:> Sta ima u arhivi DDJ9311.ZIP na FON-u. Ne skida mi se 480KB za dzabe. ┌── │ Length Method Size Ratio Date Time CRC-32 Attr Name │ ------ ------ ----- ----- ---- ---- -------- ---- ---- │ 20397 Stored 20397 0% 10-07-93 07:07 363779f0 --w- 1993-NOV.ZIP │ 10658 DeflatN 3532 67% 10-06-93 08:55 112cdb38 --w- ALLEY.ASC │ 5502 Stored 5502 0% 08-07-93 17:18 3831f72d --w- ALLEY.ZIP │ 11456 DeflatN 2421 79% 10-06-93 08:55 2d1013a2 --w- CHAT.ASC │ 16273 Stored 16273 0% 07-13-93 12:09 a18c43ac --w- CHAT.ZIP │ 12320 DeflatN 3293 74% 10-06-93 08:55 a82a5a78 --w- CPROG.ASC │ 140944 Stored 140944 0% 09-21-93 16:58 212fa1da --w- DFLT16.ZIP │ 68147 Stored 68147 0% 09-27-93 18:28 f2c5e259 --w- DFPP03.ZIP │ 110241 Stored 110241 0% 05-25-93 22:56 caf2c9ff --w- HEAP.ZIP │ 18030 Stored 18030 0% 09-29-93 09:01 837b1e61 --w- INTRPT.ZIP │ 883 DeflatN 295 67% 10-07-93 08:00 f1525968 --w- README │ 3840 DeflatN 1271 67% 10-07-93 07:07 9f359b14 --w- README.113 │ 3840 DeflatN 1271 67% 10-07-93 08:00 9f359b14 --w- README.ASC │ 14960 DeflatN 4173 73% 10-06-93 08:55 2082b8a3 --w- RUNTIME.ASC │ 8046 DeflatN 2294 72% 10-06-93 08:58 8b97e613 --w- SLUG.ASC │ 6848 Stored 6848 0% 02-06-92 23:54 89a40250 --w- SLUG.ZIP │ 8192 DeflatN 2731 67% 10-06-93 12:49 df7a634b --w- TRACE.ASC │ 19099 Stored 19099 0% 08-28-93 18:48 0ce3b16f --w- TRACE.ZIP │ 28755 Stored 28755 0% 08-12-93 21:56 bed3c249 --w- UNDOC.ZIP │ 28205 Stored 28205 0% 10-06-93 17:37 b5ce69c6 --w- VALDES.ZIP │ ------ ------ --- ------- │ 536636 483722 10% 20 └── Evo šta čemu služi... ┌── │ SLUG.ASC │ Title: PERFORMANCE TUNING: SLUGGING IT OUT! │ Keywords: NOV93 PROFILING PERFORMANCE TUNING │ Published source code accompanying Michael Dunlavey's article on │ performance tuning, a process he calls "deslugging" as opposed to │ "debugging." Also see SLUG.ZIP. │ │ SLUG.ZIP │ Title: PERFORMANCE TUNING: SLUGGING IT OUT! │ Keywords: NOV93 PROFILING PERFORMANCE TUNING │ Unpublished and published source code accompanying Michael Dunlavey's │ article on performance tuning, a process he calls "deslugging" as │ opposed to "debugging." Requires PKUNZIP.EXE to extract. │ │ HEAP.ZIP │ Title: HEAP CHECKING │ Keywords: NOV93 DEBUGGING HEAP C │ Unpublished source code for the Safeheap and Logheap C libraries for │ intercepting heap-related calls and generating message logs. Requires │ PKUNZIP.EXE to extract. │ │ RUNTIME.ASC │ Title: DETECTING RUN-TIME MEMORY ERRORS │ Keywords: NOV93 DEBUGGING │ Published source code and reports generated from commercially-available │ debugging tools as presented by Taed Nelson in his article. Tools │ covered include Purify 2.0, Insight, Sentinel, MemCheck, and │ Bounds-Checker. │ │ TRACE.ASC │ Title: A MULTI-APP MESSAGE TRACE FACILITY FOR WINDOWS │ Keywords: NOV93 DEBUGGING WINDOWS │ Published source code by Ivan Gerencir which accompanies │ Ray Valdes' article on debugging Windows apps. Also see TRACE.ZIP. │ │ TRACE.ZIP │ Title: A MULTI-APP MESSAGE TRACE FACILITY FOR WINDOWS │ Keywords: NOV93 DEBUGGING WINDOWS │ Complete trace facility by Ivan Gerencir which accompanies │ Ray Valdes' article on debugging Windows apps. Requires PKUNZIP.EXE │ to extract. │ │ VALDES.ZIP │ Title: DEBUGGING WINDOWS APPS │ Keywords: NOV93 DEBUGGING WINDOWS │ Unpublished source code accompanying Ray Valdes article on │ debugging windows applications. Requires PKUNZIP.EXE to extract. │ │ INTRPT.ZIP │ Title: EAVESDROPPING ON INTERRUPTS │ Keywords: NOV93 DEBUGGING INTERRUPT-MONITORING │ Unpublished source code for Rick Knoblaugh's interrupt-monitoring │ that traps and logs interrupt activity. Requires PKUNZIP.EXE to │ extract. │ │ CHAT.ASC │ Title: A NETWARE CHAT UTILITY │ Keywords: NOV93 NETWARE NOVELL CHAT TURBO PASCAL │ Published source code for Eduardo Serrat's article presenting │ an interactive "chat" utility for Novell NetWare. Also see │ CHAT.ZIP. │ │ CHAT.ZIP │ Title: A NETWARE CHAT UTILITY │ Keywords: NOV93 NETWARE NOVELL CHAT TURBO PASCAL │ Unpublished source code and executables for Eduardo Serrat's │ article presenting an interactive "chat" utility for Novell │ NetWare. Requires PKUNZIP.EXE to extract. │ │ DFLT16.ZIP │ Title: C PROGRAMMING COLUMN │ Keywords: NOV93 C DFLAT CUA/SAA │ The current version of Al Stevens' D-Flat interface library for │ C. Requires PKUNZIP.EXE to extract. │ │ DFPP03.ZIP │ Title: C PROGRAMMING COLUMN │ Keywords: NOV93 C++ DFLAT CUA/SAA │ The current version of Al Stevens' D-Flat interface library for │ C++. Requires PKUNZIP.EXE to extract. │ │ CPROG.ASC │ Title: C PROGRAMING COLUMN │ Keywords: NOV93 C++ D-FLAT++ CUA/SAA │ Published source code of Al Stevns D-Flat++ interface library, │ the C++ implementation of the CUA/SAA interfacce library │ │ ALLEY.ASC │ Title: ALGORITHM ALLEY │ Keywords: NOV93 PASCAL ALGORITHMS SAMPLING │ Published source code presented by Tom Swan in his column where │ he examines palindromic encryption in Windows. Also see │ ALLEY.ZIP. │ │ ALLEY.ZIP │ Title: ALGORITHM ALLEY │ Keywords: NOV93 PASCAL ALGORITHMS SAMPLING │ Complete source code presented by Tom Swan in his column where he │ examines palindromic encryption in Windows. Requires PKUNZIP.EXE │ to extract. │ │ UNDOC.ZIP │ Title: UNDOCUMENTED CORNER │ Keywords: NOV93 WINDOWS NETWARE NCP │ Pawel Szczerbina examines undocumented aspects of Novell's │ NetWare Core Protocol (NCP). Requires PKUNZIP.EXE to extract. └── (: Sean :)
asembler.133 kriss,
Pitanje: Kako bi izgledala rutina koja bi vraćala veličinu fajla koji je trenutno 'aktivan' (znači samog fajla čiji je deo :) u bajtovima? Ja sam petljao nešto sa DOS servisom Get File Size, ali ne ide. :( Naravno, preptostavka je da je fajl 'sam', tj. da nije učitan iz nekog shell-a :) Drugim rečima - jel postoji neko ko će da se mučiza istu? ;)
asembler.134 kriss,
Da ponovim još jednom, verovatno je proletelo: kako da isčitam veličinu nekog programa u bajtovima? ASM rutina.
asembler.135 vita,
Ljudi, help... Jel radio nekad neko sa DMA kanalisanjem..??? Ako jeste, jel radio to isto u 386 modu??? , ako jeste jel radio mozda sa Sound Blasterom??? E, ako je bilo sta od ovoga zadovoljeno , naskrabajte nesto (čuj nesto, dosta) na tu temu, treba mi HITNO podrska za SB-a...u vidu VOC-ova!! Unapred zahvalan, Vita :)
asembler.136 mstanic,
>> Da ponovim još jednom, verovatno je proletelo: kako da >> isčitam veličinu nekog programa u bajtovima? ASM rutina. Pa otvori ga i čitaj bajt po bajt dok ne stigne do kraja, i pritom upotrebi neko brojač.
asembler.137 nkbog,
> Da ponovim još jednom, verovatno je proletelo: kako da isčitam > veličinu nekog programa u bajtovima? ASM rutina. LSEEK na kraj datoteke (ima funkcija u dos-u). Ona ti vrati dužinu u bajtovima (tačnije trenutnu poziciju u datoteci, a to je upravo dužina). Pogledaj IntList ili nešto slično za detalje. NB.
asembler.138 kriss,
˙˙>> Da ponovim još jednom, verovatno je proletelo: kako da ˙˙>> isčitam veličinu nekog programa u bajtovima? ASM rutina. ˙˙ ˙˙ Pa otvori ga i čitaj bajt po bajt dok ne stigne do kraja, i ˙˙ pritom upotrebi neko brojač. Mislim da postoji elegantnije rešenje, ali ja ne znam kako to da izvedem. Interapt 21h (DOS Services) ima funkciju 23h kojoj je naziv Get File Size. I evo šta piše; Function 23 reports the size of a file in terms of number of records in the file. (...) Dakle, sve bi bilo ok da se ne pominje neki FCB i šta_ti_ja_znam, tako da je ispalo ne baš lako (za mene) isčitati famoznu veličinu fajla. Pa ako se neko razume više ... (?)
asembler.139 nkbog,
> in the file. (...) Dakle, sve bi bilo ok da se ne pominje neki FCB > i > šta_ti_ja_znam, tako da je ispalo ne baš lako (za mene) isčitati Ne. Nikad. Nikako. I ako nekom još nije jasno: Nipošto. Ne treba koristiti FCB, već hendlove (ili bahove;). FCB je stari (CP/M?) način pristupa datotekama. Hendlovi su novi (čuj ovo ima ih od DOS 2.0) (Unix) način pristupa. Nema normalnih programa posle 1984. koji koriste FCB. NB. p.s. Jedina korisna primena FCB je DEL *.* koji je značajno brži preko FCB-a ;).
asembler.140 niklaus,
(:> Ljudi, help... (:> (:> Jel radio nekad neko sa DMA kanalisanjem..??? (:> Ako jeste, jel radio to isto u 386 modu??? , ako jeste jel radio mozda (:> sa Sound Blasterom??? Ajde, iako mi ne odgovaraš na mailove, evo trudim se... (: Creative Voice (VOC) file format -------------------------------- HEADER (bytes 00-19) Series of DATA BLOCKS (bytes 1A+) ŠMust end w/ Terminator BlockĆ ----------------------------------------------------------------- HEADER: ======= byte # Description ------ ------------------------------------------ 00-12 "Creative Voice File" 13 1A (eof to abort printing of file) 14-15 Offset of first datablock in .voc file (std 1A 00 in Intel Notation) 16-17 Version number (minor,major) (VOC-HDR puts 0A 01) 18-19 2's Comp of Ver. # + 1234h (VOC-HDR puts 29 11) ----------------------------------------------------------------- DATA BLOCK: =========== Data Block: TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes) NOTE: Terminator Block is an exception -- it has only the TYPE byte. TYPE Description Size (3-byte int) Info ---- ----------- ----------------- ----------------------- 00 Terminator (NONE) (NONE) 01 Sound data 2+length of data * 02 Sound continue length of data Voice Data 03 Silence 3 ** 04 Marker 2 Marker# (2 bytes) 05 ASCII length of string null terminated string 06 Repeat 2 Count# (2 bytes) 07 End repeat 0 (NONE) 08 Extended 4 *** *Sound Info Format: **Silence Info Format: --------------------- ---------------------------- 00 Sample Rate 00-01 Length of silence - 1 01 Compression Type 02 Sample Rate 02+ Voice Data ***Extended Info Format: --------------------- 00-01 Time Constant: Mono: 65536 - (256000000/sample_rate) Stereo: 65536 - (25600000/(2*sample_rate)) 02 Pack 03 Mode: 0 = mono 1 = stereo Marker# -- Driver keeps the most recent marker in a status byte Count# -- Number of repetitions + 1 Count# may be 1 to FFFE for 0 - FFFD repetitions or FFFF for endless repetitions Sample Rate -- SR byte = 256-(1000000/sample_rate) Length of silence -- in units of sampling cycle Compression Type -- of voice data 8-bits = 0 4-bits = 1 2.6-bits = 2 2-bits = 3 Multi DAC = 3+(# of channels) Šinteresting-- this isn't in the developer's manualĆ Uz poruku su rutine za slanje "sirovog" zvuka na SBov port, kao i *.h-ovi, koji će ti pomoći pri konverziji .VOC->.RAW ( .RAW->SB = ((: ). (: Sean :) sb_voc.zip
asembler.141 dzakic,
> Da ponovim još jednom, verovatno je proletelo: kako da isčitam > veličinu nekog programa u bajtovima? ASM rutina. Vidim da ti je neko već pomenuo LSEEK na kraj programa. To je ono što ti rekoh u subotu: ne koristi stari način rada sa FCB-ovima već handle-ove. Tu koristiš fju za pozicioniranje pointera za čitanje relativno u odnosu na kraj. Fja vrati poziciju u odnosu na početak i tako dobiješ dužinu. FILE OPEN: ah=3Dh, al=open mode, ds:dx -> asciiz filename ret: ax - handle FILE SEEK: ah=42h, bx=file handle, cx:dx=position al=0 move pointer to start of file + CX:DX al=1 move pointer to current position + CX:DX al=2 move pointer to end of file + CX:DX ret: dx:ax - filepos filename db 'd:\path\prog.exe',0 mov ah,3Dh mov al,0 mov dx,offset filename int 21h mov bx,ax mov ah,42h mov al,2 xor cx,cx xor dx,dx int 21h ; ovde u DX:AX imaš filesize(filename) mov ah,3Eh int 21h Ostaje još da nađeš path do exe-a koji se izvršava. U PSP-u, na ofsetu 2Ch nalazi se word koji sadrži segment environment bloka. Odeš tamo :) i kreneš da čitaš... Naći ćeš nešto ovako: NAME1=value1 <0> NAME2=value2 <0> ... NAMEN=valueN <0> <0> <word> d:\path\prog.exe <0> <0> Sve je ovo lepo objašnjeno recimo u TechHelp-u. Dakle, ovako nađeš environment blok, pretražiš ga.. i tu pročitaš pun naziv exe-a. Onda ga otvoriš, nađeš njegovu dužinu i zatvoriš. Zak
asembler.142 vpudar,
-> Sve je ovo lepo objašnjeno recimo u TechHelp-u. Dakle, ovako -> nađeš environment blok, pretražiš ga.. i tu pročitaš pun naziv -> exe-a. Onda ga otvoriš, nađeš njegovu dužinu i zatvoriš. Kad pomenu TechHelp, evo malog Patch-a za drastično ubrzanje ispisa na ekran kod dotičnog programa: *** Tech HELP! Electronic Manual '86/'87 *** Comparing files THELP.ORG and THELP.EXE 0000392D: FA EB 0000392E: EC 09 0000393F: FA EB 00003940: EC 09 Sa leve strane je sadržaj originalnog fajla, a sa desne ono što treba promeniti ;) U pitanju je inače bio Snow Checking za praistorijske CGA kartice, a nigde nisam našao načina kako da ga "legalno" isključim. (nemam CONFIG fajl)
asembler.143 dragisha,
-> promeniti ;) U pitanju je inače bio Snow Checking za praistorijske CGA -> kartice, a nigde nisam našao načina kako da ga "legalno" isključim. -> (nemam CONFIG fajl) Uvijek sam se pitao (očito ne gdje treba:) kako to da je na herc-u munja, a na VGA s*it:)). Hvala! BTW, FA EC se pojavljuje još dva puta kasnije, šta s njima?:) -- [Ever stop to think and forget to start again?]
asembler.144 vpudar,
-> Uvijek sam se pitao (očito ne gdje treba:) kako to da je na herc-u munja, -> a na VGA s*it:)). Hvala! BTW, FA EC se pojavljuje još dva puta kasnije, -> šta s njima?:) Ništa. Ostale bajtove ne treba dirati :) Btw, na Rhinoceros BBS-u imamo čitavu konferenciju posvećenu tim stvarima (razna "poboljšanja" rada komercijalnih i Shareware programa ;).
asembler.145 mazi,
Ajd sad jedno glupo pitanje :-) kako da linkujem neki fajl zajedno za .EXE ili .COM u MASM 6.0 ? Ivan.
asembler.146 mjova,
> Ajd sad jedno glupo pitanje :-) ni sam ne znaš kako je glupo ;). probaj ponovo.
asembler.147 mazi,
>> Ajd sad jedno glupo pitanje :-) > ni sam ne znaš kako je glupo ;). probaj ponovo. Pa sad, hvala na odgovoru, genije! Da sam znam odgovor, pitanje ne bih postavljao uopšte. Ako znaš odgovor, odgovori, pa me zezaj do mile volje. Ako ne znaš, idi u viceve pa tamo davi nekog. Elem, ponovo da pitam. Kako linkovati zajedno sa izvršnim fajlom i neku datoteku ili tako nešto? Radi se o MASM-u 6.0 Ivan.
asembler.148 vpj.,
Da li bi neko hteo da napise u asembleru kratak program koji bi ocitao SAMO serijski broj hard diska i poslao u txt fajl. Evo source-a iz dugide10.zip fajla sa SEZAM-a u kome je to ( i jos vise ) uradjeno u C jeziku. #include <stdlib.h> #include <dos.h> #include <stdio.h> #include <conio.h> #include <bios.h> char *getascii (unsigned int in_data [], int off_start, int off_end); void main (void) { unsigned int dd [256]; /* DiskData */ unsigned int dd_off; /* DiskData offset */ unsigned int loop; /* Loop variable */ int num_drv; /* Number of Hard disks */ union REGS registers; /* Used for Interrupt for BIOS data */ unsigned int bios_cyl [2], bios_head [2], bios_sec [2]; /* Cylinders, Heads, Sectors */ clrscr (); fprintf (stderr, "** DUG_IDE : Provides IDE disk info on both drives in the system\n"); fprintf (stderr, "** Version 1.0\n"); fprintf (stderr, "**\n"); fprintf (stderr, "** Copyright (c) 12 Jan 1993 by Doug Merrett - All rights reserved\n"); fprintf (stderr, "**\n"); fprintf (stderr, "** Postal Address: PO Box 432\n"); fprintf (stderr, "** Stones Corner Q 4120\n"); fprintf (stderr, "** Australia\n"); fprintf (stderr, "**\n"); fprintf (stderr, "** Email Address: dcm@mincom.oz.au\n"); fprintf (stderr, "**\n"); fprintf (stderr, "** You may distribute freely, but no modifications without mailing me a copy.\n"); fprintf (stderr, "** No profit can be made for distribution. Blah Blah Blah etc.\n\n"); fprintf (stderr, "Press any key to accept above limitations"); getch (); /* How many disk drives & parameters */ num_drv = peekb (0x40, 0x75); /* BIOS Data area, Number of Hard disks */ /* Byte at Segment 40H Offset 75H */ for (loop = 0; loop < num_drv; loop++) /* Loop through drives */ { /* Get IDE Drive info */ while (inp (0x1F7) != 0x50) /* Wait for controller not busy */ ; outp (0x1F6, (loop == 0 ? 0xA0 : 0xB0)); /* Get first/second drive */ outp (0x1F7, 0xEC); /* Get drive info data */ while (inp (0x1F7) != 0x58) /* Wait for data ready */ ; for (dd_off = 0; dd_off != 256; dd_off++) /* Read "sector" */ dd [dd_off] = inpw (0x1F0); /* Get BIOS drive info */ registers.h.ah = 0x8; /* Get drive info */ registers.h.dl = 0x80 + loop; /* Drive is 80H for Disk 0, 81H for Disk 1 */ int86 (0x13, &registers, &registers); if (! registers.x.cflag) /* All OK if carry not set */ { bios_head [loop] = registers.h.dh + 1; /* Heads are from 0 */ bios_sec [loop] = registers.h.cl & 0x3F; /* sec is bits 5 - 0 */ bios_cyl [loop] = ((registers.h.cl & 0xC0) << 2) + registers.h.ch + 2; /* +1 because starts from 0 and +1 for FDISK leaving one out */ } clrscr (); fprintf (stdout, "DRIVE %d:\n", loop); fprintf (stdout, "Model Number______________________: %s\n", getascii (dd, 27, 46)); fprintf (stdout, "Serial Number_____________________: %s\n", getascii (dd, 10, 19)); fprintf (stdout, "Controller Revision Number________: %s\n\n", getascii (dd, 23, 26)); fprintf (stdout, "Able to do Double Word Transfer___: %6s\n", (dd [48] == 0 ? "No" : "Yes")); fprintf (stdout, "Controller type___________________: %04X\n", dd [20]); fprintf (stdout, "Controller buffer size (bytes)____: %6u\n", dd [21] * 512); fprintf (stdout, "Number of ECC bytes transferred___: %6u\n", dd [22]); fprintf (stdout, "Number of sectors per interrupt___: %6u\n\n", dd [47]); fprintf (stdout, "Hard Disk Reports\n"); fprintf (stdout, "Number of Cylinders (Fixed)_______: %6u\n", dd [1]); fprintf (stdout, "Number of Heads___________________: %6u\n", dd [3]); fprintf (stdout, "Number of Sectors per Track_______: %6u\n\n", dd [6]); fprintf (stdout, "BIOS Reports\n"); fprintf (stdout, "Number of Cylinders_______________: %6u\n", bios_cyl [loop]); fprintf (stdout, "Number of Heads___________________: %6u\n", bios_head [loop]); fprintf (stdout, "Number of Sectors per Track_______: %6u\n\n", bios_sec [loop]); if (! loop) { fprintf (stdout, "Press a key"); getch (); } } } char *getascii (unsigned int in_data [], int off_start, int off_end) { static char ret_val [255]; int loop, loop1; for (loop = off_start, loop1 = 0; loop <= off_end; loop++) { ret_val [loop1++] = (char) (in_data [loop] / 256); /* Get High byte */ ret_val [loop1++] = (char) (in_data [loop] % 256); /* Get Low byte */ } ret_val [loop1] = '\0'; /* Make sure it ends in a NULL character */ return (ret_val); }
asembler.149 mdimitrijevic,
Da pokusam da ti odgovorim. Ako mislis da ulinkujes sliku ili muziku za INTRO uradi to ovako u programu otvori novi segment i sliku prebaci u redove tipa : DB 03H,3FH ............ DB ..................... A ako zelis nesto drugo onda objasni malo bolje. Ako te mrzi da napises programcic koji ce datoteku prebaciti u onaj oblik sa DB .... reci pa da ti to sklepam u C-u. Bacicu u grupu pa cemo moci i slike i muzike da ubacujemo u ovom obliku. Pozdrav, Marjan P.S. Mozda te nisam dobro shvatio !!!
asembler.170 eotek,
> Kako linkovati zajedno sa izvrsnim fajlom i neku datoteku > ili tako nesto? Radi se o MASM-u 6.0 vidi u okviru fajla thedraw.doc (programming in assembler) a taj fajl imas negde na sezamu (tdraw460.arj) etsc
asembler.171 mazi,
>> Kako linkovati zajedno sa izvršnim fajlom i neku datoteku >> ili tako nešto? Radi se o MASM-u 6.0 > Ako mislis da ulinkujes sliku ili muziku za INTRO uradi to ovako u programu > otvori novi segment i sliku prebaci u redove tipa : > > DB 03H,3FH ............ > DB ..................... > > A ako zelis nesto drugo onda objasni malo bolje. > > Ako te mrzi da napises programcic koji ce datoteku prebaciti u onaj oblik > sa DB .... reci pa da ti to sklepam u C-u. Bacicu u grupu pa cemo moci i slike > i muzike da ubacujemo u ovom obliku. > > Pozdrav, > Marjan > > P.S. Mozda te nisam dobro shvatio !!! Hmm, izgleda da moram malo bolje da objasnim :-) Sistem je kao sa bibliotekama ili .OBJ fajlovima oni se bukvalno 'prilepe' na kod koji MASM izgeneriše odprilike uradi sledece: Kompajlirani kod (500b) + datoteka (2000b) = Kod+datoteka (2500) sve to u jednom fajlu. E, sad, što je tu najgore, ja sam to nekada davno znao, i verovatno imam negde u backup-u neki takav primer, ali to treba naći. Zato sam priupitao ovde. Nadam se da sam sad bio jasniji :-) Ivan.
asembler.172 dzakic,
> Kako linkovati zajedno sa izvršnim fajlom i neku datoteku > ili tako nešto? Radi se o MASM-u 6.0 Pretpostavljam da hoćeš da podaci koje tvoj program koristi strpaš u exe zajedno sa izvršnim programom. Možeš to da uradiš na dva načina: 1) Da celu datoteku jednostavno dopišeš na exe. Program će se i dalje izvršavati normalno, neće ni primećivati taj 'rep' koji si dopisao. Onda iz programa otvoriš .exe, pogledaš njegovu dužinu, oduzmeš veličinu dopisanog dela, i znaš da se na toj poziciji nalaze podaci koji ti trebaju. 2) Uz borlandove proizvode ide programčić BIN2OBJ koji, logično, napravi .obj od bilo kakve datoteke koju možeš da ulinkuješ u program i da podatke čitaš direktno iz memorije kad ti zatrebaju. (Programu bin2obj se prosleđuje ime 'procedure' pod kojim ćeš podacima pristupati.)
asembler.173 mdimitrijevic,
Da li neko zna kako da u ASM-u pomnozim naprimer neki INTEDZER sa DOUBLE brojem. Bez koriscenja komandi koprocesora. Cisto porgramerski :) u ASM-u. Primer: 170 * 0.22334 ili -120 * 0.123 ili 90 + 12.43056 Pozdrav, Marjan
asembler.174 bojans,
Da li postoji neki dibager koji se snalazi sa programima koji koriste Single Step i Break Point interapte? Jedna "glupa" piratska zaštita koju pokušavam da razbijem je zasnovana na tome da se setuje Trap flag, postave odgovarajući vektori (ako se to tako zove) i dešifrovanje jednog dela programa se vrši pod interapt rutinom. Bilo bi lepo kada bi moj Turbo Debugger 2.01 to shvatio pa da nakon svake instrukcije poziva i interapt rutinu, međutim on se zbuni i ja nemam ideju šta da radim.
asembler.175 mjova,
> Da li postoji neki dibager koji se snalazi sa programima > koji koriste Single Step i Break Point interapte? nisam siguran da ćeš naći neko normalno rešenje. moj predlog ti je da ako si siguran da se int 1/3 pozivaju samo po jedared, zapamtiš njihove adrese, a zatim da ukineš njihovo preuzimanje. umesto koda za preuzimanje njihovih vektora možeš napraviti neki call (ako nije far) i sl. no, sumnjam da su blesavi i ostavili ti prostora za tako nešto.
asembler.176 djelovic,
> Da li postoji neki dibager koji se snalazi sa programima koji > koriste Single Step i Break Point interapte? Preteraj program kroz sourecer, onda promeni da se ne pozivaju int 1 i 3 već neki drugi, pa ga opet iskompajliraj.
asembler.177 bojans,
>> Preteraj program kroz sourecer, onda promeni da se ne >> pozivaju int 1 i 3 već neki drugi, pa ga opet iskompajliraj. Nisam siguran da li bi ovo moglo da se izvede, jer se int 1 ne poziva eksplicitno, samo se setuje TF, no vredi pokušati da se pročačka po interapt rutini.
asembler.178 bojans,
Baš sam nešto pokušavao sa Sourcerom, ali dobijem sledeću poruku: WARNING: Packed file, conversion quality low. I zaista, rezultat je jako loš, praktično neupotrebljiv. Doduše, možda je moja verzija Sourcera prilično matora (1.87). Koja je trenutno najnovija verzija?
asembler.179 djelovic,
> Baš sam nešto pokušavao sa Sourcerom, ali dobijem sledeću poruku: > WARNING: Packed file, conversion quality low. Imaš u diru program UNP* koji "raspakuje" razne arhive i pouzdano te rešava te muke.
asembler.180 bojans,
Probao sam sa UNP-om, ali izgleda da Sourcer iz nekog drugog razloga prijavljuje 'packed file'. Sa .exe fajlovima koji su zaista kompresovani nema ovakvih problema, a sa ovim koji nije kompresovan javlja se dotična poruka. Baš nema logike. Uzgred, da li se nekad na Sezamu diskutovalo o zaštiti disketa od kopiranja i tehnikama koje se koriste u ove svrhe?
asembler.181 djelovic,
> Uzgred, da li se nekad na Sezamu diskutovalo o zaštiti disketa > od kopiranja i tehnikama koje se koriste u ove svrhe? Ništa konstruktivno, ali je svojevremeno bila serija tekstova u "Računarima" na tu temu. > Probao sam sa UNP-om, ali izgleda da Sourcer iz nekog drugog > razloga prijavljuje 'packed file'. Verovatno zato što je datoteka šifrovana i samu sebe dešifruje. Ne pada mi na pamet drugo rešenje osim da prekopiraš adrese int 1 i 3 na neke druge, i onda da single-stepuješ kroz program, pa svaki put kad naiđe neki od ova dva poziva, ti preskočiš tu instrukciju i onda simuliraš poziv.
asembler.182 dzakic,
> Uzgred, da li se nekad na Sezamu diskutovalo o zaštiti disketa > od kopiranja i tehnikama koje se koriste u ove svrhe? Recimo pc.prog, februar '92.
asembler.183 ficus,
:) WARNING: Packed file, conversion quality low. :) I zaista, rezultat je jako los, prakticno neupotrebljiv. A da probas dislite ili nesto slicno :) Doduse, mozda je moja verzija Sourcera prilicno matora (1.87). ne verujem da ce novija pomoci ako se radi o pakovanom fajlu eventualno cces izvuci source za raspakivanje ali ipak se ovde radi o necem slicnom samomodifikujucem kodu
asembler.184 pmsimic,
Moze li mi neko na primeru objasniti direktan pristup ram memoriji nna grafickim karticama. pozdrav iz Pristine
asembler.185 mjova,
da li neko zna kako se iz TSR-a može alocirati memorija? zapravo, da li to uopšte i može?
asembler.186 todorp,
> da li neko zna kako se iz TSR-a moze alocirati memorija? > zapravo, da li to uopste i moze? Hmm, moram priznati da nisam probao ali da li si probao sa funkcijom 48h (verovatno jesi i sta se desava). Mislim, ne vidim razlog zasto ne bi moglo, ako se vodi o racunu kako se poziva dos funkcija. Mozda da alociras dok se program ucitava, i jasno taj deo ne odseces sa int 27h i zapamtis adresu. Posle psp vrati segment i ti pristupas kao memoriji kako hoces. Pozdrav od Todora ps. Sorry ako sam nesto lupio ali sam to poslednji put radio pre vise od godine. pps. Sigurno da moze, ima gomila rezidentnih editora :)
asembler.187 dragisha,
-> da li neko zna kako se iz TSR-a može alocirati memorija? -> -> zapravo, da li to uopšte i može? Ako misliš na alociranje dinamičke memorije, trebalo bi da može ali zavisi od hip menadžera. Kod mene on radi tako da na inicijalizaciji pokupi kompletnu slobodnu memoriju i inicijalizira se, a kad TSRujem, onda se to smanji na dimenzije koje želim. Pojenta je da heap menadžer sam za sebe nikad ne poziva DOS za alokaciju/dealokaciju. Ako misliš na alociranje od DOS-a, moraš da pri svičevanju setuješ PSP na vrijednost koju zapamtiš kad inicijalizuješ TSR, prethodno zapamtiš onaj od tekuće aplikacije da bi mogao da ga restauriraš kad se vraćaš iz TSR. Evo parče koda sa potrebnim DOS funkcijama. (* Change PSP *) R.AX:=5100H; Lib.Intr(R, 21H); SavePSP:=R.BX; R.BX:=ProgPSP; R.AX:=5000H; Lib.Intr(R, 21H); ..tvoj TSR radi ovdje.. (* Restore PSP *) R.BX:=SavePSP; R.AX:=5000H; Lib.Intr(R, 21H); -- [Book never written: "Dog training." by Wille Bite]
asembler.188 mjova,
> Ako misliš na alociranje od DOS-a, moraš da pri svičevanju > setuješ PSP na vrijednost koju zapamtiš kad inicijalizuješ > TSR, prethodno zapamtiš onaj od tekuće aplikacije da bi > mogao da ga restauriraš kad se vraćaš iz TSR. Evo parče > koda sa potrebnim DOS funkcijama. pošto sam ovo sve već apsolvirao ;), mogu samo da dopunim ovu priču. treba zapamtiti svoj PID (tj tsr-a ;), pa kad treba nešto da se petlja u njegovo ime on se treba proglasiti aktivnim (50h). sledeći problem je što poslednji startovani program (onaj koji trenutnto radi) alocira svu raspoloživu memoriju pa dos nema šta da dodeli na upotrebu tsr-u. prvo je treba malo osloboditi, a to oslobođeno snimiti u xms, ems, disk... onda sve radi. valjda ;). problem starovanja exe-a iz tsr-a i dalje postoji.. thanks za hint, nema veze što je stigao malo kasnije!
asembler.189 kriss,
Jel zna neko kako se iz asm-a pušta ton određene frekvencije i trajanja na spikeru?
asembler.190 janko,
> Jel zna neko kako se iz asm-a pušta ton određene > frekvencije i trajanja na spikeru? Ton generiše tajmer. Tajmeru se kaže frekvencija. Aktivira se ton, zatim se nekako meri vreme, pa se na kraju ugasi ton, kad to vreme istekne. Ima silnih sorsova na tu temu... Jedan vrlo ilustrativan je u nekoj SNIPPETS arhivici (sa C sorsovima), i mislim da je ima na Sezamu.
asembler.191 redakcija,
U direktorijumu IBMPC\MISC je sim515.zip, simulator za mikrokontrolere Intel 8031 (8051)i Siemens 80515 (80535). Autor programa je Nebojša Ćosić, cosa na Sezamu. Evo šta autor kaže o programu: Program ima sledece osobine: -'user friendly' korisnicki interfejs, kontekstno osetljivi help -simbolicko debagovanje -disasembler -simulacija svih hardverskih resursa mikrokontrolera -simulacija korak-po-korak, simulacija bez ulazenja u potprograme, simulacija 'u pozadini' -u svakom trenutku svi podaci na ekranu su azurni i mogu se editovati -snimanje trenutnog statusa simulatora radi kasnijeg nastavka rada na istom mestu gde je i prekinut -vrlo fleksibilno postavljanje prekidnih tacaka -maksimalna podrska radu sa misem -podrska razvoju programa u PLM-u ('mesani' prikaz PLM i asemblerskih linija) -prikaz istorije (vec izvrsenih instrukcija) -prikaz asemblerskih i PLM linija onako kako ih je korisnik otkucao -podrska samomodifikujucim programima Prva verzija programa zavrsena je u septembru 1993.g. a od onda je program na stalnom koriscenju za razvoj uredjaja baziranih na SAB 80535 mikrokontroleru. Verzija koja Vam je ponudjena na testiranje je unekoliko osiromasena. Najvaznije ogranicenje je da radi sa programima maksimalne duzine od 512 bajta. Isto ogranicenje vazi i za podatke. Osim ove funkcionalne zastite program nije na drugi nacin zasticen. ... Ovu verziju programa stavljam u javno vlasnistvo. Nadam se da ce se za nju naci mesto na SEZAM-u. U datoteci se nalazi ZIP fajl sa simulatorom, help fajlom, kratkim uputstvom, nekoliko programa za konverziju podataka i primerom koji je preuzet iz Siemens-ovog application note-a za koriscenje A/D konvertora.
asembler.192 dragisha,
conf reply asembler.188 -> problem starovanja exe-a iz tsr-a i dalje postoji.. U modulu koji ja koristim ima hiljadu nekih stvari koje se pamte. Kad se sve ispuni i kada swapuješ napolje program koji trenutno "smeta" možeš komforno da zoveš .EXE. (BTW, kako se na int21h nivou radi LOADHIGH? zna ko?) -> thanks za hint, nema veze što je stigao malo kasnije! Jako slabo sam online, pa zato:). Ako želiš, mogu da te mailujem tim kodom da vidiš šta su sve ovi smatrali za shodno da spase:). Naravno, ako do mog sljedećeš poziva ne završiš sve:). -> oslobođeno snimiti u xms, ems, disk... BTW, mislim da bi bilo vrlo smisleno da se forsira minimiziranje upotrebe EMS-a u novim programima:). Komplikovaniji kod radi sporije manje kvalitetan posao koji ionako ladno može da se završi sa XMS:). -- [Using Canada's best: Telix, SLMR, & Crown Royal]
asembler.193 kriss,
Pitanje: Hoću da jedan deo programa 'nafilujem' bezveze podacima ili, recimo, nulama jer će kasnije biti prepisan. Da li postoji elegantnije rešenje od ovog: ... jmp deo2 deo1: db 00 db 00 ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;) db 00 deo2: ... Eto, nemam literaturu :(
asembler.194 bojans,
Koliko je najviše memorije moguće osloboditi za program u Turbo Debugeru (u td386 varijanti). Meni nikako ne polazi za rukom da dobijem više od 490-500 K. Da li može i više? (Koristim verziju 2.0)
asembler.195 pedjak,
> Hoću da jedan deo programa 'nafilujem' bezveze podacima ili, recimo, > nulama jer će kasnije biti prepisan. Da li postoji elegantnije > rešenje od ovog: > jmp deo2 > deo1: > db 00 > db 00 Naravno da postoji :) kažeš recimo db 512 dup(0) i to je to :) Ako hoćeš da idu bezveze podaci onda ide ovako: db 512 dup(?) pedja
asembler.196 markom,
*** ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;) DB 512 DUP (0) Trebalo bi da radi, nisam probao :)
asembler.197 dvesic,
>> deo1: >> db 00 >> db 00 >> >> ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;) >> >> db 00 >> deo2: DEO1: DB 512 DUP (0) DEO2:
asembler.198 dvesic,
>> Koliko je najvise memorije moguce osloboditi za program u >> Turbo Debugeru (u td386 varijanti). Meni nikako ne polazi za >> rukom da dobijem vise od 490-500 K. Da li moze i vise? >> (Koristim verziju 2.0) Kako uopste instaliras Td386 ? Imas li sa njim problema ? Medi redovno posle minut - dva blokira (iako imam tdh3896.sys instaliran na cistoj masini)
asembler.199 mmitrovic,
Ů█▀█Ţ jmp deo2 Ů█▀█Ţ deo1: Ů█▀█Ţ db 00 Ů█▀█Ţ db 00 Ů█▀█Ţ Ů█▀█Ţ ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;) Ů█▀█Ţ Ů█▀█Ţ db 00 Ů█▀█Ţ deo2: Ů█▀█Ţ ... Za ponavljanje podataka koristi se direktiva DUP Syntax: <count> DUP (<expression> Š, <expression>Ć) Tvoj "nesvesni" program bi izgledao: deo1: db 512 DUP (0) deo2: ... Ako iskoristiš ? kao expression to polje neće biti inicijalizovano (ako ćeš ga kasnije sam popuniti). Daće manji OBJ kod ali ne možeš računati na to da polje bude 0 (ili bilo koji drugi broj). _mmix_
asembler.200 mmitrovic,
Ů█▀█Ţ Koliko je najviše memorije moguće osloboditi za program u Ů█▀█Ţ Turbo Debugeru (u td386 varijanti). Meni nikako ne polazi za Ů█▀█Ţ rukom da dobijem više od 490-500 K. Da li može i više? Ů█▀█Ţ (Koristim verziju 2.0) Kao prvo, verzija ne bi treblao da utiče mnogo na količinu memorije (a bogami i ne utiče), ja sam na mašini sa 1Mb extended memorije dobijao u TD386 (v2.0 i v3.0) da mi je prvi slobodni segment negde oko 0A00 što znači da me je slobodno za program nekih 600K. Pošto td386 smešta program u osnovnu memoriju, jedini razlog mogu da budu rezidentni programi i drajveri. Daklem, očisti CONFIG.SYS i AUTOEXEC.BAT, ili ako imaš DOS 6.0+ napravi multi-configuration u CONFIG.SYSu i napravi jednu stavku za TD386. _mmix_
asembler.201 jugoran,
Hi, eksluzivci! Da li ima zainteresovanih za skidanje zastite? Detalji na mail... Pozdrav, Goran.
asembler.202 todorp,
Subject: int13h Hi! Pisao sam neko programce koje lowlevel pise po disketi. Elem, po cilindru ima 15 sektora. E sad nisam siguran da li on upisuje prvo glava=0 cilinder(15 sektora) pa onda glava=1 isti cilinder, pa onda nulta glava sledeci cil. itd? Mislim trebalo bi da je tako, ali ono sto mi se dogadja govori drugacije ;( Pozdrav od Todora
asembler.203 mmitrovic,
Ů█▀█Ţ Pisao sam neko programce koje lowlevel pise po disketi. Elem, po Ů█▀█Ţ cilindru ima 15 sektora. E sad nisam siguran da li on upisuje prvo Ů█▀█Ţ glava=0 cilinder(15 sektora) pa onda glava=1 isti cilinder, pa onda Ů█▀█Ţ nulta glava sledeci cil. itd? Mislim trebalo bi da je tako, ali ono sto Ů█▀█Ţ mi se dogadja govori drugacije ;( TechRef kaze: 02H read sectors Input: DL = drive number (0=drive A...; 80H=hard disk 0; 81H=hard disk 1) DH = read/write head number CH = track (cylinder) number (0-n) ═╗ * CL = sector number (1-n) ═══════════╩══ See note below. * AL = sector count (no more than 1 cylinder's worth of sectors) ES:BX => caller's buffer address > 0:0078 => Diskette Parameter Table (for diskette operations) 0:0104 => Hard Disk Parameter Table (for hard disk operations) Output: Carry Flag=CY=1 if error occurred and disk error code in AH. ES:BX buffer contains data read from disk Note: Sector values are 6-bits and Cylinder values are 10-bits: 1 1 1 1 1 1 Í5┬4┬3┬2┬1┬0┬9┬8Ď7┬6┬5┬4┬3┬2┬1┬0Ě CX: ║c c c c c c c c C c S s s s s s║ Ë─┴─┴─┴─┴─┴─┴─┴─đ─┴─┴─┴─┴─┴─┴─┴─Ż ╚═╩═══ used as high bits of cylinder number 03H write sectors Input: (same as SubFn 02H) ES:BX => data to write to disk. Output: Carry Flag=CY=1 if error occurred and disk error code in AH. Dakle greška može da ti bude u linijama sa zvezdicama. Sector number je početni sektor (u tvom slučaju 1, pazi broj nije 0based) sector count je broj sektora za read/write (u tvom slučaju 15). Ako ovde nije greška onda je verovatno u pitanju linija sa >, pa se javi ponovo. BTW, da li si proveravao CF da vidiš da nije greška do diskete. _mmix_
asembler.204 kriss,
Pitanje: Da li uz pomoć Turbo-dibagera mogu da korak-po-korak protrčim kroz interapt? Recimo da sam preuzeo neki i sad bi da vidim da li je sve OK? Usput, da li mogu uopšte da protrčim kroz neki interapt?
asembler.205 mmitrovic,
Ů█▀█Ţ Pitanje: Da li uz pomoć Turbo-dibagera mogu da korak-po-korak protrčim Ů█▀█Ţ kroz interapt? Recimo da sam preuzeo neki i sad bi da vidim da li je Ů█▀█Ţ sve OK? Usput, da li mogu uopšte da protrčim kroz neki interapt? Postoje dva slučaja, kad debaguješ svoju rutinu i kad debaguješ već instaliranu. 1) Treba ti adresa tvoje rutine. Dobijaš je na dva načina, prvi ako si u EXE fajl uključio i Debug Info onda ti je adresa u stvari ime interrupt funkcije, a ako nema info onda moraš da stepuješ svoj program dok ne naiđeš na rutinu koja postavlja interrupt pa iz toga dedukuješ adresu. Tu adresu/ime funkcije uneseš u Goto dijalog (Ctrl-G) iz ASM prozorčića u TDu i on ti postavi asm prikaz na tu funkciju/adresu. 2) Uzmeš broj interapta (pr. 21h) i pomnožiš sa 4 (dobiješ 84h), sa TABovima pređeš u DUMP prozorčić i sa Goto odeš na 0:proizvod (0:84h). Onda iz Local Menu (Alt-F10) izabereš Follow pa Far Code. ASM prikaz će ti biti namešten na početak rutine. Ovaj sistem važi i za tvoje rutine ali radi tek kad se postavi int. vektor. Kad si na početku rutine postaviš breakpoint (F2) i svaki put kad se izvrši interrupt (bilo soft or hard) staće na početku rutine pa možeš da stepuješ. BIOS rutine mogu da se stepuju ali se breakpoint može postaviti samo ako je aktivan shadow ram. Ako se kurzor nalazi na INT instrukciji i hoćeš da uđeš u rutinu (F7 ne radi), iz Local Menija izaberi Follow. Odvešće te na početak rutine. Svi ovi sistemi ne rade za INT 1 i INT 3 (single step i breakpoint), pošto ih TD često menja pa će se ko zna kad zaustaviti izvršavanje. Neke zaštite od razbijanja se baziraju na tome.
asembler.206 janko,
> Ů█▀█Ţ Pitanje: Da li uz pomoć Turbo-dibagera mogu da > korak-po-korak protrčim Ů█▀█Ţ kroz interapt? Recimo da sam > preuzeo neki i sad bi da vidim da li je > Postoje dva slučaja, kad debaguješ svoju rutinu i kad > debaguješ već instaliranu. Opisani metodi verovatno rade, ali su mnogo zaobilazni. Ulazak u interapt se postiže jednostavno sa Alt F7 umesto običnog F7 za singl step.
asembler.207 korvin,
Subject: problem sa ctrlalt Molio bih nekog masmovca da mi iskompajlira i ulinkuje ovde priloženi sors ctrlalt-a. Naime, ctralt mi se sudara sa VGAMAX-om pa sam prema uputstvu promenio pozivni na 06h (ctrl-lshift). To bi sada trebalo iskompajlirati a ja koristim tasm ... So, ako ima neka dobra duša ...
asembler.208 pedjak,
> sam prema uputstvu promenio pozivni na 06h (ctrl-lshift). To bi sada > trebalo iskompajlirati a ja koristim tasm ... So, ako ima neka dobra tasm je 100% masm kompatibilan.
asembler.209 mmitrovic,
Ů█▀█Ţ Opisani metodi verovatno rade, ali su mnogo zaobilazni. Ali su i jedini kad se debaguju rutine koje se ne pozivaju iz programa sa INT instrukcijom. Ů█▀█Ţ Ulazak u interapt se postiže jednostavno sa Alt F7 umesto običnog F7 za Notified. ;)
asembler.210 korvin,
Subject: Re: no can do >> > sam prema uputstvu promenio pozivni na 06h (ctrl-lshift). To bi >> sada > trebalo iskompajlirati a ja koristim tasm ... So, ako ima >> neka dobra >> tasm je 100% masm kompatibilan. Hm, pa nije baš 100% kompatibilan, makar po pitanju svičeva. U uputstvu za kompajliranje ctrlalt.asm stoji: masm ctrlalt.asm link ctrlalt exe2obj .... Kada ja pokušam adekvatno: tasm ctrlalt.asm, tasm mi javi tonu warninga da su korišćene rezervisane reči za simbole (npr. Enter). Kada mu bacim /ml onda opet javi warninge ali za druge reči (npr. cUt). Dobro, ta upozorenja me ne štrecaju koliko dve greške 'operand types do not match'. Kako prevazići ove probleme ?? Ako neko zna koje svičeve da mu uključim, biću mu veoma zahvalan.
asembler.211 kriss,
˙˙ Kada ja pokušam adekvatno: tasm ctrlalt.asm, tasm mi javi tonu ˙˙ warninga da su korišćene rezervisane reči za simbole (npr. ˙˙ Enter). Kada mu bacim /ml onda opet javi warninge ali za druge ˙˙ reči (npr. cUt). Dobro, ta upozorenja me ne štrecaju koliko ˙˙ dve greške 'operand types do not match'. Kako prevazići ove ˙˙ probleme ?? Ako neko zna koje svičeve da mu uključim, biću mu ˙˙ veoma zahvalan. Dobijaš sledeće poruke: *Warning* ctrlalt.asm(334) Reserved word used as symbol: ENTER *Warning* ctrlalt.asm(356) Reserved word used as symbol: ESC *Warning* ctrlalt.asm(625) Reserved word used as symbol: DISPLAY Ovde promeni nazive, recimo u enter1, esc1 i display1. Pa ponovo kompajliraj. Sad će ti prikazati redove gde su nedefinisani simboli esc, enter i display. I njih promeni u nova imena, i ovaj deo posla je gotov. **Error** ctrlalt.asm(954) Operand types do not match **Error** ctrlalt.asm(979) Operand types do not match Koliko sam video, tu se nalazi nešto kao mov al,cs:[...]. Promeni u mov al, byte ptr ..... │ └───────── Ako je u pitanju neki 16-bitni, umesto byte ptr napiši word ptr *Warning* ctrlalt.asm(1121) Reserved word used as symbol: END Promeni u end1 i isto kao i za prvi deo posla. Posle toga bi trebalo da proradi. Ako naletiš na još neki problem, napiši mi mail da rešimo na brzaka. :)
asembler.212 nbatocanin,
> tasm je 100% masm kompatibilan. Nije, tj. to piše u dokumentaciji, ali nije tačno. Ja sam probao da prevedem neke složenije programe i nisam uspeo ni u jednom modu.
asembler.213 korvin,
Subject: Re: tnx >> Promeni u end1 i isto kao i za prvi deo posla. Posle toga bi >> trebalo da proradi. Ako naletiš na još neki problem, napiši mi mail >> da rešimo na brzaka. :) Puno hvala man ...