Šta je novo?

Par lekcija iz asemblera...

jox

Čuven
Učlanjen(a)
07.01.2003
Poruke
2,103
Poena
680
Naime, u petak imam ispit (ETF)... i na njemu pored ostalog i jedan zad. iz asemblera...
Imam par pitanja... a verovatno cu ih imatyi josh vishe kad udjem u materiju.....
Evo jednog zadatka:
Kod:
; izost.asm - Izostavljanje odredjenih elemenata niza jednorecnih brojeva.

	extrn	init:near, exit:near, wchrba:near, rdecwa:near,
	extrn	rdecw:near, rnl:near, wdecwa:near, wnl:near

code	segment	para public 'code' <<------ Shta ovo znachi???
	assume	cs:code, ds:code <<------ i ovo???

a	dw	30 dup (?)   <<<<----- ovo dup je pretpostavljam od duplicate??
n	dw	?    <<<<----- shta znachi ovaj ?
k	dw	?
por1	db	'A? '
por2	db	'k? '
por3	db	'A= '

izost:	call	init
ponovo:	mov	bx, offset por1  <<<<----- offset sluzi????
	mov	cl, 3
	call	wchrba
	mov	bx, offset a
	mov	cx, 30
	call	rdecwa
	jz	kraj
........

Za sada ovoliko... imacu josh pitanja... sigurno... thanx
 
Ako me secanje ne vara (davno beshe :) ), kada definises varijablu, sa druge strane napises inicijalnu vrednost. U ovom slucaju, kada se ne zna inicijalna vrednost za n ili k varijable, mozes da stavis "?". Ovo 'dup' znaci da si definisao array, ovde konkretno neinicijalizovani array duzine 30 wordova.
Sto se tice offseta, "mov bx, offset por1" znaci 'smesti adresu varijable por1 u registar BX.

Ako sam bas toliko zardjao, neka me neko ispravi...


Edit: vidim da sam promasio pocetno pitanje; svaki program u assembleru bi trebao da ima data segment, code segment, stack segment - pre nego sto pocnes da pises bilo sta u assembleru, treba da proucis strukturu programa - da znas sta mora da ide u svakom programu - bas kao sto svaki C program mora da ima main() funkciju. Ovde si definisao segment koji se zove 'code', koji je public i kome nije explicitno zadat memorijski model (tiny, small, large...). Sa assume direktivom si pokazao samo da se adresa data segmenta nalazi u ds registru, code segmenta u cs...
 
Poslednja izmena:
Kod:
code	segment	para public 'code' <<------ Shta ovo znachi???

Početak code segmenta.

Kod:
assume	cs:code, ds:code <<------ i ovo???

Dodeljuje vrednost cs (code sgment) i ds (data segment) registrima. Ovde i jedan i drugi pokazuju na isti segment (code), ali ako sve podatke držiš u drugom (data) segmentu, onda bi pisalo ovako:
Kod:
assume cs:code, ds:data


Kod:
ponovo:	mov	bx, offset por1  <<<<----- offset sluzi????
	mov	cl, 3
	call	wchrba

U BX registar se stavlja offset adresa od por1. Posle se poziva 'wchrba' u kome se ispisuje poruka (u BX već stoji adresa i samo se ispišu svi karakteri od te adrese pa na dalje, dok se ne naiđe na 0);
 
Poslednja izmena:
nashao... tj. imao, a nisam ni znao...
Nego, koji je mehanizam kojim Potprogram ( f-ja ) vraca vrednost???
 
jox je napisao(la):
nashao... tj. imao, a nisam ni znao...
Nego, koji je mehanizam kojim Potprogram ( f-ja ) vraca vrednost???

Smesti je u neki od registara. Ili smesti njenu adresu u neki registar.
 
zeleni_zub je napisao(la):
Kod:
assume	cs:code, ds:code <<------ i ovo???

Dodeljuje vrednost cs (code sgment) i ds (data segment) registrima. Ovde i jedan i drugi pokazuju na isti segment (code), ali ako sve podatke držiš u drugom (data) segmentu, onda bi pisalo ovako:
Kod:
assume cs:code, ds:data

Nije bas tacno. Za dodeljivanje vrednosti registru moras imati sledecu konstrukciju:

mox ax,data
mov ds,ax

ASSUME direktiva zna da zbuni (i mene je!). Evo objasnjenja:

Using the ASSUME directive to tell the assembler which segment to associate with a segment register is not the same as telling the processor. The ASSUME directive affects only assembly-time assumptions. You may need to use instructions to change run-time conditions. Initializing segment registers at run time is discussed in “Informing the Assembler About Segment Values,” Chapter 3.

Lepo objasnjenje postoji na:

http://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/

Chapter 2 i Chapter 3 pod MASM Programmer's Guide
 
Poslednja izmena:
Vrh Dno