• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

DeFigueiredo

Programa em Assembly

3 mensagens neste tópico

Boas malta, é o seguinte, foi-me proposto um programa, para treino, que é o seguinte, um programa em assembly 8086 que lê uma string definida em memória, inicializada com um dado texto. Dessa string pretende-se então fazer a contagem dos caracteres (ex: quantos "a/A" aparecem, quantos "b/B", etc), devendo para tal ser actualizado um array de 26 posiçoes (número de caracteres do alfabeto, considerando indistintas as maiusculas das minusculas), também definido em memória.

O que tenho é....

NUL EQU 0

org 100h

     jmp start 

text DB "The course of true love never did run smooth", NUL

count DB 26 DUP(0)   ;contagem de caracteres

start: 
     mov bx, OFFSET text

ciclo:
     mov al, [bx]
     cmp al, NUL
     je fim
     sub al, 97
     xor ah, ah
     mov si, ax
     add count [si], 1
     inc bx
     jmp ciclo

fim:
     ret 

(não distingue maiusculas de minusculas, nem testa espaços/pontuações), é o que não estou a conseguir fazer. :S

Se me puderem dar uma ajuda ... Era otimo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu pensei o seguinte,

depois da instrução "je fim", fazer:

    cmp al, 'A'
    jl start
    cmp al 'Z'
    jle letra_maiuscula

    cmp al, 'a'
    jl start
    cmp al 'z'
    jle letra_minuscula

    jmp start

letra_minuscula:
    sub al, 97
    jmp ciclo

letra_maiuscula:
    sub al, 65
    jmp ciclo

....

Que me podem dizer ??? :S:S

Tenho alguma urgencia em resolver isto....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao tenho a certeza porque fiz isto à pressa sem experimentar, mas penso que assim faz o que queres... Experimenta para ver se dá...

Cumps


org 100h

     jmp start

     text DB "The course of true love never did run smooth", 0
     count db 0

start:
     mov bx, OFFSET text
     xor bx, bx
     xor ax, ax

ciclo:
     mov al, text[bx]
     cmp al, 'z'
     jle min
     cmp al, 0
     jne ciclo
     jmp fim
min:
     cmp al, 'a'
     jl mai
     inc count
     jmp ciclo

mai:
     cmp al, 'Z'
     jg ciclo
     cmp al, 'A'
     jl ciclo
     inc count
     jmp ciclo

fim:
     ret

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora