ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Ensamblador Utilizado NASM


Enviado por   •  7 de Mayo de 2013  •  2.885 Palabras (12 Páginas)  •  504 Visitas

Página 1 de 12

; Ensamblador utilizado NASM

;

;

[BITS 16] ; Set 16 bit code generation

SEGMENT junk ; Segment containing code

..start: ; The two dots tell the linker to Start Here.

mov ax,data ; Move segment address of data segment into AX

mov ds,ax ; Copy address from AX into DS

mov es,ax ;

mov ax,stack ; Move segment address of stack segment into AX

mov ss,ax ; Copy address from AX into SS

mov sp,stacktop ; Point SP to the top of the stack

;==============================|

; MAIN |

;==============================|

Inicio:

call Reset ; Limpiar variables

call Menu ; Imprimir menu

Opcion:

call GetCh ; Leer caracter de seleccion de opcion del menu

cmp al, 27 ; es ESC ?

je Fin ; terminal si es ESC

cmp al, '1' ; es ASCII 1?

jne Opt2 ; saltar si no es igual

call DoSuma ; ingresar los datos y operar la suma

jmp Inicio ; repetir el ciclo

Opt2:

cmp al, '2' ; es ASCII 2

jne Opt3 ; saltar si no es igual

call DoResta ; ingresar datos y operar la resta

jmp Inicio ; repetir el ciclo

Opt3:

cmp al, '3' ; es ASCII 3

jne Opt4 ; saltar si no es igual

call DoMulti ; ingreasar datos y operar la multiplicacion

jmp Inicio ; repetir el ciclo

Opt4:

cmp al, '4' ; es ASCII 4

jne Opcion ; si no repetir el ingreso de caracter

call DoDiv ; ingresar datos y operar la division

jmp Inicio ; repetir ciclo

Fin:

mov ax, 04C00H ; salir

int 21H ; fin de programa

;======================================================================

; funcion DoDiv

; ingresa datos y opera la division

DoDiv:

call NewLine ;

mov dx, Msg13 ;

call Writeln ;

Call NewLine ;

mov dx, Msg6 ;

call Write ;

mov cx, 10 ; 10 digitos

mov di, OpA ; guardarlo en memoria OpA

call Read128BitNum ; llamar a la funcion que lee el numero

Call NewLine ;

mov dx, Msg7 ;

call Write ;

mov cx, 10 ; 10 digitos

mov di, OpB ; guardarlo en memoria OpB

call Read128BitNum ; llamar a la funcion que lee el numero

mov si, OpB ; parametros para comparar el operador B

mov di, Cero128Bits ; con cero, division por cero?

call Cmp128Bits ; compara dos numeros de 128bits

je DoDivFin ; si el B == 0 error division por cero

Call NewLine ;

mov si, OpA ; parametros de la division

mov di, OpB ; etc

mov bx, prd ; resultado

call Div128Bits ; funcion que divide dos numeros

mov dx, Msg8 ;

call Write ;

mov si, prd ; resultado de la division en binario

mov cx, 20 ;

mov bx, Res ;

call Write128BitS ; funcion que convierte de binario a decimal

mov si,Res ; en Res esta guardado el numero en decimal como cadena

call WriteNum ; imprimir el numero en pantalla

Call NewLine ;

Call NewLine ;

ret ;

DoDivFin:

Call NewLine ; Exception, en caso de division por cer

mov dx, Msg14 ; imprimir un mensaje extra de error

call Writeln ; y regresar sin hacer nada.

ret ;

;======================================================================

; funcion DoMulti

; ingresa datos y opera la multiplicacion

DoMulti:

call NewLine ;

mov dx, Msg12 ;

call Writeln ;

Call NewLine ;

mov dx, Msg6 ;

call Write ;

mov cx, 10 ; ingresar un numero de

mov di, OpA ; 10 digitos y guardarlo

call Read128BitNum ; en binario en OpA

Call NewLine ;

mov dx, Msg7 ;

call Write ;

mov cx, 10 ; Ingresar numero de 10

mov di, OpB ; digitos en binario y guardarlo

call Read128BitNum ; en OpB

Call NewLine ;

mov si, OpA ;

mov di, OpB ;

mov bx, prd ; resultado de la multiplicacion

call Mult128Bits ; realizar la multiplicacion

mov dx, Msg8 ;

call Write ;

mov si, prd ;

mov cx, 20 ;

mov bx, Res ;

call Write128BitS ; convertir de binario a decimal

mov si,Res ;

call WriteNum ; imprimir el resultado en pantalla

Call NewLine ;

Call NewLine ;

ret ;

;======================================================================

; funcion DoResta

; ingresa datos y opera

DoResta:

call NewLine ;

mov dx, Msg11 ;

call Writeln ;

Call NewLine ;

mov dx, Msg6 ;

call Write ;

mov cx, 20 ;

mov di, OpA ;

call Read128BitNum ;

Call NewLine ;

mov dx, Msg7 ;

call Write ;

mov cx, 20 ;

mov di, OpB ;

call Read128BitNum ;

Call NewLine ;

mov si, OpA ;

mov di, OpB ;

mov bx, prd ;

call Resta128Bits ;

mov dx, Msg8 ;

call Write ;

mov si, prd ;

mov cx, 20 ;

mov bx, Res ;

call Write128BitS ;

mov si,Res ;

call WriteNum ;

Call NewLine ;

Call NewLine ;

ret ;

;======================================================================

...

Descargar como (para miembros actualizados) txt (25 Kb)
Leer 11 páginas más »
Disponible sólo en Clubensayos.com