[AJUDA] assembley 8086

Nody

Banido
na mais pura das verdades amanha tenho que entregar uma ficha sobre assembley 8086 e não sei porque ponta lhe ei de pegar :lol:

não gosto de colocar aqui perguntas sobre exericios concretos mas se alguem me poder ajudar....

1- Diga se as seguintes intruções sao validas ou nao em assembler 8086, justificando.

a) MOV BX,DH
b) MVI BL,56H
c) SUB DX,1234H
d) JNAE LABEL

a minima ajuda é-me muito util :)

cumps
 
Vê lá se este site te ajuda....

http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_instruction_set.html

Quem googla sempre alcança, eu conheço é o 8085, mas o 8086 já é um pouco diferente.
Olhando mt rápido para o site que disse, a opção a) é válida de certeza, e talvez a d) também, as outras não me parece.
É só o que posso ajudar, sem prometer que tudo o que disse esteja certo, pois como disse eu só trabalhei com o 8085 e já foi ha alguns anos.

Cumprimentos.
 
na mais pura das verdades amanha tenho que entregar uma ficha sobre assembley 8086 e não sei porque ponta lhe ei de pegar :lol:

não gosto de colocar aqui perguntas sobre exericios concretos mas se alguem me poder ajudar....

1- Diga se as seguintes intruções sao validas ou nao em assembler 8086, justificando.

a) MOV BX,DH
b) MVI BL,56H
c) SUB DX,1234H
d) JNAE LABEL

a minima ajuda é-me muito util :)

cumps



A b e a d tenho duvidas, mas tb ja la vao tantos anos
 
desde ja obrigado em relação a essa pergunta...

lanço "+ uma para a mesa" :P

5- Elabore um programa que receba um valor em BX e calcule a soma dos quadrados de todos os numeros abaixo desse.
 
Precisas de um acumulador para guardar o resultado.
Lês o valor introduzido para BX.
Colocas um registo com o valor 0.
Crias um ciclo em que, enquanto não atingires o valor de BX, vais fazendo a multiplicação do número por si mesmo, e depois incrementas.
Fazes isto até chegar a BX.

Algo do género:

Código:
.main

push bx
push registo_auxiliar
push acum (acumulador)
colocar o valor introduzido em bx
colocar 0 no registo_auxiliar
teste se bx==registo_auxiliar (faz um sub bx registo_auxiliar)
jne .ciclo (jump if not equal, ou seja, se forem diferentes, salta para o ciclo)
halt (terminou)

.ciclo
call quad (chama a função quad)
inc registo_auxiliar (incrementa)

.quad
definição da função que calcula o quadrado e guarda o resultado no acum
É mais ou menos isto, tenta perceber o raciocínio.
 
i owe you one!

Precisas de um acumulador para guardar o resultado.
Lês o valor introduzido para BX.
Colocas um registo com o valor 0.
Crias um ciclo em que, enquanto não atingires o valor de BX, vais fazendo a multiplicação do número por si mesmo, e depois incrementas.
Fazes isto até chegar a BX.

Algo do género:

Código:
.main
 
push bx
push registo_auxiliar
push acum (acumulador)
colocar o valor introduzido em bx
colocar 0 no registo_auxiliar
teste se bx==registo_auxiliar (faz um sub bx registo_auxiliar)
jne .ciclo (jump if not equal, ou seja, se forem diferentes, salta para o ciclo)
halt (terminou)
 
.ciclo
call quad (chama a função quad)
inc registo_auxiliar (incrementa)
 
.quad
definição da função que calcula o quadrado e guarda o resultado no acum
É mais ou menos isto, tenta perceber o raciocínio.

MOV CX, BX
MOV BX, 0001H
XPTO: CMP BX, CX
JE FIM
SUB CX, BX
MOV AX, CX
MUL CX
MOV DX, AX
JMP XPTO

isto? :P
 
Última edição pelo moderador:
A notação que pouco percebo é GAS-GNU, contudo acho que o MUL está mal.

Segundo o site que postaram acima:
Código:
 Example:

MOV AL, 200   ; AL = 0C8h # ISTO E UM BYTE
MOV BL, 4 # ISTO TAMBEM E UM BYTE
MUL BL        ; AX = 0320h (800) # GUARDA AX(WORD) = AL(BYTE) * BL (BYTE)
RET

O resultado que fica em AX, é o produto do AL * registo_auxilar(no caso o BL)
Ou seja, só podes multiplicar bytes, SE QUISERES GUARDAR O RESULTADO NUMA WORD,e do que me lembro, AX, BX, CX e DX são words certo?
Logo, isto:
Código:
MUL CX
Estará errado.

Conforme disse, eu já não me lembro muito bem, volto a referir que a notação que dei foi GAS-GNU para o IA-32.
Espero não induzir a erro. Cumps
 
Última edição:
Back
Topo