assembly 何时使用.byte而不是.ascii

wwwo4jvm  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(145)

假设我想声明一个变量,比如“u”,它是一个字符,为什么我要用.byte而不是.ascii呢?
单个ascii字符的长度不也是1个字节吗?

ikfrs5lh

ikfrs5lh1#

对于单个ASCII字符,您可以选择.ascii "u".byte 'u'。两者都将在当前位置组装成一个字节。这是.ascii.byte的功能几乎重叠的一个用例。
对于人类读者来说,有些人可能会把.ascii读成char foo[1] = {'u'};,而.byte读成char bar = 'u';,但在asm中,这只是语义上的区别。两者都是1字节的对象,具有相同的对象表示,不像C,没有任何东西会隐式地解引用一个对象来获取值,而名称是数组的地址。
.byte允许使用非ASCII值(如.byte 1, 2, 3)方便地实现C
uint8_t arr[] = {1,2,3};
如果你的汇编程序支持十六进制转义码(GAS或clang),你可以等效地编写.ascii "\x01\x02\x03",但是对于人类读者来说,.byte版本看起来更像C。
.byte也允许像-2那样的有符号负值,而不必像.ascii "\xFE"那样手动计算出2的补码位模式。
对于长度超过1个字节的文本字符串,.ascii "abc"当然比
.byte 'a', 'b', 'c' .

相关问题