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

Código em Assembly

Discussão em 'Programação' iniciada por eternal_star, 27 de Maio de 2008. (Respostas: 0; Visualizações: 5182)

  1. Boas!!
    Tenho que defender um programa em Assembly, mas estou com um problema em que o código que eu tenho simplesmente me mostra as mensagens no ecrã e não me faz mais nada..
    O código que eu tenho é para a plataforma Intel 8086/88 e é este:

    Código:
    data segment
    menu db 'MENU', 0ah
    db '1.Soma', 0ah
    db '2.Subtraccao', 0ah
    db '3.Multiplicacao', 0ah
    db '4.Divisao',0ah
    db '5.Sair', 0ah, '$'
    num1 dw ?
    num2 dw ?
    result dw ?
    texto1 db 'Qual a operação pretendida?', 0ah, '$'
    texto2 db 'Introduza o primeiro numero:', 0ah, '$'
    texto3 db 'Introduza o segundo numero:', 0ah, '$'
    texto4 db 'O resultado da operacao e:', 0ah '$'
    data ends
     
    pilha segment stack
    dw 256 dup (?)
    pilha ends
     
    code segment
    assume cs:code, ds:data, ss:pilha
    inicio: ; inicia o programa
    mov ax, data ; move data p ax
    mov ds, ax ; move dx para ds
     
    lea dx, menu ; lê a msg menu
    mov ah, 09h ; envia a msg para o ecrã
    int 21h
     
    mov dx, offset texto1 ; move o offset de texto 1 para dx
    mov ah, 09h ; envia a msg para o ecrã
    int 21h
     
    mov ah, 1 ; espera pela introdução de um caracter
    int 21h
     
    cmp al, '1' ; compara o caracter com al
    jz soma ; se a flag estiver a zero salta p a soma
     
    cmp al, '2'
    jz subtraccao
     
    cmp al, '3'
    jz multiplicacao
     
    cmp al, '4'
    jz divisao
     
    cmp al, '5'
    jz sair
     
    mov dx, offset texto2
    mov ah, 09h
     
    mov ah, 1
    int 21h
     
    call lernum
    mov dx, offset texto3
    mov ah, 09h
    mov ah, 1
    int 21h
    call lernum
    cmp al, '1'
    mov ah, 4ch
    int 21h
    call soma
    call subtraccao
    call multiplicacao
    call divisao
     
     
     
    lernum proc
    push ax
    mov ah, 09h
    int 21h
    pop ax
    ret
    lernum endp
     
    soma proc near
    mov ax, data
    mov ds, ax
    stc ; faz com que o valor de cf passe do valor 0 para o valor 1
    mov ax, num1
    adc ax, num2
    mov result, ax
    add result, 030h
    mov dx, offset result
    mov ah, 09h
    int 21h
    mov ah, 04ch
    int 21h
    soma endp
     
    subtraccao proc near
    mov ax, data
    mov ds, ax
    stc ; faz com que o valor de cf passe do valor 0 para o valor 1
    mov ax, num1
    sbb ax, num2
    mov result, ax
    sbb result, 030h
    mov dx, offset result
    mov ah, 09h
    int 21h
    mov ah, 04ch
    int 21h
    subtraccao endp
     
    multiplicacao proc near
    mov ax, data
    mov ds, ax
    mov ax, num1
    mov bx, num2
    mul bl
    mov result, ax
    sub bx, bx
    mov bx, result
    mov ah, 02h
    mov dl, bl
    mov cl, 04h
    shr dl, cl
    add dl, 030h
    cmp dl, 039h
    jle valor1
    add dl, 07h
     
    valor1:
    int 021h
    mov dl, bl
    and dl, 0fh
    add dl, 030h
    cmp dl, 039h
    jle valor2
    add dl, 07h
     
    valor2:
    int 021h
    mov ah, 04ch
    int 021h
    multiplicacao endp
     
    divisao proc near
    mov ax, data
    mov ds, ax
    mov ax, num1
    mov bx, num2
    div bx ; ax <-- dx/ax em que dx é o resto da divisão
    mov result, ax ; conversor de valores
    add result, 030h ; conversor de valores
    mov dx, offset result
    mov ah, 09h
    int 21h
    mov ah, 04ch
    int 21h
    divisao endp
     
    sair proc near
     
    sair endp
    code ends
    end inicio
    Se alguem me puder ajudar agradecia pois não consigo perceber nada disto e estou a ficar sem tempo....:(
     
    Última edição pelo moderador: 28 de Maio de 2008

Partilhar esta Página