Tabla del sistema numérico de 16 años. Sistema numérico hexadecimal octal binario

El sistema numérico familiar para los humanos es el decimal. Se basa en diez dígitos del 0 al 9. El sistema hexadecimal se distingue por la presencia de las primeras seis letras del alfabeto latino para escribir números además de los números básicos. Es decir, al número 9 le sigue el símbolo “A”, que corresponde al número 10 para el sistema decimal. En consecuencia, F en hexadecimal es 16 en decimal. El uso de dieciséis caracteres en el sistema no es una elección aleatoria.

La unidad de información es un poco. Ocho bits forman un byte. Existe un concepto similar a una palabra de máquina: una unidad de datos que representa dos, es decir, dieciséis bits. Así, utilizando dieciséis símbolos diferentes, es posible describir cualquier información que será la partícula más pequeña durante el intercambio de datos. Puede realizar cualquier operación aritmética con ellos y, en consecuencia, el resultado también se obtendrá en el sistema hexadecimal.

Para distinguir que un número está escrito en hexadecimal, después se escribe la letra “h” o el subíndice “16”.

Solicitud

El uso más extendido del sistema numérico hexadecimal es en códigos de error de productos de software, por ejemplo, un sistema operativo. Los números contenidos en estos códigos están estandarizados. Al tener una tabla especial, siempre puede determinar qué significa exactamente este o aquel error.

En los lenguajes de bajo nivel, que son lo más parecidos posible al código de máquina, se utiliza el sistema hexadecimal para escribir programas. Muchos programadores también lo utilizan cuando trabajan con lenguajes de alto nivel, porque los números de este sistema, utilizando una tabla de correspondencia especial, se convierten fácilmente al sistema binario en el que se basa el funcionamiento de toda la tecnología digital. Cualquier información en una computadora, ya sea un archivo de música o un documento de texto, después de la traducción se representa mediante una secuencia de código binario fuente, y es más conveniente verla representada mediante símbolos hexadecimales.

Además, uno de los usos de los caracteres hexadecimales es la descripción de esquemas de color, es decir, los tres componentes R, G, B se describen de manera apropiada para un sistema determinado. Este método de grabación se llama color hexadecimal.

La capacidad de ver un programa en código hexadecimal le permite depurarlo, realizar cambios y los atacantes utilizan este enfoque para piratear programas.

Sistema numérico hexadecimal. Nuestro primer programa.

Para escribir programas en ensamblador, es necesario comprender el sistema numérico hexadecimal. No tiene nada de complicado. Usamos el sistema decimal en la vida. Estoy seguro de que todos lo sabéis, así que intentaré explicar el sistema hexadecimal usando una analogía con el sistema decimal.

Entonces, en el sistema decimal, si agregamos un cero a cualquier número de la derecha, este número aumentará 10 veces. Por ejemplo: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000, etc. En este sistema utilizamos números del 0 al 9, es decir. diez números diferentes (de hecho, por eso se llama decimal).

En el sistema hexadecimal utilizamos dieciséis "dígitos". Escribí específicamente la palabra "dígitos" entre comillas, porque... No solo usa números. Y realmente, ¿cómo puede ser eso? Me explico: del 0 al 9 contamos igual que en decimal, pero luego quedará así: A, B, C, D, E, F. El número F no es difícil. cuenta, será igual a 15 en el sistema decimal (ver Tabla 1).

numero decimal

número hexadecimal

Tabla 1. Sistemas decimales y hexadecimales.

Por lo tanto, si agregamos un cero a la derecha de cualquier número en el sistema hexadecimal, entonces este número aumentará en16 una vez.

Ejemplo 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000, etc.

¿Pudiste distinguir los números hexadecimales de los números decimales en el Ejemplo 1? Y de esta serie: 10, 12, 45, 64, 12, 8, 19? Pueden ser hexadecimales o decimales. Para evitar confusiones y que el ordenador pueda distinguir claramente un número de otro, en ensamblador se acostumbra colocar el símbolo ho H después de un número hexadecimal ( H es una abreviatura de inglés. hexadecimal (hexadecimal). Por brevedad, a veces se le llama simplemente Maleficio ) . Y no pongas nada después del decimal. Porque Los números del 0 al 9 en ambos sistemas tienen el mismo significado, entonces los números escritos como 5 y 5h son iguales.

Eso. El ejemplo 1 (ver arriba) sería más correcto escribirlo así: 1 x 16 = 10h; 10h x 16 = 100h; 100h x 16 = 1000h. O así: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

En números posteriores veremos por qué es necesario el sistema hexadecimal. Por ahora, para nuestro programa de ejemplo, que se analizará a continuación, necesitamos saber acerca de la existencia de números hexadecimales.

Entonces, resumamos. El sistema numérico hexadecimal consta de 10 dígitos (del 0 al 9) y 6 letras del alfabeto latino (A, B, C, D, E, F). Si agregamos un cero a la derecha de cualquier número en el sistema hexadecimal, entonces este número aumentará en16 una vez. Es muy importante entender este tema., ya que lo usaremos constantemente al escribir programas.

Ahora un poco sobre cómo construiré ejemplos en Asamblea. No es del todo conveniente presentarlos en formato HTML, por lo que primero estará el código del programa con líneas numeradas, e inmediatamente después habrá explicaciones y notas.

Algo como esto:

pauta código de programa
(1) movimiento ah,9

Explicaciones:

En la línea (1) hacemos esto y en la línea (15) hacemos aquello.

Gran petición: ¡NO copie programas de una página al portapapeles y luego los pegue en el Bloc de notas (o en cualquier otro lugar)! Vuelva a escribirlos manualmente en un editor de texto. Si tiene una impresora, seleccione el programa, imprima el fragmento seleccionado y luego transfiéralo al editor desde el papel. ¡Todos los ejemplos deben escribirse usted mismo! Esto acelerará la memorización de operadores.

Y una cosa más. No hay diferencia entre letras minúsculas y MAYÚSCULAS en ensamblador. Registros de la forma:

El ensamblador los percibe de la misma manera. Por supuesto, puede obligar al ensamblador a distinguir entre caracteres en minúsculas y MAYÚSCULAS, pero no haremos esto por ahora. Para que el programa sea más fácil de leer, es mejor escribir los operadores en letras minúsculas y comenzar los nombres de las subrutinas y las etiquetas en letras mayúsculas. Pero depende de quién se sienta cómodo.

Entonces, pasemos a nuestro primer programa:

(1) segmento CSEG

(2)org 100h

(4)Comenzar:

(6) mov ah,9

(7) mov dx, mensaje de compensación

(8)entre las 21h

(10) entre 20h

(11)

(12) Mensaje db "¡Hola mundo! $"

(13)CSEG termina

(14) fin comenzar

Para explicar todos los operadores en este ejemplo, necesitaremos varias ediciones. Por lo tanto, simplemente omitiremos la descripción de algunos comandos en esta etapa. Simplemente asuma que así es como debería ser. Analizaremos estos operadores en detalle en un futuro muy próximo. Entonces, las líneas numeradas (1), (2) y (13) simplemente las ignoras.

Las líneas (3), (5), (9) y (11) se dejan en blanco. Esto se hace para mayor claridad. El ensamblador simplemente los omitirá.

Ahora pasemos a considerar los operadores restantes. El código del programa comienza con la línea (4). Esta es una marca que le indica al ensamblador el comienzo del código. La línea (14) contiene los operadores end Begin ( empezar ingles comenzar; fin fin). Este es el final del programa. En general, en lugar de la palabra Comenzar se podría haber usado algo más. Por ejemplo, Comenzar:. En este caso tendríamos que finalizar el programa. Fin Inicio (14).

Las líneas (6) (8) muestran el mensaje ¡Hola, mundo!. Aquí tendremos que hablar brevemente sobre los registros del procesador (veremos este tema con más detalle en el próximo número).

Un registro de procesador es una memoria especialmente asignada para almacenar un número.

Por ejemplo:

Si queremos sumar dos números, entonces en matemáticas lo escribimos así:

A, B y C Se trata de una especie de registros (si hablamos de una computadora) en los que se pueden almacenar algunos datos. A=5 se puede leer como: Asigne a A el número 5. .

Para asignar un valor a un registro, existe un operador mov en Assembler (del inglés move load). La línea (6) debería leerse así: Cargando en el registro A.H.número 9 (en otras palabras, asignamos A.H.número 9). A continuación veremos por qué esto es necesario.

En la línea (7) cargamos en el registro. DX dirección del mensaje para la salida (en este ejemplo será la cadena¡Hola mundo! $).

Las interrupciones se tratarán en detalle en números posteriores. Aquí diré algunas palabras.

Interrumpir MS-DOS es una especie de subrutina (parte MS-DOS), que reside permanentemente en la memoria y se puede llamar en cualquier momento desde cualquier programa.

Consideremos lo anterior usando un ejemplo (Notas en letra pequeña):

Programa para sumar dos números.

InicioProgramas

A=5 Ingresamos el valor 5 en la variable A

B=8 en la variable B el valor 8

Llamar a la suma de subrutinas

ahora C es igual a 13

A=10 Lo mismo, solo números diferentes.

B=25

Llamar a la suma de subrutinas

ahora C es igual a 35

Fin del programa

Adición de subrutina

C=A+B

Regreso desde subrutina volvemos al lugar desde donde llamamos

Fin de subrutina

En este ejemplo, llamamos a la subrutina dos veces. Suma, que agregó dos números que se le pasaron en variables A y B . El resultado se coloca en la variable C. Cuando se llama a una subrutina, la computadora recuerda desde dónde fue llamada y luego, cuando la subrutina termina de ejecutarse, la computadora regresa al lugar desde donde fue llamada. Eso. Puedes llamar a subrutinas un número indefinido de veces desde cualquier lugar.

Al ejecutar la línea (8) de un programa Ensamblador, llamamos a una subrutina (en este caso llamada interrupción), que muestra la línea en la pantalla. Para ello, de hecho, colocamos los valores necesarios en los registros. Todo el trabajo necesario (generar una línea, mover el cursor) lo realiza la subrutina. Esta línea se puede leer así: llame a la vigésima primera interrupción ( int del ingles interrumpir interrumpir). Tenga en cuenta que después del número 21 hay una letra h . Este, como ya sabemos, es un número hexadecimal (33 en decimal). Por supuesto, nada nos impide sustituir la línea. entre 21h y 33. El programa funcionará correctamente. Es una práctica común en Assembler indicar el número de interrupción en hexadecimal.

En la línea (10), como habrás adivinado, llamamos a la interrupción 20 h . Para llamar a esta interrupción, no es necesario especificar ningún valor en los registros. Realiza sólo una tarea: salir del programa (salir a DOS). Como resultado de la interrupción de las 20 h, el programa volverá al lugar desde donde se inició (cargado, llamado). Por ejemplo, en Norton Commander o Navegador DOS.

La línea (12) contiene el mensaje que se enviará. Primera palabra ( mensaje mensaje) título del mensaje. Puede ser cualquier cosa (por ejemplo, desorden o cuerda, etc.). ACERCA DE Preste atención a la línea (7), en la que cargamos en el registro. DX nuestra dirección de mensajes.

Podemos crear otra línea, a la que llamaremos Lío2. Luego, comenzando desde la línea (9), inserte los siguientes comandos:

(10) mov dx, desplazamiento Mess2

(13) Mensaje db "¡Hola mundo! $"

(14) Mess2 db "¡Soy YO! $"

y reensamblar nuestro programa. Espero que puedas adivinar lo que va a pasar.

Presta atención al último carácter de las líneas. Mensaje y Mess2 - $. Señala el final de la línea. Si lo eliminamos, entonces 21 h la interrupción continuará emitiéndose hasta que encuentre un carácter en algún lugar de la memoria $. En la pantalla veremos basura .

Si tiene un depurador, podrá ver cómo funcionará nuestro programa.

El propósito de este número no era entender en detalle con cada operador. Esto es imposible, porque aún no tienes suficientes conocimientos. Creo que después de 3 o 4 versiones comprenderá el principio y la estructura de un programa de Asamblea. Quizás el lenguaje ensamblador le haya parecido extremadamente complicado, pero créanme, esto es a primera vista.

¡El resultado ya ha sido recibido!

Sistemas numéricos

Hay sistemas numéricos posicionales y no posicionales. El sistema numérico arábigo, que utilizamos en la vida cotidiana, es posicional, pero el sistema numérico romano no. En los sistemas numéricos posicionales, la posición de un número determina de forma única la magnitud del número. Consideremos esto usando el ejemplo del número 6372 en el sistema numérico decimal. Numeremos este número de derecha a izquierda comenzando desde cero:

Entonces el número 6372 se puede representar de la siguiente manera:

6372=6000+300+70+2 =6·10 3 +3·10 2 +7·10 1 +2·10 0 .

El número 10 determina el sistema numérico (en este caso es 10). Los valores de la posición de un número determinado se toman como potencias.

Considere el número decimal real 1287,923. Numerémoslo empezando desde cero, posicionando el número desde la coma decimal hacia la izquierda y hacia la derecha:

Entonces el número 1287.923 se puede representar como:

1287.923 =1000+200+80 +7+0.9+0.02+0.003 = 1·10 3 +2·10 2 +8·10 1 +7·10 0 +9·10 -1 +2·10 -2 +3· 10-3.

En general, la fórmula se puede representar de la siguiente manera:

c norte s n +C n-1 · s n-1 +...+C 1 · s 1 +C 0 ·s 0 +D -1 ·s -1 +D -2 ·s -2 +...+D -k ·s -k

donde C n es un número entero en posición norte, D -k - número fraccionario en la posición (-k), s- sistema numérico.

Algunas palabras sobre los sistemas numéricos Un número en el sistema numérico decimal consta de muchos dígitos (0,1,2,3,4,5,6,7,8,9), en el sistema numérico octal consta de muchos dígitos. (0,1, 2,3,4,5,6,7), en el sistema numérico binario - de un conjunto de dígitos (0,1), en el sistema numérico hexadecimal - de un conjunto de dígitos (0,1 ,2,3,4,5,6, 7,8,9,A,B,C,D,E,F), donde A,B,C,D,E,F corresponden a los números 10,11, 12,13,14,15. En la tabla Tab.1 los números se presentan en diferentes sistemas numéricos.

Tabla 1
Notación
10 2 8 16
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 do
13 1101 15 D
14 1110 16 mi
15 1111 17 F

Convertir números de un sistema numérico a otro

Para convertir números de un sistema numérico a otro, la forma más sencilla es convertir primero el número al sistema numérico decimal y luego convertir del sistema numérico decimal al sistema numérico requerido.

Convertir números de cualquier sistema numérico al sistema numérico decimal

Usando la fórmula (1), puede convertir números de cualquier sistema numérico al sistema numérico decimal.

Ejemplo 1. Convierta el número 1011101.001 del sistema numérico binario (SS) al SS decimal. Solución:

1 ·2 6 +0 ·2 5 + 1 ·2 4 + 1 ·2 3 + 1 ·2 2 + 0 ·2 1 + 1 ·2 0 + 0 ·2-1+ 0 ·2 -2 + 1 ·2 -3 =64+16+8+4+1+1/8=93.125

Ejemplo2. Convierta el número 1011101.001 del sistema numérico octal (SS) al SS decimal. Solución:

Ejemplo 3 . Convierta el número AB572.CDF del sistema numérico hexadecimal al SS decimal. Solución:

Aquí A-reemplazado por 10, B- a las 11, do- a las 12, F- a las 15.

Convertir números del sistema numérico decimal a otro sistema numérico

Para convertir números del sistema numérico decimal a otro sistema numérico, debe convertir la parte entera del número y la parte fraccionaria del número por separado.

La parte entera de un número se convierte de SS decimal a otro sistema numérico dividiendo secuencialmente la parte entera del número por la base del sistema numérico (para SS binario - por 2, para SS 8-ario - por 8, para 16 -ario SS - por 16, etc. ) hasta obtener un residuo entero, menor que la base CC.

Ejemplo 4 . Convirtamos el número 159 de SS decimal a SS binario:

159 2
158 79 2
1 78 39 2
1 38 19 2
1 18 9 2
1 8 4 2
1 4 2 2
0 2 1
0

Como se puede ver en la Fig. 1, el número 159 cuando se divide por 2 da el cociente 79 y el resto 1. Además, el número 79 cuando se divide por 2 da el cociente 39 y el resto 1, etc. Como resultado, construyendo un número a partir de los restos de la división (de derecha a izquierda), obtenemos un número en SS binario: 10011111 . Por tanto podemos escribir:

159 10 =10011111 2 .

Ejemplo 5 . Convirtamos el número 615 de SS decimal a SS octal.

615 8
608 76 8
7 72 9 8
4 8 1
1

Al convertir un número de SS decimal a SS octal, debe dividir secuencialmente el número entre 8 hasta obtener un resto entero menor que 8. Como resultado, al construir un número a partir de los restos de la división (de derecha a izquierda), obtenemos un número en octal SS: 1147 (Ver Figura 2). Por tanto podemos escribir:

615 10 =1147 8 .

Ejemplo 6 . Convirtamos el número 19673 del sistema numérico decimal al SS hexadecimal.

19673 16
19664 1229 16
9 1216 76 16
13 64 4
12

Como se puede ver en la Figura 3, al dividir sucesivamente el número 19673 entre 16, los restos son 4, 12, 13, 9. En el sistema numérico hexadecimal, el número 12 corresponde a C, el número 13 a D. Por lo tanto, nuestro El número hexadecimal es 4CD9.

Para convertir fracciones decimales regulares (un número real con parte entera cero) a un sistema numérico con base s, es necesario multiplicar sucesivamente este número por s hasta que la parte fraccionaria contenga un cero puro, o obtengamos el número requerido de dígitos. . Si la multiplicación da como resultado un número con una parte entera distinta de cero, entonces esta parte entera no se tiene en cuenta (se incluyen secuencialmente en el resultado).

Veamos lo anterior con ejemplos.

Ejemplo 7 . Convirtamos el número 0,214 del sistema numérico decimal al SS binario.

0.214
incógnita 2
0 0.428
incógnita 2
0 0.856
incógnita 2
1 0.712
incógnita 2
1 0.424
incógnita 2
0 0.848
incógnita 2
1 0.696
incógnita 2
1 0.392

Como puede verse en la Fig. 4, el número 0,214 se multiplica secuencialmente por 2. Si el resultado de la multiplicación es un número con una parte entera distinta de cero, entonces la parte entera se escribe por separado (a la izquierda del número), y el número se escribe con parte entera cero. Si la multiplicación da como resultado un número con una parte entera cero, entonces se escribe un cero a la izquierda del mismo. El proceso de multiplicación continúa hasta que la parte fraccionaria llega a un cero puro u obtenemos el número requerido de dígitos. Al escribir números en negrita (Fig.4) de arriba a abajo obtenemos el número requerido en el sistema numérico binario: 0. 0011011 .

Por tanto podemos escribir:

0.214 10 =0.0011011 2 .

Ejemplo 8 . Convirtamos el número 0,125 del sistema numérico decimal al SS binario.

0.125
incógnita 2
0 0.25
incógnita 2
0 0.5
incógnita 2
1 0.0

Para convertir el número 0,125 de decimal SS a binario, este número se multiplica secuencialmente por 2. En la tercera etapa, el resultado es 0. En consecuencia, se obtiene el siguiente resultado:

0.125 10 =0.001 2 .

Ejemplo 9 . Convirtamos el número 0,214 del sistema numérico decimal a SS hexadecimal.

0.214
incógnita 16
3 0.424
incógnita 16
6 0.784
incógnita 16
12 0.544
incógnita 16
8 0.704
incógnita 16
11 0.264
incógnita 16
4 0.224

Siguiendo los ejemplos 4 y 5, obtenemos los números 3, 6, 12, 8, 11, 4. Pero en SS hexadecimal, los números 12 y 11 corresponden a los números C y B. Por lo tanto, tenemos:

0,214 10 = 0,36C8B4 16 .

Ejemplo 10 . Convirtamos el número 0,512 del sistema numérico decimal a SS octal.

0.512
incógnita 8
4 0.096
incógnita 8
0 0.768
incógnita 8
6 0.144
incógnita 8
1 0.152
incógnita 8
1 0.216
incógnita 8
1 0.728

Recibió:

0.512 10 =0.406111 8 .

Ejemplo 11 . Convirtamos el número 159.125 del sistema numérico decimal al SS binario. Para hacer esto, traducimos por separado la parte entera del número (Ejemplo 4) y la parte fraccionaria del número (Ejemplo 8). Combinando aún más estos resultados obtenemos:

159.125 10 =10011111.001 2 .

Ejemplo 12 . Convirtamos el número 19673.214 del sistema numérico decimal a SS hexadecimal. Para hacer esto, traducimos por separado la parte entera del número (Ejemplo 6) y la parte fraccionaria del número (Ejemplo 9). Además, combinando estos resultados obtenemos.

Notación hexadecimal ("Hex")- una forma conveniente de representar valores binarios. Así como el sistema numérico decimal tiene una base de diez y el sistema numérico binario tiene una base de dos, el sistema numérico hexadecimal tiene una base de dieciséis.

El sistema numérico de base 16 utiliza los números del 0 al 9 y las letras de la A a la F. La figura muestra los valores decimales, binarios y hexadecimales equivalentes para los números binarios del 0000 al 1111. Nos resulta más fácil expresar un valor como uno dígito hexadecimal que como cuatro bits

Entendiendo los bytes

Dado que 8 bits (bytes) son la agrupación binaria estándar, los números binarios del 00000000 al 11111111 se pueden representar en notación hexadecimal como los números del 00 al FF. Los ceros a la izquierda siempre se muestran para completar la representación de 8 bits. Por ejemplo, el valor binario 0000 1010 en hexadecimal sería 0A.

Representación de valores hexadecimales

Tenga en cuenta: Es importante distinguir los valores hexadecimales de los valores decimales para los caracteres del 0 al 9, como se muestra en la figura.

Los valores hexadecimales generalmente se representan en el texto mediante un valor precedido por 0x (como 0x73) o mediante el uso de un subíndice de 16. Con menos frecuencia, pueden ir seguidos de la letra H, como 73H. Sin embargo, dado que el texto de los subíndices no se reconoce en la línea de comando ni en los entornos de programación, están precedidos por "0x" (cero X) en la representación técnica de los números hexadecimales. Por lo tanto, los ejemplos anteriores se mostrarían como 0x0A y 0x73 respectivamente.

La notación hexadecimal se utiliza para representar direcciones MAC Ethernet y direcciones IP versión 6.

Conversiones hexadecimales

Convertir números entre valores decimales y hexadecimales es sencillo, pero dividir o multiplicar rápidamente por 16 no siempre es conveniente. Si tales conversiones son necesarias, generalmente es más fácil convertir un valor decimal o hexadecimal a binario y luego convertir el valor binario a decimal o hexadecimal, según lo que desee obtener.

Con práctica, es posible reconocer los patrones de bits binarios que corresponden a valores decimales y hexadecimales. La figura muestra estos patrones para algunos valores de 8 bits.

Para escribir programas en ensamblador, es necesario comprender el sistema numérico hexadecimal. No tiene nada de complicado. Usamos el sistema decimal en la vida. Estoy seguro de que todos lo sabéis, así que intentaré explicar el sistema hexadecimal usando una analogía con el sistema decimal.

Entonces, en el sistema decimal, si agregamos un cero a cualquier número de la derecha, este número aumentará 10 veces. Por ejemplo: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000, etc. En este sistema utilizamos números del 0 al 9, es decir. diez números diferentes (de hecho, por eso se llama decimal).

En el sistema hexadecimal utilizamos dieciséis "dígitos". Escribí específicamente la palabra "dígitos" entre comillas, porque... No solo usa números. Y realmente, ¿cómo puede ser eso? Me explico: del 0 al 9 contamos igual que en decimal, pero luego quedará así: A, B, C, D, E, F. El número F no es difícil. cuenta, será igual a 15 en el sistema decimal (ver Tabla 1).

numero decimal

número hexadecimal

Tabla 1. Sistemas decimales y hexadecimales.

Por lo tanto, si agregamos un cero a la derecha de cualquier número en el sistema hexadecimal, entonces este número aumentará en16 una vez.

Ejemplo 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000, etc.

¿Pudiste distinguir los números hexadecimales de los números decimales en el Ejemplo 1? Y de esta serie: 10, 12, 45, 64, 12, 8, 19? Pueden ser hexadecimales o decimales. Para evitar confusiones y que el ordenador pueda distinguir claramente un número de otro, en ensamblador se acostumbra colocar el símbolo ho H después de un número hexadecimal ( H es una abreviatura de inglés. hexadecimal (hexadecimal). Por brevedad, a veces se le llama simplemente Maleficio ) . Y no pongas nada después del decimal. Porque Los números del 0 al 9 en ambos sistemas tienen el mismo significado, entonces los números escritos como 5 y 5h son iguales.

Eso. El ejemplo 1 (ver arriba) sería más correcto escribirlo así: 1 x 16 = 10h; 10h x 16 = 100h; 100h x 16 = 1000h. O así: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

En números posteriores veremos por qué es necesario el sistema hexadecimal. Por ahora, para nuestro programa de ejemplo, que se analizará a continuación, necesitamos saber acerca de la existencia de números hexadecimales.

Entonces, resumamos. El sistema numérico hexadecimal consta de 10 dígitos (del 0 al 9) y 6 letras del alfabeto latino (A, B, C, D, E, F). Si agregamos un cero a la derecha de cualquier número en el sistema hexadecimal, entonces este número aumentará en16 una vez. Es muy importante entender este tema., ya que lo usaremos constantemente al escribir programas.

Ahora un poco sobre cómo construiré ejemplos en Asamblea. No es del todo conveniente presentarlos en formato HTML, por lo que primero estará el código del programa con líneas numeradas, e inmediatamente después habrá explicaciones y notas.

Algo como esto:

pauta código de programa
(1) movimiento ah,9

Explicaciones:

En la línea (1) hacemos esto y en la línea (15) hacemos aquello.

Gran petición: ¡NO copie programas de una página al portapapeles y luego los pegue en el Bloc de notas (o en cualquier otro lugar)! Vuelva a escribirlos manualmente en un editor de texto. Si tiene una impresora, seleccione el programa, imprima el fragmento seleccionado y luego transfiéralo al editor desde el papel. ¡Todos los ejemplos deben escribirse usted mismo! Esto acelerará la memorización de operadores.

Y una cosa más. No hay diferencia entre letras minúsculas y MAYÚSCULAS en ensamblador. Registros de la forma:

El ensamblador los percibe de la misma manera. Por supuesto, puede obligar al ensamblador a distinguir entre caracteres en minúsculas y MAYÚSCULAS, pero no haremos esto por ahora. Para que el programa sea más fácil de leer, es mejor escribir los operadores en letras minúsculas y comenzar los nombres de las subrutinas y las etiquetas en letras mayúsculas. Pero depende de quién se sienta cómodo.

Entonces, pasemos a nuestro primer programa:

(1) segmento CSEG

(2)org 100h

(4)Comenzar:

(6) mov ah,9

(7) mov dx, mensaje de compensación

(8)entre las 21h

(10) entre 20h

(11)

(12) Mensaje db "¡Hola mundo! $"

(13)CSEG termina

(14) fin comenzar

Para explicar todos los operadores en este ejemplo, necesitaremos varias ediciones. Por lo tanto, simplemente omitiremos la descripción de algunos comandos en esta etapa. Simplemente asuma que así es como debería ser. Analizaremos estos operadores en detalle en un futuro muy próximo. Entonces, las líneas numeradas (1), (2) y (13) simplemente las ignoras.

Las líneas (3), (5), (9) y (11) se dejan en blanco. Esto se hace para mayor claridad. El ensamblador simplemente los omitirá.

Ahora pasemos a considerar los operadores restantes. El código del programa comienza con la línea (4). Esta es una marca que le indica al ensamblador el comienzo del código. La línea (14) contiene los operadores end Begin ( empezar ingles comenzar; fin fin). Este es el final del programa. En general, en lugar de la palabra Comenzar se podría haber usado algo más. Por ejemplo, Comenzar:. En este caso tendríamos que finalizar el programa. Fin Inicio (14).

Las líneas (6) (8) muestran el mensaje ¡Hola, mundo!. Aquí tendremos que hablar brevemente sobre los registros del procesador (veremos este tema con más detalle en el próximo número).

Un registro de procesador es una memoria especialmente asignada para almacenar un número.

Por ejemplo:

Si queremos sumar dos números, entonces en matemáticas lo escribimos así:

A, B y C Se trata de una especie de registros (si hablamos de una computadora) en los que se pueden almacenar algunos datos. A=5 se puede leer como: Asigne a A el número 5. .

Para asignar un valor a un registro, existe un operador mov en Assembler (del inglés move load). La línea (6) debería leerse así: Cargando en el registro A.H.número 9 (en otras palabras, asignamos A.H.número 9). A continuación veremos por qué esto es necesario.

En la línea (7) cargamos en el registro. DX dirección del mensaje para la salida (en este ejemplo será la cadena¡Hola mundo! $).

Las interrupciones se tratarán en detalle en números posteriores. Aquí diré algunas palabras.

Interrumpir MS-DOS es una especie de subrutina (parte MS-DOS), que reside permanentemente en la memoria y se puede llamar en cualquier momento desde cualquier programa.

Consideremos lo anterior usando un ejemplo (Notas en letra pequeña):

Programa para sumar dos números.

InicioProgramas

A=5 Ingresamos el valor 5 en la variable A

B=8 en la variable B el valor 8

Llamar a la suma de subrutinas

ahora C es igual a 13

A=10 Lo mismo, solo números diferentes.

B=25

Llamar a la suma de subrutinas

ahora C es igual a 35

Fin del programa

Adición de subrutina

C=A+B

Regreso desde subrutina volvemos al lugar desde donde llamamos

Fin de subrutina

En este ejemplo, llamamos a la subrutina dos veces. Suma, que agregó dos números que se le pasaron en variables A y B . El resultado se coloca en la variable C. Cuando se llama a una subrutina, la computadora recuerda desde dónde fue llamada y luego, cuando la subrutina termina de ejecutarse, la computadora regresa al lugar desde donde fue llamada. Eso. Puedes llamar a subrutinas un número indefinido de veces desde cualquier lugar.

Al ejecutar la línea (8) de un programa Ensamblador, llamamos a una subrutina (en este caso llamada interrupción), que muestra la línea en la pantalla. Para ello, de hecho, colocamos los valores necesarios en los registros. Todo el trabajo necesario (generar una línea, mover el cursor) lo realiza la subrutina. Esta línea se puede leer así: llame a la vigésima primera interrupción ( int del ingles interrumpir interrumpir). Tenga en cuenta que después del número 21 hay una letra h . Este, como ya sabemos, es un número hexadecimal (33 en decimal). Por supuesto, nada nos impide sustituir la línea. entre 21h y 33. El programa funcionará correctamente. Es una práctica común en Assembler indicar el número de interrupción en hexadecimal.

En la línea (10), como habrás adivinado, llamamos a la interrupción 20 h . Para llamar a esta interrupción, no es necesario especificar ningún valor en los registros. Realiza sólo una tarea: salir del programa (salir a DOS). Como resultado de la interrupción de las 20 h, el programa volverá al lugar desde donde se inició (cargado, llamado). Por ejemplo, en Norton Commander o Navegador DOS.

La línea (12) contiene el mensaje que se enviará. Primera palabra ( mensaje mensaje) título del mensaje. Puede ser cualquier cosa (por ejemplo, desorden o cuerda, etc.). ACERCA DE Preste atención a la línea (7), en la que cargamos en el registro. DX nuestra dirección de mensajes.

Podemos crear otra línea, a la que llamaremos Lío2. Luego, comenzando desde la línea (9), inserte los siguientes comandos:

(10) mov dx, desplazamiento Mess2

(13) Mensaje db "¡Hola mundo! $"

(14) Mess2 db "¡Soy YO! $"

y reensamblar nuestro programa. Espero que puedas adivinar lo que va a pasar.

Presta atención al último carácter de las líneas. Mensaje y Mess2 - $. Señala el final de la línea. Si lo eliminamos, entonces 21 h la interrupción continuará emitiéndose hasta que encuentre un carácter en algún lugar de la memoria $. En la pantalla veremos basura .

Si tiene un depurador, podrá ver cómo funcionará nuestro programa.

El propósito de este número no era entender en detalle con cada operador. Esto es imposible, porque aún no tienes suficientes conocimientos. Creo que después de 3 o 4 versiones comprenderá el principio y la estructura de un programa de Asamblea. Quizás el lenguaje ensamblador le haya parecido extremadamente complicado, pero créanme, esto es a primera vista.




Arriba