You are on page 1of 11

Arquitectura (2006)

Tutorial de SimuProc 1.4.3.0


Patio, Germn Bentez, Juan Qu es SimuProc? SimuProc es un Simulador de un Procesador Hipottico con el cual podrs aprender las nociones bsicas para empezar a programar en lenguaje ensamblador, en el cual podemos observar todo el proceso interno de ejecucin del programa a travs de cada ciclo del procesador. SimuProc con su gran variedad de instrucciones (50+) es un simulador con el cual tienes infinitas posibilidades de pruebas. Ahora con soporte para nmeros de punto flotante usando IEEE 754 y enteros desde -2GB hasta 2GB. Qu ms incluye? Un Editor con resaltador de sintaxis para escribir ms fcilmente tus programas. SimuProc tambin incluye un conversor de bases por si se necesita realizar alguna conversin de una base a cualquier otra base. Soporta todas las bases desde base2 a base36. Y conversin de nmeros de punto flotante de decimal a IEEE 754 y viceversa. Qu es el ensamblador o Assembler? El assembler es un lenguaje de programacin de bajo nivel. Necesitas saber un Poco de la estructura de un computador para poder entender algo. La CPU es el corazn de un computador, casi todas las operaciones ocurren dentro de esta. La memoria Ram es el lugar donde los programas estn cargados para poder ser ejecutados. La CPU trabaja usando binario. Electrnicamente esto es hecho con switches que estn o encendidos o apagados. Esto es representado por ceros y unos. Un solo BIT o dgito binario requiere un cable o switch dentro de la CPU. Usualmente los datos son manipulados en BYTES o mltiplos de bytes. Un byte es un grupo de ocho bits. Un byte luce as: 01101011 Esto es un inconveniente para leer, decir y escribir, as que los programadores usan hexadecimal para representar los bytes. Convertir entre binario y hexadecimal no es difcil. Primero se divide el byte en dos nybbles (Medio byte) as: 0110 1011 Luego usando la siguiente tabla: BINARIO 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0110 1011 = 6B Gracias a la cantidad de instrucciones que soporta el SimuProc tienes muchas posibilidades para resolver bastantes problemas y hacer una gran variedad de programas, y como se trata de un Simulador puedes programar sin miedo a equivocarte y hacerle un dao a tu computador. HEXADECIMAL 0 1 2 3 4 5 6 7 8 9 A B C D E F DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Qu debemos saber bsicamente? Ventana principal del simulador.

Memoria: La memoria es el dispositivo que almacena toda la informacin del programa que se ejecuta, tanto datos como instrucciones. Esta en realidad no es parte del procesador, sino que es un dispositivo a parte al que el procesador accede para ir leyendo las instrucciones y datos del programa. La capacidad de la memoria Simulada es de 4096 posiciones de 16 bits cada una: Desde 0 hasta 4095, o sea en hexadecimal: Desde 000 hasta FFF. Esta memoria es suficiente para ejecutar gran variedad de simples y complejos programas. El simulador trabaja con constantes y variables en binario y direcciones (posiciones de memoria) en Hexadecimal. Registros Generales: Los registros generales del procesador se usan para almacenar informacin de uso rpido, ya que se accede a ellos a una velocidad mucho ms alta que la memoria. En ellos se pueden almacenar direcciones de memoria a las que se va a acceder bastante a lo largo de la ejecucin del programa, o directamente variables que se desean usar. Este Procesador consta de 3 registros de propsito general, AX, BX y CX cada uno con 16 bits de capacidad. Registros Apuntadores como: PC IP: Program Counter o Instruction Pointer, Contiene la direccin de memoria de la prxima instruccin a ejecutar y es incrementado en cada nueva instruccin. MAR: Memory Address Register. (Registro de Direccin de Memoria) es el registro en el que se almacena la direccin de memoria a la que se quiere acceder. MDR: Memory Data Register o Memory Buffer Register, es un registro intermedio en el que se almacenan los datos que se escriben o leen de memoria. En el caso de una lectura, se pone en el MAR la direccin y se activa la seal de

leer, obteniendo en el MDR el dato buscado. En el caso de una escritura, se pone en el MAR la direccin y en el MDR el dato a escribir en memoria, despus de activa la seal de escribir, de esta forma almacenamos en memoria el dato. IR: Instruction Register, en este registro se introduce la instruccin a ejecutar, despus de haberla ledo de memoria accediendo a ella mediante la direccin sealada en el PC; El contenido de este registro se puede dividir en cdigo de operacin (el cdigo que seala la operacin que se realizar) y operandos. Puede haber 2 operandos o slo uno. Ac es donde se decodifica e interpreta la instruccin as: se descompone la instruccin leda de forma que se pueda saber cual es la operacin que se desea realizar y cuales son los operandos, en su caso, o el desplazamiento en caso de que se trate de una instruccin de bifurcacin... Registros de Pila: BP: Base Pointer, Puntero de base de la pila. El valor de por defecto es F80 , Este puede cambiarse desde un programa, asignndole otra direccin de memoria con la instruccin MOV. Digamos que quiero reservar mas espacio para la pila haciendo que esta comience desde la posicin CF1, entonces copio esta direccin de memoria en cualquier pos de memoria; supongamos que lo copie en la direccin 3B entonces uso la instruccin MOV BP,3B y as BP es igual a CF1. Mientras se ejecuta el programa se puede visualizar en una barra de porcentaje el uso de la pila. Mas adelante hablare de la Pila. SP: Stack Pointer, Puntero de la pila, indica en que prxima direccin de la pila esta disponible, es decir, apunta a la cima de la pila. Este valor se cambia automticamente cuando se usan las instrucciones PUSH POP. Registros de Control (Flags) Estos registros se usan para poder controlar el comportamiento de un programa los cuales se activan despus de cada operacin, segn sea el resultado de la instruccin ejecutada. Zero flag: se vuelve 1 si el resultado de la ultima operacin = 0 Negative Sign flag: Se vuelve 1 si el resultado de la ultima operacin es igual a un numero negativo. Carry flag: se activa cuando la operacin realizada ha producido un acarreo. Overflow flag: se activa cuando la operacin produjo desbordamiento (overflow) , es decir, el resultado ocupaba ms de los 16 bits que caben en un registro. Estos flags se usan principalmente en instrucciones de bifurcacin (por ejemplo, si queremos que, en caso de que el resultado de la ltima operacin fuera cero, el programa se salte varias de las instrucciones siguientes, comprobamos el flag cero y si est activo el programa salta, esto se consigue con la instruccin JEQ). En la ALU (Arithmetic Logic Unit) - (Unidad Aritmtica y Lgica) es donde el procesador realiza las operaciones matemticas, (suma, resta, multiplicacin...) y las operaciones lgicas (AND, OR, desplazamiento de bits...). Empezando a Programar! Para empezar a programar primero necesitas tener un problema a resolver, luego plantear un algoritmo o seudocdigo que resuelva dicho problema. Teniendo ya el algoritmo, procedes a convertirlo en assembler. Podemos tener en cuenta el ejercicio que realizaremos en la segunda parte del tutorial, para que a medida que veamos las instrucciones soportadas vayamos imaginando cuales serian las que podran integrarse mejor en nuestro programa. Ejercicio.: Realizar el ingreso de dos valores, sumarlos si el primero es mayor o igual que el segundo o multiplicarlos si el primero es menor que el segundo. Mostrar el resultado. El simulador solo entiende lenguaje ensamblador (assembler). Para ejecutar programas en el simulador, hay que escribirlos primero en este lenguaje. Luego de tener el programa ya en ensamblador se carga en el simulador, ya sea desde un archivo, usando el Editor interno ingresndole las instrucciones manualmente. Instrucciones Soportadas por SimuProc Con las instrucciones que soporta este simulador se pueden escribir una gran cantidad de programas para resolver muchos problemas diferentes. Las describiremos as:

XX - INST [parmetro] Donde: XX significa el Cdigo de la Instruccin. INST es la instruccin. [parmetro] es el parmetro si esta tiene o [parametro1,parametro2] si el parmetro es doble. Estas son las instrucciones soportadas por la versin actual (1.4.3.0): 01 - LDA [mem] Cargue en AX el contenido de la direccin de Memoria especificada. Digamos que en la posicin de memoria 1F esta el valor 10111, despus de ejecutada la instruccin LDA 1F se obtiene que AX=10111 Es equivalente a usar la instruccin MOV AX,1F Hay casos donde es mejor usar MOV si se desea pasar datos sin tener que pasarlos por AX. 02 - STA [mem] Guarde el contenido de AX en la direccin de Memoria especificada. Supongamos que tengo el valor 1010110 en el registro AX y quiero llevarlo a la posicin de memoria 3C, la instruccin es STA 3C Es equivalente a usar la instruccin MOV 3C,AX Es mejor usar MOV debido a que si quiero pasar algn dato de una direccin de memoria a otra usando LDA y STA serian dos instrucciones: LDA mem1 y luego STA mem2, mientras que con MOV ser as: MOV mem2,mem1 03 - XAB Intercambia los valores de los registros AX y BX Esta instruccin no necesita parmetros. 04 - CLA Hace AX = 0 06 - PUSH [registro] Enva el valor del registro especificado a la pila 07 - POP [registro] Trae de la Pila el ltimo valor llevado por PUSH (indicado por el registro SP) y lo almacena en el registro especificado.

Nota: En todas las instrucciones desde 08 hasta la 18, Dest puede ser una direccin de Memoria o un Registro. 08 - INC [dest] Incrementa en 1 el destino especificado, el parmetro puede ser una direccin de memoria o un registro. posicin de memoria EB esta el valor 1001, al ejecutar INC EB se obtiene que ahora el valor de EB es 1010. 09 - DEC [dest] Decremento en 1 el destino especificado, Si el destino queda = 0, se vuelve Z = 1 10 - MOV [dest,orig] Copia el valor almacenado en el origen al destino. El destino y/o origen pueden ser registros o direcciones de memoria o combinacin de estos. Para copiar lo que esta en la posicin de memoria 12E a la posicin D2 se usa la instruccin MOV D2,12E 11 - AND [dest,orig] Y lgico, hace un Y lgico entre todos los bits de los dos operando escribiendo el resultado en el destino. Los parmetros pueden ser direcciones de memoria o Registros. La siguiente regla aplica: 1 AND 1 = 1 1 AND 0 = 0 0 AND 1 = 0 0 AND 0 = 0 Si en AX tengo el numero 1001101 y en la pos 3F tengo el numero 11011. al ejecutar la instruccin AND AX,3F obtendr en AX el resultado 100. El Y lgico lo que hace es dejar los bits en comn que tengan los dos nmeros. 12 - NOT [destino] NO lgico, invierte los bits del operando formando el complemento del primero. NOT 1 = 0 Si en la

NOT 0 = 1 Si en AX tengo 10011 al ejecutar NOT AX obtengo AX=1111111111101100 13 - OR [dest,orig] O inclusive lgico, todo bit activo en cualquiera de los operando ser activado en el destino. La siguiente regla aplica: 1 OR 1 = 1 1 OR 0 = 1 0 OR 1 = 1 0 OR 0 = 0 Si en 3A tengo el numero 1001101 y en la pos 3B tengo el numero 11011. Al ejecutar la instruccin OR 3A,3B obtendr en 3A el resultado 1011111. 14 - XOR [dest,orig] O exclusivo, realiza un O exclusivo entre los operando y almacena el resultado en destino. La siguiente regla aplica: 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 1 = 1 0 XOR 0 = 0 Si en 3A tengo el numero 1001101 y en la pos 3B tengo el numero 11011. Al ejecutar la instruccin XOR 3A,3B obtendr en 3A el resultado 1010110. 15 - ROL [dest,veces] Rota los bits a la izquierda las veces especificadas (en decimal), los bits que salen por la izquierda reentran por la derecha. En el Carry Flag queda el ltimo bit rotado. Supongamos que en la posicin 7E tengo el numero 101110 Al Ejecutar... obtengo en 7E ROL 7E,2 10111000 0 ROL 7E,7 1011100000000 0 ROL 7E,13 1100000000000101 1 16 - ROR [dest,veces] Rota los bits a la derecha las veces especificadas (en decimal), los Bits que salen por la derecha reentran por la izquierda. El Carry Flag guarda el ltimo bit rotado. 17 - SHL [dest,veces] Desplaza los bits a la izquierda el numero de veces especificado (en decimal), agregando ceros a la derecha. El Carry Flag guarda ultimo bit desplazado. 18 - SHR [dest,veces] Desplaza los bits a la Derecha el nmero de veces especificado (en decimal), agregando ceros a la izquierda, el Carry Flag guarda ltimo bit desplazado. Supongamos que en la posicin 1A tengo el numero 101110 Al Ejecutar... obtengo en 1A SHR 1A,2 1011 1 SHR 1A,6 0 1 SHR 1A,11 0 0 20 - ADD [mem] Sumar: AX = AX + el contenido de la direccin de memoria. Si el resultado de la suma supera los 16 bits, el resultado queda as: en BX los bits mas significativos y en BX los menos, tambin se activa el Overflow flag. 21 - SUB [mem] Restar: AX = AX - el contenido de la direccin de memoria. 22 - MUL [mem] Multiplicar: AX = AX * el contenido de la direccin de memoria. C= C=

Si el nmero resultante supera su longitud en binario de 16 bits, este resultado se parte almacenando los bits mas significativos en el Registro BX. Si el resultado de una operacin fuera 101101000111100010111 (21 bits) Los registros quedaran as: AX = 1000111100010111 BX = 10110 (los ltimos 16bits) (los primeros Bits (los mas significativos)

Tambin se activa el Flag Overflow, para indicar que en la ltima operacin sucedi esto. 23 - DIV [mem] Dividir: AX = AX / el contenido de la direccin de memoria, BX=AX % el contenido de la dir de memoria (BX = modulo o residuo). 24 - CLN Limpia el Negative Flag. N=0 25 - CLC Limpia el Carry Flag. C=0 26 - STC Pone el Carry Flag. C=1 27 - CMC Complementa (invierte) el Carry Flag. Si C = 1 vuelve C = 0 y viceversa. 29 - LOOP [mem] Decrementa CX y salta a la Pos de memoria si CX no es cero. 30 - JMP [mem] Salto incondicional. PC = direccin de memoria donde esta la siguiente instruccin a ejecutar" 31 - JEQ [mem] Saltar si son iguales. Si Z = 1, PC = contenido de la memoria. Funcin equivalente en C: if (AX == mem) 32 - CMP [mem] Compara AX con [mem], si AX es mayor, Z=0 N=0, si es igual Z=1 N=0, si es menor Z=0 N=1 Supongamos que en AX tengo el numero 10110 y en la posicin de memoria 4G tengo el numero 1100, al ejecutar la instruccin CMP 4G obtengo que como el numero almacenado en AX es mayor entonces los Flags de Control me quedan as: Z=0 y N=0 Nota: Solo en las versiones 1.3.6.2 y anteriores En AX quedaba el resultado de la resta (de la comparacin), Ahora ya no. Sugerencia: si necesita el valor original de AX puede usar la pila para almacenarlo temporalmente. 33 - JME [mem] Saltar si es Menor. Si N = 1, PC = contenido de la memoria. Supongamos que ejecuto esta instruccin as JME 3F inmediatamente despus de ejecutar la instruccin del ejemplo que coloque en la instruccin 32, al ejecutar JME 3F se verifica el Flag N, y como en este caso se encuentra en 0 (porque el numero no es menor) entonces no se realiza dicho Salto a 3F porque el valor de PC no se modifica, el programa sigue su ejecucin. Funcin equivalente en C: if (AX < mem) y Si necesitas hacer un: if (AX <= mem) inmediatamente despus de la instruccin JME colocas una JEQ 34 - JMA [mem] Saltar si es Mayor. Si Z = 0 y N = 0, PC = contenido de memoria.

Supongamos que ejecuto esta instruccin as JMA 2B inmediatamente despus de ejecutar la instruccin del ejemplo que coloque en la instruccin 32, al ejecutar JMA 2B se verifican los Flag N y Z, y como en este caso los dos son 0 (porque el numero es menor) entonces si se realiza dicho Salto a 2B ya que el valor del PC se modifica, el programa sigue su ejecucin saltando a la dir de mem especificada. Funcin equivalente en C: if (AX > mem) 35 - JC [mem] Saltar si el Carry Flag esta activado. Si C = 1, PC = contenido de memoria. 36 - JNC [mem] Saltar si el Carry Flag no esta activado. Si C = 0, PC = contenido de memoria 37 - JO [mem] Saltar si el Overflow Flag esta Activado. Si O = 1, PC = contenido de memoria 38 - JNO [mem] Saltar si el Overflow Flag no esta activado. Si O = 0, PC = contenido de memoria 39 - JNE [mem] Saltar si no son iguales. Si Z = 0, PC = contenido de memoria. Funcin equivalente en lenguaje C: if (AX != mem) 40 - LDT Lee un valor del Teclado y lo lleva al registro AX Esta instruccin es para comunicarse con el usuario, pidindole que entre un Dato; Puede colocar una descripcin del dato que pide, que se mostrar en tiempo de ejecucin. 41 - EAP Escribe en Pantalla el contenido del registro AX. Esta instruccin tambin es para comunicarse con el usuario; Puede colocar una descripcin del dato que se entrega, este se mostrar en tiempo de ejecucin. 42 - MSG Muestra un mensaje en pantalla. Ej.: MSG "Hola Mundo !!". 50 - LDB [mem] La instruccin carga en AX el contenido de memoria almacenado en [mem] + BX Ej.: Digamos que BX=10 ; LDB 1A carga el contenido de 1C en AX. 51 - STB [mem] Guarda el contenido de AX en la direccin [mem] + BX. Ej.: Digamos que BX=101 ; STB 3A guarda AX en 3F. 55 - LDF [mem] Carga en BX y AX un nmero de 32 bits (IEEE) que esta almacenado en la dir [mem] y mem+1. En BX quedan los dgitos ms Significativos. Ej.: Supongamos que el nmero 01000010110010001000000000000000 est cargado en memoria as: 02A 0100001011001000 (Los dgitos mas significativos) 02B 1000000000000000 (Los dgitos menos significativos) Un LDF 2A dejara el siguiente resultado: BX: 0100001011001000 en 02A AX: 1000000000000000 en 02B Nota: Para pedirle al usuario o mostrar estos nmeros IEEE 754 en pantalla, usar puerto 1, con las instrucciones IN AX,1 y OUT 1,AX. 56 - STF [mem] Guarda en [mem] y mem+1 el contenido de BX y AX Ej.: siendo AX y BX = al ejemplo anterior, un STF 2A deja la memoria como el ejemplo anterior. 60 - ADDF [mem]

Suma nmeros de 32 bits: En BX y AX queda el resultado de la suma de estos mas el contenido de [mem] y mem+1 Estos nmeros IEEE 754 son nmeros que pueden ser de punto flotante, o enteros desde -2147483647 hasta 2147483647, si en cualquier operacin de estas aritmticas, se sobrepasa este valor, se activa el Overflow flag. 61 - SUBF [mem] Resta el numero de 32 bits: BX y AX = BX y AX - [mem]y mem+1 Puedes utilizar esta instruccin como un CMP para nmeros de 32 bits. 62 - MULF [mem] Multiplicacin: BX y AX = BX y AX * [mem]y mem+1 Si el resultado es > 2147483647, Resultado = 2147483647 y Overflow Flag = 1 63 - DIVF [mem] Divisin: BX y AX = BX y AX / [mem]y mem+1, en CX queda el residuo de la dimisin en entero de 16 bits 64 - ITOF Conversin de Entero a Real: Convierte un nmero entero (16bits) almacenado en AX al mismo nmero pero representado en Real IEEE754 (32bits), el Resultado de la conversin queda en BX (bits ms significativos) y AX Los registros de control cambian de acuerdo al nmero convertido: "Z" si el nmero es cero, "N" si el nmero es negativo. 65 - FTOI Conversin de Real a Entero: Convierte un nmero Real (32bits) a su equivalente en entero BX y AX en un entero (16bits), el Resultado queda en AX. Los registros de control cambian de acuerdo al numero convertido: "Z" si el numero es cero, "N" si el numero es negativo, "O" si el numero real es mayor de 65535. 80 - IN registro,puerto Lleva al Registro el valor retornado por el puerto especificado. Ej.: IN AX,8 ;lleva a AX el valor retornado por el puerto 8 (Reloj: los segundos del sistema). 81 - OUT puerto,registro Escribe en el puerto especificado, el valor del registro. 90 - NOP Esta operacin no hace nada. til para cuando se modifica la memoria para parchar cdigo y desactivar instrucciones. 99 - HLT Terminar Programa Todo Programa lleva esta instruccin para indicarle al simulador que el programa ha terminado su ejecucin.

Cmo crear programas en SimuProc? Se pueden entrar instrucciones manualmente desde la ventana principal, pero la manera mas fcil es hacerlo desde El editor 2. Entramos a los Editores presionando el botn Editor en la barra de herramientas.

En el panel derecho (Editor 2) podremos escribir el programa, las instrucciones sern resaltadas; puedes presionar el botn derecho del Mouse en este editor para acceder a ms opciones.

Despus de escribir tu programa, procedes a enviarlo al Editor 1 usando el botn como va a quedar distribuido tu programa en memoria.

ya aqu puedes observar

Para finalmente enviarlo a memoria presionas el botn si tu programa no presenta errores de sintaxis, este pasar inmediatamente a la memoria de SimuProc. En el cual ya podrs comenzar la simulacin. Luego de tener el programa ya cargado en la memoria simulada del procesador, se puede salvar en un archivo .SMP o .ASM desde el editor que el simulador crea para no tener que volver a escribir el programa nuevamente. Ejercicio. Suma o multiplicacin de dos valores: Realizar el ingreso de dos valores, sumarlos si el primero es mayor o igual que el segundo o multiplicarlos si el primero es menor que el segundo. Mostrar el resultado. 1) 2) 3) 1) Realizamos un anlisis que nos ayude a resolver la lgica que emplearemos en el ejercicio. Luego trasladamos la lgica a instrucciones entendibles por el ensamblador. Por ltimo ejecutamos la emulacin y revisamos que el resultado sea el deseado. Podemos valernos de la tcnica de diagramas de flujo (Flow-Chart) aunque no es un concepto muy utilizado hoy en da y difiere la forma de utilizacin entre libro y libro. Comienzo Ingreso el primer valor y lo traslado a un sector de la memoria. Ingreso el segundo valor y lo traslado a otro sector de la memoria Le resto el segundo valor al primero Si el Flag N es 1

Si

No

Si

Si el Flag Z es 1 Realizo la multiplicacin Realizo la suma

No Muestro en pantalla Muestro en pantalla Fin Fin

2)

LDT MOV 1E,AX LDT MOV 2E,AX SUB 1E JME 00B JEQ 00B MOV AX,2E MUL 1E

; Solicita el Primer Nmero ; Mueve AX a 1E ; Solicita el Segundo Nmero ; Mueve AX a 2E ; Resta a AX el valor de 1E ; Si el Flag N es 1 Salta a 00B ; Si el Flag Z es 1 salta a 00B ; Mueve 2E a AX ; Multiplica AX por 1E

EAP HLT MOV AX,2E ADD 1E EAP HLT

; Muestra AX en pantalla ; Termina el programa ; Mueve 2E a AX ; Suma AX mas 1E ; Muestra AX en pantalla ; Termina el programa

3) Primero, para hacer un seguimiento paso a paso de la emulacin, tildamos en Animacin dentro de Control de simulacin y damos una velocidad intermedia. Comenzamos la emulacin presionando el botn y nos presentar la ventana Dispositivos de E/S (Entrada/Salida). Pedir que ingresemos el primer nmero, lo mover a la direccin de memoria E1 y pedir que ingresemos el segundo, a este lo mover a la direccin de memoria 2E. Luego, restar el valor de la direccin E1 a AX (Si el resultado de esta resta es negativo encender el Flag N y si da cero el Flag Z). Continuar el programa comparando si el Flag N se convirti en Verdadero (N=1), si es as saltar y ejecutar el cdigo que se encuentra en la lnea 00B, comparar ahora si se encendi el Flag Z (Z=1), si es as tambin saltar a la lnea de ejecucin 00B, si no se encendieron ninguno de los dos se recargara el valor de AX con el valor de E2 y se multiplicaran los valores de AX y 1E se mostraran en pantalla y se terminara el programa. Si por el contrario el programa contina en la direccin 00B se recargara el valor de AX con lo almacenado en la direccin 2E y se sumaria AX con 1E para mostrarlo en pantalla y terminar el programa.

Al terminar la emulacin nos mostrar una ventana con las estadsticas de nuestra emulacin.

Para poder ver estos datos debemos ir a Dispositivos de E/S (Entrada/Salida) y presionar el botn mostrar para cerciorarnos que el resultado que corresponde est en la pantalla.

Si todo sali bien deberamos ver en la ventana Dispositivos de E/S (Entrada/Salida) algo como lo siguiente.

10

Nota: Para hacer un programa ms amable con el usuario podramos usar la instruccin MSG Mensaje e ir interactuando. EJ.: en la posicin 000 ingresar la instruccin MSG Ingrese el primer valor: no olvide que tendra que desplazar su programa, y por consiguiente debera modificar los saltos del mismo.

11

You might also like