Assembly 汇编中的字节指令

Assembly 汇编中的字节指令,assembly,byte,directive,Assembly,Byte,Directive,我正在阅读Richard C.Detmer编写的题为“80x86汇编语言和计算机体系结构简介”的教科书,在第59页,它讨论了汇编语言中的字节指令,并将其用于字符和字符串。全文如下: 除数值操作数外,BYTE指令还允许单个字符的字符操作数或多个字符的字符串操作数。撇号(')或引号(“)可用于指定字符或分隔字符串。他们必须成对;不能在左边加撇号,在右边加引号。用撇号分隔的字符串可以包含引号,用引号分隔的字符串可以包含撇号,这样就可以使字符串包含这些特殊字符。” 这是可以理解的,但我的好奇心是字节指令

我正在阅读Richard C.Detmer编写的题为“80x86汇编语言和计算机体系结构简介”的教科书,在第59页,它讨论了汇编语言中的字节指令,并将其用于字符和字符串。全文如下:

除数值操作数外,BYTE指令还允许单个字符的字符操作数或多个字符的字符串操作数。撇号(')或引号(“)可用于指定字符或分隔字符串。他们必须成对;不能在左边加撇号,在右边加引号。用撇号分隔的字符串可以包含引号,用引号分隔的字符串可以包含撇号,这样就可以使字符串包含这些特殊字符。”

这是可以理解的,但我的好奇心是字节指令,因为我认为它只能容纳一个字节,八位

string BYTE "HelloWorld"
当然,它会编译,但如果你检查十六进制,你会注意到它不仅仅是一个字节,而是多个字节。查看ascii表,我们已经知道一个字符就是一个字节。那么我们怎么能有字符串呢?我试着用数字来应用它。我们知道byte指令的范围是从-128到255。我试过了此代码:

number BYTE 9987
当我试图编译和运行时,我遇到了一个错误,因为9987当然大于一个字节。但是为什么字符串对此免疫?为什么byte指令在字符串上下文中可以容纳多个字节,但对数字却不一样

我可以想象,当我编译并运行我列出的第一条代码语句时,会出现与第二条代码语句相同的错误


-Dan

请注意,没有单一的汇编程序语法,不同的程序可能使用不同的语法。您应该查阅汇编程序手册

也就是说,字符串常量通常只是每个字符的简写符号,而
BYTE
指令允许同时定义多个项目

因此,例如,
字节1、2、3、4
是有效的,定义了4个字节,而您的
字符串字节“HelloWorld”
相当于
字符串字节“H”、“e”、“l”、“l”、“o”、“W”、“o”、“r”、“l”、“d”
并定义了10个字节。之所以没有得到错误,是因为每个字符本身都适合一个字节


有些汇编程序甚至不允许在
字节中使用字符串文字或等效指令,它们有专门的字符串指令,例如
.string
.ascii
请注意,没有单一的汇编程序语法,不同的程序可能使用不同的语法。您应该查阅汇编程序手册

也就是说,字符串常量通常只是每个字符的简写符号,而
BYTE
指令允许同时定义多个项目

因此,例如,
字节1、2、3、4
是有效的,定义了4个字节,而您的
字符串字节“HelloWorld”
相当于
字符串字节“H”、“e”、“l”、“l”、“o”、“W”、“o”、“r”、“l”、“d”
并定义了10个字节。之所以没有得到错误,是因为每个字符本身都适合一个字节


一些汇编器甚至不允许在
字节中使用字符串文字或等效指令,它们有专门的字符串指令,例如
.string
.ascii
指令
字节
告诉汇编器保留一个存储块并记住其字节长度。长度是确定的根据初始值设定项中的字节数,可以是0-255十进制之间的数字,也可以是单引号中的字符。字符串在编程语言中很常见,通常被认为是内存中连续字节中的字符数组。为了方便程序员,汇编程序允许您保留一个字节序列通过在单引号或双引号中指定字符串,可以将字符串转换为字符串。它们是等效的

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

一些汇编程序对此有不同的指令,例如Oracle Solaris x86汇编语言有

  • 仅接受字节的指令
  • .ascii
    指令,该指令接受不会以NUL结尾的字符串
  • .string
    指令,该指令接受将以NUL结尾的
    字符串

指令
BYTE
告诉汇编程序保留一个存储块,并以字节为单位记住其长度。长度由初始值设定项中的字节数决定,可以是0-255个十进制数字,也可以是单引号中的字符。字符串在编程语言中很常见,通常被认为是内存中连续字节中的字符数组。为了方便程序员,汇编程序允许您通过在单引号或双引号中指定字符串来保留初始化为字符串的字节序列。它们是等效的

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

一些汇编程序对此有不同的指令,例如Oracle Solaris x86汇编语言有

  • 仅接受字节的指令
  • .ascii
    指令,该指令接受不会以NUL结尾的字符串
  • .string
    指令,该指令接受将以NUL结尾的
    字符串

你不明白什么?书上说这是合法的。如果你认为不同,你一定错了。这里的问题是什么。@EJP是的,我知道这是合法的,但这不是问题。问题是为什么它是合法的。知道做或不做某件事是合法的与理解它完全不同。我知道我可以做,但我不知道我想知道为什么。你没看过我的帖子。你不知道什么