[ irulan @ 04.08.2003. 09:41 ] @
Evo jednog vrlo jednostavnog programa, koji naravno ne radi:



; 8086 GLAVNI PROGRAM
; OPIS: Program racuna parametre sistema za labaratorijsko uzgajanje biljaka
; za zadati dan u godini



DATA SEGMENT WORD PUBLIC
P0 DB 'Program koji racuna parametre sistema za labaratorijsko',10,13,'uzgajanje biljaka za zadati dan u godini',10,13,0
DATA ENDS

STACK_SEG SEGMENT STACK
DW 16DUP(0)
TOP_STACK LABEL WORD
STACK_SEG ENDS




CODE SEGMENT WORD PUBLIC
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK_SEG
START: MOV AX, DATA ; inicijalizacija segmenta sa podacima
MOV DS, AX
MOV ES,AX
MOV AX, STACK_SEG ; inicijalizacija steka
MOV SS, AX
MOV SP, OFFSET TOP_STACK ; inicijalizacija SP


MOV BX, OFFSET P0 ; ispis uvodne poruke
CALL prikazi






prikazi PROC
PUSH AX
PUSH DX
ponovi: MOV DL,[BX]
AND DL,DL
JZ povratak
INC BX
MOV AH,2
INT 21h
JMP ponovi
POP DX
POP AX
povratak: RET
prikazi ENDP


CODE ENDS
END START


Zapravo, i pored datog opisa, ovaj programcic ovde bi zapravo trebalo za pocetak samo da ispise uvodnuu poruku i kada pozovem nekakav Tasm.exe koji imam on mi javi sledecu gresku:
**Fatal** Command line:Can't locate file: Parametri2.asm
(Parametri2 je ime tog file u kome je kod, jel':). Elem ja stvarno ne mogu da vidim gresku, znam sigurno da je neka glupost, ali jednostavno ne vidim. Jel' moze neko da baci pogled i ukaze mi na taj tanani detalj koji mi je promakao.
Masm32 opet javlja potpuno drugu gresku: error A2004: symbol type conflict
za deo koda gde pokusavam da inicijalizujem bilo koji od segmentih registara?
Jel zna neko o cemu se radi?

Pozdrav i ogromna zahvalnost spasitelju!
[ irulan @ 04.08.2003. 11:18 ] @
U vezi sa svojim pitanjem postavila bih jos jedno:
skapirala sam da je problem u asembliranju gornjeg file-a bio u
njegovom imenu koje je ocigledno bilo predugacko, ja sam potpuni
tutumrak za DOS (ako je to do DOS-a) pa se nadam da se niko nece
skameniti sto mi je trebalo toliko da isto ukapiram. Elem to i hocu da
pitam, do cega je bio problem, kada sam lupajuci glavu sta bi mogla da
bude greska, pokusala da skratim ime na Parame.asm sve je bilo ok, jel
ta ogranicena duzina imena nesto sto namece DOS ili Tasm? Koliko je
to uostalom, 7 karaktera?
Jel' moze neko da mi objasni sta je flat memory model, so obzirom da
sam ceprkajuci po ovom forumu skapirala da odgovor na drugo svoje
pitanje iz prethodnog posta ima veze sa istim?
[ Sundance @ 04.08.2003. 13:14 ] @
Citat:
irulan:
...Koliko je
to uostalom, 7 karaktera?


8.3 DOS filename

Citat:
irulan:
Jel' moze neko da mi objasni sta je flat memory model,


Zamisli...da ne trebas koristiti segementne registre...zamisli da svi registri povecaju duljinu na 32 bita i da cjelokupnu memoriju mozes adresirati sa 2^32=4GB razlicitih offseta...zamisli da vise nema DOS interrupta, vec umjesto njih donekle razumljivih API fja, a da real-mode kao takav vise ne postoji. Svaki proces ima svoj vlastiti mali sugavi adresni prostor i, sto se njega tice, drugi procesi su samo sjenke kojima ne moze nauditi niti ih se rijesiti. welcome to win32asm!
[ Mikky @ 05.08.2003. 00:39 ] @
Znaci u DOS-u fajl moze da ima maximalno 7 slova u imenu i 3 u ekstenziji.
A za symbol type conflict gresku ne znam sta je tacno, moras da naucis da tumacis greske koje ti daje kompajler ili asembler. Takodje cinimi se da ceprkanje sa segmentnim registrima nije uvek dozvoljena ili bar ne sa svim... mada ne znam tacno to je DOS 16-bitna arhitektura koja je davno napustena i ne preporucujem ti da dublje zalazis u to vec da predjes na nesto novije 32bitno.
[ funky @ 06.08.2003. 02:45 ] @
Nije 7+3, vec 8+3, kako je vec napisano...
Nego, ovako na prelet, vidim samo jednu (doduse veliku) gresku
Dakle, kada dodjes do kraja stringa skaces na povratak, koji se nalazi na pogresnom mestu, ovako bi to trebalo da izgleda:
prikazi PROC
PUSH AX
PUSH DX
ponovi: MOV DL,[BX]
AND DL,DL
JZ povratak
INC BX
MOV AH,2
INT 21h
JMP ponovi
povratak:POP DX ; znaci labela "povratak" ovde, a ne na ret
POP AX
RET
prikazi ENDP

Mozda bi trebalo da razmislis o koristenju dos-service writestring (cini mi se 9), umesto, jelda, writechar... osim ako vec nemas svoje razloge.
[ irulan @ 06.08.2003. 10:25 ] @

Hvala svima koji su odvojili vreme da procitaju moj post i
odgovore!!! Funky, uocila sam gresku i u medjuvremenu sam "otkrila"
i int 21,9 print string:). Ali da vas pitam jos nesto: da li ima
neko asemblerski program za generisanje pseudo-slucajnog broja
izmedju -1 i 1, ili je mozda video kako se to radi? Kako uopste da
radim sa realnim brojevima u asembleru? Kako napr. takav jedan
realan broj izmedju -1 i 1 da pomnozim sa nekim celim brojem?
[ funky @ 08.08.2003. 01:42 ] @
Najbolje bi bilo da nabavis neki ebook (ili jos bolje pravu knjigu) koja pored osnovnog x86, obradjuje i instrukcijski set numerickog koprocesora x87 - to je najbolji nacin za realizaciju operacija sa realnim brojevima... Mislim da bi "The Art Of Assembly Language" trebalo da pokrije ovu temu.
Sto se generatora pseudo slucajnih brojeva tice, verujem da net vrvi od njih, tako da ni to ne bi trebalo da predstavlja neki problem za, recimo, google.