Salve, a scuola abbiamo scritto un programma in assembler 8086, dove l'utente inserisce prima un numero, poi il secondo e infine l'operando. Per permettere al programma di leggere i numeri, vanno ovviamente convertiti in codice ascii. Il risultato lo salviamo nei vari registri (dipendentemente dal operando). Adesso la seconda parte è prendere il risultato salvato e mostrarlo sullo schermo. Il problema è che non sappiamo fare il metodo inverso di ciò che abbiamo fatto all'inizio per leggere i numeri. Ci hanno suggerito di usare la memoria stack, ma siamo a corto di idee.
Aiuti?
Questo è il programma:
data segment
stev1 dw ?
stev2 dw ?
niz db "Inserisci il primo numero: $"
niz2 db "Inserisci il secondo numero: $"
niz3 db "Inserisci l'operando: $"
ends
code segment
start:
newLine macro
mov dl,13d
mov ah,02h
int 21h
mov dl,10d
int 21h
endm
mov ax, data
mov ds,ax
lea dx,niz
mov ah,09h
int 21h
;inserimento
mov ch,00h
mov bl,0
while:
mov ah,01
int 21h
sub al,48
cmp al,221d
je endwhile
inc bl
cmp bl,1
jne next
mov cl,al
jmp while
next:
cmp bl,2
js endif
mov dl,al
mov ah,00h
mov al,10
mul cl
mov dh,00h
add ax,dx
mov cx,ax
endif:
jmp while
endwhile:
mov stev1,cx
;end inserimento
newLine
lea dx,niz2
mov ah,09h
int 21h
;inserimento2
mov ch,00h
mov bl,0
while2:
mov ah,01
int 21h
sub al,48
cmp al,221d
je endwhile2
inc bl
cmp bl,1
jne next2
mov cl,al
jmp while2
next2:
cmp bl,2
js endif2
mov dl,al
mov ah,00h
mov al,10
mul cl
mov dh,00h
add ax,dx
mov cx,ax
endif2:
jmp while2
endwhile2:
mov stev2,cx
;end inserimento
newLine
lea dx,niz3
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,'+'
je addizione
cmp al,'-'
je sottrazione
cmp al,'*'
je moltiplicazione
cmp al,'/'
je divisione
addizione:
mov bx,stev1
mov cx,stev2
add bx,cx
mov dh,00h
mov dx,bx
mov ah,02h
int 21h
jmp endd
sottrazione:
mov bx,stev1
mov cx,stev2
sub bx,cx
jmp endd
moltiplicazione:
mov ax,stev1
mul stev2
jmp endd
divisione:
mov dx,0000h
mov ax,stev1
div stev2
jmp endd
endd:
ends
end start