Foro de Assembler

Que bueno que aprecien las 'reliquias', yo me defiendo en Cobol.
se refiere al assembler como reliquia???
assembler no es ninguna reliquia, es lenguaje de maquina.
(Cobol, eso si es una reliquia.)

cuando su codigo le resulte MUY LENTO, MUY LARGO, MUY PESADO O MUY INEFICIENTE, le va a tocar untarse de assembler
 
Creo que no se esta refiriendo en forma despectiva, sino que todo lo contrario, ahora, si es una reliquia, dado que, me parece, fue el primer lenguaje a utilizar, antes solo se manejaba el codigo binario que no da para lenguaje, de todos modos, siendo un lenguaje de alta eficiencia por su sercania a la maquina, su aplicacion no pasara de moda, como a ocurrido con algunos lenguajes de alto nivel, a no ser que se revolucionen los micros.

En mi modesta opinion.

Atte.
Kzk
 
pero es que puso a Cobol al lado de reliquia,
el Cobol es algo viejo que se puede dejar de usar y reemplazar por algo nuevo,
el assembler no.
 
Hola gabrielhvd

Pero antes, juegatela con algunas cositas, algun trabajo al menos para conocer tu nivel, cuentanos que herramientas utilizas.

En lo personal no me intereza demostrar lo que se o lo que creo saber, mas bien sino, desarrollar ayudando a desarrollar.

Te podemos ayudar, pero en buena, gastate un poquito, ja! ja!

...
 
Hola kzk, bueno estoy estudiando, manejo los lenguajes C++ y actualmente estoy cursando Java, el cual ya se manejar bastante bien, obvio tambien manejo PASCAL, tengo este actual problema con Ensamblador, necesito realizar este programa que expliqué previamente pero no entiendo muy bien el lenguaje ensablador :\, tengo un codigo que compara 2 strings y verifica si son iguales o no, pero no he logrado adaptarlo a lo que necesito :'( estoy corto de tiempo porque tambien tengo entrega de otro proyecto, el cual va muy bien por cierto :-p, pero me retrase bastante con esto de aprender el lenguaje ensablador....consegui este foro y vi bastante gente que sabe del lenguaje y bueno a ver si alguien podia ayudarme....de mas esta decir que yo puedo ayudar a quien necesite algo y su duda este dentro de mis conocimientos, no voy a pedir para no dar, si puedes ayudarme o alguien mas de verdad se lo agradeceria mucho y reiterando que mis conocimientos estan al servicio de la comuinidad del foro...Gracias
 
Ok!

Por lo del nivel me referia respecto a assambler mas que a otras cosas, pero me queda claro que lo comienzas a aprender, pero tienes bases de programacion, bien.

Por favor postea ese codigo que tienes, para saber mas o menos que es lo que quieres entender, mientras comenzare a escribir algunas cosas para avanzar y llegar a lo que necesitas, igual dinos con cuantos dias cuentas para trabajar, antes de tu urgencia.

...
 
Hola kzk, no habia tenido chance de revisar el foro dado que he estado trabajando en el proyecto que te comente, dispongo de muy poco tiempo por desgracia...si despues de leer esto quieres seguir con lo de ayudarme de verdad que gracias men, y sino puedes por el poco tiempo bueno gracias igual tambien te entiendo, por lo menos hubo las intenciones :)....y bueno aqui te paso el codigo que tengo que solamente compara 2 strings y no logro entenderlo

Saludos
Gracias


.model small
.stack
.data

cadena1 db 10 dup(' '),'$'
cadena2 db 10 dup(' '),'$'
msj1 db 'Las cadenas SI son iguales$'
msj2 db 'Las cadenas NO son iguales$'

.code
.startup

mov ah,06h
mov al,00h
mov bh,07h
mov cx,0000h
mov dx,184fh
int 10h


lea SI,cadena1
mov cx,10
regresa:
mov ah,07h
int 21h
cmp al,13
je termina
mov [SI],al
inc SI
mov dl,al
mov ah,02h
int 21h
loop regresa

termina:
lea SI,cadena2
mov cx,10
regresa2:
mov ah,07h
int 21h
cmp al,13
je termina2
mov [SI],al
inc SI
mov dl,al
mov ah,02h
int 21h
loop regresa2

termina2:

push ES
mov AX,DS
mov ES,AX
mov cx,10
lea SI,cadena1
lea DI,cadena2
repe cmpsb
JNE no_igual
jmp igual
pop ES

no_igual:
lea DX,msj2
jmp fin

igual:
lea DX,msj1

fin:
mov ah,09h
int 21h

.exit
end
 
mañana, Uf! no se de cuantas horas dispongas apartir de ahora, igual te dejo algo que escribi :

org 0100h
xor bx,bx ;inicia BX primer indice dentro de la cadena
jmp j2_ini ;salta a instruciones recurentes

c1_cadena:
mov al,offset palabra[di] ;Guarda dato de palabra en AL, a comparar

cmp al,"$" ;Control fin de palabra, dato de palabra con "$"
jz encontrado ;"$" de fin de palabra, si es asi, palabra existe, entonces es "encontrado"

cmp offset cadena[bx+si],"$" ;Control fin de cadena
jz no_existe ;"$" de fin de cadena, si es asi, palabra "no existe" en cadena

cmp offset cadena[bx+si],al ;Compara dato de cadena con dato de palabra, antes guardado en AL
jnz j1_cadena ;salta si no es igual al dato
;sigue si los datos de cadena y palabra son iguales
inc si ;siguiente dato en cadena, apuntado por SI, segundo indice de cadena
inc di ;siguiente dato en palabra, apuntado por DI, indice de palabra
jmp c1_cadena ;continua con los siguientes datos

j1_cadena:
inc bx ;incrementa priner indide de cadena, nuevo dato,

j2_ini
xor si,si ;inicia a cero segundo indice para cedana
xor di,di ;inicia a cero indice para palabra
jmp c1_cadena ;continua atravez de la cadena buscar, via bx como indice

encontrado:
jmp encontrado ;queda aca si existe la palabra
no_existe:
jmp no_existe ;aca, sino

cadena db "Buscar aqui$"
palabra db "car$"

Como dije en post anterior es lo medular, lo central, sin controles, entradas o salidas, pero deja datos a procesar, si bien esta bien documentado, explico a groso modo la idea :

" Con los OFFSET se obtiene las ubicaciones de memoria de los textos, con los indices avanzamos en ellos, para la cadena, BX recorre esta si no existe coincidencias, hasta llegar a un "$" como señal de termino de cadena, si esto se da, entonces no encontro la palabra dada, osea, esta no existe, ahora si encuentra una coincidencia antes, BX se detiene, pero continuamos recorriendo la cadena con SI, ademas con Di recorremos la palabra, si las coincidencias se mantienen hasta la señal "$" de palabra, entonces la palabra existe en la cadena, es encontrada, ahora si, encontramos un dato ya dentro de la palabra que no coincida, retamamos en BX+1, para la cadena y reiniciamos SI y DI, para comenzar de nuevo a recorrer la palabra desde el inicio.
Cuando la palabra no existe, tanto SI como DI quedan en cero, de lo contrario SI y DI seran distintos a cero"

Te dejo esto para que lo analises, no son muchas las instruciones que hay que comprender.
Creo que quizas falte mostrar si existe o no existe la palabra, en tal caso abra que agregar la instrucciones que muestre los mensajes correspondientes para cada caso, tambian hay que agregar las rutinas de entrada para la cadena y la palabra, es asi lo necesites, eso es rapido, haber si alcaso a dejarte el codigo completo en las proximas horas.

Uff! tengo que ayudarle a mi hija con un trabajo, haber si me hago el tiempo, dame un par de horas.

Si pudieras utilizar, el emu8086 seria ideal.

Eso por ahora

...
 
Muchisimas gracias kzk, de verdad no sabes cuanto aprecio tu ayuda :-p, estoy viendo tu publicacion y analizandola, me cuesta un poco dado que soy un novato en este lenguaje:(, pero ya le eche una ojeada a tu codigo y poniendome un rato a verlo y analizarlo creo poder comprenderlo:), bueno actualmente dispongo de aproximadamente 19 horas, para la hora tope de entrega:\....ojala que si puedas terminar de ayudarme men!! claro poniendo tus necesidades y tiempo primero ;) ayuda a tu hija con su trabajo y bueno ojala te quede algo de tiempo para mi problema...:)....de verdad que muchisimas gracias por el esfuerzo e intencion! y bueno asi no te de tiempo de ayudarme de verdad aprecio mucho la intencion....Gracias kzk saludos y cualquier cosa que necesites que yo pueda ayudar no dudes en pedirmelo...


una vez mas...Gracias!!
 
Hola
Revise el codigo que dejaste, lo corri en el emu8086, pero lo que hace es comparar si las dos cadenas entrantes son igules, y entiendo que una de las cadenas debe ser mayor, por tanto voy a agregar las partes que falta al codigo que deje y completarlo, de ese modo quedara de tres partes, una de entrada de datos, otra de procesos de datos, y la tercera de salida de resultados.

te lo dejo en un rato mas.

...
 
ok kzk, yo estuve viendo analizando el codigo que me dejaste hace rato y creo haberlo entendido bastante bien, y si, el codigo que puse hace rato solo compara 2 string y dice si son iguales, pero tiene una limitacion del tamaño del string que no supe modificarla :\ averigue por internet y consegui 2 formas en las que incrementan el tamaño de un string pero a la hora de tratar de implementarlo en este codigo me daba errores....:\....no supe implementarlo, este lenguaje ensablador es muy diferente a los lenguajes de alto nivel que vengo trabajando en mi carrera...la verdad se me hace bastante dificil :s

y bueno aqui estare men esperando ;)....

Saludos y gracias por tu tiempo....
 
Esto seria :

Código:
[list][FONT="Lucida Console"][U][B]Buscador.asm[/B][/U]

    org 0100h 
    mov dx, offset msg1      
    mov ah, 9 
    int 21h                 [COLOR="SeaGreen"];Imprime mensaje uno[/COLOR] 
	     
[COLOR="SeaGreen"];ETAPA UNO[/COLOR]     
    lea SI,cadena 
ent_cadena: 
    mov ah,07h 
    int 21h                 [COLOR="SeaGreen"];Espera entrada de teclado[/COLOR] 
    cmp al,13 
    je ter_cadena 
    mov [SI],al 
    inc SI 
    mov dl,al 
    mov ah,02h 
    int 21h                 [COLOR="SeaGreen"];Salida en pantalla[/COLOR]  
    loop ent_cadena 
 
ter_cadena: 
    mov [si],"$"            [COLOR="SeaGreen"];Señal de fin[/COLOR]  
	    
    mov dx, offset msg2      
    mov ah, 9 
    int 21h                [COLOR="SeaGreen"];Imprime mensaje dos[/COLOR]  
	     
     
    lea SI,palabra 
ent_palabra: 
    mov ah,07h 
    int 21h                [COLOR="SeaGreen"];Espera entrada de teclado[/COLOR]  
    cmp al,13 
    je ter_palabra 
    mov [SI],al 
    inc SI 
    mov dl,al 
    mov ah,02h 
    int 21h                [COLOR="SeaGreen"] ;Salida en pantalla[/COLOR]  
    loop ent_palabra 
 
ter_palabra: 
    mov [si],"$"           [COLOR="SeaGreen"];Señal de fin[/COLOR]  
     
[COLOR="SeaGreen"];ETAPA DOS[/COLOR]     
    xor bx,bx              [COLOR="SeaGreen"];inicia BX primer indice dentro de la cadena[/COLOR]  
    jmp j2_ini             [COLOR="SeaGreen"];salta a instruciones recurentes[/COLOR]  
 
c1_cadena:  
    mov al,offset palabra[di] [COLOR="SeaGreen"];Guarda dato de palabra en AL, a comparar[/COLOR]  
 
    cmp al,"$"             [COLOR="SeaGreen"];Control fin de palabra, dato de palabra con   "$" [/COLOR]
    jz encontrado          [COLOR="SeaGreen"] ;"$" de fin de palabra, si es asi, palabra existe, entonces es "encontrado" [/COLOR] 
 
    cmp offset cadena[bx+si],"$" [COLOR="SeaGreen"] ;Control fin de cadena[/COLOR] 
    jz no_existe           [COLOR="SeaGreen"] ;"$" de fin de cadena, si es asi, palabra "no existe" en cadena[/COLOR]  
 
    cmp offset cadena[bx+si],al [COLOR="SeaGreen"] ;Compara dato de cadena con dato de palabra, antes guardado en AL[/COLOR]  
    jnz j1_cadena              [COLOR="SeaGreen"] ;salta si no es igual al dato[/COLOR]  
                               [COLOR="SeaGreen"] ;sigue si los datos de cadena y palabra son iguales[/COLOR]  
    inc si                    [COLOR="SeaGreen"]  ;siguiente dato en cadena, apuntado por SI, segundo indice de cadena[/COLOR]   
    inc di                     [COLOR="SeaGreen"] ;siguiente dato en palabra, apuntado por DI, indice de palabra[/COLOR]  
    jmp c1_cadena              [COLOR="SeaGreen"] ;continua con los siguientes datos[/COLOR]  
 
j1_cadena:  
    inc bx                 [COLOR="SeaGreen"] ;incrementa primer indide de cadena, nuevo dato[/COLOR]   
 
j2_ini: 
    xor si,si              [COLOR="SeaGreen"] ;inicia a cero segundo indice para cedana[/COLOR]  
    xor di,di              [COLOR="SeaGreen"] ;inicia a cero indice para palabra[/COLOR]  
    jmp c1_cadena          [COLOR="SeaGreen"] ;continua atravez de la cadena buscar, via bx como indice[/COLOR]  
 
     
[COLOR="SeaGreen"];ETAPA TRES[/COLOR]    
encontrado: 
    mov dx, offset msg3      
    mov ah, 9 
    int 21h                [COLOR="SeaGreen"] ;Imprime mensaje 3[/COLOR]  
    jmp salida 
	     
no_existe: 
    mov dx, offset msg4      
    mov ah, 9 
    int 21h                [COLOR="SeaGreen"] ;Imprime mensaje 4[/COLOR]  
	 
salida: 
    mov ah,07h 
    int 21h                [COLOR="SeaGreen"] ;Espera entrada de teclado[/COLOR]  
    ret                    [COLOR="SeaGreen"] ;vuelve a Sistema[/COLOR]  
     
     
Msg1 db "Entre cadena: $" 
msg2 db 0Dh,0Ah,"Entre oalabra: $" 
msg3 db 0Dh,0Ah,"ENCONTRADO$" 
msg4 db 0Dh,0Ah,"NO EXISTE$"     
cadena db 256 dup(' ') 
palabra db 16 dup(' ')[/FONT] 
 
[/list]

Atte.
Kzk
 
Ya lo estoy leyendo:nervios:....gracias men!! no sabes de verdad cuanto te lo agradezco, una pregunta cuando introduzco el primer string tengo que colocar un $ al final del mismo no?
 
si si ya me di cuenta, men de verdad que felicitaciones, me sorprende como sabes usar de bien el lenguaje ensablador, a mi me cuesta un mundo!!....que grande eres!! :) full gracias!!! sabes que cualquier cosa que pueda ayudarte con mis conocimientos en programacion puedes contar conmigo!!....Gracias kzk!!!!, si puediera agragarte al msn o algo asi para estar en contacto seria bien!! ;)
 
oka, si bueno seria, igual assambler por aca, asi compartimos el desarrollo que es el espiritud del todo esto.

Buena suerte!
p.D.:en 5 minutos me desconecto.
 
Epa, "Delivery to the following recipients failed.", tienes en tu correo mi mensaje del ejecutable???
...
 

Los últimos mensajes

Los últimos temas