Cómo entender rápidamente los programas en lenguaje ensamblador
En primer lugar, debe comprender las instrucciones de ensamblaje y, en segundo lugar, debe utilizar la lógica de la máquina para pensar en los problemas y comprender los conceptos de almacenamiento, acumulación, juicio y transferencia.
Por ejemplo, para un problema como 1 2.... 100, aunque podemos dar una fórmula para calcularlo, la máquina no lo sabe, sólo puede saberlo y sólo puede hacer una suma. a la vez, y dado que la arquitectura de la CPU no puede almacenar todos estos valores, será más complicado si estos números son inciertos. Por ejemplo, estos números se colocan en un área de memoria. La convención del área de memoria es la siguiente. : el primer número indica cuántos números hay en total, seguido de Para los datos correspondientes, no se pueden utilizar fórmulas cuando estos números son irregulares.
Además, muchas CPU aceptan tener un solo acumulador (también un registro, suponiendo que sea el registro AX), que permite leer un número de la memoria (instrucción MOV o LD), y solo pueden agregar memoria. datos ( AGREGAR [dirección]).
Entonces solo podemos hacer esto, primero configure el registro de puntero BX:
start: mov BX, #address establezca la dirección inicial del área de memoria y guárdela en BX
mov CX, [BX]; toma el número total en CX, asumiendo que CX se puede simplemente incrementar o disminuir
dec CX Disminuye previamente el contador una vez, porque solo se suma; debe hacerse CX-1 veces
inc BX
mov AX, [BX]; sacar datos
bucle: incrementar BX al punto; a los datos reales
ADD AX, [BX]; Acumula con los siguientes datos y guarda el resultado en AX
dec CX Supongamos que esta resta afectará la bandera ZF
p>Bucle JNZ; si no Cuando se reduce a 0, continúe la operación entre el bucle y aquí
mov [BX], AX guarda el resultado acumulado al final del área de datos; p>
HALT; stop
Se puede ver que el código anterior no puede decirme el resultado específico, a menos que usemos herramientas para acceder a esta área de memoria, por lo que se diseñará un sistema que nos permita Realizar entradas y salidas básicas, y la situación interna de la computadora e incluso la situación de la memoria. Enviados a través del puerto de E/S, estos dispositivos IO, como los teclados, son responsables de recibir las instrucciones de nuestra máquina (que pueden ser resultados de ensamblaje, o instrucciones binarias y flujos de datos generados por lenguajes de alto nivel) y enviar los resultados a una impresora o CRT en el dispositivo (generalmente asignado a un puerto, IO PORT). Esto es lo que hace el BIOS, como int 8 es responsable del reloj, int 10 es responsable de la pantalla, int 16 es responsable del teclado, etc. Además, puede encapsular aún más las llamadas de DOS, como int 21, que es responsable de la entrada y salida básica, incluidas las operaciones de archivos, etc. Los sistemas operativos como WINDOWS utilizan la capa de controlador para realizar abstracciones de múltiples niveles para proporcionar interfaces operativas a los programadores, quienes luego encapsulan aún más cuadros de diálogo, menús de texto de pantalla completa o interfaces operativas de transmisión (operaciones basadas en líneas) para los usuarios finales.