myself* 0 Denunciar post Postado Dezembro 1, 2007 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
paulloal 0 Denunciar post Postado Abril 20, 2008 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
_Isis_ 202 Denunciar post Postado Abril 21, 2008 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