Sartomiki.net

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri
Home Esercizi Assembler Esercizio 12 - Calcolatrice

Esercizio 12 - Calcolatrice

E-mail Stampa PDF
Valutazione attuale: / 0
ScarsoOttimo 

Testo:
Si scriva un programma in linguaggio Assembler 8086 che realizzi una semplice
calcolatrice per numeri interi positivi. Il programma deve visualizzare il menù:
risultato = operando1 <+|-|*|/> operando2
Menù:
* inserisci operando1 [1]
* inserisci operando2 [2]
* inserisci simbolo operazione [3]
* visualizza risultato [4]
Effettua la tua scelta:

Soluzione:
MAX EQU 10
TEN EQU 10
.model small
.stack
.data

op1 db 10,0,10 DUP (0)
op2 db 10,0,10 DUP (0)
simbolo db ?
risultato db 10 DUP ("$")

menu    db  0DH, 0AH, "Menu':", 0DH, 0AH
db  009, "* inserisci operando1", 009, 009, 009,"[1]", 0DH, 0AH
db  009, "* inserisci operando2", 009, 009, 009,"[2]", 0DH, 0AH
db  009, "* inserisci simbolo operazione", 009, 009,"[3]", 0DH, 0AH
db  009, "* visualizza il risultato", 009, "[4]", 0DH, 0AH, 0AH
db  "Effettua la tua scelta: $" 

frase1  db 0DH, 0AH, "Inserisci operando1: $"
frase3  db 0DH, 0AH, "Inserisci simbolo: $"
frase4  db 0DH, 0AH, "Tieni risultato: $"
frase2  db 0DH, 0AH, "Inserisci operando2: $"

.code

bin2str PROC

PUSH BP
MOV BP, SP

PUSH AX
PUSH BX
PUSH DX
PUSH DI
PUSH CX

XOR CX, CX

MOV DI, [BP+4]
MOV AX, [BP+6]

MOV BL, TEN

ciclo:
MOV DX, 0
DIV BX ;resto su dx
ADD DL, '0'
MOV [DI], DL
INC DI
INC CX
CMP AX, 0
JNE ciclo

DEC DI
MOV SI, [BP+4]

SHR CX, 1
CMP CX, 0
JE avanti:

convert:

MOV AH, [SI]
MOV AL, [DI]
MOV [SI], AL
MOV [DI], AH

INC SI
DEC DI

LOOP convert
avanti:

POP CX
POP DI
POP DX
POP BX
POP AX
POP BP

RET 4

ENDP

str2bin PROC

PUSH BP
MOV BP, SP

PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI

MOV DI, [BP+4]
MOV CL, [DI+1]
MOV CH, 0
CMP CL, 5
JG errore
MOV DX, 0 ;azzerro DX
XOR AX, AX

INC DI
INC DI

abin:

MOV BX, TEN
MUL BX
MOV BL, [DI]

CMP BL, '9'
JG errore
CMP BL, '0'
JL errore

SUB BL,'0'

XOR BH, BH
ADD AX, BX

INC DI

LOOP abin

MOV [BP+6], AX

POP DI
POP DX
POP CX
POP BX
POP AX
POP BP

RET 2

errore:

POP DX
POP CX
POP BX
POP AX
POP BP

STC
RET 2
ENDP

.startup

MOV CX, 4

prog:
LEA DX, menu
MOV AH, 09H
INT 21H

MOV AH, 01H
INT 21H

CMP AL, '1'
JE oper1
CMP AL, '2'
JE oper2
CMP AL, '3'
JE simb
CMP AL, '4'
JE res
JMP ciclo

oper1:
LEA DX, frase1
MOV AH, 09H
INT 21H        

LEA DX, op1
MOV AH, 0AH
INT 21H

SUB SP, 2
PUSH DX

CALL str2bin
JC prog:

JMP fine:

oper2:
LEA DX, frase2
MOV AH, 09H
INT 21H        

LEA DX, op2
MOV AH, 0AH
INT 21H

SUB SP, 2
PUSH DX

CALL str2bin
JC prog:

JMP fine:

simb:
LEA DX, frase3
MOV AH, 09H
INT 21H         
MOV AH, 01H
INT 21H
MOV simbolo, AL

JMP fine:

res:
LEA DX, frase4
MOV AH, 09H
INT 21H         
POP BX
POP AX

MOV DL, simbolo
CMP DL, "+"
JE sum
CMP DL, "-"
JE diff
CMP DL, "*"
JE mult
CMP DL, "%"
JE divis

sum:
ADD AX, BX
JMP stampa

diff:
SUB AX, BX
JMP stampa

mult:
MOV DX, 0
MUL BX
JMP stampa

divis:
MOV DX, 0
DIV BX
JMP stampa

stampa:
PUSH AX
LEA DX, risultato
PUSH DX
CALL bin2str

MOV AH, 09H
INT 21H

JMP fine:

fine:
LOOP prog

.exit
end


blog comments powered by Disqus
 

http://sartomiki.net/modules/mod_fuofb/assets/it/find-us-on-facebook-1.png

Follow me

Amici

Chi è online

 11 visitatori online

Siti amici

Web4Web.IT - Low Cost Hosting

Notizie flash

Da oggi avete la possibilità di commentare tutti gli articoli presenti sul sito!! Scrivete le vostre opinioni!

PUBBLICITA'