problem ze zrozumieniem zadania assemb

Odpowiedz Nowy wątek
2019-06-07 18:28
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...

edytowany 1x, ostatnio: Shalom, 2019-06-07 20:23

Pozostało 580 znaków

2019-06-07 18:58
0

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


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 2x, ostatnio: stivens, 2019-06-07 19:00

Pozostało 580 znaków

2019-06-07 19:01
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
edytowany 1x, ostatnio: Shalom, 2019-06-07 20:23
Na koncu czego? - stivens 2019-06-07 19:02

Pozostało 580 znaków

2019-06-07 19:04
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)


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

2019-06-07 19:11
0

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

Pozostało 580 znaków

2019-06-07 19:15
0

jak to zaimplementowac

Zmniejszyc cx o 1


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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