ASM 32Bits (Consola?)

Iniciado por S3kh, 30 Abril 2011, 00:51 AM

0 Miembros y 1 Visitante están viendo este tema.

S3kh

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.

Riki_89D

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
Código (asm) [Seleccionar]

; 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:
Código (asm) [Seleccionar]

.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


S3kh

#2
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.


Riki_89D

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

Иōҳ

Eres adicto a la Ing. Inversa? -> www.noxsoft.net

Eternal Idol

Los libros no muerden, lean un poco, un poco nada mas y encontraran las respuestas.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

fary

format PE Console

Lo unico que para entrada y salida de datos tendras que usar API, no puedes usar interrupciones.

salu2!
Un byte a la izquierda.

_Enko

#7
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.