Ensamblador - soy novato que devo aprender primero

   
Vista:

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 12/06/2014 01:31:34
Buenas noches compañoros del foro..
soy novato en lenguaje ensamblador
lo unico que se es para que sirve mov, binarios,decimal,hexadecimal,octa y la conversion entre ellos

lo que nesecito es que alguno de ustedes que sabe de este lenguaje me aconceje que debo saber primero
o que temas debo saber primero.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 12/06/2014 12:23:15
¿Y para qué sirve mov?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 12/06/2014 17:33:17
mov sirve para... por ejemplo
mov dx,19d ;el valor de 19d se va a guardar en dx

sierto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 12/06/2014 17:59:26
Sí, sierto.

¿Y dónde se guarda el 19d aquí?

mov gs:byte ptr [edi + ecx + 8], 19d
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 12/06/2014 21:50:28
en la direccion de memoria donde apunta gs?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 13/06/2014 08:04:53
En el byte de memoria apuntado por edi + ecx + 8 del segmento gs. Si no pones nada usa ds, pero si especificas un segmento usa el que especifiques.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 13/06/2014 16:27:44
y que quiere decir [edi +ecx+8] ? por que supongo yo que no es una suma
y como se llaman esas palabras reservadas(asi se les llama en c++,java) como:edi,ecx,gs etc.
para poder aprender mas de ellas.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 13/06/2014 17:23:28
Sí es una suma. Es la suma de lo que valga edi, ecx más 8. Si edi vale 10, ecx 7 es 10 + 7 + 8.

Edi y ecx son registros del procesador de intel: Esos son registros de propósito general, mientras ds, gs, ss o cs son registro de segmento.

http://www.lawebdelprogramador.com/cursos/Ensamblador/index1.html
http://comunidad.dragonjar.org/f177/tutorial-completo-de-lenguaje-ensamblador-8845/#post21436
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 14/06/2014 01:30:22
cuando yo escribo esto

mov dx,3dh
significa que en el operando dx esta la opcion de abrir un archivo, pero entonces como hago para
decir que el nombre del archivo es....
por ejemplo
mov dx,3dh['archivo.ext']
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 14/06/2014 08:51:45
A las funciones del ms-dos los datos se pasan a través de registros. Un archivo se abre

1
2
3
4
5
FICHERO  db 'archivo.ext', 0
 
mov   ax, 3d00h
mov   dx, offset FICHERO
int   21h


En ds:dx está el offset al nombre del archivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 14/06/2014 21:11:34
si hubieras puesto dx en lugar de ax y ax en lugar de dx ¿hubiera sido igual?
es decir el operando puede tener cualquier caracter y eso no afecta en nada?
ejemplo
1
2
3
4
FICHERO db 'archivo.ext $',
mov jl,3d00h  ;es para decirle a ensambler que esta instruccion se va a tratar sobre un archivo? que pasa si no  la    pongo y dejo el resto intacto?
mov dz,offset FICHERO
int 21h
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 14/06/2014 22:11:33
No, no da igual en absoluto. Hay que poner cada cosa en su registro y teniendo en cuenta también el tamaño. No vale mov dl, 3d00h.

jl y dz no son registros de un procesador de intel.

La cadena de caracteres donde está el nombre del fichero tiene que acabar en 0. En $ sólo tienen que acabar las cadenas que vas a imprimir. $ es el símbolo de final de cadena al imprimir nada más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 16/06/2014 02:12:13
podrias por favor indicarme como hago para hacer la suma de 2+1
en ensamblador?.
para ver si entiendo un poco mejor lo que he leido en los documentos que he descargado de la pagina que me diste
y hacer comparaciones.
por que la verdad es que se me dificulta un poco

Y cuando tengo que usar: segmento de codigo, segmento de datos, segmento de pila y segmento de constantes?
en todo programa que quiera hacer con ensambler tengo que hacer uso de estos segmentos?

para que la cadena "hola mundo " me salga por pantalla, solo vasta con escribir int 21h? ejemplo
1
2
cadena db 'hola mundo $'
int 21h   ;hago que 'hola mundo' salga por pantalla :    que es como si digera cout<<cadena; en C++
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 16/06/2014 09:27:19
Suma de 2 + 1

1
2
3
4
5
6
7
8
9
10
mov ax, 2
add ax, 1
 
----------------------------
 
uno dw 1
dos dw 2
 
mov ax, dos
add ax, uno


Para sacar una cadena puedes usar las funciones del dos que se llaman con la int 21h, pero tienes que decirle qué función quieres usar y qué cadena quieres sacar

1
2
3
4
5
cadena db 'hola mundo $'
 
mov ah, 9
mov dx offsset cadena
int 21h


Segmento de código siempre hay uno y sólo uno. Es donde están las instrucciones que tiene que ejecutar el procesador. Segmento de pila también hay uno y sólo uno. Segmento de datos puedes usar uno o más. Eso depende de las necesidades del programa, y hay que tener en cuenta que ciertas operaciones del procesador, en las que intervienen los registros di y si, por ejemplo, se hacen entre segmentos, entre ds y es, con lo que hay que definir esos dos.

Una cosa son los segmentos que usa un procesador, referenciados con sus registros de segmento, y otra las partes en la que se puedas dividir un ejecutable. Un ejecutable tiene algo que puedes llamar "registro de constantes" pero eso no existe para el procesador. En un ejecutable es la memoria reservada en el propio ejecutable, en su imagen, pero eso se mete en el registro ds del procesador al cargar el programa así:

1
2
mov   ax, datos
mov   ds, ax



Iniciarse en el ensamblador se hace siempre muy difícil. Muchos programadores, incluso de c, lo más cercano al ensamblador, se han quedado por el camino. Una vez pasado el bache se lleva bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 16/06/2014 17:46:37
cuando dices 'operaciones de procesador' te refieres a sumas , restas , multiplicacion, divicion, y trigonometricfas o algebraicas?

un segmento es una porcion de memoria.

-----------------|
segmento



-----------------|
en ese segmento ¿representar digamos un bit es asi?

-------|---------|
bit
------ |
segmento

-----------------|

y suponiendo que ese bit tiene una direccion de memoria de 12345
¿yo puedo hacer una suma en esa direccion y guardarla en esa direccion de memoria(12345)?
¿que tendria que tener en cuenta para hacer dicha operacion en dicho segmento de memoria?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 16/06/2014 20:37:02
No, operaciones me refiero a instrucciones como movsw, que mueve del segmento ds al es, con lo que si la usas tienes que tener bien referenciados ambos segmentos.

El mínimo direccionable por un procesador es un byte, no un bit. Y sí, en un segmento de la memoria los bytes van unos detrás de otros.

Si en la dirección 12345 hay un 10h y ejecutas un add byte ptr[12345], 10h en 12345 habrá un 20h.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 17/06/2014 19:20:54
como haces para decirle a ensambler que un registro es de 8,16 o 32 bits ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 17/06/2014 21:10:56
Por el nombre.

Si pones al o ah es que estás usando un registro de 8 bits
Si pones ax es que estás usando un registro de 16 bits
Si pones eax es que estás usando un registro de 32 bits
Si pones rax es que estás usando un registro de 64 bits

Si pones byte ptr es que estás referenciando un byte
Si pones word ptr es que estás referenciando un word, 2 bytes, 16 bits
Si pones dword ptr es que estás referenciando un dword, 4 bytes, 32 bits
Si pones qword ptr es que estás referenciando un qword, 8 bytes, 64 bits
Si pones tword ptr es que estás referenciando un tword, 10 bytes, 80 bits
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 17/06/2014 23:25:07
y como defines un numero de 8,16,32 o 64 bytes?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por Pico (50 intervenciones) el 17/06/2014 23:53:18
db, dw, dd, qw, tw.

numero8 db 8
numero16 dw 16
numero32 dd 32
numero64 qw 64
numero80 tw 80
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

soy novato que devo aprender primero

Publicado por julio (14 intervenciones) el 18/06/2014 00:05:51
que bueno eres. Muchas gracias por tus aportes ¿como hago para darte puntos?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar