Título: [DUDA] Pares de registros Publicado por: integeroverflow en 4 Marzo 2017, 15:27 pm 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 para hacer una multiplicacion con un WORD, deberia mover el valor a AX: Código: mov ax, 5 trabajando con DWORDS, seria: Código: mov eax, 5 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. Título: Re: [DUDA] Pares de registros Publicado por: xv0 en 5 Marzo 2017, 22:40 pm 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. Título: Re: [DUDA] Pares de registros Publicado por: integeroverflow en 6 Marzo 2017, 00:49 am 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?= Título: Re: [DUDA] Pares de registros Publicado por: xv0 en 6 Marzo 2017, 13:31 pm 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. Título: Re: [DUDA] Pares de registros Publicado por: integeroverflow en 6 Marzo 2017, 14:47 pm seria correcto mover el valor de dx a ecx, shifteando a la izquierda 16 bits y efectuando AND con ax?
Título: Re: [DUDA] Pares de registros Publicado por: xv0 en 6 Marzo 2017, 17:34 pm Si no tambien podrias moverlos directamente al stack.
Saludos. |