Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #58 da revista programar. Faz já o download aqui!

Menino

Duvida em assembly 8086

Mensagens Recomendadas

Menino    0
Menino

Desde já uma boa tarde e um bom feriado a todos.

A minha duvida é no seguinte código

.data
digito1 db 0
digito2 db 0
multi db 10h   ;multi = 10

mov bx,dx
mov ax,[bx+2]
mov digito2,ah
mov digito1,al
mov bh,digito1
mov bl,digito2
sub bh,30h
mul bh,multi				;ERRO quero multiplicar o bh por 10
sub bl,30h
add bh,bl

ao compilar este código está a dar-me erro na linha assinalada. O que estou a fazer mal?

Obrigado

Editado por Rui Carlos
Formatação do código.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
cenorasped    0
cenorasped

Tens razão já consegui solucionar, já agora alguém sabe como se faz conversão de hex para decimal?,obrigado

Também estou com o mesmo problema (conversão hex to dec)! Se alguém conseguisse ajudar!?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    274
KTachyon

Pegas nos dígitos hexadecimais e multiplicas cada um por 16^N, sendo N a posição do dígito, indexado a zero e a partir da direita (o menos significativo é o em que N = 0). Exemplo

1B4D3

3 x 16^0 = 3 x 1 = 3

D x 16^1 = 13 x 16 = 208

4 x 16^2 = 4 x 256 = 1024

B x 16^3 = 11 x 4096 = 45056

1 x 16^4 = 1 x 65536 = 65536

3 + 208 + 1024 + 45056 + 65536 = 111827

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
cenorasped    0
cenorasped

Pegas nos dígitos hexadecimais e multiplicas cada um por 16^N, sendo N a posição do dígito, indexado a zero e a partir da direita (o menos significativo é o em que N = 0). Exemplo

1B4D3

3 x 16^0 = 3 x 1 = 3

D x 16^1 = 13 x 16 = 208

4 x 16^2 = 4 x 256 = 1024

B x 16^3 = 11 x 4096 = 45056

1 x 16^4 = 1 x 65536 = 65536

3 + 208 + 1024 + 45056 + 65536 = 111827

antes de mais obrigado pela resposta!

Mas ainda assim me surge outro problema pela minha falta de conhecimento

como pego cada digito se tiver num registo por exemplo AX?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    312
Rui Carlos

Depende de como tiveres os valores armazenados em memória.

Um dígito hexadecimal são 4 bits, e se estiver armazenado em 4 bits, deves conseguir extraí-lo com operações de shift. Mas neste caso, não estou bem a ver o que seria a conversão para decimal.

Já se estiver armazenado com um caracter (8 bits), vais ter que andar com conversões entre caracteres e inteiros. Pegas num byte, convertes para um inteiro (entre 0 e 15), aplicas o algoritmo de conversão para decimal, e no final convertes o número decimal para caracteres (a divisão inteira deve dar jeito aqui).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    274
KTachyon

Se dividires sucessivamente por A (10), o resto da divisão é o dígito decimal. Depois somas ao valor do caracter 0 (zero) e obténs o caracter ASCII que corresponde a cada dígito.

1B4D3 / A = 2BAE, resto 7

2BAE / A = 45E, resto 2

45E / A = 6F, resto 8

6F / A = B, resto 1

B / A = 1, resto 1

1 / A = 0, resto 1

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.