asembler.1mark,
Ja se izvinjavam ako je vec bilo , ali meni treba programce koje resetuje komp.
EXE verzija , naravno :))
MArko
asembler.2mmile,
│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.comasembler.3mmile,
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.4mazi,
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.5nkbog,
> 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.6milos,
e, nkbog, zar ne misliš da je lepše LEA SI, PRIMER nego MOV SI, OFFSET PRIMER
:))))) Nemoj da buniš čoveka
asembler.7mazi,
<> 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.9milos,
>> Duže i sporije ??????? (razjasni malo, nije mi čisto please)...
asembler.10.obj,
Kojim instrukcijama se isključuju oba keša na 486?
asembler.11dejanr,
>> 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.12ialeksic,
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.13djelovic,
> 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.14ialeksic,
>>> 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.15moma,
>> 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.16djelovic,
> 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.17ialeksic,
>>>...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.18bulaja,
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.19niklaus,
> 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.20kriss,
>> 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.21janko,
> 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.22dejanr,
>> 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.23bulaja,
│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.24djelovic,
> 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.25bulaja,
│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.26djelovic,
> 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.27ssokorac,
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.28v.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.29kriss,
Elem, da li neko zna emu služi ono
Word/Byte ptr trtmrt
žžž
asembler.30bojanp,
> 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.31v.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.32nkbog,
> 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.33nkbog,
> 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.34ssokorac,
─┼┤ 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.35janko,
>>> 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.36janko,
>> 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.37dejanr,
>> 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.38ssokorac,
─┼┤ 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.39nkbog,
> Š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.40bulaja,
│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.41niklaus,
> 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.42janko,
> 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.43bulaja,
│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.44majkl,
> 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.45ndragan,
/ 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.46a.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.48a.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.49bulaja,
**** 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.50kriss,
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.51mjova,
> 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.52pedjak,
> 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.53kenza,
Hi!
Neko je ovde ranije kacio kratku asm rutinu za cold ili warm
reboot.Trazio sam i nisam nasao :( So... ;)
asembler.55i.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.56i.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.57mjova,
> 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.58i.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.asmasembler.59mjova,
> 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.60i.sajic,
Postovanje za DZakica i MJovu! Hvala na resenju. Sada sve radi savrseno.
asembler.61mivel,
BTW, komplikacije oko vraćanja fleg registra iz
poslednjeg pasusa odgovora 5.59 jednostavno nestaju
upotrebom:
RETF 2 ;far return & discard 2 bytes
asembler.62dejanr,
==========
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.63mjova,
> TITLE: Essay on 386/486 Exception
super tekst! prevod bi vio zgodan za BLP.
asembler.64mdimitrijevic,
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.65pbojan,
>> 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.66pbojan,
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.67niklaus,
(:> 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.68dr.grba,
>> Imaš u Norton Guide bazi za asembler. ZIPovana ima 157kB.
>> Ako treba, reci...
Šta čekaš, čoveče? Bači to ovamo!
Nestrpljivi
asembler.69mdimitrijevic,
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.70zormi,
* 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.71pbojan,
Ako je:
66h 9Ch = pushfd
sta je:
67h 66h 9Ch?
Sta tu predstavlja prefix 67h, na kom se Sourcer zbunjuje (a TD ne)?
asembler.72niklaus,
Evo za nestrpljive... Asembler Norton Guide.
Stvarno dobar (čitaj: opširan, a opet sažet)!
(:niklaus:)
(:niklaus:)
asm_ng.zipasembler.73mdimitrijevic,
Zna li neko kako se gasi kesh na 386 i 486 masinama????
Pozdrav,
Marjan Dimitrijevic
P.S. Naravno interesuje me sa programerske strane :).
asembler.74dr.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.75pbojan,
>> Zna li neko kako se gasi kesh na 386 i 486 masinama????
Sto bi rekao Mjova, sto se ne obratis na pravo mesto? :)
asembler.76niklaus,
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.77bulaja,
│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.78niklaus,
(:> A koja je to od Nortonovih alatki PD (ukljucujuci i NG)? :)
Aiii, koja ispala. Izvinjavam se dobrim duhovima SEZAMa. (;
(:niklaus:)
asembler.81peca.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.82mjova,
asm, preuzeta devetka
int_9.arjasembler.83mjova,
asm, com, A Replacement for Interrupt 14
tsrcomm.arjasembler.84a.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.arjasembler.85ficus,
Hi
zna li neko kako da procitam seriski broj bios-a ili nesto slicno
treba mi za zastitu
inapred zahvalan Ficus
-----
asembler.86eagle,
> zna li neko kako da procitam seriski broj bios-a ili nesto
> slicno
Imaš na F000:FFF5-FFFC datum kreiranja.
asembler.87dsisic,
> treba mi za zastitu.
Mislis li da je zastita koja koristi serijski broj biosa svrsishodna?
asembler.88kenza,
(;>> 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.89dr.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.90dejanr,
>> 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.91peca.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.92eagle,
> 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.93kriss,
˙˙ 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.94ficus,
:) 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.95dekiper,
> 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.96vita,
> Mislim da je ovo loš način zaštite. Šta ako korisniku tvog
> programa npr.
Pa jel imas neki bolji sistem??
Vita
asembler.97kenza,
(;> Ovo cita datum u neki string BiosDate u data segmentu.
Hvala ti ;) very muchachos :)
asembler.98niklaus,
(:> 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.99niklaus,
(:> Otići će da mu ponovo instalira program i to mu naplatiti. Pošteno :)
Slušajte čiču... ((:
(:niklaus:)
asembler.100dr.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.101bulaja,
│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.102niklaus,
(:> 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.103mikia,
Zna li neko da li je moguce staviti vrednost na stek bez PUSH naredbe?
Preko [sp+...] ili [bp]
mikia.
asembler.104eagle,
> 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.105vpudar,
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.106eagle,
> 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.108vpudar,
-> 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.109eagle,
> 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.110peca.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.111eagle,
> 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.112kriss,
Evo pitanja tipično početničkog :)
žemu služi onaj kros-referens fajl (.xrf) koga generiše asembler?
asembler.113kriss,
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.114dzakic,
> 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.115eagle,
> 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.116kriss,
Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__?
asembler.117dzakic,
> 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.119bigbrada,
!##! Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__?
That's the same thing :)
Brada.
asembler.121bole,
>>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.122nikac,
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.123miroslavn,
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.124nikac,
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.125kriss,
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.126mjova,
> 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.127mstanic,
>> 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.128kriss,
˙˙ 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.129mjova,
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.arjasembler.130mdimitrijevic,
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.131markom,
■■■ 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.132niklaus,
(:> 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.133kriss,
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.134kriss,
Da ponovim još jednom, verovatno je proletelo: kako da isčitam
veličinu nekog programa u bajtovima? ASM rutina.
asembler.135vita,
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.136mstanic,
>> 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.137nkbog,
> 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.138kriss,
˙˙>> 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.139nkbog,
> 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.140niklaus,
(:> 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.zipasembler.141dzakic,
> 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.142vpudar,
-> 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.143dragisha,
-> 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.144vpudar,
-> 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.145mazi,
Ajd sad jedno glupo pitanje :-)
kako da linkujem neki fajl zajedno za .EXE ili .COM u MASM 6.0 ?
Ivan.
asembler.146mjova,
> Ajd sad jedno glupo pitanje :-)
ni sam ne znaš kako je glupo ;). probaj ponovo.
asembler.147mazi,
>> 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.148vpj.,
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, ®isters, ®isters);
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.149mdimitrijevic,
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.170eotek,
> 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.171mazi,
>> 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.172dzakic,
> 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.173mdimitrijevic,
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.174bojans,
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.175mjova,
> 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.176djelovic,
> 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.177bojans,
>> 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.178bojans,
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.179djelovic,
> 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.180bojans,
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.181djelovic,
> 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.182dzakic,
> 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.183ficus,
:) 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.184pmsimic,
Moze li mi neko na primeru objasniti direktan pristup
ram memoriji nna grafickim karticama.
pozdrav iz Pristine
asembler.185mjova,
da li neko zna kako se iz TSR-a može alocirati memorija?
zapravo, da li to uopšte i može?
asembler.186todorp,
> 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.187dragisha,
-> 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.188mjova,
> 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.189kriss,
Jel zna neko kako se iz asm-a pušta ton određene frekvencije i
trajanja na spikeru?
asembler.190janko,
> 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.191redakcija,
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.192dragisha,
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.193kriss,
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.194bojans,
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.195pedjak,
> 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.196markom,
*** ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;)
DB 512 DUP (0)
Trebalo bi da radi, nisam probao :)
asembler.197dvesic,
>> 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.198dvesic,
>> 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.199mmitrovic,
Ů█▀█Ţ 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.200mmitrovic,
Ů█▀█Ţ 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.201jugoran,
Hi, eksluzivci!
Da li ima zainteresovanih za skidanje zastite?
Detalji na mail...
Pozdrav,
Goran.
asembler.202todorp,
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.203mmitrovic,
Ů█▀█Ţ 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.204kriss,
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.205mmitrovic,
Ů█▀█Ţ 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.206janko,
> Ů█▀█Ţ 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.207korvin,
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.208pedjak,
> 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.209mmitrovic,
Ů█▀█Ţ 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.210korvin,
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.211kriss,
˙˙ 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.212nbatocanin,
> 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.213korvin,
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 ...