saludos lo 1º a todos es mi 1º post
soy autodidacta en ensamblador aprendi con un Z81 spectrum
es el lenguaje mas fácil para de aprender aun que dicen q es muy complicao
mi problema es el siguiente
me hice un programa para las quinielas de futbol y va de maravilla
y me hice un programa para la lotería primitiva, ahí tengo el problema
uso para los nº bits y me los guarda en formato primi.dat para leerlo me hice otro programa q lo lee perfectamente pero me lo saca en pantalla en formato txt cuando son pocas apuestas las copio de la pantalla y lo guardo en el block de notas, pero cuando son muchas como unas 3000 es muy tedioso copiar y pegar
lo q os quiero pedir es que rutina tengo q poner para q me lo guarde como txt
si pudierais ayudarme os lo agradecería
siento no saber mas de este lenguaje q me apasiona
e buscado por muchos sitios pero no encuentro nada por eso acudo a vosotros
saludos y gracias si podeis ayudarme y si no también os doy las gracias
este es el programa q me le los bits y los pasa a txt,por pantalla
yo lo quiero en un fichero txt y no por pantalla
no se q parte tengo q cambiar he probado muchas formas y no me da los resultados q quiero
pila segment stack
db 128 dup('pila')
pila ends
;..................................
;segmento de codigos
;..................................
codigo segment
lefich proc far
assume cs:codigo,ds:datos,es:datos,ss:pila
;
push ds
sub ax,ax
push ax
mov ax,datos
mov es,ax
mov ds,ax
call modo
call abrir
call escribe
call cerrar
ret
lefich endp
;..................................
leer proc
push ax
push bx
push cx
push dx
push si
mov bx,handle
mov cx,nbytes3
lea dx,num_bin
mov ah,3fh
int 21h
jnc bienleer
mov error,ax
jmp finleer
bienleer:
mov nbytes2,ax
mov error,0
finleer:
pop si
pop dx
pop cx
pop bx
pop ax
ret
leer endp
;................................
;procedimiento para pasar los numeros de binario a ascii
;...............................
escribe proc
push ax
push bx
push cx
push dx
push si
mov cx,nbytes1
cont1:
push cx
mov cx,18
cont2:
push cx
mov cx,6
cont:
push cx
call leer
sub ax,ax
mov al,num_bin
mov num_bin,0
mov cx,2
mov bx,00
mov si,10
relleno:
mov byte ptr numer[bx], '0'
inc bx
loop relleno
llena:
sub dx,dx
div si
add dl,'0'
dec bx
mov byte ptr numer[bx],dl
inc cx
or ax,ax
jnz llena
lea si,numer
mov cx,2
repite:
push cx
mov ah,02h
mov dl,[si]
int 21h
inc si
pop cx
loop repite
lea dx,space
call es_mensa
pop cx
loop cont
lea dx,salto
call es_mensa
pop cx
loop cont2
call tesper
pop cx
loop cont1
pop si
pop dx
pop cx
pop bx
pop ax
ret
escribe endp
;.....................................
es_mensa proc
push ax
mov ah,09h
int 21h
pop ax
ret
es_mensa endp
;.......................................
modo proc
push ax
mov ah,00h
mov al,mon
int 10h
pop ax
ret
modo endp
;....................................
tesper proc
push ax
mov ah,0
int 16h
pop ax
ret
tesper endp
;....................................
abrir proc
push ax
push dx
lea dx,fichero
mov al,acceso
mov ah,3dh
int 21h
jnc bienabrir
mov error,ax
jmp finabrir
bienabrir:
mov handle,ax
mov error,0
finabrir:
pop dx
pop ax
ret
abrir endp
;.....................................
cerrar proc
push ax
push bx
lea bx,handle
mov ah,3Eh
int 21h
pop bx
pop ax
ret
cerrar endp
;................................
;final del programa
codigo ends
end lefich
no consigo que me lo guarde ,me sale un fichero de 6000 bytes pero vacio en blenco
sialguien pudiera decir me donde me equivoco, gracias
escribe proc
push ax
push bx
push cx
push dx
push si
lea di,campo
mov cx,nbytes1
cont1:
push cx
mov dx,conta
call leer
sub ax,ax
mov al,num_bin
mov num_bin,0
mov cx,2
mov bx,00
mov si,10
relleno:
mov byte ptr numer[bx], '0'
inc bx
loop relleno
llena:
sub dx,dx
div si
add dl,'0'
dec bx
mov byte ptr numer[bx],dl
inc cx
or ax,ax
jnz llena
lea si,numer
mov cx,2
mov [di],bl
inc di
inc dx
adc conta,dx
pop cx
loop cont1
pop si
pop dx
pop cx
pop bx
pop ax
ret
escribe endp
;.....................................
modificado pero no me funciona bien
me saca el fichero txt con todo 1 no se como arreglarlo
escribe proc
push ax
push bx
push cx
push dx
push si
mov cx,nbytes1
cont2:
lea di,campo
mov dx,conta
adc di,dx
push cx
mov bx,handle
mov cx,nbytes3
lea dx,num_bin
mov ah,3fh
int 21h
jnc bienleer
mov error,ax
jmp finleer
bienleer:
mov nbytes2,ax
mov error,0
finleer:
mov ax,nbytes2
relleno:
mov byte ptr numer[bx], '0'
inc bx
loop relleno
mov si,10
llena:
sub dx,dx
div si
add dl,'0'
dec bx
mov byte ptr numer[bx],dl
or ax,ax
jnz llena
mov [di],dl
inc di
inc dx
adc conta,1
lea dx,space
call es_mensa
pop cx
loop cont2
pop si
pop dx
pop cx
pop bx
pop ax
ret
escribe endp
· Los códigos deben ir en etiquetas GeSHi
· Los titulos deben ser desciprtivos al problema
· No debes hacer doble post, usa el botón modificar
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex
No soy muy entendido en las interrupciones del DOS, ni la API de Windows, pero creo que deberias de usar Createfile con eso deberia de bastar.
Un saludo.
Cita de: cpu2 en 21 Marzo 2017, 12:39 PM
No soy muy entendido en las interrupciones del DOS, ni la API de Windows, pero creo que deberias de usar Createfile con eso deberia de bastar.
Un saludo.
no se q es eso ya digo q soy autodidacta
yo programo con tasm,y tlink para 8086
con el edit
Pues la API de Windows, funciones para "facilitar"
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx)
Tienes que incluir librerias, pero tambien la tienes en la interrupcion 21h si no me equivoco, https://msdn.microsoft.com/es-es/library/cc438736(v=vs.71).aspx (https://msdn.microsoft.com/es-es/library/cc438736(v=vs.71).aspx), 3CH. Te ira mejor esta ultima, pero mejor ves emigrando a la API.
Un saludo.
Edito:
Aqui tienes las funciones del int 21:
http://stanislavs.org/helppc/int_21.html (http://stanislavs.org/helppc/int_21.html)
Hola:
¿Por qué asm en Windwos a estas alturas de la vida?
Si es para temas de hadcer driver lo entiendo.
He estado buscando, no encuentro ejemplo, solo documentos sobre asm.
http://personals.ac.upc.edu/guerrero/fo/asm.pdf
https://es.answers.yahoo.com/question/index?qid=20080427172053AAJ4KWm
[youtube=640,360]https://www.youtube.com/watch?v=ofG8OD7Jbpg[/youtube]
Saludos.
CitarHola:
¿Por qué asm en Windwos a estas alturas de la vida?
Si es para temas de hadcer driver lo entiendo.
hola
te explico por que asm
es un programa de quinielas de loteria primitiva
la razón es por hay que analizar 13.987.147 columnas, con cualquier programa
se tarda muchos minutos si no horas
el mio lo hace en segundos
el progama esta hecho funciona muy bien ,el problema es que las guarda en binario , y tengo que pasarlas a ascii ,y tengo el otro programa que las lee y me las saca por pantalla
como trabajo con el símbolo del sistema solo puedo copiar de 24 en 24 líneas
para pocas apuestas esta bien las copio y las guardo en un fichero.txt
el problema es cuando son 6000 apuestas
si tuviera la posibilidad de pasar el fichero.dat a fichero.txt
seriagenial para mi proyecto
y la ultima razón es q no se programar en otro lenguaje, y odio windows
saludos y gracias
Cita de: melonero en 24 Marzo 2017, 15:15 PM
odio windows
¿Qué es lo que odias de Windows?
Puede que aquí te de ideas.
https://underc0de.org/foro/asm/crear-y-escribir-un-archivo-en-asm/
Parece muy interesante tu programa. Porque la genreacion de ahora que soy yo lo hago con PIC en asm, el 8086 ya no lo toco.
Saludos.