asembler.104eagle,
-> #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.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,
-> #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.108vpudar,
-> #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.109eagle,
-> #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.110peca.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.111eagle,
-> #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.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,
-> #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.115eagle,
-> #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.116kriss,
Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__?
asembler.117dzakic,
-> #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.119bigbrada,
-> #116, kriss!##! Da li je __mov dx,offset trtmrt__ jednako __lea dx,trtmrt__?
That's the same thing :)
Brada.
asembler.121bole,
-> #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.122nikac,
-> #121, boleNI> 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,
-> #123, miroslavnNI> 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,
-> #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.127mstanic,
-> #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.128kriss,
-> #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.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,
-> #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.132niklaus,
-> #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.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,
-> #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.137nkbog,
-> #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.138kriss,
-> #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.139nkbog,
-> #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.140niklaus,
-> #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.zipasembler.141dzakic,
-> #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.142vpudar,
-> #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.143dragisha,
-> #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.144vpudar,
-> #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.145mazi,
Ajd sad jedno glupo pitanje :-)
kako da linkujem neki fajl zajedno za .EXE ili .COM u MASM 6.0 ?
Ivan.
asembler.146mjova,
-> #145, mazi> Ajd sad jedno glupo pitanje :-)
ni sam ne znaš kako je glupo ;). probaj ponovo.
asembler.147mazi,
-> #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.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,
-> #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.170eotek,
-> #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.171mazi,
-> #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.172dzakic,
-> #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.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,
-> #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.176djelovic,
-> #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.177bojans,
-> #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.178bojans,
-> #177, bojansBaš 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,
-> #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.180bojans,
-> #179, djelovicProbao 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,
-> #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.182dzakic,
-> #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.183ficus,
-> #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.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,
-> #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.187dragisha,
-> #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.188mjova,
-> #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.189kriss,
Jel zna neko kako se iz asm-a pušta ton određene frekvencije i
trajanja na spikeru?
asembler.190janko,
-> #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.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,
-> #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.196markom,
-> #193, kriss*** ... ( i tako dok neko ne padne u nesvest, recimo 512 linija ;)
DB 512 DUP (0)
Trebalo bi da radi, nisam probao :)
asembler.197dvesic,
-> #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.198dvesic,
-> #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.199mmitrovic,
-> #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.200mmitrovic,
-> #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.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,
-> #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.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,
-> #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.206janko,
-> #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.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,
-> #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.209mmitrovic,
-> #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.210korvin,
-> #208, pedjakSubject: 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,
-> #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.212nbatocanin,
-> #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.213korvin,
-> #211, krissSubject: 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 ...