¿Instrucción única para cargar el valor inmediato cambiado a un registro? -- assembly campo con arm campo con instructions camp Relacionados El problema

Single instruction to load shifted immediate value into a register?


0
vote

problema

Español

Parece que no puedo encontrar una manera de, con una sola instrucción, coloque un valor inmediato en un registro en una posición que no sea la bit más baja.

Por ejemplo, suponga que desea que su registro sea r1 = 0x00110000 . Luego, una forma de instrucción múltiple de hacer esto es.

  mov r1, #0x11 lsl r1, #16   

Estoy trabajando con varios dispositivos y algunos de ellos permiten valores inmediatos de hasta 32 bits, pero la mayoría no, por lo que solo puedo usar las instrucciones básicas del brazo.

Original en ingles

I can't seem to find a way to, with a single instruction, place an immediate value into a register in a position that is not the lowest bit.

For instance, suppose you want your register to be r1 = 0x00110000. Then, a multi instruction way to do this is.

mov r1, #0x11 lsl r1, #16 

I'm working with several devices and some of them allow immediate values up to 32 bits, but most don't, so I can only use the basic ARM instructions.

        
       
       

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Deje que su ensamblador codifique el cambio / gire para usted, dándole el valor [AllowAnonymous] public ActionResult Dashboard() { //populate data into our view model(vm) var vm = new DashboardViewModel{ Clubs = db.Clubs.ToList(), MemberUsers = db.MemberUsers.ToList(), Alerts = db.Alerts.ToList() }; return View(vm); } 111111.

¿La mayoría de los ensambladores (incluidos todos los ensambladores de brazo?) Soporte las expresiones constantes de tiempo de montaje para que pueda escribir

  [AllowAnonymous]     public ActionResult Dashboard()     {         //populate data into our view model(vm)         var vm = new DashboardViewModel{            Clubs = db.Clubs.ToList(),            MemberUsers = db.MemberUsers.ToList(),            Alerts = db.Alerts.ToList()         };         return View(vm);     } 2  

Esto se ensamblará en el modo ARM a [AllowAnonymous] public ActionResult Dashboard() { //populate data into our view model(vm) var vm = new DashboardViewModel{ Clubs = db.Clubs.ToList(), MemberUsers = db.MemberUsers.ToList(), Alerts = db.Alerts.ToList() }; return View(vm); } 3 . Pero en modo de pulgar se requiere ARMV6 THUMT2. Consulte http://www.keil.com/support/man/docs /armasm/armarm_dom1361289878994.htm para las formas disponibles de MOV.

Probablemente una mejor opción es y la pseudo-instrucción LDR que permita la selección del ensamblaje entre una carga relativa de PC (desde una piscina literal) o un movimiento inmediato con codificación. http://www.keil.com/support/man/docs/ Armasm / ARMASM_DOM1359731145835.htm (que es el Doc de Keil para su ensamblador, pero Gas y Clang también admiten la misma sintaxis).

  [AllowAnonymous]     public ActionResult Dashboard()     {         //populate data into our view model(vm)         var vm = new DashboardViewModel{            Clubs = db.Clubs.ToList(),            MemberUsers = db.MemberUsers.ToList(),            Alerts = db.Alerts.ToList()         };         return View(vm);     } 4  

Estoy trabajando con varios dispositivos

Considere la reconstrucción de cada dispositivo para que pueda optimizar el código para cada uno. Especialmente si usa [AllowAnonymous] public ActionResult Dashboard() { //populate data into our view model(vm) var vm = new DashboardViewModel{ Clubs = db.Clubs.ToList(), MemberUsers = db.MemberUsers.ToList(), Alerts = db.Alerts.ToList() }; return View(vm); } 5 - puede usar [AllowAnonymous] public ActionResult Dashboard() { //populate data into our view model(vm) var vm = new DashboardViewModel{ Clubs = db.Clubs.ToList(), MemberUsers = db.MemberUsers.ToList(), Alerts = db.Alerts.ToList() }; return View(vm); } 6616 cuando está disponible.

y algunos de ellos permiten valores inmediatos de hasta 32 bits

Si está hablando de ARMV6T2 [AllowAnonymous] public ActionResult Dashboard() { //populate data into our view model(vm) var vm = new DashboardViewModel{ Clubs = db.Clubs.ToList(), MemberUsers = db.MemberUsers.ToList(), Alerts = db.Alerts.ToList() }; return View(vm); } 7 / [AllowAnonymous] public ActionResult Dashboard() { //populate data into our view model(vm) var vm = new DashboardViewModel{ Clubs = db.Clubs.ToList(), MemberUsers = db.MemberUsers.ToList(), Alerts = db.Alerts.ToList() }; return View(vm); } 8 , son dos instrucciones de 32 bits que proporciona una mitad de 16 bits.

Sin brazo es capaz de codificar cualquier constante arbitraria de 32 bits con una sola instrucción; Eso no dejaría bits para un opcode en una instrucción de 32 bits.

 

Let your assembler encode the shift / rotate for you, by giving it the 0x00110000 value.

Most assemblers (including all ARM assemblers?) support assemble-time constant expressions so you can write

mov r1, #0x11 << 16 

This will assemble in ARM mode to 11 18 a0 e3. But in Thumb mode it requires ARMv6 Thumb2. See http://www.keil.com/support/man/docs/armasm/armasm_dom1361289878994.htm for the available forms of MOV.

Probably a better choice is and LDR pseudo-instruction that lets the assembler pick between a PC-relative load (from a literal pool) or a mov-immediate with some encoding. http://www.keil.com/support/man/docs/armasm/armasm_dom1359731145835.htm (That's keil's doc for their assembler, but GAS and clang also support the same syntax.)

ldr r1, =0x11 << 16 

I'm working with several devices

Consider rebuilding for each device so you can make code optimized for each one. Especially if you use ldr reg, =value - it can use mov.w reg, #imm16 when available.

and some of them allow immediate values up to 32 bits

If you're talking about ARMv6T2 movt / movw, that's two 32-bit instructions each providing a 16-bit half.

No ARM is capable of encoding any arbitrary 32-bit constant with a single instruction; that would leave no bits for an opcode in a 32-bit instruction.

 
 
       
       

Relacionados problema

2  Extender el compilador para obtener el ensamblaje propio  ( Extend compiler to get own assembly ouput ) 
He estado escribiendo algunos códigos de Verilog para crear una simulación de microprocesador simple que tiene su propio conjunto de instrucciones. Hasta ahor...

3  Paquete de instrucciones para Java  ( Instructions package for java ) 
Quiero hacer una página de Ayuda / Instrucciones para mi programa Java, pero realmente no quiero pasar por recorrer y programar todos los cuadros y búsqueda y...

0  Tiempo difícil de entender la ejecución de las instrucciones de la máquina  ( Hard time understanding execution of machine instructions ) 
Estoy leyendo el libro "Escribe un código excelente: comprender la máquina" por Randall Hyde, es un texto excelente y claro, pero aquí está aquí estancado con...

0  Tiempo de instrucción promedio  ( Average instruction time ) 
Digamos que tenemos un promedio de una falla de una página cada 20,000,000 instrucciones, una instrucción normal toma 2 nanosegundos, y una falla de página ha...

1  ¿Es posible llamar a SQLite3 las instrucciones de Python?  ( Is it possible to call sqlite3 instrucations from python ) 
Me gustaría llamar a SQLite3 Instrucciones de Script de Python. Por instrucciones me refiero: .help .schema .mode y resto de instrucciones enumerad...

6  ¿Cómo puedo averiguar qué "Familia del procesador" está bajo un procesador Intel?  ( How can i find out what processor family an intel processor is under ) 
En el Manual Intel, hay tablas que contienen listados de Performance-Monitoring Counters , pero son extremadamente específicos para la familia de procesadore...

0  Verilog Branch Instruction MIPS  ( Verilog branch instruction mips ) 
Estoy tratando de entender cómo funciona la declaración de la sucursal de Verilog en un formato de instrucción inmediata para el procesador MIPS. Estoy tenien...

4  ¿Por qué la compensación inmediata en la instrucción de JAL de RiscV ha cambiado el pedido de bits?  ( Why the immediate offset in the riscvs jal instruction has bit order changed ) 
El campo de bits se muestra a continuación No veo el punto de hacer esta reordenación de campo de bits. ¿Hay un tipo especial de manipulación cuando RI...

120  `Testl` EAX contra EAX?  ( Testl eax against eax ) 
Estoy tratando de entender algo de montaje. La Asamblea de la siguiente manera, estoy interesado en la línea %eax2 : 000319df 8b4508 movl 0x08...

-2  ¿Cuál es la diferencia entre los términos de "instrucción" y "operación"?  ( What is the difference between instruction and operation terms ) 
Definiciones: Instruction es solo partes atómicas de lenguaje ensamblador como MOV EAX, EBX Ahora digamos que tenemos el siguiente código escrito e...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos