1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[AJUDA] assembley 8086

Discussão em 'Programação' iniciada por Nody, 18 de Fevereiro de 2008. (Respostas: 9; Visualizações: 1401)

  1. Nody

    Nody Power Member

    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
     
  2. Baderous

    Baderous Banido

    Verifica se essas instruções fazem parte do instruction set do 8086 e se seguem o formato definido.
     
  3. Riky

    Riky Power Member

    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.
     
  4. LnxSlck

    LnxSlck Power Member



    A b e a d tenho duvidas, mas tb ja la vao tantos anos
     
  5. Nody

    Nody Power Member

    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.
     
  6. Baderous

    Baderous Banido

    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.
     
  7. Nody

    Nody Power Member

    i owe you one!

    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: 20 de Fevereiro de 2008
  8. Baderous

    Baderous Banido

    Deve ser parecido com isso, eu não sei 8086. ^^
     
  9. MadOnion

    MadOnion Folding Member

    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: 20 de Fevereiro de 2008
  10. Nody

    Nody Power Member

    obrigado a todos :)
     

Partilhar esta Página