Assembly 8086

Mostrando apenas artigos deste assunto.

Verifica se DX é primo(Assembly 8086)

publicado em 13 Apr 2010 22:02 por Munif Gebara Junior

...
    mov cx,dx
    mov ax,dx
    dec cx   
    cmp ax,2
    je PRIMO
    
    
VOLTA2:
    push ax
    mov dx,0
    div cx  ; divide ax por cx e o resto vai para dx
    cmp dx,0
    je NAOPRIMO
    pop ax
    dec cx
    cmp cx,2
    jne VOLTA2  
PRIMO:
    lea dx,eprimo
    mov ah,09h
    int 21h
    jmp FIM  
NAOPRIMO:
    lea dx,nprimo
    mov ah,09h
    int 21h          
FIM:
    mov ah,1
    int 21h
    mov ax,4c00h
    int 21h

primo.asm (Verifica se o número digitado pelo usuário é primo) tamanho:1169 bytes Upload em 13/04/2010 22:04

Tabuada(Assembly 8086)

publicado em 09 Apr 2010 21:42 por Munif Gebara Junior

Programa em assembly para mostrar a tabuada.

volta:
    push ax
    push bx
    call ESCREVENUMERO
    pop ax
    push ax
    call ESCREVENUMERO
    pop bx
    pop ax
    push ax
    mul bx
    push bx
    call ESCREVENUMERO
    call PULALINHA
    pop bx
    pop ax
    inc bx   
    cmp bx,10
    jle volta

Será que é possível diminuir o número de PUSHs e POPs ?

listaII4.asm (Arquivo do Artigo Tabuada) tamanho:985 bytes Upload em 09/04/2010 21:43

Exemplo de Prova(Assembly 8086)

publicado em 05 Mar 2010 21:35 por Munif Gebara Junior

1.      A linguagem Assembly possui estruturas que são chamadas de registradores, o que são e onde são armazenadas?(valor 2,0)

2.      O endereçamento dos microprocessadores da família 8086 é segmentado. Assim sendo, complete a tabela abaixo: (valor 2,0)

 

Endereço

Segmento

Deslocamento

A

16005

1000

 

B

19754

 

10

C

 

7715

16

D

10000

 

 

3.      O programa abaixo utiliza a linguagem Assembly 8086. Explique seu funcionamento. (valor 2,0)

.model small

.stack

.data

resultado db "00000 $"

.code

main proc

mov ax, seg resultado

mov ds,ax

mov ax,0

mov cx,150

PARTE:add ax,3

push cx

push ax

call ROTINA

PULA: pop ax

pop cx

loop PARTE

mov ax,4c00h

int 21h

main endp

ROTINA proc

mov cx,5

lea si,resultado+4

VOLTA3:

mov dx,0

mov bx,10

div bx

add dl,48

mov [si],dl

dec si

loop VOLTA3

mov ah,09h

lea dx,resultado

int 21h

ret

ROTINA endp

end main

 

4.      Escreva um programa em Assembly 8086 que mostre a mensagem ?PROVA FÁCIL? na tela. (valor 2,0)

5.      Escreva mais um programa em Assembly 8086 que receba um caractere do usuário e mostre a mensagem NÚMERO, MAIÚSCULA ou MINÚSCULA de acordo com o código ASCII do caractere digitado. Se o código ASCII for menor do que 60 é número, se for menor do que 96 é maiúsculo e se for maior do que 96 é minúsculo.

Para elaborar os programas utilize alguma das rotinas da INT21H listadas abaixo:

AH=4Ch

Sai do programa

AH=09h

Escreve na tela a seqüência de caracteres indicada por DS:DX

AH=02h

Mostra o caractere armazenado em DL

AH=01h

Le um caractere e armazena em AL

AH=0Ah

Le a seqüência de caracteres e armazena em DS:DX onde o 1º byte do buffer é o tamanho máximo da entrada e o 2º byte do buffer é o número de caracteres digitados.

 

?O pessimista se queixa do vento, o otimista espera que ele mude e o realista ajusta as velas.?(William G. Ward)

Exemplos de Exercícios(Assembly 8086)

publicado em 02 Mar 2010 22:18 por Munif Gebara Junior


                         soma com 48
  0 dezendas de milhar        48
  1 milhar                    49
  3 centenas                  51
  4 dezenas                   52
  5 unidades                  53

N#    0  1  3  4  5
ASC  48 49 51 52 53


     1345 / 10
        5   0134 /10
               4   013 /10
                     3    1 /10
                          1   0 / 10
                              0     0


    58432 /10
        2  5843 / 10
              3   584 /10
                    4   58 /10
                         8   5 /10
                             5   0
resultado db "00000 $"
...
ESCREVENUMERO proc
  mov cx,5
  lea si,resultado+4
  VOLTA3:
    mov dx,0
    mov bx,10
    div bx    ;  dx:=ax mod bx   e  ax:=ax / bx
    add dl,48    ;
    mov [si],dl
    dec si
  loop VOLTA3
  mov ah,09h
  lea dx,resultado
  int 21h
  ret
ESCREVENUMERO endp





8a
.model small
.stack
.data
resultado db "00000","$"
.code
ESCREVENUMERO proc
   push ax
   mov ax,seg resultado
   mov ds,ax
   pop ax
   mov cx,5
   lea si,resultado+4
VOLTA3:
   mov dx,0
   mov bx,10
   div bx
   add dl,48
   mov [si],dl
   dec si
   loop VOLTA3
   mov   ah,09h
   lea   dx,resultado
   int   21h
   ret
ESCREVENUMERO endp


PRINCIPAL proc

    mov ax,1
    mov cx,150
VOLTA:
    push cx
    push ax

    mov dx,0
    mov bx,3
    div bx
    pop ax
    push ax
    cmp dx,0
    jnz CONTINUA

    call ESCREVENUMERO

CONTINUA:
    pop  ax
    pop  cx
    inc  ax
    loop VOLTA
    mov ax,4c00h
    int 21h
PRINCIPAL endp

end PRINCIPAL

exemplosAsm8086.rar (MaisExemplos) tamanho:20446 bytes Upload em 10/03/2010 16:56

Introdução(Assembly 8086)

publicado em 16 Apr 2009 06:54 por Munif Gebara Junior

Uma linguagem de montagem ou assembly é uma notação legível por humanos para o código de máquina que uma arquitectura de computador específica usa. A linguagem de máquina, que é um mero padrão de bits, torna-se legível pela substituição dos valores em bruto por símbolos chamados mnemônicos.

Por exemplo, enquanto um computador sabe o que a instrução-máquina IA-21 (10110000 01100001) faz, para os programadores é mais fácil recordar a representação equivalente em intruções mnemônicas MOV AL, 61h. Tal instrução ordena que o valor hexadecimal 61 (97, em decimal) seja movido para o registrador 'AL'.

Retirado de (http://pt.wikipedia.org/wiki/Linguagem_de_montagem)

O microprocessador 8086 da Intel é um microprocessador de 16 bits que é suposto ser usado como CPU num microcomputador. Quando se diz que é um processador de 16 bits, quer-se dizer que a sua unidade lógica e aritmética, os seus registos internos, e a maior parte das suas instruções foram concebidos para trabalhar com palavras de 16 bits. Além disso o 8086 tem um barramento de dados de 16 bits, ou seja, pode ler e escrever na memória ou nas portas 16 bits de uma só vez. O barramento de endereços é de 20 bits, ou seja o 8086 consegue endereçar 1 Mb posições de memória. Cada uma destas posições de memória é ocupada por um byte.

Retirado do Material de Maria Joao Nicolau em (http://marco.uminho.pt/~joao/)

Lista Assembler 8086.pdf (Arquivo do Artigo Introdução) tamanho:7560 bytes Upload em 16/04/2009 06:57
Lista Assembler 8086.zip (Lista Resolvida) tamanho:4490 bytes Upload em 16/04/2009 07:00
exe9novo.asm (Nova versão do exercício 9) tamanho:705 bytes Upload em 17/04/2009 18:30
TASM.rar (Material completo) tamanho:3733893 bytes Upload em 03/03/2010 16:43
asm8088.pdf (Arquivo do Artigo Introdução) tamanho:50941 bytes Upload em 11/03/2010 21:49