De nuevo yo con mis inquietudes...
Es posible (Usando FASM), programar una aplicación de Consola?
Se puede usar interrupciones en FASM? Digamos, (Seguramente hablo guasadas para ustedes que la tienen mas clara que yo), puedo en vez de programar para 32bits usando APIS, usar en modo 16bits usando interrupciones o demás?
Y otro tema, (que hize en otro TH).
En ASM de 16bits, para crear un archivo tengo que hacer lo siguiente:
Poner 3C en AX
Poner en DS:DX el sector que contiene la cadena en ASCII de la ruta del archivo
Poner en CX los atributos del archivo
INT 21
Ahora bien, haciéndolo dede debug da:
Citar
-a100
jmp 125
-e 102 'RutaArchivo' 0a 0d '$'
-a125
MOV DX,0102
MOV CX,00
MOV AX,3C
INT 21H
INT 20H
Bueno, genero el .com y todo, y cuando lo ejecuto, no me crea el archivo. Estuve leyendo, y puede ser que tenga que ver con "modo protegido vs modo real"?
Ténganme paciencia, estoy dando los primeros pasos.
También, quiero que borren mi otro TH, ya que planteo una duda parecida acá. El TH es "Dudas asm 16bits".
Disculpen mi infinita ignorancia respecto a esto, y de antemano, mil gracias por la ayuda.
Respecto a si es posible hacer una aplicacion de consola en FASM,si se puede,claro :)
y por lo de la creacion del archivo no lo se,alguiene aqui te giara mucho mejor que yo,ademas no uso ya interrupciones el DOS,y el debug de Windows lo uso poco po no decir NADA,pero en FAMS o cualquie otro ensamblador deberias pasar la direccion del arcvhios al registro de segmento DS mediante AX,y operar con la funcion del DOS,debes de buscar un poco mas en google...hay mucha inf de esto.
en MASM seria asin:
Crear archivo
; Crear un archivo en ASM
.model small
.stack 100h
.data
nombre db "c:\tasm\bin\bogota.txt",00h ;especificar directorio del archivo
maneja dw ?
.code
algo proc near
mov ax,@data
mov ds,ax
mov ah,3ch
mov cx,00
lea dx,nombre
int 21h
jc salir
mov maneja,ax
salir: mov ax,4c00h
int 21h
endp
end algo
Escribir:
.model small
.stack 100h
.data
nombre db "c:\tasm\bin\bogota.txt",00h
texto db "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
maneja dw ?
.code
algo proc near
mov ax,@data
mov ds,ax
mov ah,3ch
mov cx,00
lea dx,nombre
int 21h
jc salir
mov maneja,ax
mov cx,500
nuevo: push cx
mov ah,40h
mov bx,maneja
mov cx,25
lea dx,texto
int 21h
pop cx
loop nuevo
mov ah,3eh
mov bx,maneja
int 21h
salir: mov ax,4c00h
int 21h
endp
end algo
siento no poder ayudarte
Creo que entonces tengo que intentar entender lo de DS/CS, etc, porque realmente, no entiendo la funcionalidad, y estoy leyendo pero seguramente ya lo voy a entender. No entiendo realmente qué es. (Entiendo, pero mal por lo visto). Ahora examino bien bien los códigos.
Yo busqué mucho en google, pero es que realmente la idea de los registros de segmento que tengo soy muy "vagas". Se que en DS se guardan los datos, (O eso entendí yo), pero no sé como guardarlos ahí, no sé exactamente como funciona todo, digamos, es algo bastante estúpido, pero ahora voy a ojear ambos códigos y voy a seguir intentando.
Muchas gracias..
Y si alguien puede darme una manita con lo del debug o lo que fuere lo agradecería ETERNAMENTE.
Nose si entendi bien la pregunta,si la pregunta es si se puede hacer una app de 32 bits de tipo consola no creo que se pueda....lo de DS/CS son registros de segmento.y en 32 bits no estan,es mas comodo.
saludos
si se puede en 32bits.
Los libros no muerden, lean un poco, un poco nada mas y encontraran las respuestas.
format PE Console
Lo unico que para entrada y salida de datos tendras que usar API, no puedes usar interrupciones.
salu2!
Hasta puedes usar la C runtime si quieres.
format PE Console
entry start
include "%fasminc%\win32a.inc"
include "%fasminc%\macro\if.inc"
section ".data" data readable writeable
szPause db "PAUSE",0
section ".code" code readable executable
start:
cinvoke printf, szStr, szPause
cinvoke system, szPause
invoke ExitProcess,0
section ".idata" import data readable writeable
library kernel32, "kernel32.dll",\
user32,"user32.dll",\
msvcrt, "msvcrt.dll",\
libmysql, "libmysql.dll"
include "%fasminc%\api\kernel32.inc"
include "%fasminc%\api\user32.inc"
include "%fasminc%\api\msvcrt.inc"
Si quieres usar la winapi en vez de c runtime
http://msdn.microsoft.com/en-us/library/ms682073(v=vs.85).aspx
BOOL WINAPI WriteConsole(
__in HANDLE hConsoleOutput,
__in const VOID *lpBuffer,
__in DWORD nNumberOfCharsToWrite,
__out LPDWORD lpNumberOfCharsWritten,
__reserved LPVOID lpReserved
);
solo que si usas la winapi, tienes que inicializar antes la consola.