¿Cuál es la diferencia entre etiquetas y variables en lenguaje ensamblador?
En lenguaje ensamblador, las variables y las etiquetas son direcciones de símbolos definidas por el usuario.
La etiqueta tiene dos atributos, dirección base del segmento y dirección de desplazamiento
Variable Hay tres atributos, dirección base del segmento, dirección de compensación y tipo de datos
En términos generales, las etiquetas solo se definen en segmentos de código, mientras que las variables se pueden definir en segmentos de datos y segmentos de código.
Una de las ventajas destacadas del lenguaje ensamblador informático es el uso de símbolos (Symbols) en lugar de códigos de destino, es decir, una gran cantidad de códigos binarios están representados por símbolos, lo que facilita el programa fuente en lenguaje ensamblador. de entender y fácil de recordar.
En el lenguaje ensamblador de macros, todos los nombres de variables, nombres de etiquetas, nombres de registros, mnemónicos de instrucciones y nombres de registros se denominan colectivamente símbolos. Estos símbolos se pueden cambiar de nombre mediante pseudooperaciones. comandos de declaraciones de control de ensamblaje, o se les pueden dar a través de instrucciones. Defina otros nombres y nuevos atributos de tipo, brindando así una gran flexibilidad a la programación. Los símbolos son identificadores definidos por los programadores para representar una determinada unidad de almacenamiento, datos, expresión, nombre, etc. en el programa. Se pueden dividir en cinco categorías: registros, etiquetas, variables, números y nombres.
Formulario de declaración de ensamblaje:
INICIO: AGREGAR AX,BUFFER
p>SEGMENTO DE DATOS
BUFFER DB 01H, 02H
EXTREMOS DE DATOS
INICIO JMP donde INICIO, BÚFER y DATOS son todos símbolos. etiquetas, nombres de variables y nombres de segmentos respectivamente. Tienen significados específicos completamente diferentes.
Etiqueta
La etiqueta (LABEL) es el nombre que se le da a un grupo de instrucciones de la máquina. es opcional, solo cuando es necesario usar una dirección simbólica para acceder a ella. Se asigna una etiqueta a esta declaración solo cuando contiene la declaración. La etiqueta es la marca de destino del programa, que siempre está asociada a una dirección y se utiliza. para transferencia o transferencia de control de instrucciones de bucle.
2 1 Propiedades de la etiqueta
Debido a que la etiqueta representa la dirección de la instrucción, tiene tres atributos, a saber, atributo de segmento, atributo de desplazamiento y atributo de tipo. El atributo de segmento es la dirección del segmento y el segmento de la etiqueta debe estar en CS. El atributo de desplazamiento representa la etiqueta. La distancia a la primera dirección del segmento, la unidad es bytes, es un entero sin signo de 16 bits. El atributo de tipo es el atributo de distancia, el número de índice y la distancia de la instrucción de transferencia. Se hace referencia a la etiqueta en este segmento, y la distancia está entre -128 y +127. Se denomina etiqueta corta y el atributo de distancia es CORTO. Cuando la etiqueta está en este segmento y la distancia está entre -32768 y +32767, se llama etiqueta cercana. El atributo de distancia es NEAT. Cuando la instrucción que hace referencia a la etiqueta y la etiqueta no están en el mismo segmento. se llama etiqueta lejana. El atributo de distancia es FAR.
2 2 Definición de etiqueta
Hay tres formas de definir la etiqueta:
2 2 1. Se establece implícitamente que el atributo de distancia de la etiqueta es CORTO y La etiqueta NEAR puede usar instrucciones implícitas, es decir, se define en el segmento de código, se agregan dos puntos después del identificador y se coloca delante del operador de un instrucción de ensamblaje Ejemplo:
NEXT: MOV AX,BX
----------
LOOP NEXT
- - - - - - - - - ?
NEXT1: CMP AX,BX
JA NEXT1
NEXT y NEXT1 son nombres de etiquetas. p>
2 2 2 Use LABEL para definir etiquetas
Para etiquetas con atributos NEAR y FAR puede usar esta definición. El formato es:
Nombre de etiqueta LABEL NEAR/FAR<. /p>
Por ejemplo: SIGUIENTE ETIQUETA CERCA/LEJOS
- - - - - - - - -
BUCLE SIGUIENTE
2 2 3 Utilice EQU para definir etiquetas
Para etiquetas con atributos NEAR y FAR, se puede definir EQU. El formato es:
Nombre de etiqueta EQU THIS NEAT/FAR
. Por ejemplo:
SIGUIENTE EQU ESTA CERCA
- - - -
- - - - -
LOOP NEXT
2 3 Uso de etiquetas
2 3 1 La etiqueta en la instrucción de transferencia incondicional se utiliza como dirección de transferencia.
Formato:
Etiqueta JMP
La etiqueta puede ser una etiqueta corta, una etiqueta cercana o una etiqueta lejana
. 2 En la instrucción de bucle, la etiqueta se utiliza como dirección de transferencia
Formato: etiqueta LOOP
La etiqueta solo puede ser una etiqueta corta
2 3 3 La etiqueta en la transferencia condicional se utiliza como dirección de transferencia
Formato:
Etiqueta de instrucción de transferencia condicional
La etiqueta solo puede usar etiquetas cortas
Separador de atributos 2 3 4
2.3 4. 1 Obtenga el operador de dirección de segmento SEG
Por ejemplo: MOV AX,SEG NEXT
SEG NEXT es obtener la dirección del segmento donde se encuentra la etiqueta NEXT.
2 3 4 2 Obtenga el operador de desplazamiento OFFSET
Por ejemplo: MOV BX, OFFSET NEX
OFFSET NEXT es la dirección efectiva de la etiqueta NEXT. Esta declaración es equivalente a: LEA BX, NEXT
2 3 4 3 Obtenga el operador de tipo TYPE
Por ejemplo. :
MOV AX, TYPE NEXT
Si NEXT es Si NEXT es una etiqueta cercana, el valor de TYPE NEXT es FFFFH(-1). Si NEXT es una etiqueta lejana, el TYPE. El siguiente valor es FFFEH(-2). Entre ellos, -1 y -2 no tienen ningún significado físico real y solo representan el tipo de etiqueta con valores numéricos.
Variables
Las variables representan datos. almacenados en ciertas unidades de almacenamiento. Estos datos se pueden modificar en cualquier momento durante la ejecución del programa. Las variables se hacen referencia en el programa a través de nombres de variables. El nombre es en realidad el nombre de un área de datos en el área de almacenamiento. por los programadores en forma de datos de nombres de variables como operandos de instrucciones o pseudoinstrucciones, lo que facilita enormemente a los programadores.
Porque las variables se definen en un segmento lógico, lo que determina que las variables y las etiquetas tienen atributos de segmento. , atributos de desplazamiento y atributos de tipo Los dos primeros son los mismos que los atributos de la etiqueta, y el atributo de tipo indica que la unidad de acceso del elemento de datos en el área de datos es Byte (BYTE), palabra (WORD) o número (. DWORD), etc. Se puede observar que la principal diferencia entre variables y etiquetas es que las variables se refieren a datos, mientras que las etiquetas corresponden a instrucciones
3 1 Definición de variables
Las variables generalmente tiene tres métodos de definición
.3 1 1 Utilice pseudoinstrucciones DB, DW, DD, etc. para definirlos
Formato: [nombre de variable] definición Pseudoinstrucción de datos El nombre de la variable es opcional. Si no hay nombre, la variable es una variable sin nombre. La expresión puede ser una constante, el símbolo reservado "?" y una cadena de código ASCII (solo puede ser). definido usando DB), expresiones de dirección (no se pueden definir usando DB), tablas de datos preestablecidas y valores repetidos definidos usando DUP. El nombre de la variable se puede definir en cualquier sección lógica, seguido de un espacio en lugar de dos puntos .Por ejemplo: A DB 100; A es un byte, el valor es 100. B DB 100,2 3; el valor de B es 100, el valor de B+1 es 6; C DB 'ABC'; El valor de C es 41H, el valor de C+1 es 42H, el valor de C+2 es 43H.D DB ?; D es una sección de palabras, se reserva un byte y se puede colocar cualquier contenido. E DB 23 DUP(0) define 23 0, cada 0 ocupa un byte. F DB 3 DUP(1,2 DUP(0)); Defina 9 números, en orden: 1,0,0,1,0,0,1,0,0. G DW 'AB ','CD';El valor de G es 4142H y el valor de G+2 es 4344H. H DW 2 3;H es una palabra y el orden de almacenamiento es 06,00H p> I DW ? Reserva una palabra, ocupando dos unidades de bytes, 3 1 2 Utilice la directiva LABEL para definir variables Formato: Nombre de variable LABEL BYTE/WORD/DWORD Por ejemplo: BUF LABEL BYTE DB 21 Equivale a BUF DB 21 3 1 3 Utilice la directiva EQU para definir variables Formato: nombre de variable EQU THIS BYTE/WORD/DWORD ESTE es un operador que define cualquier tipo Al igual que LABEL, se utiliza para establecer atributos de tipo variable o etiqueta, y su atributo de segmento es. el segmento del segmento donde se encuentra la declaración. Los atributos de dirección y desplazamiento son la siguiente dirección de desplazamiento disponible que se puede asignar en la ubicación. Por ejemplo: STACK SEGMENT DW. 100 DUP(? TOP EQU ESTA PALABRA (o TOP LABEL WORD) STACK END La variable TOP se define como un tipo de palabra y su desplazamiento Deben ser las siguientes 100 palabras después de que se define el segmento STACK, que es exactamente el valor inicial del puntero de pila SP, por lo que este método se usa a menudo para asignar el valor inicial a SP. Introducción a la programación Red 3 1 4 Los nombres de variables de doble definición utilizan implícito El modo dual de modo de inclusión y modo de visualización se puede definir como una variable doble para la misma posición. Formato 〈Nombre de variable〉 EQU THIS〈Tipo〉 〈 Nombre de variable〉 DB/DW/DD… Por ejemplo: AB EQU ESTE BYTE (o AB LABEL BYTE) AW DW 50 DUP(0)AW se define como una variable de palabra ESTE BYTE se utiliza antes de AW para definir una variable de tipo byte. Acceda a la misma ubicación. Utilice AB para acceder por bytes y AW por palabras. 3 2 Acceso a variables 3 2 1 El nombre de la variable se utiliza como dirección directa del almacenamiento. unidad Cuando el nombre de la variable usa direccionamiento directo, el tipo de variable debe cumplir con los requisitos de la instrucción Consistente. Por ejemplo: AB ha definido una variable de byte, AW está definida como una variable de palabra, y el nombre de la variable se utiliza para direccionamiento directo en la siguiente forma: MOV AH, AB MOV AX,AW 3 2 2 Utilice el operador de síntesis PTR para cambiar temporalmente el tipo de variable Continúa con el ejemplo MOV CX,WORD PTR AB MOV CL, BYTE PTR AW Puede cambiar temporalmente AB a tipo palabra y AW a tipo byte, pero los atributos de segmento y desplazamiento permanecen sin cambios. 3 2 3 Nombre de variable como desplazamiento en direccionamiento relativo Por ejemplo: MOV AX,AB〔SI] MOV AX,AW [BX][SI] Aquí AB y AW representan respectivamente sus compensaciones en lugar de los datos que representan. A menudo se usan en operaciones de matrices o tablas. AB[SI] representa la matriz AB. 3 2 4 Separador de atributos
Por ejemplo: suponiendo que AB es una variable de byte y AW es una variable de palabra, entonces:
MOV AH, TYPE AB es MOV AH,1
MOV AX, TYPE AW es MOV AX,2
3 2 5 Para obtener el número de elementos de datos variables, el operador LENGTH usa DUP al definir las variables. En este caso, el ensamblador devolverá el número de repeticiones. antes de DUP, es decir, el número de unidades asignadas a la variable. Si la expresión tiene varios DUP, se tomará el primer elemento DUP. En otros casos, se devolverá 1.
Por ejemplo: ARRAY. DW 50 DUP(0) significa
MOV CX, LENGTH ARRAY significa MOV CX,50
p>
ARRAY1,DW1,2,3 entonces
MOV CX,LENGTH ARRAY1
Eso es MOV CX,1
Se puede ver que LENGTH representa el número de elementos de la matriz, independientemente de su tipo.
3 2 6 Tome el operador de longitud del elemento de datos variable TAMAÑO
Operador TAMAÑO, el ensamblador devolverá el número de bytes asignado a la variable, es decir
TAMAÑO=LENGTH TYPE
Por ejemplo:
ARRAY DW 50 DUP(0) entonces
TAMAÑO ARRAY=50 2=100
Nota: Para encontrar la longitud de una variable de cadena, usar TAMAÑO no puede lograr el propósito.
Por ejemplo:
ST DB 'ABCDEFG' entonces
El valor de TAMAÑO ST es 1 en lugar de 7. Si desea que la cadena sea más larga, puede usar COUNT EQU $-ST, entonces el valor de COUNT es 7, donde $ es el siguiente dirección de desplazamiento disponible después de definir una cadena de caracteres ST.
3 2 7 El nombre de la variable solo corresponde al primer elemento de datos en el área de datos
Por ejemplo:
WORD DW 20 DUP(?)
MOV AX,WORD ;El primer elemento envía AX,
MOV AX,WORD+38;El vigésimo elemento envía AX.
p>Otros símbolos
Excepto etiquetas y variables, los símbolos también pueden representar constantes, nombres de secciones, nombres de procedimientos, nombres de registros, mnemónicos de instrucciones, etc.
(1) Simbólico constantes Las constantes también suelen aparecer en forma de símbolos, lo que las hace más versátiles y fáciles de modificar. Ejemplo:
COUNT EQU 100, luego COUNT representa la constante 100.
(2) El símbolo representa la instrucción mnemotécnica. Ejemplo:
MOV EQU MOV luego MOVE representa la instrucción MOV
(3) El símbolo representa el registro, por ejemplo: COUNT EQU CX y COUNT representa. el registro CX.
(4) El símbolo sirve como nombre del segmento, por ejemplo: p>
SEGMENTO DE DATOS
- - - - - - - - - - - - - - - -
FIN DE DATOS
DATOS es el nombre del segmento, cita DATOS para representar la dirección del segmento.
Símbolo (5) como nombre del procedimiento, por ejemplo: SUBR PROC NEAR/FAR?
- - - - - - - - - - - - - -
SUB ENDP
SUB es el nombre del procedimiento, que también tiene tres atributos: segmento, desplazamiento y tipo de distancia
(6) Símbolos como macros Nombre de la instrucción
Formato de definición de macro Nombre de la instrucción de macro MACRO [. parámetro formal]
- - - -- - - - - - - - - - - ENDM
Formato de llamada de macro:
Nombre de instrucción de macro [parámetros reales ]
Siempre que se cita el nombre de la instrucción macro, el ensamblador usa la expansión de macro para la llamada de macro, es decir, el cuerpo de la definición de macro se usa para reemplazar la instrucción macro del programa fuente y reemplazar los parámetros formales en la macro. definición con parámetros reales.