Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

myself*

Programa em Assembly

Recommended Posts

segment data

cadeia dw 'abcdefghijlmnopqrst0'

caractere db 'e'

contador db 0

i db 0

 

 

segment code

 

..start:

mov ax, data

mov ds, ax

 

mov ax, [caractere]

mov bx, [cadeia]

mov cx,

mov dx, [contador]

 

ciclo: cmp bl, 0

je fim

 

cmp bl, al

je inc

jmp ninc

inc: call incrementa

 

ninc: cmp bh, 0

je fim

 

cmp bh, al

je inc2

jmp ninc2

inc2: call incrementa

 

ninc2: add cx, 2

mov bx, [cadeia+cx]

jmp ciclo

 

 

incrementa

add dx, 1

ret

 

 

fim: mov [contador], dx

 

 

mov ah, 4ch

int 21h

 

 

Tenho k descodificar este programa, alguem k me ajude. Ideias?

Compartilhar este post


Link para o post
Compartilhar em outros sites

JN: um jump tipo uma condiçao se for negativo fais o jump se nao for continua

MOV: move o que ta em um registrador para outro ou de um registrador para um endereço de memoria

JMP: é o jump para o endereço de memoria ou para o apelido que você deu diferente do JN que tem condição pro jump

LDA: le o que ta na no endereço especificado leva pro acumulador se eu nao me engano

ADD: soma oque ta o acumulador com o endereço especificado

SUB: subtrai o que ta no acumulador com o endereço especifico do registrador

STA: grava o que ta no acumulado pra um resgistrador

 

esses outros ae eu nao sei hehehe....

caso nao soubeçe dessas (nimo.. nao lembro o nome) funções ja deu pra da uma ajudadinha light hehe

lembrando que a linguagen assembly fais as operaçoes nos registradores.. busca da memoria ou de um outro registrador

 

espero ter ajudado!! =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

segment data # abre a seção de dados (variaveis globais)
cadeia dw 'abcdefghijlmnopqrst0'  # cadeia é uma word (dw = define word)
caractere db 'e' # db= define byte
contador db 0
i db 0


segment code

..start:
mov ax, data
mov ds, ax

mov ax, [caractere] #move o endereco de memoria de caractere p/ registrador ax
mov bx, [cadeia]
mov cx, [i]
mov dx, [contador]

ciclo: cmp bl, 0
je fim

cmp bl, al
je inc
jmp ninc
inc: call incrementa
# se o byte menos significativo de bx == byte menos significativo de ax, a funcao incrementa é chamada

ninc: cmp bh, 0 # caso bl != al ou apos o termino de incrementa, compara-se o byte mais alto de bx com 0
je fim # desvia para fim se forem iguais

cmp bh, al
je inc2
jmp ninc2
inc2: call incrementa

ninc2: add cx, 2
mov bx, [cadeia+cx]
jmp ciclo


incrementa
add dx, 1
ret # retorna para o endereco que chamou


fim: mov [contador], dx # move o conteudo do registrador dx p/ contador (espaco em memoria)


# interrupcao de final de programa
mov ah, 4ch
int 21h

 

 

PS: O Assembly do MIPS é melhor p/ se lembrar das instruções...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.