Ensamblador - direccionamiento

   
Vista:

direccionamiento

Publicado por julio (14 intervenciones) el 17/07/2014 01:00:14
Buenas tardes compañeros del foro.
tengo la siguiente duda,

¿cual es la diferencia de poner
1
mov al,1234h ;y asi lo mismo con bl-bh, cl-ch, dl-dh
y poner
1
mov ax,1234h    ;y asi lo mismo con los registros bx,cx,dx
?
muchas gracias por su gentil ayuda..
Buenas tardes
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

direccionamiento

Publicado por Pico (50 intervenciones) el 17/07/2014 10:21:12
La diferencia es que si pones mov al, 1234h te dará error al ensamblar, y mov ax, 1234h no.

Al es un registro de 8 bits y no cabe un 1234h. Es el byte bajo del acumulador. Ah es el siguiente byte. Al y ah forman ax, que es el word bajo del acumulador. Eax es el dword bajo y rax es el acumulador entero en 64 bits.

Lo mismo pasa con el resto de registros generales

http://compilers.cs.ucla.edu/fernando/projects/puzzles/tutorial/images/Slide10.png
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

direccionamiento

Publicado por julio (14 intervenciones) el 17/07/2014 17:40:25
Entonces cuando usas AH ò AL es por que lo que se va a guardar es algo que tenga 8 bits?
y en AX,BX,CX,DX se puede guardar algo que pese 16 bits (1 BYTE)?

que cosa podria pesar 8 bits?
que cosa podria pesar 16 bits?
que cosa podria pesar mas de 16 bits?

por que tengo entendido que un digito pesa 2. bits
entonces 1234h: 2*4(digitos)=8bits+1(h)=9

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

direccionamiento

Publicado por Pico (50 intervenciones) el 17/07/2014 22:04:13
Un byte son 8 bits.
Un word son 16 bits.
Un dword son 32 bits.
Un qword son 64 bits.
Un tword son 80 bits.
Un oword son 128 bits.

Cuando necesites sólo un byte usas al, ah, bl, bh, cl, ch, dl o dh.
Si, por ejemplo, vas a dividir 426 entre 8 no te interesa nada usar cx, porque si usas cx la división que estás haciendo es otra. Te interesa usar cl, y pones el 8 en cl, no en cx, y haces un div cl.

Con 2 bits sólo tienes valores entre 0 y 3, con lo que no te da para un dígito. En bcd se usan para cada dígito 4. 4 bits dan un rango entre 0 y 15, lo que da para representar cada dígito en decimal.

1234h es un word. Ocupa 16 bits. La h no cuenta, es sólo para indicarle al ensamblador que 1234 es hexadecimal, no decimal. Con 16 bits tienes entre 0h y FFFFh en hexadecimal, que es 65535 en decimal.

Tipos de datos hay de todos los tamaños. Un char ocupa un byte en codificación ascii. Si lo que usas es unicode ocupa 16, cada letra son 16 bits. Si vas guardar días del año, como son 365, con un word tienes bastante, pues llega a 65535. No te vale un byte pues sólo llega a 255. Si vas a guardar kilómetros entre capitales del mundo necesitas también un valor que al menos llegue a 20.000, un word. Si vas a guardarlos con decimales ya no te vale un word, necesitas un float, que son 32 bits, o un double, que son 64. Si quieres guardar kilómetros entre estrellas igual necesitas un long double, que pueden ser 80 o 128 bits, dependiendo de la plataforma.

El tamaño de los datos, excepto el char y el unicode o word, depende de la plataforma.
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

direccionamiento

Publicado por julio (14 intervenciones) el 18/07/2014 18:00:23
Ok.
Y si por ejemplo cuando haces una suma...
add ax,bx
y el resultado es un peso mayor al que soporta ax
por ejemplo
suponiendo que ax es un registro de 16 bits de longitud (256)
y el resultado es 350 ¿como harias para resolver este problema ?
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

direccionamiento

Publicado por Pico (50 intervenciones) el 18/07/2014 18:30:27
350 son también 16 bits. Tienes un pequeño lío con los bits. Usa una calculadora que maneja números binarios para ver cuántos bits ocupa cada número.

mov ax, 9999h
mov bx, 9999h
add ax, bx

ax = 3332
cf = 1

El bit de acarreo, cf, del registro de flags se pone a uno cuando en una operación se produce un desbordamiento. Así, el bit cf junto con ax da 13332, resultado correcto.
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