Ensamblador
; Este programa llama a las siguientes funciones de consola de Win32:
; GetStdHandle, ExitProcess, WriteConsole, ReadConsole, ret_key
; Programa escrito por Juan Julian Merino Rubio como ejemplo de
; programación en ensamblador en la asignatura de Estructura de
; Computadores en La ETSII de la Universidad de LaLaguna durante
; el curso 2010/11.
; Este programa ha sido editado con el programa QEditor, que forma
; parte del paquete MASM32, ensamblado y montado desde el mismo
; programa.
.586
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
;
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include\masm32\include\msvcrt.inc
include \masm32\macros\macros.asm
;
;
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
BPT TEXTEQU
WPT TEXTEQU
DPT TEXTEQU
Bin4Asc proto near, NUM4:DWORD, CADENA:PTR BYTE
SBin4Asc proto near, SNUM4:SDWORD, CADENA:PTR BYTE
AscDectoBinproto near, CADENA:PTR BYTE
Bin4Hex proto near, NUM4:DWORD, CADENA:PTR BYTE
AscHextoBin proto near, CADENA:PTR BYTE
CERO EQU 0
UNO EQU 1
MENOS1 EQU -1
VERDADERO EQU MENOS1
FALSO EQU CERO
; códigos de algunas teclas ---------------------------
cr EQU 0Dh ; vuelta de carro
lf EQU 0Ah ; salto de líneaescape EQU 1Bh ; 27
espacio EQU 20h ; 32
tab EQU 09h ; 9
endl EQU ; secuencia de final de línea
anchobuffer EQU 80 ; buffer para escribir cadenas
.data
espacio15 BYTE espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio
spacio10 BYTEespacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio, espacio
crlf BYTE cr,lf ; carriage return/line feed
msg1 LABEL BYTE
BYTE 60 DUP("-"), endl
BYTE "Estructura de Computadores - Curso 2010/2011",cr, lf
BYTE "Practica realizada por WAKA WAKA", endl
BYTE 60 DUP("-"), endl, endl
smsg1 DWORD ($-msg1)msg2 BYTE "Introduce el numero de puntos a crear (100 < Rango < 10000): "
smsg2 DWORD $ - msg2
msg3 BYTE anchobuffer DUP(?)
minimo EQU 100
maximo EQU 10000
msg4 BYTE "Intentalo de nuevo: "
smsg4 DWORD $ - msg4
msg5 BYTE "Cuadrante | Primer | Segundo | Tercer | Cuarto | TOTAL" ,cr,lf
smsg5 DWORD $ - msg5
msg6 BYTE " Tramos | n depuntos" ,cr,lf
smsg6 DWORD $ - msg6
msg7 BYTE " - "
smsg7 DWORD $ - msg7
UnNum SDWORD ?
arrayx SDWORD maximo DUP(?)
arrayy SDWORD maximo DUP(?)
arrayd SDWORD maximo DUP(?)
cuad1 DWORD 0
cuad2 DWORD 0
cuad3 DWORD 0
cuad4 DWORD 0
max DWORD 0
Total DWORD 0
rango1 DWORD 0
rango2 DWORD 0
rango3 DWORD 0
rango4 DWORD 0
rango5 DWORD 0
rango6 DWORD 0
rango7 DWORD 0
rango8DWORD 0
npuntos1 DWORD 0
npuntos2 DWORD 0
npuntos3 DWORD 0
npuntos4 DWORD 0
npuntos5 DWORD 0
npuntos6 DWORD 0
npuntos7 DWORD 0
npuntos8 DWORD 0
consoleInputHandle HANDLE 0 ; handle de entrada a la consola
consoleOutputHandle HANDLE 0 ; handle de salida de la consola
bytesWritten DWORD ? ; número de bytes escritos
bytesRead DWORD ? ; número de bytesleídos
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
newline MACRO
INVOKE WriteConsole,
consoleOutputHandle, ADDR crlf, 2,
ADDR bytesWritten, 0
ENDM
slash MACRO
INVOKE WriteConsole, consoleOutputHandle, ADDR msg7, smsg7, ADDR bytesWritten, 0
ENDM
mrango1 MACRO
INVOKE Bin4Asc, rango1, ADDR msg3
mov bytesRead, eax
INVOKE...
Regístrate para leer el documento completo.