Pregunta

Estoy leyendo el libro de texto titulado "Introducción al lenguaje ensamblador 80x86 y la arquitectura informática" de Richard C.Detmer y en la página 59 habla de la BYTE directiva en lenguaje ensamblador y usarla para caracteres y cadenas.Aquí está el texto:

"Además de los operandos numéricos, los BYTE La directiva permite operandos de carácter con un solo carácter o operandos de cadena con muchos caracteres.Se pueden utilizar apóstrofes (') o comillas (") para designar caracteres o delimitar cadenas.Deben estar en parejas;no se puede poner un apóstrofo a la izquierda y unas comillas a la derecha.Una cadena delimitada con apóstrofes puede contener comillas, y una delimitada con comillas puede contener apóstrofes, lo que hace posible tener cadenas que contengan estos caracteres especiales."

Esto es muy comprensible pero mi curiosidad es la BYTE directiva porque pensé que solo podía contener un byte, ocho bits.hice una prueba y si dije

string BYTE "HelloWorld"

Se compilaría, por supuesto, pero si marcara el hexadecimal, notará que no es solo un byte sino varios bytes.Mirando una tabla ascii ya sabemos que un solo carácter es un byte.Entonces, ¿cómo podemos tener hilos?Intenté aplicar esto con números.Conocemos el rango de BYTE directiva es de -128 a 255.Probé este código:

number BYTE 9987

cuando intenté compilar y ejecutar, recibí un error porque, por supuesto, 9987 era mayor que un byte.Pero ¿por qué las cuerdas son inmunes a esto?¿Por qué puede el BYTE ¿La directiva contiene más de un byte en los contextos de cadenas pero no hace lo mismo con los números?

Me imagino que cuando compilé y ejecuté la primera declaración de código que enumeré tenía el mismo error que la segunda.¿Por qué se rompe la "regla" aquí?

-dan

¿Fue útil?

Solución

Tenga en cuenta que no existe una sintaxis de ensamblador única; diferentes programas pueden usar una sintaxis diferente.Debes consultar el manual de tu ensamblador.

Dicho esto, la constante de cadena suele ser sólo una notación abreviada para cada uno de los caracteres por separado, y la BYTE La directiva permite definir varios elementos a la vez.

Así por ejemplo, BYTE 1, 2, 3, 4 es válido y define 4 bytes, y su string BYTE "HelloWorld" es equivalente a string BYTE 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' y define 10 bytes.La razón por la que no aparece un error es porque cada carácter por sí solo cabe en un byte.

Algunos ensambladores ni siquiera permiten cadenas literales en BYTE o directivas equivalentes, tienen directivas especializadas para cadenas, por ejemplo .string o .ascii.

Otros consejos

El BYTE La directiva le dice al ensamblador que reserve un bloque de almacenamiento y recuerde su longitud en bytes.La longitud está determinada por la cantidad de bytes en el inicializador, que pueden ser números entre 0 y 255 decimales o caracteres entre comillas simples.Las cadenas son comunes en los lenguajes de programación y generalmente se consideran matrices de caracteres en bytes consecutivos en la memoria.Para comodidad del programador, el ensamblador le permite reservar una secuencia de bytes inicializados en una cadena de caracteres especificando la cadena entre comillas simples o dobles.Estos son equivalentes

string1 BYTE 'H', 'e', 'l', 'l', 'o'

o

string1 BYTE 'Hello'

Algunos ensambladores tienen directivas diferentes para esto, por ejemplo, el lenguaje ensamblador Oracle Solaris x86 tiene una

  • .byte directiva que solo toma bytes
  • .ascii directiva que toma una cadena que no terminará en NUL
  • .string directiva que toma una cadena que will ser terminado en NUL
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top