PCPROG.3

26 Jul 1993 - 22 Apr 1994

Messages - asembler

asembler.104 eagle, -> #103, mikia
> Zna li neko da li je moguce staviti vrednost na stek bez PUSH > naredbe? Preko Šsp+...Ć ili ŠbpĆ Ovo bi trebalo da radi isto što i push ax: sub sp,2 mov bp,sp mov ŠbpĆ,ax
asembler.105 vpudar,
Hitno potrebna jedna informacija, please, potreban mi je tajming za instrukciju: JMP [BX] Ili, jednostavnije, koliko je to sporije u odnosu na: JMP BX Pravim neki optimizovani kompajler (i ovo je od presudne važnosti), pa ako neko ima Intelovih knjiga, molim da mi pogleda broj taktova (po mogućstvu, za XT/286/386/486)
asembler.106 eagle, -> #105, vpudar
> Hitno potrebna jedna informacija, please, potreban mi je > tajming za instrukciju: JMP ŠBXĆ > Ili, jednostavnije, koliko je to sporije u odnosu na: JMP BX Ovako stoji u ASM.NG : ────────────────────────────────────────────────────────────────────────── Operands Clocks Transfers Bytes Example memptr16 18 + EA - 2-4 JMP SAME_SEG regptr16 11 - 2 JMP BX ────────────────────────────────────────────────────────────────────────── EA Component 8088 Clocks Example Register indirect 5 MOV AX,ŠBPĆ BX, BP, SI, DI Dakle, 18 + 5 = 23 na XT-u. Otprilike duplo sporije.
asembler.108 vpudar, -> #106, eagle
-> Dakle, 18 + 5 = 23 na XT-u. Otprilike duplo sporije. OK. Sada sam i ja pronašao nešto (u HelpPC-u), interesantno je kako se računa na 386/486, npr., ako se ne varam, čini mi se da kod 486 nema razlike između JMP BX i JMP [BX], po 5 taktova u najbržoj varijanti!? A isto tako, JMP LABEL (3 takta) ispadne brže od JMP BX!?
asembler.109 eagle, -> #108, vpudar
> kako se računa na 386/486, npr., ako se ne varam, čini mi se da > kod 486 nema razlike između JMP BX i JMP ŠBXĆ, po 5 taktova u > najbržoj varijanti!? A isto tako, JMP LABEL (3 takta) ispadne > brže od JMP BX!? Tu bi se verovatno trebao dodati još koji takt, za prenos iz memorije.
asembler.110 peca.st, -> #108, vpudar
!-> A isto tako, JMP LABEL (3 takta) ispadne brže od JMP BX!? Kad smo već kod broja ciklusa potrebnih za neku naredbu, zanimljivo je da je, recimo: mov ax,0 sporije od xor ax,ax i to za jedan takt. (naravno, rade isto) Peđa.
asembler.111 eagle, -> #110, peca.st
> Kad smo već kod broja ciklusa potrebnih za neku naredbu, > zanimljivo je da je, recimo: mov ax,0 sporije od xor ax,ax i to > za jedan takt. (naravno, rade isto) Za ax je već u startu sporije, zato što je sama instrukcija duža za jedan bajt (nula je u ovom slučaju word).
asembler.112 kriss,
Evo pitanja tipično početničkog :) žemu služi onaj kros-referens fajl (.xrf) koga generiše asembler?
asembler.113 kriss,
Izglada da sam slep: -> Gde je greška? :) .MODEL SMALL,PASCAL ; .CODE ; PUBLIC LCH ; ; LCH PROC ; ; SET_CURSOR_POSITION: ; ; MOV DX,184FH ; row 25, column 80 MOV AH,02H ; XOR AL,AL ; INT 10H ; ; WRITE_CHARACTER: ; ; MOV AL,'╝' ; MOV AH,0AH ; MOV CX,0001H ; INT 10H ; ; LCH ENDP ; ; END ; Ovo bi trebalo da u desnom donjem uglu lupi znak ╝, međutim neće :( Da li možda ima neke veze sa aktivnom stranom texta? P.S. Da, treba da se ulinkuje u .pas :)
asembler.114 dzakic, -> #113, kriss
> Ovo bi trebalo da u desnom donjem uglu lupi znak ╝, međutim neće > :( Da li možda ima neke veze sa aktivnom stranom texta? Funkcija 0A video bios-a traži i broj video strane u bh. Stavi nulu, trebalo bi da počne nešto da se dešava. Pogledaj funkciju 0F, ona piše po aktvinoj strani.
asembler.115 eagle, -> #113, kriss
> Ovo bi trebalo da u desnom donjem uglu lupi znak ╝, međutim > neće :( Da li možda ima neke veze sa aktivnom stranom texta? Ima, treba u bh upisati aktivnu stranu. Dodaj: XOR bh,bh
asembler.116 kriss,
Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__?
asembler.117 dzakic, -> #116, kriss
> Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__? Ne znam napamet koliko, ali sam siguran da je ovo prvo kraće (za bajt, mislim) i brže par taktova. Druga instrukcija je pogodnija kad postoji i ofset nekog registra, recimo trtmrt[bp+si].
asembler.119 bigbrada, -> #116, kriss
!##! Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__? That's the same thing :) Brada.
asembler.121 bole, -> #119, bigbrada
>>Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__? >>That's the same thing :) Nije mi bas najjasnije da li se pri mov dx, offset trtmrt (ili lea dx, trtmrt) u dx stavlja adresa (offset trtmrt) ili vrednost koja se tu nalazi? 10x
asembler.122 nikac, -> #121, bole
NI> Nije mi bas najjasnije da li se pri mov dx, offset trtmrt (ili NI> lea dx, trtmrt) u dx stavlja adresa (offset trtmrt) ili vrednost NI> koja se tu nalazi? Stavlja se ofsetni deo adrese (iliti pomeraj) u dx. Ako hoces da u dx stavis sadrzaj __trtmtr__ onda lepo kazes samo: mov dx,trtmtr ili ako hoces indirektno: mov bx,offset trtmrt (ili lea bx,trtmrt :) mov dx,ŠbxĆ
asembler.123 miroslavn,
Imam 2 mala pitanjca: 1) koji je to media type, ako je MediaID=F6 ? 2) Šta tačno naredba PUSHA stavlja na stek ? (koje registre)
asembler.124 nikac, -> #123, miroslavn
NI> Imam 2 mala pitanjca: NI> NI> 1) koji je to media type, ako je MediaID=F6 ? NI> NI> 2) Šta tačno naredba PUSHA stavlja na stek ? (koje registre) Pod jedan neznam, a pusha stavlja na stek sledece registre sledecim redom: ax, cx, dx, bx, sp, bp, si, di (da bas tim redom).
asembler.125 kriss,
Jedno pitanje u vezi turbo dibagera: kako da određeni program učitam od određene adrese? Tj, kako da 'podesim' da mi cs bude recimo, 4000h? A ip, recimo 0100h :)
asembler.126 mjova, -> #125, kriss
> Jedno pitanje u vezi turbo dibagera: kako da određeni > program učitam od određene adrese? Tj, kako da 'podesim' > da mi cs bude recimo, 4000h? A ip, recimo 0100h :) nikako. zašto bi to i radio? u svojoj praksi nisam naišao na takvu potrebu - baš me zanima zašto ti to treba? ako uradiš .com, onda će on biti sigurno učitan u memoriju na ofsetu 0x0100. segment ne možeš podesiti. mada postoje neka rešenja, ali ih ne dozvoljava td već se sam moraš setiti ;). napraviš rezidentni program koji će se učitati tamo gde ti treba. zatim poteraš td, a kao parametar, daš mu neki 'lažni' .exe koji će služiti tek da mu zamaže oči. dakle, bilo koji .exe sa diska. e, onda uradiš single-step (ako nije destruktivan) pa jednom od opcija 'skočiš' na tvoju adresu i proglasiš je 'novom' (ctrl-g, ctrl-n - možda treba alt, nisam siguran - probaj sa alt-F10).
asembler.127 mstanic, -> #125, kriss
>> Jedno pitanje u vezi turbo dibagera: kako da određeni >> program učitam od određene adrese? Tj, kako da 'podesim' >> da mi cs bude recimo, 4000h? A ip, recimo 0100h :) Sve registre možeš menjati na vrednosti koje želiš. No, to verovatno znaš. E, sad kako učitati program ?:] "Učitaš" program na standardan način i zatim upotrebiš "move" komandu, koju imaš dok si u "data window" i koja služi da premešta blokove po memoriji.
asembler.128 kriss, -> #126, mjova
˙˙ nikako. zašto bi to i radio? u svojoj praksi nisam naišao na ˙˙ takvu potrebu - baš me zanima zašto ti to treba? Već sam se snašao, samo da ti odgovorim: naletao sam na programe koji su explicitno bili učitavani od određene adrese, i svi džampovi su bili cs:ip. E pa je tom priliko dolazilo do 'udri da ti vratim' ručnog debagiranja, što me je užasno nerviralo. Eto :)
asembler.129 mjova,
dve funkcije za upoređivanje teksta. poštuju 'divljake' ;) * i ?, pa se može lepo upotrebiti za 'maskiranje' imena datoteka. nešto slično se nalazi u sdf*.arj (ima na sezamu), a ovo je malo unapređeno po pitanju funkcionalnosti. postoje dve fn koje rade istu stvar, ali nad različitim argumentima. prva funkcija je: ; int DosFileCmp(char far *mask, char far *s, int len); ; FileMask - maska za upoređivanje (terminiran '\0') ; s - tekst bafer koji treba da odgovara masci ; terminiran je razmakom ' ' ili dužinom ; len - dužina bafera druga: ; int TextCmp(char far *Mask, char far *s); ; Mask - maska za upoređivanje (terminiran '\0') ; s - tekst bafer koji treba da odgovara masci ; (terminiran '\0') doscmp.arj
asembler.130 mdimitrijevic,
Treba mi rutina u ASM-u za crtanje linije. ( 320x200x256 ) Sta ima u arhivi DDJ9311.ZIP na FON-u. Ne skida mi se 480KB za dzabe. Pozdrav, Marjan Dimitrijevic
asembler.131 markom, -> #130, mdimitrijevic
■■■ Treba mi rutina u ASM-u za crtanje linije. ( 320x200x256 ) Bilo je u nekim Računarima, ali se ne sećam tačno u kojim, Dejane ... Marko
asembler.132 niklaus, -> #130, mdimitrijevic
(:> Sta ima u arhivi DDJ9311.ZIP na FON-u. Ne skida mi se 480KB za dzabe. ┌── │ Length Method Size Ratio Date Time CRC-32 Attr Name │ ------ ------ ----- ----- ---- ---- -------- ---- ---- │ 20397 Stored 20397 0% 10-07-93 07:07 363779f0 --w- 1993-NOV.ZIP │ 10658 DeflatN 3532 67% 10-06-93 08:55 112cdb38 --w- ALLEY.ASC │ 5502 Stored 5502 0% 08-07-93 17:18 3831f72d --w- ALLEY.ZIP │ 11456 DeflatN 2421 79% 10-06-93 08:55 2d1013a2 --w- CHAT.ASC │ 16273 Stored 16273 0% 07-13-93 12:09 a18c43ac --w- CHAT.ZIP │ 12320 DeflatN 3293 74% 10-06-93 08:55 a82a5a78 --w- CPROG.ASC │ 140944 Stored 140944 0% 09-21-93 16:58 212fa1da --w- DFLT16.ZIP │ 68147 Stored 68147 0% 09-27-93 18:28 f2c5e259 --w- DFPP03.ZIP │ 110241 Stored 110241 0% 05-25-93 22:56 caf2c9ff --w- HEAP.ZIP │ 18030 Stored 18030 0% 09-29-93 09:01 837b1e61 --w- INTRPT.ZIP │ 883 DeflatN 295 67% 10-07-93 08:00 f1525968 --w- README │ 3840 DeflatN 1271 67% 10-07-93 07:07 9f359b14 --w- README.113 │ 3840 DeflatN 1271 67% 10-07-93 08:00 9f359b14 --w- README.ASC │ 14960 DeflatN 4173 73% 10-06-93 08:55 2082b8a3 --w- RUNTIME.ASC │ 8046 DeflatN 2294 72% 10-06-93 08:58 8b97e613 --w- SLUG.ASC │ 6848 Stored 6848 0% 02-06-92 23:54 89a40250 --w- SLUG.ZIP │ 8192 DeflatN 2731 67% 10-06-93 12:49 df7a634b --w- TRACE.ASC │ 19099 Stored 19099 0% 08-28-93 18:48 0ce3b16f --w- TRACE.ZIP │ 28755 Stored 28755 0% 08-12-93 21:56 bed3c249 --w- UNDOC.ZIP │ 28205 Stored 28205 0% 10-06-93 17:37 b5ce69c6 --w- VALDES.ZIP │ ------ ------ --- ------- │ 536636 483722 10% 20 └── Evo šta čemu služi... ┌── │ SLUG.ASC │ Title: PERFORMANCE TUNING: SLUGGING IT OUT! │ Keywords: NOV93 PROFILING PERFORMANCE TUNING │ Published source code accompanying Michael Dunlavey's article on │ performance tuning, a process he calls "deslugging" as opposed to │ "debugging." Also see SLUG.ZIP. │ │ SLUG.ZIP │ Title: PERFORMANCE TUNING: SLUGGING IT OUT! │ Keywords: NOV93 PROFILING PERFORMANCE TUNING │ Unpublished and published source code accompanying Michael Dunlavey's │ article on performance tuning, a process he calls "deslugging" as │ opposed to "debugging." Requires PKUNZIP.EXE to extract. │ │ HEAP.ZIP │ Title: HEAP CHECKING │ Keywords: NOV93 DEBUGGING HEAP C │ Unpublished source code for the Safeheap and Logheap C libraries for │ intercepting heap-related calls and generating message logs. Requires │ PKUNZIP.EXE to extract. │ │ RUNTIME.ASC │ Title: DETECTING RUN-TIME MEMORY ERRORS │ Keywords: NOV93 DEBUGGING │ Published source code and reports generated from commercially-available │ debugging tools as presented by Taed Nelson in his article. Tools │ covered include Purify 2.0, Insight, Sentinel, MemCheck, and │ Bounds-Checker. │ │ TRACE.ASC │ Title: A MULTI-APP MESSAGE TRACE FACILITY FOR WINDOWS │ Keywords: NOV93 DEBUGGING WINDOWS │ Published source code by Ivan Gerencir which accompanies │ Ray Valdes' article on debugging Windows apps. Also see TRACE.ZIP. │ │ TRACE.ZIP │ Title: A MULTI-APP MESSAGE TRACE FACILITY FOR WINDOWS │ Keywords: NOV93 DEBUGGING WINDOWS │ Complete trace facility by Ivan Gerencir which accompanies │ Ray Valdes' article on debugging Windows apps. Requires PKUNZIP.EXE │ to extract. │ │ VALDES.ZIP │ Title: DEBUGGING WINDOWS APPS │ Keywords: NOV93 DEBUGGING WINDOWS │ Unpublished source code accompanying Ray Valdes article on │ debugging windows applications. Requires PKUNZIP.EXE to extract. │ │ INTRPT.ZIP │ Title: EAVESDROPPING ON INTERRUPTS │ Keywords: NOV93 DEBUGGING INTERRUPT-MONITORING │ Unpublished source code for Rick Knoblaugh's interrupt-monitoring │ that traps and logs interrupt activity. Requires PKUNZIP.EXE to │ extract. │ │ CHAT.ASC │ Title: A NETWARE CHAT UTILITY │ Keywords: NOV93 NETWARE NOVELL CHAT TURBO PASCAL │ Published source code for Eduardo Serrat's article presenting │ an interactive "chat" utility for Novell NetWare. Also see │ CHAT.ZIP. │ │ CHAT.ZIP │ Title: A NETWARE CHAT UTILITY │ Keywords: NOV93 NETWARE NOVELL CHAT TURBO PASCAL │ Unpublished source code and executables for Eduardo Serrat's │ article presenting an interactive "chat" utility for Novell │ NetWare. Requires PKUNZIP.EXE to extract. │ │ DFLT16.ZIP │ Title: C PROGRAMMING COLUMN │ Keywords: NOV93 C DFLAT CUA/SAA │ The current version of Al Stevens' D-Flat interface library for │ C. Requires PKUNZIP.EXE to extract. │ │ DFPP03.ZIP │ Title: C PROGRAMMING COLUMN │ Keywords: NOV93 C++ DFLAT CUA/SAA │ The current version of Al Stevens' D-Flat interface library for │ C++. Requires PKUNZIP.EXE to extract. │ │ CPROG.ASC │ Title: C PROGRAMING COLUMN │ Keywords: NOV93 C++ D-FLAT++ CUA/SAA │ Published source code of Al Stevns D-Flat++ interface library, │ the C++ implementation of the CUA/SAA interfacce library │ │ ALLEY.ASC │ Title: ALGORITHM ALLEY │ Keywords: NOV93 PASCAL ALGORITHMS SAMPLING │ Published source code presented by Tom Swan in his column where │ he examines palindromic encryption in Windows. Also see │ ALLEY.ZIP. │ │ ALLEY.ZIP │ Title: ALGORITHM ALLEY │ Keywords: NOV93 PASCAL ALGORITHMS SAMPLING │ Complete source code presented by Tom Swan in his column where he │ examines palindromic encryption in Windows. Requires PKUNZIP.EXE │ to extract. │ │ UNDOC.ZIP │ Title: UNDOCUMENTED CORNER │ Keywords: NOV93 WINDOWS NETWARE NCP │ Pawel Szczerbina examines undocumented aspects of Novell's │ NetWare Core Protocol (NCP). Requires PKUNZIP.EXE to extract. └── (: Sean :)
asembler.133 kriss,
Pitanje: Kako bi izgledala rutina koja bi vraćala veličinu fajla koji je trenutno 'aktivan' (znači samog fajla čiji je deo :) u bajtovima? Ja sam petljao nešto sa DOS servisom Get File Size, ali ne ide. :( Naravno, preptostavka je da je fajl 'sam', tj. da nije učitan iz nekog shell-a :) Drugim rečima - jel postoji neko ko će da se mučiza istu? ;)
asembler.134 kriss,
Da ponovim još jednom, verovatno je proletelo: kako da isčitam veličinu nekog programa u bajtovima? ASM rutina.
asembler.135 vita,
Ljudi, help... Jel radio nekad neko sa DMA kanalisanjem..??? Ako jeste, jel radio to isto u 386 modu??? , ako jeste jel radio mozda sa Sound Blasterom??? E, ako je bilo sta od ovoga zadovoljeno , naskrabajte nesto (čuj nesto, dosta) na tu temu, treba mi HITNO podrska za SB-a...u vidu VOC-ova!! Unapred zahvalan, Vita :)
asembler.136 mstanic, -> #134, kriss
>> Da ponovim još jednom, verovatno je proletelo: kako da >> isčitam veličinu nekog programa u bajtovima? ASM rutina. Pa otvori ga i čitaj bajt po bajt dok ne stigne do kraja, i pritom upotrebi neko brojač.
asembler.137 nkbog, -> #134, kriss
> Da ponovim još jednom, verovatno je proletelo: kako da isčitam > veličinu nekog programa u bajtovima? ASM rutina. LSEEK na kraj datoteke (ima funkcija u dos-u). Ona ti vrati dužinu u bajtovima (tačnije trenutnu poziciju u datoteci, a to je upravo dužina). Pogledaj IntList ili nešto slično za detalje. NB.
asembler.138 kriss, -> #136, mstanic
˙˙>> Da ponovim još jednom, verovatno je proletelo: kako da ˙˙>> isčitam veličinu nekog programa u bajtovima? ASM rutina. ˙˙ ˙˙ Pa otvori ga i čitaj bajt po bajt dok ne stigne do kraja, i ˙˙ pritom upotrebi neko brojač. Mislim da postoji elegantnije rešenje, ali ja ne znam kako to da izvedem. Interapt 21h (DOS Services) ima funkciju 23h kojoj je naziv Get File Size. I evo šta piše; Function 23 reports the size of a file in terms of number of records in the file. (...) Dakle, sve bi bilo ok da se ne pominje neki FCB i šta_ti_ja_znam, tako da je ispalo ne baš lako (za mene) isčitati famoznu veličinu fajla. Pa ako se neko razume više ... (?)
asembler.139 nkbog, -> #138, kriss
> in the file. (...) Dakle, sve bi bilo ok da se ne pominje neki FCB > i > šta_ti_ja_znam, tako da je ispalo ne baš lako (za mene) isčitati Ne. Nikad. Nikako. I ako nekom još nije jasno: Nipošto. Ne treba koristiti FCB, već hendlove (ili bahove;). FCB je stari (CP/M?) način pristupa datotekama. Hendlovi su novi (čuj ovo ima ih od DOS 2.0) (Unix) način pristupa. Nema normalnih programa posle 1984. koji koriste FCB. NB. p.s. Jedina korisna primena FCB je DEL *.* koji je značajno brži preko FCB-a ;).
asembler.140 niklaus, -> #135, vita
(:> Ljudi, help... (:> (:> Jel radio nekad neko sa DMA kanalisanjem..??? (:> Ako jeste, jel radio to isto u 386 modu??? , ako jeste jel radio mozda (:> sa Sound Blasterom??? Ajde, iako mi ne odgovaraš na mailove, evo trudim se... (: Creative Voice (VOC) file format -------------------------------- HEADER (bytes 00-19) Series of DATA BLOCKS (bytes 1A+) ŠMust end w/ Terminator BlockĆ ----------------------------------------------------------------- HEADER: ======= byte # Description ------ ------------------------------------------ 00-12 "Creative Voice File" 13 1A (eof to abort printing of file) 14-15 Offset of first datablock in .voc file (std 1A 00 in Intel Notation) 16-17 Version number (minor,major) (VOC-HDR puts 0A 01) 18-19 2's Comp of Ver. # + 1234h (VOC-HDR puts 29 11) ----------------------------------------------------------------- DATA BLOCK: =========== Data Block: TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes) NOTE: Terminator Block is an exception -- it has only the TYPE byte. TYPE Description Size (3-byte int) Info ---- ----------- ----------------- ----------------------- 00 Terminator (NONE) (NONE) 01 Sound data 2+length of data * 02 Sound continue length of data Voice Data 03 Silence 3 ** 04 Marker 2 Marker# (2 bytes) 05 ASCII length of string null terminated string 06 Repeat 2 Count# (2 bytes) 07 End repeat 0 (NONE) 08 Extended 4 *** *Sound Info Format: **Silence Info Format: --------------------- ---------------------------- 00 Sample Rate 00-01 Length of silence - 1 01 Compression Type 02 Sample Rate 02+ Voice Data ***Extended Info Format: --------------------- 00-01 Time Constant: Mono: 65536 - (256000000/sample_rate) Stereo: 65536 - (25600000/(2*sample_rate)) 02 Pack 03 Mode: 0 = mono 1 = stereo Marker# -- Driver keeps the most recent marker in a status byte Count# -- Number of repetitions + 1 Count# may be 1 to FFFE for 0 - FFFD repetitions or FFFF for endless repetitions Sample Rate -- SR byte = 256-(1000000/sample_rate) Length of silence -- in units of sampling cycle Compression Type -- of voice data 8-bits = 0 4-bits = 1 2.6-bits = 2 2-bits = 3 Multi DAC = 3+(# of channels) Šinteresting-- this isn't in the developer's manualĆ Uz poruku su rutine za slanje "sirovog" zvuka na SBov port, kao i *.h-ovi, koji će ti pomoći pri konverziji .VOC->.RAW ( .RAW->SB = ((: ). (: Sean :) sb_voc.zip
asembler.141 dzakic, -> #134, kriss
> Da ponovim još jednom, verovatno je proletelo: kako da isčitam > veličinu nekog programa u bajtovima? ASM rutina. Vidim da ti je neko već pomenuo LSEEK na kraj programa. To je ono što ti rekoh u subotu: ne koristi stari način rada sa FCB-ovima već handle-ove. Tu koristiš fju za pozicioniranje pointera za čitanje relativno u odnosu na kraj. Fja vrati poziciju u odnosu na početak i tako dobiješ dužinu. FILE OPEN: ah=3Dh, al=open mode, ds:dx -> asciiz filename ret: ax - handle FILE SEEK: ah=42h, bx=file handle, cx:dx=position al=0 move pointer to start of file + CX:DX al=1 move pointer to current position + CX:DX al=2 move pointer to end of file + CX:DX ret: dx:ax - filepos filename db 'd:\path\prog.exe',0 mov ah,3Dh mov al,0 mov dx,offset filename int 21h mov bx,ax mov ah,42h mov al,2 xor cx,cx xor dx,dx int 21h ; ovde u DX:AX imaš filesize(filename) mov ah,3Eh int 21h Ostaje još da nađeš path do exe-a koji se izvršava. U PSP-u, na ofsetu 2Ch nalazi se word koji sadrži segment environment bloka. Odeš tamo :) i kreneš da čitaš... Naći ćeš nešto ovako: NAME1=value1 <0> NAME2=value2 <0> ... NAMEN=valueN <0> <0> <word> d:\path\prog.exe <0> <0> Sve je ovo lepo objašnjeno recimo u TechHelp-u. Dakle, ovako nađeš environment blok, pretražiš ga.. i tu pročitaš pun naziv exe-a. Onda ga otvoriš, nađeš njegovu dužinu i zatvoriš. Zak
asembler.142 vpudar, -> #141, dzakic
-> Sve je ovo lepo objašnjeno recimo u TechHelp-u. Dakle, ovako -> nađeš environment blok, pretražiš ga.. i tu pročitaš pun naziv -> exe-a. Onda ga otvoriš, nađeš njegovu dužinu i zatvoriš. Kad pomenu TechHelp, evo malog Patch-a za drastično ubrzanje ispisa na ekran kod dotičnog programa: *** Tech HELP! Electronic Manual '86/'87 *** Comparing files THELP.ORG and THELP.EXE 0000392D: FA EB 0000392E: EC 09 0000393F: FA EB 00003940: EC 09 Sa leve strane je sadržaj originalnog fajla, a sa desne ono što treba promeniti ;) U pitanju je inače bio Snow Checking za praistorijske CGA kartice, a nigde nisam našao načina kako da ga "legalno" isključim. (nemam CONFIG fajl)
asembler.143 dragisha, -> #142, vpudar
-> promeniti ;) U pitanju je inače bio Snow Checking za praistorijske CGA -> kartice, a nigde nisam našao načina kako da ga "legalno" isključim. -> (nemam CONFIG fajl) Uvijek sam se pitao (očito ne gdje treba:) kako to da je na herc-u munja, a na VGA s*it:)). Hvala! BTW, FA EC se pojavljuje još dva puta kasnije, šta s njima?:) -- [Ever stop to think and forget to start again?]
asembler.144 vpudar, -> #143, dragisha
-> Uvijek sam se pitao (očito ne gdje treba:) kako to da je na herc-u munja, -> a na VGA s*it:)). Hvala! BTW, FA EC se pojavljuje još dva puta kasnije, -> šta s njima?:) Ništa. Ostale bajtove ne treba dirati :) Btw, na Rhinoceros BBS-u imamo čitavu konferenciju posvećenu tim stvarima (razna "poboljšanja" rada komercijalnih i Shareware programa ;).
asembler.145 mazi,
Ajd sad jedno glupo pitanje :-) kako da linkujem neki fajl zajedno za .EXE ili .COM u MASM 6.0 ? Ivan.
asembler.146 mjova, -> #145, mazi
> Ajd sad jedno glupo pitanje :-) ni sam ne znaš kako je glupo ;). probaj ponovo.
asembler.147 mazi, -> #146, mjova
>> Ajd sad jedno glupo pitanje :-) > ni sam ne znaš kako je glupo ;). probaj ponovo. Pa sad, hvala na odgovoru, genije! Da sam znam odgovor, pitanje ne bih postavljao uopšte. Ako znaš odgovor, odgovori, pa me zezaj do mile volje. Ako ne znaš, idi u viceve pa tamo davi nekog. Elem, ponovo da pitam. Kako linkovati zajedno sa izvršnim fajlom i neku datoteku ili tako nešto? Radi se o MASM-u 6.0 Ivan.
asembler.148 vpj.,
Da li bi neko hteo da napise u asembleru kratak program koji bi ocitao SAMO serijski broj hard diska i poslao u txt fajl. Evo source-a iz dugide10.zip fajla sa SEZAM-a u kome je to ( i jos vise ) uradjeno u C jeziku. #include <stdlib.h> #include <dos.h> #include <stdio.h> #include <conio.h> #include <bios.h> char *getascii (unsigned int in_data [], int off_start, int off_end); void main (void) { unsigned int dd [256]; /* DiskData */ unsigned int dd_off; /* DiskData offset */ unsigned int loop; /* Loop variable */ int num_drv; /* Number of Hard disks */ union REGS registers; /* Used for Interrupt for BIOS data */ unsigned int bios_cyl [2], bios_head [2], bios_sec [2]; /* Cylinders, Heads, Sectors */ clrscr (); fprintf (stderr, "** DUG_IDE : Provides IDE disk info on both drives in the system\n"); fprintf (stderr, "** Version 1.0\n"); fprintf (stderr, "**\n"); fprintf (stderr, "** Copyright (c) 12 Jan 1993 by Doug Merrett - All rights reserved\n"); fprintf (stderr, "**\n"); fprintf (stderr, "** Postal Address: PO Box 432\n"); fprintf (stderr, "** Stones Corner Q 4120\n"); fprintf (stderr, "** Australia\n"); fprintf (stderr, "**\n"); fprintf (stderr, "** Email Address: dcm@mincom.oz.au\n"); fprintf (stderr, "**\n"); fprintf (stderr, "** You may distribute freely, but no modifications without mailing me a copy.\n"); fprintf (stderr, "** No profit can be made for distribution. Blah Blah Blah etc.\n\n"); fprintf (stderr, "Press any key to accept above limitations"); getch (); /* How many disk drives & parameters */ num_drv = peekb (0x40, 0x75); /* BIOS Data area, Number of Hard disks */ /* Byte at Segment 40H Offset 75H */ for (loop = 0; loop < num_drv; loop++) /* Loop through drives */ { /* Get IDE Drive info */ while (inp (0x1F7) != 0x50) /* Wait for controller not busy */ ; outp (0x1F6, (loop == 0 ? 0xA0 : 0xB0)); /* Get first/second drive */ outp (0x1F7, 0xEC); /* Get drive info data */ while (inp (0x1F7) != 0x58) /* Wait for data ready */ ; for (dd_off = 0; dd_off != 256; dd_off++) /* Read "sector" */ dd [dd_off] = inpw (0x1F0); /* Get BIOS drive info */ registers.h.ah = 0x8; /* Get drive info */ registers.h.dl = 0x80 + loop; /* Drive is 80H for Disk 0, 81H for Disk 1 */ int86 (0x13, &registers, &registers); if (! registers.x.cflag) /* All OK if carry not set */ { bios_head [loop] = registers.h.dh + 1; /* Heads are from 0 */ bios_sec [loop] = registers.h.cl & 0x3F; /* sec is bits 5 - 0 */ bios_cyl [loop] = ((registers.h.cl & 0xC0) << 2) + registers.h.ch + 2; /* +1 because starts from 0 and +1 for FDISK leaving one out */ } clrscr (); fprintf (stdout, "DRIVE %d:\n", loop); fprintf (stdout, "Model Number______________________: %s\n", getascii (dd, 27, 46)); fprintf (stdout, "Serial Number_____________________: %s\n", getascii (dd, 10, 19)); fprintf (stdout, "Controller Revision Number________: %s\n\n", getascii (dd, 23, 26)); fprintf (stdout, "Able to do Double Word Transfer___: %6s\n", (dd [48] == 0 ? "No" : "Yes")); fprintf (stdout, "Controller type___________________: %04X\n", dd [20]); fprintf (stdout, "Controller buffer size (bytes)____: %6u\n", dd [21] * 512); fprintf (stdout, "Number of ECC bytes transferred___: %6u\n", dd [22]); fprintf (stdout, "Number of sectors per interrupt___: %6u\n\n", dd [47]); fprintf (stdout, "Hard Disk Reports\n"); fprintf (stdout, "Number of Cylinders (Fixed)_______: %6u\n", dd [1]); fprintf (stdout, "Number of Heads___________________: %6u\n", dd [3]); fprintf (stdout, "Number of Sectors per Track_______: %6u\n\n", dd [6]); fprintf (stdout, "BIOS Reports\n"); fprintf (stdout, "Number of Cylinders_______________: %6u\n", bios_cyl [loop]); fprintf (stdout, "Number of Heads___________________: %6u\n", bios_head [loop]); fprintf (stdout, "Number of Sectors per Track_______: %6u\n\n", bios_sec [loop]); if (! loop) { fprintf (stdout, "Press a key"); getch (); } } } char *getascii (unsigned int in_data [], int off_start, int off_end) { static char ret_val [255]; int loop, loop1; for (loop = off_start, loop1 = 0; loop <= off_end; loop++) { ret_val [loop1++] = (char) (in_data [loop] / 256); /* Get High byte */ ret_val [loop1++] = (char) (in_data [loop] % 256); /* Get Low byte */ } ret_val [loop1] = '\0'; /* Make sure it ends in a NULL character */ return (ret_val); }
asembler.149 mdimitrijevic, -> #147, mazi
Da pokusam da ti odgovorim. Ako mislis da ulinkujes sliku ili muziku za INTRO uradi to ovako u programu otvori novi segment i sliku prebaci u redove tipa : DB 03H,3FH ............ DB ..................... A ako zelis nesto drugo onda objasni malo bolje. Ako te mrzi da napises programcic koji ce datoteku prebaciti u onaj oblik sa DB .... reci pa da ti to sklepam u C-u. Bacicu u grupu pa cemo moci i slike i muzike da ubacujemo u ovom obliku. Pozdrav, Marjan P.S. Mozda te nisam dobro shvatio !!!
asembler.170 eotek, -> #147, mazi
> Kako linkovati zajedno sa izvrsnim fajlom i neku datoteku > ili tako nesto? Radi se o MASM-u 6.0 vidi u okviru fajla thedraw.doc (programming in assembler) a taj fajl imas negde na sezamu (tdraw460.arj) etsc
asembler.171 mazi, -> #149, mdimitrijevic
>> Kako linkovati zajedno sa izvršnim fajlom i neku datoteku >> ili tako nešto? Radi se o MASM-u 6.0 > Ako mislis da ulinkujes sliku ili muziku za INTRO uradi to ovako u programu > otvori novi segment i sliku prebaci u redove tipa : > > DB 03H,3FH ............ > DB ..................... > > A ako zelis nesto drugo onda objasni malo bolje. > > Ako te mrzi da napises programcic koji ce datoteku prebaciti u onaj oblik > sa DB .... reci pa da ti to sklepam u C-u. Bacicu u grupu pa cemo moci i slike > i muzike da ubacujemo u ovom obliku. > > Pozdrav, > Marjan > > P.S. Mozda te nisam dobro shvatio !!! Hmm, izgleda da moram malo bolje da objasnim :-) Sistem je kao sa bibliotekama ili .OBJ fajlovima oni se bukvalno 'prilepe' na kod koji MASM izgeneriše odprilike uradi sledece: Kompajlirani kod (500b) + datoteka (2000b) = Kod+datoteka (2500) sve to u jednom fajlu. E, sad, što je tu najgore, ja sam to nekada davno znao, i verovatno imam negde u backup-u neki takav primer, ali to treba naći. Zato sam priupitao ovde. Nadam se da sam sad bio jasniji :-) Ivan.
asembler.172 dzakic, -> #147, mazi
> Kako linkovati zajedno sa izvršnim fajlom i neku datoteku > ili tako nešto? Radi se o MASM-u 6.0 Pretpostavljam da hoćeš da podaci koje tvoj program koristi strpaš u exe zajedno sa izvršnim programom. Možeš to da uradiš na dva načina: 1) Da celu datoteku jednostavno dopišeš na exe. Program će se i dalje izvršavati normalno, neće ni primećivati taj 'rep' koji si dopisao. Onda iz programa otvoriš .exe, pogledaš njegovu dužinu, oduzmeš veličinu dopisanog dela, i znaš da se na toj poziciji nalaze podaci koji ti trebaju. 2) Uz borlandove proizvode ide programčić BIN2OBJ koji, logično, napravi .obj od bilo kakve datoteke koju možeš da ulinkuješ u program i da podatke čitaš direktno iz memorije kad ti zatrebaju. (Programu bin2obj se prosleđuje ime 'procedure' pod kojim ćeš podacima pristupati.)
asembler.173 mdimitrijevic,
Da li neko zna kako da u ASM-u pomnozim naprimer neki INTEDZER sa DOUBLE brojem. Bez koriscenja komandi koprocesora. Cisto porgramerski :) u ASM-u. Primer: 170 * 0.22334 ili -120 * 0.123 ili 90 + 12.43056 Pozdrav, Marjan
asembler.174 bojans,
Da li postoji neki dibager koji se snalazi sa programima koji koriste Single Step i Break Point interapte? Jedna "glupa" piratska zaštita koju pokušavam da razbijem je zasnovana na tome da se setuje Trap flag, postave odgovarajući vektori (ako se to tako zove) i dešifrovanje jednog dela programa se vrši pod interapt rutinom. Bilo bi lepo kada bi moj Turbo Debugger 2.01 to shvatio pa da nakon svake instrukcije poziva i interapt rutinu, međutim on se zbuni i ja nemam ideju šta da radim.
asembler.175 mjova, -> #174, bojans
> Da li postoji neki dibager koji se snalazi sa programima > koji koriste Single Step i Break Point interapte? nisam siguran da ćeš naći neko normalno rešenje. moj predlog ti je da ako si siguran da se int 1/3 pozivaju samo po jedared, zapamtiš njihove adrese, a zatim da ukineš njihovo preuzimanje. umesto koda za preuzimanje njihovih vektora možeš napraviti neki call (ako nije far) i sl. no, sumnjam da su blesavi i ostavili ti prostora za tako nešto.
asembler.176 djelovic, -> #174, bojans
> Da li postoji neki dibager koji se snalazi sa programima koji > koriste Single Step i Break Point interapte? Preteraj program kroz sourecer, onda promeni da se ne pozivaju int 1 i 3 već neki drugi, pa ga opet iskompajliraj.
asembler.177 bojans, -> #176, djelovic
>> Preteraj program kroz sourecer, onda promeni da se ne >> pozivaju int 1 i 3 već neki drugi, pa ga opet iskompajliraj. Nisam siguran da li bi ovo moglo da se izvede, jer se int 1 ne poziva eksplicitno, samo se setuje TF, no vredi pokušati da se pročačka po interapt rutini.
asembler.178 bojans, -> #177, bojans
Baš sam nešto pokušavao sa Sourcerom, ali dobijem sledeću poruku: WARNING: Packed file, conversion quality low. I zaista, rezultat je jako loš, praktično neupotrebljiv. Doduše, možda je moja verzija Sourcera prilično matora (1.87). Koja je trenutno najnovija verzija?
asembler.179 djelovic, -> #178, bojans
> Baš sam nešto pokušavao sa Sourcerom, ali dobijem sledeću poruku: > WARNING: Packed file, conversion quality low. Imaš u diru program UNP* koji "raspakuje" razne arhive i pouzdano te rešava te muke.
asembler.180 bojans, -> #179, djelovic
Probao sam sa UNP-om, ali izgleda da Sourcer iz nekog drugog razloga prijavljuje 'packed file'. Sa .exe fajlovima koji su zaista kompresovani nema ovakvih problema, a sa ovim koji nije kompresovan javlja se dotična poruka. Baš nema logike. Uzgred, da li se nekad na Sezamu diskutovalo o zaštiti disketa od kopiranja i tehnikama koje se koriste u ove svrhe?
asembler.181 djelovic, -> #180, bojans
> Uzgred, da li se nekad na Sezamu diskutovalo o zaštiti disketa > od kopiranja i tehnikama koje se koriste u ove svrhe? Ništa konstruktivno, ali je svojevremeno bila serija tekstova u "Računarima" na tu temu. > Probao sam sa UNP-om, ali izgleda da Sourcer iz nekog drugog > razloga prijavljuje 'packed file'. Verovatno zato što je datoteka šifrovana i samu sebe dešifruje. Ne pada mi na pamet drugo rešenje osim da prekopiraš adrese int 1 i 3 na neke druge, i onda da single-stepuješ kroz program, pa svaki put kad naiđe neki od ova dva poziva, ti preskočiš tu instrukciju i onda simuliraš poziv.
asembler.182 dzakic, -> #180, bojans
> Uzgred, da li se nekad na Sezamu diskutovalo o zaštiti disketa > od kopiranja i tehnikama koje se koriste u ove svrhe? Recimo pc.prog, februar '92.
asembler.183 ficus, -> #178, bojans
:) WARNING: Packed file, conversion quality low. :) I zaista, rezultat je jako los, prakticno neupotrebljiv. A da probas dislite ili nesto slicno :) Doduse, mozda je moja verzija Sourcera prilicno matora (1.87). ne verujem da ce novija pomoci ako se radi o pakovanom fajlu eventualno cces izvuci source za raspakivanje ali ipak se ovde radi o necem slicnom samomodifikujucem kodu
asembler.184 pmsimic,
Moze li mi neko na primeru objasniti direktan pristup ram memoriji nna grafickim karticama. pozdrav iz Pristine
asembler.185 mjova,
da li neko zna kako se iz TSR-a može alocirati memorija? zapravo, da li to uopšte i može?
asembler.186 todorp, -> #185, mjova
> da li neko zna kako se iz TSR-a moze alocirati memorija? > zapravo, da li to uopste i moze? Hmm, moram priznati da nisam probao ali da li si probao sa funkcijom 48h (verovatno jesi i sta se desava). Mislim, ne vidim razlog zasto ne bi moglo, ako se vodi o racunu kako se poziva dos funkcija. Mozda da alociras dok se program ucitava, i jasno taj deo ne odseces sa int 27h i zapamtis adresu. Posle psp vrati segment i ti pristupas kao memoriji kako hoces. Pozdrav od Todora ps. Sorry ako sam nesto lupio ali sam to poslednji put radio pre vise od godine. pps. Sigurno da moze, ima gomila rezidentnih editora :)
asembler.187 dragisha, -> #185, mjova
-> da li neko zna kako se iz TSR-a može alocirati memorija? -> -> zapravo, da li to uopšte i može? Ako misliš na alociranje dinamičke memorije, trebalo bi da može ali zavisi od hip menadžera. Kod mene on radi tako da na inicijalizaciji pokupi kompletnu slobodnu memoriju i inicijalizira se, a kad TSRujem, onda se to smanji na dimenzije koje želim. Pojenta je da heap menadžer sam za sebe nikad ne poziva DOS za alokaciju/dealokaciju. Ako misliš na alociranje od DOS-a, moraš da pri svičevanju setuješ PSP na vrijednost koju zapamtiš kad inicijalizuješ TSR, prethodno zapamtiš onaj od tekuće aplikacije da bi mogao da ga restauriraš kad se vraćaš iz TSR. Evo parče koda sa potrebnim DOS funkcijama. (* Change PSP *) R.AX:=5100H; Lib.Intr(R, 21H); SavePSP:=R.BX; R.BX:=ProgPSP; R.AX:=5000H; Lib.Intr(R, 21H); ..tvoj TSR radi ovdje.. (* Restore PSP *) R.BX:=SavePSP; R.AX:=5000H; Lib.Intr(R, 21H); -- [Book never written: "Dog training." by Wille Bite]
asembler.188 mjova, -> #187, dragisha
> Ako misliš na alociranje od DOS-a, moraš da pri svičevanju > setuješ PSP na vrijednost koju zapamtiš kad inicijalizuješ > TSR, prethodno zapamtiš onaj od tekuće aplikacije da bi > mogao da ga restauriraš kad se vraćaš iz TSR. Evo parče > koda sa potrebnim DOS funkcijama. pošto sam ovo sve već apsolvirao ;), mogu samo da dopunim ovu priču. treba zapamtiti svoj PID (tj tsr-a ;), pa kad treba nešto da se petlja u njegovo ime on se treba proglasiti aktivnim (50h). sledeći problem je što poslednji startovani program (onaj koji trenutnto radi) alocira svu raspoloživu memoriju pa dos nema šta da dodeli na upotrebu tsr-u. prvo je treba malo osloboditi, a to oslobođeno snimiti u xms, ems, disk... onda sve radi. valjda ;). problem starovanja exe-a iz tsr-a i dalje postoji.. thanks za hint, nema veze što je stigao malo kasnije!
asembler.189 kriss,
Jel zna neko kako se iz asm-a pušta ton određene frekvencije i trajanja na spikeru?
asembler.190 janko, -> #189, kriss
> Jel zna neko kako se iz asm-a pušta ton određene > frekvencije i trajanja na spikeru? Ton generiše tajmer. Tajmeru se kaže frekvencija. Aktivira se ton, zatim se nekako meri vreme, pa se na kraju ugasi ton, kad to vreme istekne. Ima silnih sorsova na tu temu... Jedan vrlo ilustrativan je u nekoj SNIPPETS arhivici (sa C sorsovima), i mislim da je ima na Sezamu.
asembler.191 redakcija,
U direktorijumu IBMPC\MISC je sim515.zip, simulator za mikrokontrolere Intel 8031 (8051)i Siemens 80515 (80535). Autor programa je Nebojša Ćosić, cosa na Sezamu. Evo šta autor kaže o programu: Program ima sledece osobine: -'user friendly' korisnicki interfejs, kontekstno osetljivi help -simbolicko debagovanje -disasembler -simulacija svih hardverskih resursa mikrokontrolera -simulacija korak-po-korak, simulacija bez ulazenja u potprograme, simulacija 'u pozadini' -u svakom trenutku svi podaci na ekranu su azurni i mogu se editovati -snimanje trenutnog statusa simulatora radi kasnijeg nastavka rada na istom mestu gde je i prekinut -vrlo fleksibilno postavljanje prekidnih tacaka -maksimalna podrska radu sa misem -podrska razvoju programa u PLM-u ('mesani' prikaz PLM i asemblerskih linija) -prikaz istorije (vec izvrsenih instrukcija) -prikaz asemblerskih i PLM linija onako kako ih je korisnik otkucao -podrska samomodifikujucim programima Prva verzija programa zavrsena je u septembru 1993.g. a od onda je program na stalnom koriscenju za razvoj uredjaja baziranih na SAB 80535 mikrokontroleru. Verzija koja Vam je ponudjena na testiranje je unekoliko osiromasena. Najvaznije ogranicenje je da radi sa programima maksimalne duzine od 512 bajta. Isto ogranicenje vazi i za podatke. Osim ove funkcionalne zastite program nije na drugi nacin zasticen. ... Ovu verziju programa stavljam u javno vlasnistvo. Nadam se da ce se za nju naci mesto na SEZAM-u. U datoteci se nalazi ZIP fajl sa simulatorom, help fajlom, kratkim uputstvom, nekoliko programa za konverziju podataka i primerom koji je preuzet iz Siemens-ovog application note-a za koriscenje A/D konvertora.
asembler.192 dragisha,
conf reply asembler.188 -> problem starovanja exe-a iz tsr-a i dalje postoji.. U modulu koji ja koristim ima hiljadu nekih stvari koje se pamte. Kad se sve ispuni i kada swapuješ napolje program koji trenutno "smeta" možeš komforno da zoveš .EXE. (BTW, kako se na int21h nivou radi LOADHIGH? zna ko?) -> thanks za hint, nema veze što je stigao malo kasnije! Jako slabo sam online, pa zato:). Ako želiš, mogu da te mailujem tim kodom da vidiš šta su sve ovi smatrali za shodno da spase:). Naravno, ako do mog sljedećeš poziva ne završiš sve:). -> oslobođeno snimiti u xms, ems, disk... BTW, mislim da bi bilo vrlo smisleno da se forsira minimiziranje upotrebe EMS-a u novim programima:). Komplikovaniji kod radi sporije manje kvalitetan posao koji ionako ladno može da se završi sa XMS:). -- [Using Canada's best: Telix, SLMR, & Crown Royal]
asembler.193 kriss,
Pitanje: Hoću da jedan deo programa 'nafilujem' bezveze podacima ili, recimo, nulama jer će kasnije biti prepisan. Da li postoji elegantnije rešenje od ovog: ... jmp deo2 deo1: db 00 db 00 ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;) db 00 deo2: ... Eto, nemam literaturu :(
asembler.194 bojans,
Koliko je najviše memorije moguće osloboditi za program u Turbo Debugeru (u td386 varijanti). Meni nikako ne polazi za rukom da dobijem više od 490-500 K. Da li može i više? (Koristim verziju 2.0)
asembler.195 pedjak, -> #193, kriss
> Hoću da jedan deo programa 'nafilujem' bezveze podacima ili, recimo, > nulama jer će kasnije biti prepisan. Da li postoji elegantnije > rešenje od ovog: > jmp deo2 > deo1: > db 00 > db 00 Naravno da postoji :) kažeš recimo db 512 dup(0) i to je to :) Ako hoćeš da idu bezveze podaci onda ide ovako: db 512 dup(?) pedja
asembler.196 markom, -> #193, kriss
*** ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;) DB 512 DUP (0) Trebalo bi da radi, nisam probao :)
asembler.197 dvesic, -> #193, kriss
>> deo1: >> db 00 >> db 00 >> >> ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;) >> >> db 00 >> deo2: DEO1: DB 512 DUP (0) DEO2:
asembler.198 dvesic, -> #194, bojans
>> Koliko je najvise memorije moguce osloboditi za program u >> Turbo Debugeru (u td386 varijanti). Meni nikako ne polazi za >> rukom da dobijem vise od 490-500 K. Da li moze i vise? >> (Koristim verziju 2.0) Kako uopste instaliras Td386 ? Imas li sa njim problema ? Medi redovno posle minut - dva blokira (iako imam tdh3896.sys instaliran na cistoj masini)
asembler.199 mmitrovic, -> #193, kriss
Ů█▀█Ţ jmp deo2 Ů█▀█Ţ deo1: Ů█▀█Ţ db 00 Ů█▀█Ţ db 00 Ů█▀█Ţ Ů█▀█Ţ ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;) Ů█▀█Ţ Ů█▀█Ţ db 00 Ů█▀█Ţ deo2: Ů█▀█Ţ ... Za ponavljanje podataka koristi se direktiva DUP Syntax: <count> DUP (<expression> Š, <expression>Ć) Tvoj "nesvesni" program bi izgledao: deo1: db 512 DUP (0) deo2: ... Ako iskoristiš ? kao expression to polje neće biti inicijalizovano (ako ćeš ga kasnije sam popuniti). Daće manji OBJ kod ali ne možeš računati na to da polje bude 0 (ili bilo koji drugi broj). _mmix_
asembler.200 mmitrovic, -> #194, bojans
Ů█▀█Ţ Koliko je najviše memorije moguće osloboditi za program u Ů█▀█Ţ Turbo Debugeru (u td386 varijanti). Meni nikako ne polazi za Ů█▀█Ţ rukom da dobijem više od 490-500 K. Da li može i više? Ů█▀█Ţ (Koristim verziju 2.0) Kao prvo, verzija ne bi treblao da utiče mnogo na količinu memorije (a bogami i ne utiče), ja sam na mašini sa 1Mb extended memorije dobijao u TD386 (v2.0 i v3.0) da mi je prvi slobodni segment negde oko 0A00 što znači da me je slobodno za program nekih 600K. Pošto td386 smešta program u osnovnu memoriju, jedini razlog mogu da budu rezidentni programi i drajveri. Daklem, očisti CONFIG.SYS i AUTOEXEC.BAT, ili ako imaš DOS 6.0+ napravi multi-configuration u CONFIG.SYSu i napravi jednu stavku za TD386. _mmix_
asembler.201 jugoran,
Hi, eksluzivci! Da li ima zainteresovanih za skidanje zastite? Detalji na mail... Pozdrav, Goran.
asembler.202 todorp,
Subject: int13h Hi! Pisao sam neko programce koje lowlevel pise po disketi. Elem, po cilindru ima 15 sektora. E sad nisam siguran da li on upisuje prvo glava=0 cilinder(15 sektora) pa onda glava=1 isti cilinder, pa onda nulta glava sledeci cil. itd? Mislim trebalo bi da je tako, ali ono sto mi se dogadja govori drugacije ;( Pozdrav od Todora
asembler.203 mmitrovic, -> #202, todorp
Ů█▀█Ţ Pisao sam neko programce koje lowlevel pise po disketi. Elem, po Ů█▀█Ţ cilindru ima 15 sektora. E sad nisam siguran da li on upisuje prvo Ů█▀█Ţ glava=0 cilinder(15 sektora) pa onda glava=1 isti cilinder, pa onda Ů█▀█Ţ nulta glava sledeci cil. itd? Mislim trebalo bi da je tako, ali ono sto Ů█▀█Ţ mi se dogadja govori drugacije ;( TechRef kaze: 02H read sectors Input: DL = drive number (0=drive A...; 80H=hard disk 0; 81H=hard disk 1) DH = read/write head number CH = track (cylinder) number (0-n) ═╗ * CL = sector number (1-n) ═══════════╩══ See note below. * AL = sector count (no more than 1 cylinder's worth of sectors) ES:BX => caller's buffer address > 0:0078 => Diskette Parameter Table (for diskette operations) 0:0104 => Hard Disk Parameter Table (for hard disk operations) Output: Carry Flag=CY=1 if error occurred and disk error code in AH. ES:BX buffer contains data read from disk Note: Sector values are 6-bits and Cylinder values are 10-bits: 1 1 1 1 1 1 Í5┬4┬3┬2┬1┬0┬9┬8Ď7┬6┬5┬4┬3┬2┬1┬0Ě CX: ║c c c c c c c c C c S s s s s s║ Ë─┴─┴─┴─┴─┴─┴─┴─đ─┴─┴─┴─┴─┴─┴─┴─Ż ╚═╩═══ used as high bits of cylinder number 03H write sectors Input: (same as SubFn 02H) ES:BX => data to write to disk. Output: Carry Flag=CY=1 if error occurred and disk error code in AH. Dakle greška može da ti bude u linijama sa zvezdicama. Sector number je početni sektor (u tvom slučaju 1, pazi broj nije 0based) sector count je broj sektora za read/write (u tvom slučaju 15). Ako ovde nije greška onda je verovatno u pitanju linija sa >, pa se javi ponovo. BTW, da li si proveravao CF da vidiš da nije greška do diskete. _mmix_
asembler.204 kriss,
Pitanje: Da li uz pomoć Turbo-dibagera mogu da korak-po-korak protrčim kroz interapt? Recimo da sam preuzeo neki i sad bi da vidim da li je sve OK? Usput, da li mogu uopšte da protrčim kroz neki interapt?
asembler.205 mmitrovic, -> #204, kriss
Ů█▀█Ţ Pitanje: Da li uz pomoć Turbo-dibagera mogu da korak-po-korak protrčim Ů█▀█Ţ kroz interapt? Recimo da sam preuzeo neki i sad bi da vidim da li je Ů█▀█Ţ sve OK? Usput, da li mogu uopšte da protrčim kroz neki interapt? Postoje dva slučaja, kad debaguješ svoju rutinu i kad debaguješ već instaliranu. 1) Treba ti adresa tvoje rutine. Dobijaš je na dva načina, prvi ako si u EXE fajl uključio i Debug Info onda ti je adresa u stvari ime interrupt funkcije, a ako nema info onda moraš da stepuješ svoj program dok ne naiđeš na rutinu koja postavlja interrupt pa iz toga dedukuješ adresu. Tu adresu/ime funkcije uneseš u Goto dijalog (Ctrl-G) iz ASM prozorčića u TDu i on ti postavi asm prikaz na tu funkciju/adresu. 2) Uzmeš broj interapta (pr. 21h) i pomnožiš sa 4 (dobiješ 84h), sa TABovima pređeš u DUMP prozorčić i sa Goto odeš na 0:proizvod (0:84h). Onda iz Local Menu (Alt-F10) izabereš Follow pa Far Code. ASM prikaz će ti biti namešten na početak rutine. Ovaj sistem važi i za tvoje rutine ali radi tek kad se postavi int. vektor. Kad si na početku rutine postaviš breakpoint (F2) i svaki put kad se izvrši interrupt (bilo soft or hard) staće na početku rutine pa možeš da stepuješ. BIOS rutine mogu da se stepuju ali se breakpoint može postaviti samo ako je aktivan shadow ram. Ako se kurzor nalazi na INT instrukciji i hoćeš da uđeš u rutinu (F7 ne radi), iz Local Menija izaberi Follow. Odvešće te na početak rutine. Svi ovi sistemi ne rade za INT 1 i INT 3 (single step i breakpoint), pošto ih TD često menja pa će se ko zna kad zaustaviti izvršavanje. Neke zaštite od razbijanja se baziraju na tome.
asembler.206 janko, -> #205, mmitrovic
> Ů█▀█Ţ Pitanje: Da li uz pomoć Turbo-dibagera mogu da > korak-po-korak protrčim Ů█▀█Ţ kroz interapt? Recimo da sam > preuzeo neki i sad bi da vidim da li je > Postoje dva slučaja, kad debaguješ svoju rutinu i kad > debaguješ već instaliranu. Opisani metodi verovatno rade, ali su mnogo zaobilazni. Ulazak u interapt se postiže jednostavno sa Alt F7 umesto običnog F7 za singl step.
asembler.207 korvin,
Subject: problem sa ctrlalt Molio bih nekog masmovca da mi iskompajlira i ulinkuje ovde priloženi sors ctrlalt-a. Naime, ctralt mi se sudara sa VGAMAX-om pa sam prema uputstvu promenio pozivni na 06h (ctrl-lshift). To bi sada trebalo iskompajlirati a ja koristim tasm ... So, ako ima neka dobra duša ...
asembler.208 pedjak, -> #207, korvin
> sam prema uputstvu promenio pozivni na 06h (ctrl-lshift). To bi sada > trebalo iskompajlirati a ja koristim tasm ... So, ako ima neka dobra tasm je 100% masm kompatibilan.
asembler.209 mmitrovic, -> #206, janko
Ů█▀█Ţ Opisani metodi verovatno rade, ali su mnogo zaobilazni. Ali su i jedini kad se debaguju rutine koje se ne pozivaju iz programa sa INT instrukcijom. Ů█▀█Ţ Ulazak u interapt se postiže jednostavno sa Alt F7 umesto običnog F7 za Notified. ;)
asembler.210 korvin, -> #208, pedjak
Subject: Re: no can do >> > sam prema uputstvu promenio pozivni na 06h (ctrl-lshift). To bi >> sada > trebalo iskompajlirati a ja koristim tasm ... So, ako ima >> neka dobra >> tasm je 100% masm kompatibilan. Hm, pa nije baš 100% kompatibilan, makar po pitanju svičeva. U uputstvu za kompajliranje ctrlalt.asm stoji: masm ctrlalt.asm link ctrlalt exe2obj .... Kada ja pokušam adekvatno: tasm ctrlalt.asm, tasm mi javi tonu warninga da su korišćene rezervisane reči za simbole (npr. Enter). Kada mu bacim /ml onda opet javi warninge ali za druge reči (npr. cUt). Dobro, ta upozorenja me ne štrecaju koliko dve greške 'operand types do not match'. Kako prevazići ove probleme ?? Ako neko zna koje svičeve da mu uključim, biću mu veoma zahvalan.
asembler.211 kriss, -> #210, korvin
˙˙ Kada ja pokušam adekvatno: tasm ctrlalt.asm, tasm mi javi tonu ˙˙ warninga da su korišćene rezervisane reči za simbole (npr. ˙˙ Enter). Kada mu bacim /ml onda opet javi warninge ali za druge ˙˙ reči (npr. cUt). Dobro, ta upozorenja me ne štrecaju koliko ˙˙ dve greške 'operand types do not match'. Kako prevazići ove ˙˙ probleme ?? Ako neko zna koje svičeve da mu uključim, biću mu ˙˙ veoma zahvalan. Dobijaš sledeće poruke: *Warning* ctrlalt.asm(334) Reserved word used as symbol: ENTER *Warning* ctrlalt.asm(356) Reserved word used as symbol: ESC *Warning* ctrlalt.asm(625) Reserved word used as symbol: DISPLAY Ovde promeni nazive, recimo u enter1, esc1 i display1. Pa ponovo kompajliraj. Sad će ti prikazati redove gde su nedefinisani simboli esc, enter i display. I njih promeni u nova imena, i ovaj deo posla je gotov. **Error** ctrlalt.asm(954) Operand types do not match **Error** ctrlalt.asm(979) Operand types do not match Koliko sam video, tu se nalazi nešto kao mov al,cs:[...]. Promeni u mov al, byte ptr ..... │ └───────── Ako je u pitanju neki 16-bitni, umesto byte ptr napiši word ptr *Warning* ctrlalt.asm(1121) Reserved word used as symbol: END Promeni u end1 i isto kao i za prvi deo posla. Posle toga bi trebalo da proradi. Ako naletiš na još neki problem, napiši mi mail da rešimo na brzaka. :)
asembler.212 nbatocanin, -> #208, pedjak
> tasm je 100% masm kompatibilan. Nije, tj. to piše u dokumentaciji, ali nije tačno. Ja sam probao da prevedem neke složenije programe i nisam uspeo ni u jednom modu.
asembler.213 korvin, -> #211, kriss
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 ...