Foro de Assembler

Muchas gracias!

Ahora lo pruebo, pero me surge una duda. Al hacer muchos int, se detienen el resto de unidades funcionales del procesador, entonces hace que se "refresque" ya que solo usa la parte del "int", y aunque la instruccion int cargue mucho, habra muchas zonas que al estar inactivas, pierdan calor....
Es mi duda.

De todos modos, ahora pruebo esto y si funciona te deberé una. Gracias!!

Naturalmente si llamas a la misma interrupcion solo cargaras una zona del pross, pero si lanzas interrupciones varidas, como las de control de datos, o las de llamadas a parefericos, tanto las unidades logicas, como la unidad de control del pross se sobrecargaran.
 
Bueno alquien aqui ha trabajado con Microcontrolador PICOBLAZE......Es que tengo que implementar un algortimo en este Micro y despues montarlo en una tarjeta VIRTEX 5...pero es que no tengo ejemplos de las instruciones que se usan en este microcontrolador...bueno cuaquier cosa que me puedan ayudar para entender las intrucciones ....

Nota : yo uso el Simulador PBlaze de XILINX

Gracias
 
Naturalmente si llamas a la misma interrupcion solo cargaras una zona del pross, pero si lanzas interrupciones varidas, como las de control de datos, o las de llamadas a parefericos, tanto las unidades logicas, como la unidad de control del pross se sobrecargaran.


Perfecto, seguire probando con las interrupciones, el unico problema es gestionarlo y programarlo con gcc inline assembler, pero es lo unico que he encontrado para mezclar C con assembler.

Muchas gracias.
 
Perfecto, seguire probando con las interrupciones, el unico problema es gestionarlo y programarlo con gcc inline assembler, pero es lo unico que he encontrado para mezclar C con assembler.
Muchas gracias.

Lo malo de usar el gcc como compilador es que tenes que usar modelo de datos AT&T, porque no pruenas el NASM es 32 bits, nativo de linux y soporta modelo Intel.

xjuanch0x dijo:
Bueno alquien aqui ha trabajado con Microcontrolador PICOBLAZE......Es que tengo que implementar un algortimo en este Micro y despues montarlo en una tarjeta VIRTEX 5...pero es que no tengo ejemplos de las instruciones que se usan en este microcontrolador...bueno cuaquier cosa que me puedan ayudar para entender las intrucciones ....

Nota : yo uso el Simulador PBlaze de XILINX

Gracias

Viejo la mayoria de las instrucciones para asm de procss y pics son las mismas y podes encontrar buena documentacion en este foro especialmente al comienzo...creo que puse un curso completo de pics....y la parte funcional de cada modelo de pic y sus caracteristicas lo pudes encontrar mejor en el foro de electronica mas exactamente aqui: http://www.laneros.com/showthread.php?t=120980 el viejo JRIOS_6660 es muy bueno en estos temas...seguro que el y los bros electronicos te ayudan con mas detalle...suerte.
 
;******************** C A L C U L A D O R A ************************


; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; Plantilla de Inicio
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
.486
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\macros\macros.asm


; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; Cabezeras
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; archivos de librerias que estan definidas para la funcion
; exportadas y examinadas por codigo preconstruido
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

includelib\masm32\lib\masm32.lib
includelib\masm32\lib\gdi32.lib
includelib\masm32\lib\user32.lib
includelib\masm32\lib\kernel32.lib

.code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

start:



call main ;llamando a la funcion

exit

main proc
LOCAL var1 :DWORD
LOCAL var2 :DWORD
LOCAL str1 :DWORD
LOCAL str2 :DWORD
LOCAL men1 :DWORD
LOCAL men2 :DWORD
LOCAL opcion :DWORD


print chr$("1.- Multiplicacion",13,10)
print chr$("2.- Suma",13,10)
print chr$("3.- Resta",13,10)
print chr$("4.- Division",13,10)


mov opcion, sval(input ("Que Operacion desea Realizar: "))




; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; M U L T I P L I C A C I O N
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

.IF (opcion==1)

print chr$("**** M u l t i p l i c a c i o n ****",13,10)
mov var1, input ("Ingrese un numero: ",13,10)
mov str1, sval(var1)
mov var2, input ("Ingrese UN numero: ",13,10)
mov str2, sval(var2)

mov eax, str1
mov ebx, str2

mul ebx

print str$(eax)
print chr$(13,10)

.ENDIF

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; S U M A
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

.IF(opcion==2)

print chr$("**** S u m a ****",13,10)
mov var1, input ("Ingrese un numero: ",13,10)
mov str1, sval(var1)
mov var2, input ("Ingrese UN numero: ",13,10)
mov str2, sval(var2)

mov eax, str1
mov ebx, str2

add eax, ebx

print str$(eax)
print chr$(13,10)


.ENDIF

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; R E S T A
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

.IF(opcion==3)
print chr$("**** R e s t a ****",13,10)
mov var1, input ("Ingrese un numero: ",13,10)
mov str1, sval(var1)
mov var2, input ("Ingrese UN numero: ",13,10)
mov str2, sval(var2)

mov eax, str1
mov ebx, str2

sub eax, ebx

print str$(eax)
print chr$(13,10)

.ENDIF

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; D I V I S I O N
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

.IF (opcion==4)

print chr$("**** D i v i s i o n****",13,10)
mov var1, input ("Ingrese un numero: ",13,10)
mov str1, sval(var1)
mov var2, input ("Ingrese UN numero: ",13,10)
mov str2, sval(var2)

mov eax, str1

invoke IntDiv,eax, str2

print str$(eax)
print chr$(13,10)

.ENDIF
main endp
end start
alguien me pued colaborar este progrma suma resta y multiplica pero al realizar la resta no me funciona y no me da los valores.

#include <p18f4550.inc>
salvar equ 0x0
operando1 equ 0x1
operando2 equ 0x2
org 0
goto continue
org 20
continue
movlw 0fh
movwf ADCON1
clrf PORTB
movlw 0ffh
movwf TRISB
movwf TRISE
clrf TRISD
repita
movf PORTB,w
movwf salvar
movlw 0fh
andwf salvar,w
movwf operando1
movf salvar,w
movlw 0f0h
andwf salvar,f
swapf salvar,f
movff salvar,operando2
movff PORTE,salvar
movlw b'00000011'
andwf salvar,f
movlw 00h
xorwf salvar,w
btfsc STATUS,Z
call sumar
movlw 01h
xorwf salvar,w
btfsc STATUS,Z
call resta
movlw 02h
xorwf salvar,w
btfss STATUS,Z
goto repita



multiplicacion
movf operando1,w
mulwf operando2
movff PRODL,PORTD
goto repita
sumar
movf operando2,w
addwf operando1,w
movwf PORTD
return
resta
movf operando2,w
subwf operando1,w
movwf PORTD
goto repita

end


les recomiendo gracias
 
alguien me pued colaborar este progrma suma resta y multiplica pero al realizar la resta no me funciona y no me da los valores.

La verdad creo queestas dependiendo mucho de esa libreria...a todas que compilador usas jamas avia visto ese # en un inclusion...bueno en fin en este foro esta el codigo de dos calculadoras mas aparte de la del bro $$H.V$$, una de 16 y otra de 32 bits, checa el codigo y avisanos....suerte.
 
Hola

Sin querer hacer polemica aclaro que microprocesador no es igual a microcontrolador, y si bien existe el lenguaje ensambler en ambos, estos no son "compatibles" aunque sean parecidos.

"#include", es parte de la sintaxis de la fuente para PIC's, y es similar al "include" de nuestras fuentes para CPU, en este caso carga un fichero que define variables especificas para el p18f4550.

Bien, solo tengo nociones de programacion de PIC's, por eso, cesarlab te aconcejo que busques aca en laneros.com los foros sobre pic, ...creo que en electronica existen varios, o consultes directamente por esos lados.

Igual, si solucionas el problema, date el tiempo de contarnos, por favor.

Suerte

Atte.
Kzk
 
La verdad creo queestas dependiendo mucho de esa libreria...a todas que compilador usas jamas avia visto ese # en un inclusion...bueno en fin en este foro esta el codigo de dos calculadoras mas aparte de la del bro $$H.V$$, una de 16 y otra de 32 bits, checa el codigo y avisanos....suerte.


el compilador que estoy utilizando es el mpolab y con e #include estoy llamando la libreria del4550
 
hola, comunidad de assembler, les queria pedir ayuda, esque quiero hacerle un programa por medio del emu8086 a mi novia(que complicacion la mia :p), bueno, lo unico que quiero q haga el programa es q por ejemplo, yo le digite "te amo" y el pc me lo muestre muchas veces, por ejemplo asi:

te amo te amo
te amo te amo
te amo te amo

algo asi, que cada letra salga con un color diferente, y q el fondo de cada carater tambien cambie

si alguien me puede echar una manito... se lo agradezco

saludos
 
el compilador que estoy utilizando es el mpolab y con e #include estoy llamando la libreria del4550

ya decia yo que eso me sonava conocido...como sea este foro va dedicado a asm de procss y en lo personal es poco lo que se sobre mplab....asi que no puedo decir mucho.

Berseker1 dijo:
hola, comunidad de assembler, les queria pedir ayuda, esque quiero hacerle un programa por medio del emu8086 a mi novia(que complicacion la mia
smiley%20-%20silly.gif
), bueno, lo unico que quiero q haga el programa es q por ejemplo, yo le digite "te amo" y el pc me lo muestre muchas veces, por ejemplo asi:

te amo te amo
te amo te amo
te amo te amo

algo asi, que cada letra salga con un color diferente, y q el fondo de cada carater tambien cambie

si alguien me puede echar una manito... se lo agradezco

saludos

Pos bro...primero que meloceria la suya bro....pero en fin resulta un buen ejemplo para tocar el cuento de los arreglos, emu8086 implementa un ejemplo simple de esa aplicacion, basta crear un arreglo de caracteres y pasarcelo como argumento...en fin aqui va el codigo, suerte con la peladita...:chino::chino::chino::chino:

PHP:
name "colores"                                                              ;Nombre del programa
                                                                            ;Posición de arranque en memoria
org     100h   

cad     db  '?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?' ;Arreglo de caracteres
pos     dw  ?                                                               ;Variable de posición

lea     si, cad                                                             ;Enlaza el arreglo con el registro si para usarlo como
                                                                            ;indice de movimiento.
mov     pos,si                                                              ;Copia en pos la posición de arranque para si

mov     ax, 3                                                               ;Inicia pantalla
int     10h

mov     ax, 1003h                                                           ;Activa modo de color y elimina parapadeo
mov     bx, 0     
int     10h
            
mov     dx, offset msi                                                      ;Improme mensaje de inicio
mov     ah, 9                   
int     21h 

mov     dl, 38                                                              ;Coloca el cursor en (38,0)
mov     dh, 0   
mov     ah, 02h
int     10h

mov     dl, 0                                                               ;Limpia el contador de buffer 'dl'

jmp     cap                                                                 ;Salta a rutina de captura
               
mod:                                                                        ;Rutina para el modo de inicio.
                                                                        
    mov     dl, 10                                                          ;Fiaja fila y columna (10,5)
    mov     dh, 5  
    mov     si, pos                                                         ;Coloca si en el inicio del arreglo
    
    mov     bl, 0                                                           ;Arranca el modo de color en negro sobre negro

    jmp     nchar                                                           ;Salta a la rutina de impresión
           

cap:                                                                        ;Rutina de captura
  
    mov     ah, 1                                                           ;Captura un caracter en al
    int     21h
    mov     [si], al                                                        ;Guarda el caracter en cad[si]
    inc     si                                                              ;Salta al siguiente cajon del arreglo
    inc     dl                                                              ;Incrementa el contador del buffer
    cmp     dl,16                                                           ;Compara el contador de buffer con el maximo posible
    je      mod                                                             ;Salta a la rutina del modo de inicio
    jmp     cap                                                             ;Salta a la rutina de captura "ciclo"
           
nfil:                                                                       ;Rutina de nueva fila
              
    mov     si, pos                                                         ;Devuelva si al inicio del arreglo
    inc     dh                                                              ;Incrementa la posición del cursor en fila
    cmp     dh, 21                                                          ;Compara la fila con el maximo posible 
    je      alto                                                            ;Salta a la rutina de alto
    mov     dl, 10                                                          ;Devuelve a la primer columna valida

nchar:                                                                      ;Rutina de impresión

    mov     ah, 02h                                                         ;Posiciona el cursor por (dh,dl)
    int     10h

    mov     al, [si]                                                        ;Carga el caracter en cad[si]
    inc     si                                                              ;Salta al siguiente cajon
    mov     bh, 0                                                           ;Imprime el caracter
    mov     cx, 1
    mov     ah, 09h
    int     10h
 
    inc     bl                                                               ;Incrementa valor de color
  
    inc     dl                                                               ;Incrementa columna
    cmp     dl, 26                                                           ;Compara la columna con el maximo posible
    je      nfil                                                             ;Salta a la rutina de nueva fila
    jmp     nchar                                                            ;Salta a la rutina de impresión "ciclo"

alto:                                                                        ;Rutina de alto

    mov     dl, 0                                                            ;Coloca el cursor en (0,23)
    mov     dh, 23   
    mov     ah, 02h
    int     10h
                                                                             ;Muestra mensaje de despedida
    mov     dx, offset msg          
    mov     ah, 9                   
    int     21h 

    mov ah, 0                                                                ;Espera que se pulse una tecla
    int 16h

    mov ax, 4c00h                                                            ;Termina programa y libera recursas
    int 21h   

msg     db "Fin...$"                                                         ;Mensajes
msi     db "Ingrese una cadena de 16 caracteres = ________________$"

Eso si solo se dispone de la paleta de 16 colores asi que por eso el arreglo es de 16 cajones para no repetir color....sale.
 
  • Me gusta
Reacciones: 2 personas
muchas gracias sairus, utd es el que me saca de las dudas y los problemas siempre en la porgramacion... ahi le van sus k++

saludos

Tampoco exageremos...que a mi me falta aun mucho por aprender y no ando salvando bros a diestra y ciniestra, y si hablamos de asm, los mas asperos son los bro KzK y $$H.V$$... mis respetos...
 
una duda:

como accedo a los puertos desde aplicaciones de 32 bits en windows nt/2000/xp??
tengo entendido que en estos sistemas no se tiene acceso directo a los dispositivos de hardware.

Alguien tiene un manual o tutorial de como hacerlo? ya tengo rato en google y no halloo nada

Saludos
 
  • Me gusta
Reacciones: 2 personas
una duda:

como accedo a los puertos desde aplicaciones de 32 bits en windows nt/2000/xp??
tengo entendido que en estos sistemas no se tiene acceso directo a los dispositivos de hardware.

Alguien tiene un manual o tutorial de como hacerlo? ya tengo rato en google y no halloo nada

Saludos

Lo que pasa es que esos SO bloquean el acceso a hardware como restrictiva de "seguridad" asi que hay que recurrir a ciertas trampas para poder acceder a estos servicios, la mas cencilla es hechar mano del userport para habilitar el acceso a puertos, funciona de pelos en nt/2000 y xp...solo colocar un archivo en el system/drivers y dar un para de clicks en el aplicativo...total aqui tenes el paquetico suerte.

En esta pag hay otros paqueticos muy utiles....http://www.embeddedtronics.com/design&ideas.html
 

Archivos adjuntos

  • UserPort.zip
    33 KB · Visitas: 126
Buenas, les queria pedir un favor muy grande a las personas interezadas en este lenguaje, la verdad soy estudiante de ingenieria informatica, y por azares de la vida resulte demasiado interesado en assambler, me parece un lenguaje muy completo y viendo sistemas operativos como el menuet(creo ke es ese) que cabe tan solo en un diskette por ser en assmbler, me parecio muy importante este tema, bueno despues de tanta carreta les quisiera pedir el link de un manual para principiantes pero ojala bien completo que me sirrva para comenzar en este tema, he estado leyendo mucho en internet y encuentro demasiados ariculos pero la verdad son un poco confusos, se les agradece!!!
 
Muchas gracias, ahora otra pregunta...
Como seria con puertos USB?

Hasta donde mi comprension del harware me alcansa, la diferencia entre manejar uno u otro puerto va solo en la direccion de memoria donde reside, por aca subo un pdf que explica algo sobre puertos (pura chafa, fue una expo de la u.)...lo importante es que hay se encuentra una tabla con las direcciones de memoria para cada puerto, pero en fin aqui va un mini div de lo que a usb port direcction se refiere

P
uerto E/S 0x00000000-0x00000CF7 Bus PCI
Puerto E/S 0x00000000-0x00000CF7 Controladora de acceso directo a memoria

IRQ 20 Intel(R) 82801FB/FBM USB Universal Host Controller - 2658
IRQ 20 Intel(R) 82801FB/FBM USB2 Enhanced Host Controller - 265C

Puerto E/S 0x000003C0-0x000003DF Mobile Intel(R) 915GM/PM Express PCI Express Root Port - 2591
Puerto E/S 0x000003C0-0x000003DF ATI MOBILITY RADEON X600

Puerto E/S 0x00002000-0x00002FFF Mobile Intel(R) 915GM/PM Express PCI Express Root Port - 2591
Puerto E/S 0x00002000-0x00002FFF ATI MOBILITY RADEON X600

IRQ 22 Controladora de host Texas Instruments OHCI Compliant IEEE 1394
IRQ 22 Controladora de host SD compatible con el estándar SDA
IRQ 22 Agere Systems AC'97 Modem

Dirección de memoria 0xC8000000-0xC83FFFFF Intel(R) 82801FB/FBM PCI Express Root Port - 2660
Dirección de memoria 0xC8000000-0xC83FFFFF Broadcom NetXtreme Gigabit Ethernet

IRQ 16 Mobile Intel(R) 915GM/PM Express PCI Express Root Port - 2591
IRQ 16 ATI MOBILITY RADEON X600
IRQ 16 Intel(R) 82801FB/FBM PCI Express Root Port - 2660
IRQ 16 Broadcom NetXtreme Gigabit Ethernet

IRQ 17 Intel(R) 82801FB/FBM PCI Express Root Port - 2662
IRQ 17 Intel(R) 82801FB/FBM USB Universal Host Controller - 2659

IRQ 18 Intel(R) 82801FB/FBM USB Universal Host Controller - 265A
IRQ 18 Texas Instruments PCIxx21/x515 Cardbus Controller
IRQ 18 Texas Instruments PCI GemCore based SmartCard controller

Dirección de memoria 0xC0000000-0xC7FFFFFF Mobile Intel(R) 915GM/PM Express PCI Express Root Port - 2591
Dirección de memoria 0xC0000000-0xC7FFFFFF ATI MOBILITY RADEON X600

Dirección de memoria 0xA0000-0xBFFFF Bus PCI
Dirección de memoria 0xA0000-0xBFFFF Mobile Intel(R) 915GM/PM Express PCI Express Root Port - 2591
Dirección de memoria 0xA0000-0xBFFFF ATI MOBILITY RADEON X600

Puerto E/S 0x000003B0-0x000003BB Mobile Intel(R) 915GM/PM Express PCI Express Root Port - 2591
Puerto E/S 0x000003B0-0x000003BB ATI MOBILITY RADEON X600

Dirección de memoria 0xC8800000-0xC8BFFFFF Mobile Intel(R) 915GM/PM Express PCI Express Root Port - 2591
Dirección de memoria 0xC8800000-0xC8BFFFFF ATI MOBILITY RADEON X600

suerte bro.
 

Archivos adjuntos

  • Buses y Puertos.pdf
    462.1 KB · Visitas: 6,352
Buenas, les queria pedir un favor muy grande a las personas interezadas en este lenguaje, la verdad soy estudiante de ingenieria informatica, y por azares de la vida resulte demasiado interesado en assambler,....

Primero que todo perdon por el doble post pero ya me quedaba muy recargado el anterior.

Ahora si bienveido al clan bro; lo que dices es verdad encontrar un manual completo de asm en internet es muy dificel, primero porque actualmente se considera el asm un lenguaje muerto (que estupidez no) y segundo porque dado que este depende mucho del hardaware del proceesador es un poco dispendioso unificarlo; ahora lo que sifue es primero que todo escojer un compilador por ejemplo io uso el compilador intel i86 para assembler de DOS y el NASM para linux, desde hay es mas facil conseguir documentacion sobre el compilador que equivale al lenguaje en cierta manera, de hecho el i86 que viene incluido en emu8086 tiene un buen grupo de ejemplos y datos para guiarse en cuanto al NASM que por cierto es multiplataforma hay uno que otro manual pero en ingles, aqui unas paginas atras hay un manual de nasm trasladado al español. Ya en conclusion te recomiendo que le heches un ojo al manual de virus que postee atras tiene 5 secciones de asm de 16 y 32 bits que explica bien las bases del lenguaje ya lo que sigue es buscar funciones particulares como hace el bro Tr0nAd0r con el manejo de puertos o como a mi con el manejo del mouse....
 
Que tal, adjunto una especie de buscaminas en asm de 16 bits, lo he echo con emu y no esta comentariado pues lo unico nuevo es la instruccion 33h que es para manejar el mouse...en fin aqui va:

PHP:
name "Minas"

org 100h
          
mov pts, 0
          
mov ax,3
int 10h 

mov     dx, offset ini
mov     ah, 09h
int     21h

mov     dx,0

mov     dh, 0
mov     dl, 19   
mov     ah, 02h
int     10h 
        
mov     ah, 1                                                           
int     21h        
mov     mn1, al

mov     ah, 1                                                           
int     21h        
mov     mn2, al

mov     ah, 1                                                           
int     21h        
mov     mn3, al 

mov     dx,0

mov     dh, 7
mov     dl, 20   
mov     ah, 02h
int     10h 

mov     dx, offset lle
mov     ah, 09h
int     21h

mov     dh, 8
mov     dl, 20   
mov     ah, 02h
int     10h 

mov     dx, offset ppp
mov     ah, 09h
int     21h

mov     dh, 9
mov     dl, 20   
mov     ah, 02h
int     10h 

mov     dx, offset uni
mov     ah, 09h
int     21h  

mov     dh, 10
mov     dl, 20   
mov     ah, 02h
int     10h 

mov     dx, offset lug
mov     ah, 09h
int     21h  

mov     dx, 0
        
jmp     rnd  
        
tab:
    
    mov     dh, 2
    mov     dl, 1   
    mov     ah, 02h
    int     10h  
    
    mov     dx, offset cab
    mov     ah, 09h
    int     21h     
        
    mov     dx, 0    
    
    mov cx, 12
    latr:  
        mov     dh, cl
        add     dh, 2
        mov     dl, 1   
        mov     ah, 02h
        int     10h 
        
        mov     dx, offset lat
        mov     ah, 09h
        int     21h  
        
        mov     dx, 0       
     loop latr         
              
    mov cx, 12
    fond:  
        mov     dh, cl
        add     dh, 2
        mov     dl, 2   
        mov     ah, 02h
        int     10h 
        
        mov     dx, offset fon
        mov     ah, 09h
        int     21h  
        
        mov     dx, 0       
     loop fond
    
    mov     dh, 15
    mov     dl, 1   
    mov     ah, 02h
    int     10h  
    
    mov     dx, offset cab
    mov     ah, 09h
    int     21h 
    
    mov dx, 0
    
    jmp mus
        
mus:   

    mov ax, 0003h
    int 33h
    
    cmp bl, 1
    je  script
    ja  alto
    jmp mus       
    
script:
    mov     si, ps1
    mov     di, ps2
    mov     bl, 0
    
    mov     ax, 0
    mov     al, cl
    mov     cl, 08h
    div     cl
    mov     cl, al  
    
    mov     ax, 0
    mov     al, dl
    mov     dl, 08h
    div     dl
    mov     dl, al
     
    cmp     cl, 2
    jae     p1
    jmp     mus    
    
    p1:
       cmp  cl, 13 
       jbe  p2
       jmp  mus
                
    p2:
        cmp     dl, 3
        jae     p3
        jmp     mus
        
    p3:
       cmp  dl, 14 
       jbe  dib
       jmp  mus
                
    dib:
    mov     dh, dl
    mov     dl, cl   
    mov     ah, 02h
    int     10h   
    
    tst:     
        mov ah, 0
        cmp [si], dl
        je  cxy
        jmp ts2
    ts2:   
        mov bh, [di]
        cmp [di], dh
        je  mut  
        jmp stad
               
    ind:           
        mov     al, 'O'                                                                                                                  
        mov     bh, 0
        mov     bl, 0Ah                                                           
        mov     cx, 1
        mov     ah, 09h
        int     10h  
    
    jmp mus
    
cxy:
    mov ah, 1
    jmp ts2  

mut:
    cmp ah, 1
    je  fin
    jmp stad        
    
stad:
    inc si
    inc di    
    inc bl
    jmp verif        

verif:
     cmp bl, 10
     je  punto
     jmp tst      
      
punto:
      inc pts
      cmp pts, 134
      je  win
      jmp ind
           
rnd:  
      
   lea      si, mix
   mov      ps1, si
   
   lea      di, miy
   mov      ps2, di
     
   add      mn1, 2
   sub      mn1, 30h
   mov      al, mn1 
   mov      [si], al
   inc      si    
  
   add      mn2, 1  
   sub      mn2, 30h
   mov      al, mn2
   mov      [si], al
   inc      si
  
   add      mn3, 3  
   sub      mn3, 30h
   mov      al, mn3
   mov      [si], al
   inc      si 
  
   sub      mn1, 1  
   mov      al, mn1
   mov      [si], al
   inc      si    
  
   add      mn2, 1
   mov      al, mn2
   mov      [si], al
   inc      si
   
   sub      mn3, 2
   mov      al, mn3
   mov      [si], al
   inc      si  
   
   add      mn1, 2
   mov      al, mn1
   mov      [si], al
   inc      si    
   
   sub      mn2, 1
   mov      al, mn2
   mov      [si], al
   inc      si
   
   sub      mn3, 1
   mov      al, mn3 
   mov      [si], al
   inc      si
   
   add      mn2, 2
   mov      al, mn2
   mov      [si], al
              
   mov      cx, 10
   ver:
        mov     al, [si] 
        add     al, 1
        mov     [si], al
        add     al, 1
        mov     [di], al
        dec     si      
        inc     di
   loop ver      
   
   jmp  tab

win:  
    mov     al, 'O'                                                                                                                  
    mov     bh, 0
    mov     bl, 09h                                                           
    mov     cx, 1
    mov     ah, 09h
    int     10h
    
    mov     dh, 16
    mov     dl, 0   
    mov     ah, 02h
    int     10h   
    
    mov     dx, offset wii
    mov     ah, 09h
    int     21h         
    
    jmp     alto                
                
                
fin:
    mov     al, 'x'                                                                                                                  
    mov     bh, 0
    mov     bl, 0Ch                                                           
    mov     cx, 1
    mov     ah, 09h
    int     10h
    
    mov     dh, 17
    mov     dl, 0   
    mov     ah, 02h
    int     10h
     
    mov     dx, offset fii
    mov     ah, 09h
    int     21h         
    
    jmp     alto
           
alto: 
    
    mov     ah, 0
    int     16h 
    
    ret

mn1  db  ?
mn2  db  ?
mn3  db  ?
ps1  dw  ?
ps2  dw  ?
pts  db  ? 
mix  db  ?,?,?,?,?,?,?,?,?,?
miy  db  ?,?,?,?,?,?,?,?,?,?   
cab db "--------------$"
lat db "|            |$"
fon db "############$"
ini db "Ingrese 3 números: ___$"  
fii db "¡¡¡¡PERDISTE!!!!$" 
wii db "¡¡¡¡GANASTE!!!!!$" 
lle db "        KRIPTO - MINAS        $"
ppp db " EDISON JAVIER HERRAN CORTES  $"
uni db "UNIVERSIDAD PILOTO DE COLOMBIA$"
lug DB "        GIRARDOT 2008         $"

Cualquier duda no duden en preguntar. Paz y suerte:chino:
 
Hola: a todos.
A ver quien me puede ayudar por que estoy hecho un lió. Me fui un mes de vacaciones, cuando vine borre todos los programas programados para empezar de nuevo, y así coger más experiencia, pero a hora me doy cuenta que todo me sale mal y incluso me da errores que antes no me daba y me vuelvo loco por no le encuentro lógica a ellos si antes me salían por que ahora no me sale nada y no le encuentro la solución y llevo tres días con el mismo programa y no me sale.
Es el prog001

Asm.

.386
.model flat,stdcall
option casemap:none

include prog001.inc error

.code
prog001:

invoke MessageBox,NULL,addr MsgTexto,addr MsgTitulo,MB_OK + MB_ICONINFORMATION
invoke ExitProcess,0


end prog001

inc

include windows.inc
include user32.inc
include kernel32.inc

includelib user32.lib
includelib kernel32.lib

.data
MsgTexto db "BiENVENiDO AL CURSO DE MASM + RADASM",0
MsgTitulo db " RVLCN - 2006",0


ERROR

\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"\Masm32\Include" "prg001.asm"
Assembling: prg001.asm
prg001.asm(5) : fatal error A1000: cannot open file : prog001.inc

Make error(s) occured.
Total compile time 31 ms.


¿Que es lo que esta mal o tengo descontrolado el programa?
Y es que el prog 001a, también me da errores, y el prog002 también

Ayuda por favor
 

Los últimos temas