elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Sigue las noticias más importantes de elhacker.net en ttwitter!


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [DUDA] Pares de registros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [DUDA] Pares de registros  (Leído 845 veces)
integeroverflow

Desconectado Desconectado

Mensajes: 60


Ver Perfil
[DUDA] Pares de registros
« en: 4 Marzo 2017, 15:27 »

hola, queria ver si alguien me podia aclarar esta duda.

estoy aprendiendo ASM x86, mas especificamente la sintaxis de intel. (utilizo NASM).

estuve viendo la instruccion MUL, que sirve para hacer operaciones de multiplicacion.

segun esta pagina: http://x86.renejeschke.de/html/file_module_x86_id_210.html

Opcode    Mnemonic    Description
F6 /4    MUL r/m8    Unsigned multiply (AX = AL * r/m8).
F7 /4    MUL r/m16    Unsigned multiply (DX:AX = AX * r/m16).
F7 /4    MUL r/m32    Unsigned multiply (EDX:EAX = EAX * r/m32).

para hacer una operacion de multiplicacion con un BYTE, tengo que mover el numero a multiplicar al registro AL, y me devuelve el resultado en AX.

Código:
    mov al, 5
    mul 5
    ; ahora ax = 25

para hacer una multiplicacion con un WORD, deberia mover el valor a AX:

Código:
    mov ax, 5
    mul 25
    ; ahora DX:AX vale 125

trabajando con DWORDS, seria:

Código:
     mov eax, 5
     mul 1000
     ; ahora EDX:EAX vale 5000

mi duda es, que significan esos pares de registros?
el resultado se aloja en el registro EDX o en el registro EAX?
o en ambos?
como hago para manipular el resultado, teniendo en cuenta que se guardan en pares de registros?

no logro entender cual es el significado de esas expresiones.
que seria un par de registros y cual es su utilidad?
si me podrian dar algun ejemplo.

gracias.



En línea

cpu2


Desconectado Desconectado

Mensajes: 924


Ver Perfil
Re: [DUDA] Pares de registros
« Respuesta #1 en: 5 Marzo 2017, 22:40 »

Tienes los pares por que al multiplicar por ejemplo el valor mas alto que puedes en un unsiged ejemplo con AL, 0xFF = 255 = 11111111

El resultado de este seria un unsigned de 16 bits, y este tendra que estar en un registro de 16 como AX.

Lo mismo cuando multiplicas un unsigned de 16 bits en AX este se puede tornar a 32 bits, hay el registro DX, el resto del resultado se gurarda en el otro.

Si el resultado no pasa del tamaño no tiene porque usar el registro concatenado.

Asi en todos. Saludos.


En línea

integeroverflow

Desconectado Desconectado

Mensajes: 60


Ver Perfil
Re: [DUDA] Pares de registros
« Respuesta #2 en: 6 Marzo 2017, 00:49 »

Tienes los pares por que al multiplicar por ejemplo el valor mas alto que puedes en un unsiged ejemplo con AL, 0xFF = 255 = 11111111

El resultado de este seria un unsigned de 16 bits, y este tendra que estar en un registro de 16 como AX.

Lo mismo cuando multiplicas un unsigned de 16 bits en AX este se puede tornar a 32 bits, hay el registro DX, el resto del resultado se gurarda en el otro.

Si el resultado no pasa del tamaño no tiene porque usar el registro concatenado.

Asi en todos. Saludos.


entonces suponiendo que el resultado sea 0110 1010 1110 0110
me quedarian los 2 primeros bytes en DX y los 2 ultimos en AX, asi?
DX:0110 1010
AX:1110 0110

entonces como haria para mover el resultado a un registro de 32 bits?

supongamos:

mov AX, 655
mul 321

;digamos que el resultado se torno en una DWORD, como hago para mover ese valor a ECX por ejemplo?=


En línea

cpu2


Desconectado Desconectado

Mensajes: 924


Ver Perfil
Re: [DUDA] Pares de registros
« Respuesta #3 en: 6 Marzo 2017, 13:31 »

Citar
entonces como haria para mover el resultado a un registro de 32 bits?

supongamos:

mov AX, 655
mul 321

;digamos que el resultado se torno en una DWORD, como hago para mover ese valor a ECX por ejemplo?=/quote]

El resultado seria de 18 bits, 110011010101001111 los bits que no entren en AX pasaran a DX.

Tienes muchas formas de copiar el valor a ECX, primero mira el valor de ax y de dx para enterarte, luego puedes mover los bits con short o similar.

Saludos.
En línea

integeroverflow

Desconectado Desconectado

Mensajes: 60


Ver Perfil
Re: [DUDA] Pares de registros
« Respuesta #4 en: 6 Marzo 2017, 14:47 »

seria correcto mover el valor de dx a ecx,  shifteando a la izquierda 16 bits y efectuando AND con ax?
En línea

cpu2


Desconectado Desconectado

Mensajes: 924


Ver Perfil
Re: [DUDA] Pares de registros
« Respuesta #5 en: 6 Marzo 2017, 17:34 »

Si no tambien podrias moverlos directamente al stack.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pagina De registros Duda
PHP
LogMare 3 895 Último mensaje 27 Junio 2008, 05:03
por LogMare
Otra duda con registros... « 1 2 »
Programación Visual Basic
ToNy_EsP 15 2,395 Último mensaje 5 Junio 2009, 15:09
por 43H4FH44H45H4CH49H56H45H
Duda-Registros « 1 2 »
Programación C/C++
h0oke 11 1,870 Último mensaje 6 Septiembre 2009, 15:51
por h0oke
[Duda] Registros
ASM
cpu2 0 842 Último mensaje 25 Octubre 2012, 17:24
por cpu2
Duda sobre registros en C++
Programación C/C++
seryioo 1 273 Último mensaje 7 Septiembre 2015, 16:51
por ivancea96
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines