problem ze zrozumieniem zadania assemb

0

witam, mam kawałek programu i potrzebuję podpowiedzi jak go zmodyfikować

bits 16
cpu 386

section .text
	org 100h
push bp
mov bp,sp 
xor cx,cx 
xor dx,dx 
xor bx,bx 
start:
mov ah,1 
int 21h 
movzx ax,al 
push ax 
add cx,1 
add bx,-2 
call porownaj 
cmp al, 13 		
jne start 
mov di,bx 
call wypisz
jmp start 

porownaj:
cmp al,27 
je koniec 
ret

wypisz:
mov ah,2 
mov dx, [bp+di] 
int 21h 
add di,2 
sub cx,1 
cmp cx,0 
je end 
jmp wypisz 
end: 
mov dx,10 
int 21h 
ret 

koniec:
	mov bp, [bp-2]
	mov	ax, 4C00h
	int	21h

konkretnie chciałbym znaki wypisywać w tej samej kolejności jak zostały wrzucone na stos
oraz wynik wyświetlać każdy znak w nowej linii wraz z kodem dec.
prosiłbym o podpowiedź jak się do tego zabrać bo nic nie przychodzi mi do głowy... nie wiem jak zmodyfikować wypisz: powiązaną z pętlą odliczania na rejestrze cx...

0

Teraz iterujesz sie od bp+di do bp-0 a powinienes od bp-0 do bp+di

0

ok.. prawie.. ale na koncu wyswietla sie dodatkowo kod entera jak sie go pozbyc?

bits 16
cpu 386

section .text
	org 100h

push bp
mov bp,sp
xor cx,cx
xor dx,dx
xor bx,bx
start:
mov ah,1
int 21h
movzx ax,al
push ax
add cx,1
	call porownaj
	cmp al, 13
jne start
mov di,-2
jmp wypisz
	

	
porownaj:
cmp al,27
je koniec
ret

wypisz:
mov ah,2
mov dx, [bp+di]
int 21h
call digitization
mov dl,10 ;znak enter
int 21h
add di,-2
loop wypisz
add di,2
add bp,di
jmp start

digitization:
xor bx,bx
mov bx,cx
mov ax,dx

push bp
	mov si,10
	xor dx,dx
	xor cx,cx
	
	loop1:
		div si ;DX:AX/SI => AX, DX:AX%SI => DX
		add cx,1
		add dx,48
		push dx
		xor dx,dx
		;add di,2
		cmp ax,0
		jnz loop1
	loop2:
		mov ah,2
		pop dx
		int 21h
		loop loop2
		
		mov cx,bx
	pop bp
	ret

koniec:
	mov	ax, 4C00h
	int	21h
0

na koncu czego

Jesli chodzi o caly output to przed wypisaniem calosci wystarczy pozbyc sie ostatniego znaku (dodac 2 do stosu i wszystkich rejestrow z tym zwiazanych)

0

a gdybym spróbował gdzieś zmniejszyć cx o 1 i wtedy za ostatnim razem nie będzie wypisywał znaku... jak to zaimplementować?

0

jak to zaimplementowac

Zmniejszyc cx o 1

0 użytkowników online, w tym zalogowanych: 0, gości: 0