.fill .long 在汇编中意味着多少字节?

How many Bytes does .fill .long mean in assembly?

我有一个来自 github https://github.com/akatrevorjay/edid-generator

的脚本

它是用汇编语言编写的,现在我想用这个 Edid Stuff 做一些更多的操作,因为我从来没有用汇编语言编写它,所以我用 Python 编写了它。 为此,我需要知道有多少字节

  1. .ascii
  2. .fill 7,2,0x0101
  3. .long
  4. .data

通常必须 "convert" 它在 python。

如果有帮助,这里是每个的完整代码行:

start1:         .ascii  "Linux #0"
                .fill   7,2,0x0101      /* Unused */
serial_number:  .long   SERIAL
                .data (Dont have more here)

到目前为止我发现,.long X 表示 32 位 - 所以我可以将其转换为 4 字节并获得相同的结果,对吗?

在此处找到:

我看到的另一件事是,例如 .fill 50,0xAB,1 定义了包含 0xAB 的 50 个字节,但是这里的“1”是什么意思?

这些很简单

  • .long value 放一个 long 值(4 字节)
  • .word value 放一个字值(2字节)
  • .byte value 放一个字节值(1字节)
  • .ascii "text" 只是把文本的字节没有 NUL 终止符

例子

.ascii "HELLO"

相同
.byte 'H'
.byte 'E'
.byte 'L'
.byte 'L'
.byte 'O'

相同
.byte 'H', 'E', 'L', 'L', 'O'

这个不太明显:

.fill repeat , size , value

它将 repeat timesvalue 与大小 size

例子

.fill 3, 2, 0xab

相同

.word 0xab, 0xab, 0xab

.fill 3, 1, 0xab

相同

.byte 0xab, 0xab, 0xab

完整示例:

.ascii "HELLO"
.fill 3,2,0xab
.word 5
.long 6

这将在小端系统上为您提供内存中的这些字节:

'H', 'E', 'L', 'L', 'O', 0, 0xab, 0, 0xab, 0, 0xab, 0, 5,   0, 0, 0, 6
|   .ASCII              |  .FILL                   | .WORD |   .LONG  |