• Domingo 17 de Noviembre de 2024, 21:50

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - CatalunyaAlex

Páginas: [1]
1
ASM (Ensamblador) / Ayuda Para Terminar Una Calculadora Rpn
« en: Miércoles 24 de Mayo de 2006, 10:29 »
hola, estaría muy agradecido si alguien me pudiera echar una mano con este programa (principalmente el paso 4) que debo entregar en junio y con el que me juego toda una assignatura, o si alguien me puede passar un programa similar que ya tenga hecho, ahí os dejo el guión de la práctica.
muchas gràcies

-GUION

Guió de la pràctica

Calculadora RPN bàsica

Què es demana:

Realitzar un programa en llenguatge assemblador que permeti implementar una calculadora
RPN amb les funcions bàs iques de +, - , * i / . Fent servir la pila.

Per exemple:

L’usuari entrarà: 2 3 +, un cop processada la cadena i separats els operadors del operands
haureu de treballar amb la pila d’aquesta manera:

Un cop feta l’operació s’haurà de donar al usuari un missatge per saber si vol fer servir el
resultat obtingut en la següent operació a realitzar. Si és així, ara l’usuari haurà d’entrar només
un operand i un operador en la següent operació de la calculadora, ja que el segon operand
estarà guardat del càlcul anterior. (Això es farà sempre i quan el resultat no sigui un nombre
decimal, per tractar decimals veieu Indicacions.)
Passos a seguir:

1) En primer lloc el programa mostra el següent missatge per pantalla:
Introdueix la operació a realitzar (Exemple: 2 3 * -> el resultat serà 6)
Els operands tindran coma màxim 2 dígits i només es podrà fer una operació per entrada i els
operands i operadors estaran separats per espais.

2) Tot el text entrat s’haurà d’emmagatzemar degudament per poder ser posteriorment analitzat,
per poder diferenciar operands d’operadors.

3) Es converteixen els dos valors introduïts per teclat a nombre ja que es consideren caràcters.

4) S'identifica l’operador i es realitza l'operació pertinent: +, -, *, /

5) El resultat es passa a caràcter per tal de poder-lo imprimir. Per tant, s'aplica
l’algorisme de les divisions.

6) S'imprimeix el valor final per pantalla

7) Es dóna a l’usuari la possibilitat d’emmagatzemar el valor obtingut per poder utilitzar-lo en la
següent operació com a primer operand.

Indicacions:

Cal realitzar el programa de forma modular, per tant s’implementarà amb macros,
procediments, etiquetes, variables i constants.

Es deixa a l’alumne triar que vol que sigui procediment i que vol que sigui macro, però és
obligatori que almenys n’hi hagi un de cada

* S'ha de tenir en compte que l'operació dividir pot generar resultats amb decimals (si la divisió no és
entera). Aquests resultats s'han de mostrar per pantalla i com a mínim han de tenir 2 decimals.

* A l'hora de reutilitzar un resultat amb decimals, per utilitzar-lo com a primer operand de la següent operació,
només s'utilitzarà la part entera, prescindint així de la part decimal.

Ex: 60 7 / => 8.57...

8 5 * => ...

Recomanacions a seguir:

L'operació a realitzar serà introduïda per teclat en una sola vegada.
I serà emmagatzemada sencera en memòria . ( Cada dígit i per últim l'operand, s’emmagatzema ran en una
posició de memòria donada que serà de tipus byte.)

Un cop es tenen els caràcters emmagatzemats en memòria, s'han de tractar caràcter a
caràcter per tal de convertir els caràcters que representen un número, a un número decimal
com a tal.

Ex: En memòria tindrem ‘1’,’2’, i es necessita convertir-lo al número decimal 12.
Aquesta funció l’ha de realitzar un procediment que agafa el número introduït per
teclat que està en una posició de memòria i el converteix a número decimal.
Quan es tenen els dos operands convertits a decimals, ja s'està en condicions
de realitzar l’operació. Però prèviament s'haurà d’haver identificat l'operació i desprès es procedirà a
operar els nombres obtinguts.

A continuació s'ha de convertir el resultat de l’operació en un caràcter per poder-lo
imprimir per pantalla. Aquesta funció de conversió l’haurà de realitzar un altre procediment que haureu
de crear (procediment que ha d’implementar l’algorisme de les divisions)
Aquests resultats seran emmagatzemats en memòria i abans d’imprimir-los cal
indicar que es volen visualitzar els dígits, no el codi equivalent en ASCII, per tant cal sumar
als resultats el ‘0’.

I per últim es tindrà el nombre obtingut emmagatzemant en una variable o en memòria per
poder-lo fer servir en cas de que la següent operació ho requereixi.
Per a realitzar el programa cal utilitzar tot el que s’ha explicat en pràctiques
anteriors.

Requeriments en la realització de la pràctica:

Per a realitzar la pràctica és necessari utilitzar MACROS, PROCEDIMENTS,
DEFINICIONS, ETIQUETES,etc.
Cal ser ordenats i modulars a l’hora d’implementar el programa degut a la seva
complexitat.

Consells per a la realització de la pràctica:
Una bona forma de convertir la resta de la divisió en caràcters podria venir donat
per sumar el valor del caràcter ‘0’ al resultat.
Seria convenient anar provant trossos del programa a mesura que s’implementi per
poder veure l’evolució.

-CODIGO

cr EQU 13
lf EQU 10
pinta MACRO arg
push dx
push ax
lea dx,arg
mov ah,09h
int 21h
pop ax
pop dx
ENDM

llegeix MACRO arg
push dx
push ax
lea dx,arg
mov ah,0ah
int 21h
pinta blanc
pop ax
pop dx
ENDM

dades SEGMENT PARA PUBLIC 'data'
var DB 0
var2 DB 0
total DW 0

entra DB 8
lencad DB 0
operacio DB 8 DUP(0)

;---- aqui podeu afegir quantes dades necessiteu---

mis1 DB 'Entra una operació a fer en RPN:',cr,lf,'$'
mis2 DB ' Vols utilitzar el resultat per la següent operació?',cr,lf,'$'
mis3 DB ' El resultat de l’operacio és:','$'
blanc DB cr,lf,'$'
numero DB 6 DUP(0)
girat DB 6 DUP(0)
dades ENDS
codi SEGMENT PARA PUBLIC 'code'
main PROC FAR
ASSUME CS:codi, DS:dades, SS:pila, ES:dades
mov ax,dades
mov ds,ax
mov es,ax

;.............
;----afegiu el codi necessari---
;.............

fi:
mov ax,4c00h
int 21h
main ENDP
codi ENDS
pila SEGMENT PARA STACK 'stack'
DB 128 DUP(0)
pila ENDS
END main

Páginas: [1]