Herramientas de usuario

Herramientas del sitio


arm_inst_mul

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
arm_inst_mul [2020/05/28 12:59] andrewarm_inst_mul [2020/11/20 22:30] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
-====== Instrucciones de multiplicación, divisióm ======+====== Instrucciones de multiplicación, división ======
  
 Las instrucciones de multiplicación admiten muchas posibilidades, debido a que es una operación en la cual el resultado tiene el doble de bits que cada operando. En la siguiente tabla vemos las 5 instrucciones de multiplicación que existen. Las instrucciones de multiplicación admiten muchas posibilidades, debido a que es una operación en la cual el resultado tiene el doble de bits que cada operando. En la siguiente tabla vemos las 5 instrucciones de multiplicación que existen.
Línea 33: Línea 33:
 Donde: Donde:
  
-<RdLo> Almacena los 32 bits mas bajos del resultado.+<RdLo> Almacena los 32 bits más bajos del resultado.
  
-<RdHi> Almacena los 32 bits mas altos del resultado.+<RdHi> Almacena los 32 bits más altos del resultado.
  
  
Línea 48: Línea 48:
 ==== smulw<y>==== ==== smulw<y>====
  
-Ahora veamos **smulw<y> **. Es con signo, y el ♦ puede ser una b para seleccionar la parte baja del registro del segundo factor, o una t para seleccionar la alta.+Ahora veamos **smulw<y> **. Es con signo, y el sufijo <y> puede ser una b para seleccionar la parte baja del registro del segundo factor, o una t para seleccionar la alta.
  
 Sintaxis: Sintaxis:
      SMULW<y>{<cond> <Rd>, <Rm>, <Rs>      SMULW<y>{<cond> <Rd>, <Rm>, <Rs>
 +
 +Donde
 +
 +<y> Especifica que mitad del registro <Rs> es usada como operando para multiplicar. 
 +
 +Si <y> es B, la parte más baja (bits[15:0]) de <Rs> es usada. 
 +
 +Si <y> is T, la parte más alta (bits[31:16]) de <Rs> es usada.
  
  
Línea 58: Línea 66:
      smulwb r0, r1, r2      smulwb r0, r1, r2
  
-Por último tenemos smul♦♦ también con signo, donde se seleccionan partes alta o baja en los dos factores, puesto que ambos son de 16 bits.+ 
 +==== smul<x><y>==== 
 + 
 +Por último tenemos smul<x><y> también con signo, donde se seleccionan partes alta o baja en los dos factores, puesto que ambos son de 16 bits. 
 + 
 +Sintaxis 
 +     SMUL<x><y>{<cond> <Rd>, <Rm>, <Rs> 
 + 
 +Donde 
 + 
 +<x> Especifica que mitad del registro <Rm> es usada como primer operando de la multiplicación. 
 + 
 +Si <x> es B, la parte más baja (bits[15:0]) de <Rm> es usada.  
 + 
 +Si <x> es T, la parte más alta (bits[31:16]) de <Rm> es usada. 
 + 
 +<y> Especifica que mitad del registro <Rs> es usada como segundo operando para la multiplicación.  
 + 
 +Si <y> es B, la parte más baja (bits[15:0]) de <Rs> es usada.  
 + 
 +Si <y> es T, la parte más alta (bits[31:16]) de <Rs> es usada. 
  
 En el ejemplo **r0 =parte_alta(r1)*parte_baja(r2)**. En el ejemplo **r0 =parte_alta(r1)*parte_baja(r2)**.
Línea 64: Línea 93:
      smultb r0, r1, r2      smultb r0, r1, r2
  
-En los dos últimos tipos smulw♦ y smul♦♦ no se permite el sufijo s para actualizar los flags.+En los dos últimos tipos smulw<y> y smul<x><y> no se permite el sufijo s para actualizar los flags.
  
 Ejercicio: 8-O Ejercicio: 8-O
Línea 76: Línea 105:
 | smultt  |            | | smultt  |            |
  
-     .data +        .data 
-     var1 : .word 0x12345678 +   var1 : .word 0x12341111 
-     var2 : .word 0x87654321 +   var2 : .word 0x87652222 
-     var3 : .word 0x00012345 +   
-     +   .text 
-     .text +   .global main 
-     .global main +    main : 
-      main : +         ldr r0, = var1   /* r0 <- & var1 */ 
-           ldr r0, = var1       /* r0 <- & var1 */ +         ldr r1, = var2   /* r1 <- & var2 */ 
-           ldr r1, = var2      /* r1 <- & var2 */ +         //  
-           ldr r2, = var3      /* r2 <- & var3 *+         ldr r3, [r0]           /* r3 <- var1 */ 
-           ldrh r3, [r0]      /* r3 <- baja (* r0) */ +         ldr r4, [r1]           /* r4 <- var2 */ 
-           ldrh r4, [r1]      /* r4 <- baja (* r1) */ +         smulbb r5, r3, r4      /* r5 <- baja(var1)*baja(var2)*/ 
-           muls r5, r3, r4      /* r5 <- r3*r4 */ +                                /* r5=0x2468642 */ 
-           ldr r3, [r0]      /* r3 <- *r0 */ +         //  
-           ldr r4, [r1]      /* r4 <- *r1 */ +         ldrh r3, [r0]    /* r3 <- baja(var1) */ 
-           umull r5, r6, r3, r4      /* r6:r5 <- r3*r4 */ +         ldrh r4, [r1]    /* r4 <- baja(var2) */ 
-           smull r5, r6, r3, r4      /* r6:r5 <- r3*r4 */ +         muls r5, r3, r4  /* r5 <- baja(var1)*baja (var2) */ 
-           ldrh r3, [r0]      /* r3 <- baja (* r0) */ +                          /* r5=0x2468642 */ 
-           ldr r4, [r2     /* r4 <- *r2 */ +          
-           smulwb r5, r3, r4      /* r5 <- r3baja (r4) */ +         ldr r3, [r0]           /* r3 <- var1 */ 
-           smultt r5, r3, r4      /* r5 <- alta (r3 )alta (r4)*/+         ldr r4, [r1          /* r4 <- var2 */ 
 +         umull r5, r6, r3, r4   /* r6:r5 <- var1*var2  sin signo*/ 
 +         smull r5, r6, r3, r4   /* r6:r5 <- var1*var2  con signo */ 
 +    fin: 
 +         mov r7, #1 
 +         swi 0 
  
-==== División ====+==== división ====
  
 No existe la operación/instrucción división en ensamblador arm v6, deberemos programarla 8-o. No existe la operación/instrucción división en ensamblador arm v6, deberemos programarla 8-o.
× iphelper toolbox

you see this when javscript or css is not working correct

Untested
IP Address:
First usable:
Subnet:
Last usable:
CIDR:
Amount of usable:
Network address:
Reverse address:
Broadcast address:

arm_inst_mul.1590670799.txt.gz · Última modificación: 2020/05/28 13:00 (editor externo)