Assambler

Solo disponible en BuenasTareas
  • Páginas : 19 (4549 palabras )
  • Descarga(s) : 0
  • Publicado : 26 de mayo de 2011
Leer documento completo
Vista previa del texto
TURBO ASEMBLER EJERCICIOS PROPUESTOS
1.-



2.- Multiplicación y división de enteros
Multiplicación y división de números enteros en la arquitectura x86 no son tan intuitivos como la adición y sustracción de números enteros. La mayor enteros sin signo que puede almacenar en un registro de propósito general de 32-bit tiene el valor así que cuando tenemos dos de esos ymultiplicarlas obtenemos . Para calcular el número de bits de este número requiere de estar representados en una norma del sistema posicional binario usamos la fórmula con una base de : . Esto significa que el resultado de multiplicaciones , en general, es al menos 64 bits de tamaño. Sin embargo, nuestra arquitectura x86 sólo tiene registros generales de 32-bit propósito ¿cómo es este tratado ? Elresultado se almacena en dos registros . El reg mul instrucciones debe utilizarse para la multiplicación de dos números enteros sin signo de 32 bits. Se necesita un solo argumento - un registro de propósito general. Utiliza eax como el otro factor para lo que se calcula eax * reg. El resultado se almacena en edx : eax lo que significa que la parte superior de 32 bits se almacenan en edx y los 32 bits másbajos del resultado se almacena en eax. Ejemplo :
mov eax, 012345678h
mov edx, 012345678h
mul edx
; El resultado de esta multiplicación es:
; 0x12345678 0x12345678 * = 0x014B66DC1DF4D840
; ¿Qué produce los siguientes valores de edx y EAX :
; edx = 0x014B66DC
; eax = 0x1DF4D840
Multiplicaciones solía ser mucho más cara que la suma y la resta. La multiplicación es considerablemente más caraque la suma o resta decir que en términos de tiempo de ejecución. El imul la instrucción se utiliza para la multiplicación de enteros con signo y apoya a más operandos. Como mul, Puede guardar el resultado en edx : eax, Teniendo sólo un único argumento . Pero también puede tener múltiples registros e incluso un valor inmediato , sino que se deseche la parte superior de 32-bits del resultado acontinuación . Ejemplo :
2147483647
mov eax, -2
mov ebx, -2
imul ebx
; edx : eax = (-2) * (-2) = 4 = 0x0000000000000004

; Vamos a usar el más grande enteros positivos firmado posible:
mov edi, 2147483647
mov esi, 2147483647

, Lo que almacena el resultado en edición y descarta el 32 bits superiores :
imul edi, esi
; 2147483647 2147483647 * = = 4611686014132420609 0x3FFFFFFF00000001
;edición = 0x00000001
; 0x3FFFFFFF se descarta

mov eax, 10
mov ebx, 20

, Lo cual simplemente añade otro factor de la multiplicación:
imul eax, ebx, 3
; 10 * 20 * 3 = 600
; superior de 32 bits se descartan sino que son 0 de todos modos , así que:
; eax = 600 = 0x00000258
División es mucho más caro que el de la multiplicación. El div reg la instrucción se utiliza para la división sinsigno. Se realiza la división edx : eax / reg y almacena el cociente en eaxedx. En caso de que ni siquiera saben lo que significan esas palabras me lo voy a explicar con un pequeño ejemplo : . El resultado de la división 17 / 5 es 3 y el resto es de 2 por . Usted podría preguntarse por qué la arquitectura x86 soporta dividendos de 64-bit , pero sólo divisores de 32-bit . No estoy del todo seguro depor qué esto es , en realidad. Pero probablemente era más conveniente en el momento y no es una gran cosa para evitar la misma. Por lo general, no requieren un gran número de todos modos . Basta ya de estas cosas de la escuela primaria , vamos a echar un vistazo a algunos ejemplos:
mov eax, 100
xor edx, edx
mov ebx, 10
div ebx
; edx : eax / ebx = 100/10 = 10
; edx : eax ebx = 0 %
;Cociente : eax = 10
; Resto : edx = 0

mov eax, 21
div ebx
; edx : eax / ebx = 21/10 = 2
; edx : eax ebx % = 21 % 10 = 1
; Cociente : eax = 2
; Resto : edx = 1
Así como hay mul y imul, Existe la idiv instrucciones para la división firmado. Trabaja de manera similar div, Sin embargo. El resto es siempre el mismo signo que el cociente :
; edx Set: eax a -100
mov eax, -100
mov edx, -1
; -1...
tracking img