Ensamblador

Páginas: 9 (2222 palabras) Publicado: 6 de julio de 2011
TITLE Ejemplo nº 1: manejo de la consola en Win32 (EC10p1.asm)

; 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...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • ensamble
  • Ensamblador
  • Ensambles
  • Ensamblador
  • Ensamble
  • Ensambles
  • Ensambladores
  • Ensamblador

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS