Este artículo explora las instrucciones básicas necesarias para programar un núcleo ARM de 32 bits, mientras se construye una comprensión fundamental de la microarquitectura.
El montaje tiene una mala reputación en la cultura tecnológica moderna de hoy. Debido a las grandes cantidades de RAM y la capacidad de procesamiento, los lenguajes de alto nivel como C # y Python han allanado el camino para grandes niveles de abstracción. En algunos casos, esto ha mejorado enormemente la productividad, pero en otros ha dejado a toda una generación de programadores ajenos a lo que realmente hace su código.
En este artículo, usaremos la base de ensamblaje sobre la que puede construir, mientras usa una de las arquitecturas más extendidas que existen. Dicho esto, este artículo está dirigido a aquellos con poca experiencia en la escritura de código de bajo nivel. Escribí este ensamblaje en una Raspberry Pi, utilizando Raspbian, debido a su popularidad y facilidad de uso.
Antes de profundizar en nuestro programa de ejemplo, hablemos un poco sobre por qué vale la pena el código de ensamblaje.
La realidad es que un procesador está construido para ejecutar instrucciones. El código de ensamblaje es la representación legible por el ser humano de esas instrucciones y generalmente es lo más cerca que una persona puede acercarse a la máquina.Delaware.
Al conocer el ensamblaje, comprende exactamente cómo funciona un procesador en particular porque puede ver qué hace con cada bit en cada instrucción. Escritura de montaje te pone en el asiento del piloto. Le permite controlar la máquina en el nivel más bajo, mientras que al mismo tiempo obtiene información sobre cómo funciona la máquina.
¿Te gustaría volar en un avión con alguien que nunca se ha sentado en la cabina del piloto? Claro, ellos han dominado el simulador; Pero no hay nada como la cosa real.
Hagamos un rápido análisis del uso de la Raspberry Pi para ensamblar y ejecutar un programa.
Ya que estamos usando la Raspberry Pi, estamos lidiando con un núcleo ARM de 32 bits. Como se señaló en el artículo anterior, esto significa que nos hemos centrado en las instrucciones ARMV7 de 32 bits y en los registros de 32 bits. (Nota: Las versiones posteriores del RPi que ejecuta Raspbian utilizan un procesador ARMV8 de 64 bits, pero lo ejecutan en modo de 32 bits al igual que las versiones anteriores del V7.
El ensamblador espera que las directivas comprendan cómo se presenta su programa. A continuación, utiliza etiquetas para moverse a diferentes ubicaciones. El programa que se muestra arriba representa la estructura básica que usaremos en nuestro programa de ensamblaje. Para obtener más información sobre el ensamblador GNU, aquí hay una guía de referencia rápida.
Paso 1: Guarde su código apropiadamente
La línea de comandos de Linux es la forma más sencilla de ensamblar su programa.
Abra un terminal ya sea escribiendo ctl + alt + t o navegando a través de la interfaz de usuario de Raspbian a un terminal de comando. Su código fuente debe escribirse en un editor de texto y guardarse con una extensión ".s".
Una vez que el archivo se guarda en un directorio, se puede ensamblar y vincular.
Paso 2: Arme su programa en un archivo de objeto
A continuación, comenzamos con un programa de ensamblaje llamado "myProg.s" (vinculado como un archivo .zip descargable al final del artículo) y lo ensamblamos en un archivo de objeto llamado "myProg.o".
Paso 3: Crea un ejecutable
A continuación, usamos el enlazador para convertir el archivo objeto en un ejecutable, "Programa" en este caso.
Paso 4: Ejecutar el programa
Por último, ejecutamos el programa.
como -o myProg.o myProg.s
ld -o Programa myProg.o
./Programa
Paso 5: Salir del programa
La última parte debajo de la etiqueta de salida es una llamada al sistema utilizada por el sistema operativo Raspbian para salir del programa.
_salida:
MOV R7, # 1 @ Set R7 para syscall exit
SWI 0 @ ejecute syscall exit
Se ha incluido un programa de ejemplo al final de este artículo para que pueda comenzar.
En el último par de artículos, presentamos algunas de las instrucciones básicas utilizadas en el conjunto de instrucciones ARM. Investigamos el archivo de registro ARM y su ubicación dentro de la microarquitectura de un procesador. También examinamos lo que una instrucción Parece que a nivel de bits y cómo se codifican los mnemónicos del conjunto en estos bits.
Ahora hemos sintetizado esta información en una situación aplicable.
El objetivo final aquí era abrir el apetito. El ensamblaje de escritura aún se está codificando, pero en el nivel más bajo posible. De esta manera, puedes tener una idea de lo que hace un procesador con tu programa. Al conocer el ensamblaje de un procesador determinado, puede implementar un código increíblemente eficiente, realizar una configuración de bajo nivel o crear un sistema operativo súper delgado. Cada vez más dispositivos integrados utilizan un núcleo ARM y el código que se ejecuta en estos dispositivos debe ser lo más eficiente posible.
A medida que los lenguajes de alto nivel continúan abstrayendo lo que hace una computadora, menos ingenieros y programadores entenderán cómo funciona realmente su sistema. Ya sea que esté interesado en el diseño digital o en los sistemas integrados, saber que ensamblar le brinda un nivel de comprensión que hará que los problemas difíciles sean más fáciles y que los diseños complicados sean más directos.
Puede descargar el código de ensamblaje ARM de ejemplo a continuación:
Código de ensamblaje del brazo
ga('create', 'UA-1454132-1', 'auto'); ga('require', 'GTM-MMWSMVL'); ga('require', 'displayfeatures'); ga('set',{'dimension1':'embedded,onsemi-iot,automation,embedded,raspberry-pi'}); ga('set',{'contentGroup1':'embedded,onsemi-iot,automation,embedded,raspberry-pi'}); ga('send', 'pageview');
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1808435332737507'); // Insert your pixel ID here. fbq('track', 'PageView'); fbq('track', 'ViewContent', { content_ids: ['embedded','onsemi-iot','automation','embedded','raspberry-pi'], content_type: 'category'});
_linkedin_data_partner_id = "353081"; (function(){var s = document.getElementsByTagName("script")[0]; var b = document.createElement("script"); b.type = "text/javascript";b.async = true; b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; s.parentNode.insertBefore(b, s);})(); } if(jstz.determine().name().indexOf("Europe") === -1) { showSocialCode(); // NOT EU } else { showSocialCode(); window.addEventListener("load", function () { window.cookieconsent.initialise({ "palette": { "popup": { "background": "#252e39" }, "button": { "background": "#14a7d0" } }, "type": "opt-out", "content": { "message": "This website uses tracking cookies to ensure you get the best experience on our website.", "href": "https://www.allaboutcircuits.com/privacy-policy/", "dismiss": "OK, GOT IT" }, onInitialise: function (status) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },
onStatusChange: function (status, chosenBefore) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },
onRevokeChoice: function () { var type = this.options.type; if (type == 'opt-out') { console.log("eu"); //showSocialCode(); } },
}) }); }
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…