pomoc z asembler 8086

Programovacie jazyky, rady, poradňa...
max18
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 jún 2009, 11:55

pomoc z asembler 8086

Príspevok od používateľa max18 »

caute potrebujem pomoct
potrebujem naprogramovat v aseblery 8086 program ktory retazec znakov vypíše reverzne tj zrkadlovo n napr. dnes je pekne ma vypisat: send ej enkep

mam zatal toto kto by mi vedel pomoct pls pomozte

Kód: Vybrať všetko

segment .data
msg1	db	"Zadaj retazec: ", 13, 10 
msg2	db	"Zadal si retazec: ", 13, 10
msg3	db	"Reverzny vypis: ", 13, 10
msg4	db	13,10

segment .bss
buff1	resb	100
buff2 	resb	100

segment .text
	global _asm_main
_asm_main:
	enter 0,0
	pusha

	mov 	EAX,4		; syscall (write - Zadaj retazec:)
	mov 	EBX,1
	mov 	ECX,msg1
	mov	EDX,msg2-msg1
	int	80h

	mov 	EAX,3		; syscall (read)
	mov	EBX,0
	mov	ECX,buff1
	mov	EDX,100
	int	80h	
	mov	ESI,EAX

	mov 	EAX,4		; syscall (write - Zadal si retazec:)
	mov	EBX,1
	mov	ECX,msg2
	mov	EDX,msg3-msg2
	int	80h

	mov 	EAX,4		; syscall (write - zadany retazec)
	mov 	EBX,1
	mov 	ECX,buff1
	mov	EDX,ESI
	int 	80h

; --- doplnit reverzny vypis retazca ---
	
	mov	EAX,4
	mov	EBX,1
	mov	ECX,msg4
	mov	EDX,2
	int	80h

	popa			 ; program termination
	mov	EAX, 0
	leave
	ret
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: pomoc z asembler 8086

Príspevok od používateľa pcsiete »

tam kde mas citanie musis skontrolovat ci sa nahodou nevratila zla hodnota (<0). Potom si podrz EAX (pocet nacitanych bajtov) a potom to bud vypises odzadu znako po znaku, alebo obratis v pamati a ides znova. Videl som ze tam mas dva buffery, takze na prehodenie v pamati (aj ked nie 100% elegantne) mozes pouzit:

Kód: Vybrať všetko

cld
mov esi, buffer1
add esi, eax
mov edi, buffer2
.loop: cmp esi, buffer1
jz .end
dec esi
mov dl, byte [esi]
mov byte [edi], dl
inc edi
jmp .loop
.end:
Hej hej hej, pockaj! Ty nevypisujes retazec zrkadlovo, ty vypisujes jednotlive slova zrkadlovo. Na to si to musis vsetko rozdelit.
max18
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 jún 2009, 11:55

Re: pomoc z asembler 8086

Príspevok od používateľa max18 »

dik
a mozes mi napisat ako to mam rozdelit aby mi nevypisovalo cely retazec zrkadlovo ale len slova
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: pomoc z asembler 8086

Príspevok od používateľa pcsiete »

Tak nepis do bufferu nic, pokym nenarazis na medzeru. Od miesta kde sa nachadza medzera ustupuj a prepisuj to do druheho buffera. Po kompletnom ustupeni tam zapis este medzeru (aby sa zachovali) a zacni patranie po dlasej medzere hned po predoslej najdenej medzere. Nesmies zabudnut ze EAX ti urcuje pocet nacitanych bajtov, ale aby si nemusel robit vela porovnavaciek a nemusel drzat EAX plne, daj si na koniec nacitanych dat nulu a uz len porovnavaj.
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: pomoc z asembler 8086

Príspevok od používateľa Gregi »

Len taka malickost. Pises, ze je to kod pre 8086 a pri tom v kode pouzivas instrukcie "eax, ebx ...", ktore su 32 bitove. Tz minimalne 80386. Ako to teda v skutocnosti je? Aku instrukcnu sadu smies pouzit? 086, .286, .386 ....
To int 80h vidim dobre? To je pre Linux? Nechces to pre DOS int 21h?
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: pomoc z asembler 8086

Príspevok od používateľa pcsiete »

Myli 8086 a x86, ale to nevadi. Vsak v kode vidime, co chce.
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: pomoc z asembler 8086

Príspevok od používateľa Gregi »

pcsiete napísal:Myli 8086 a x86, ale to nevadi. Vsak v kode vidime, co chce.
A co tam robi pri retazci 13, 10 (co je DOS) a pritom pouzije prerusenie 80h? Netusim, ci je to funkcne riesenie, ale mne sa zda ze pletie jablka z hruskami.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: pomoc z asembler 8086

Príspevok od používateľa pcsiete »

Gregi napísal: A co tam robi pri retazci 13, 10 (co je DOS) a pritom pouzije prerusenie 80h? Netusim, ci je to funkcne riesenie, ale mne sa zda ze pletie jablka z hruskami.
Pouzitie '\r\n' namiesto cisto '\n' je normalne platne riesenie pre unixy, su iba vynimky programov a rezimov v Ccku ktore s tym maju problem.
Napísať odpoveď