【问题标题】:How many Bytes does .fill .long mean in assembly?.fill .long 在汇编中意味着多少字节?
【发布时间】:2017-10-10 07:34:53
【问题描述】:

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

它是用汇编编写的,现在我想用这个 Edid Stuff 做更多的动作,因为我从来没有用 Python 编写过汇编。 为此我需要知道多少字节

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

通常必须在 python 中“转换”它。

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

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

【问题讨论】:

  • 为什么这个标签是C和python?
  • 你试过阅读汇编器的文档吗?里面有你问题的答案。在汇编中编程时,RTFM 通常是一个好主意。
  • 哪种汇编程序和汇编语言?不仅有一种架构,而且对于一种架构来说,也不仅有一种语言
  • .data.section .data 的同义词。顺便说一句,您可能可以将您的 EDID 数据放入.section .rodata,除非您在可执行文件的读写数据段中需要它。
  • @Nico:对,它是一个类似于.text的部分指令

标签: assembly binaryfiles data-conversion


【解决方案1】:

这些很简单

  • .long value 放入一个长值(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 times的值value和大小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  |

【讨论】:

  • 首先,谢谢。我是否正确,在我的示例中 .fill 7,2,0x0101 将与 .word 0x0101 x 7 相同?所以我需要 14 个字节来写 .fill 7,2,0x0101?
  • 对我来说很难理解你的意思,因为我从来没有对二进制数据进行过操作:.ascii "text" just puts the bytes of the text without NUL terminator
  • @Nico 差不多。 .fill 7,2,0x0101 将产生 7 次 .word 0x0101.fill 50,1, 0xab(不是 ``.fill 50,.fill 50, 0xab, 1)将产生 50 次 .byte 0xab
  • @Nico 查看编辑后的答案以获得 .ASCII 的增强解释
  • 添加的信息使其更加清晰。我可以将.ascii "HELLO" 转换为.byte "H".byte "E".byte "L".byte "L".byte "O" 吗?因为我知道如何用 python 转换 int 和 float 字节,但我无法想象我会如何写 .ascii "HELLO"
【解决方案2】:

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

在这里找到: What .long 0xXXXXXXXX stands for in asm?

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

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2010-10-21
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多