Assembly 在汇编中.fill.long表示多少字节?

Assembly 在汇编中.fill.long表示多少字节?,assembly,binaryfiles,data-conversion,Assembly,Binaryfiles,Data Conversion,我有一个来自github的脚本 这是用汇编编写的,现在我想用这个Edid做更多的操作,因为我从来没有做过汇编,所以我用Python编写它。 为此,我需要知道有多少字节 .ascii 。填充7,2,0x0101 .long .data 通常必须在python中“转换”它 如果有帮助的话,这里是每一个的完整代码行: start1: .ascii "Linux #0" .fill 7,2,0x0101 /* Unused */ seria

我有一个来自github的脚本

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

  • .ascii
  • 。填充7,2,0x0101
  • .long
  • .data
  • 通常必须在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
    定义了50个包含0xAB的字节,但是“1”在这里是什么意思?

    到目前为止,我发现
    。长X
    意味着32位-所以我可以将其转换为4个字节并得到相同的结果,对吗

    可在此处找到:

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

    这些很简单

    • .long value
      放入一个长值(4字节)
    • .word value
      放入一个单词值(2字节)
    • .byte value
      放入一个字节值(1字节)
    • .ascii“text”
      只将文本的字节放在没有NUL终止符的地方
    范例

    .ascii“你好”

    .byte 'H'
    .byte 'E'
    .byte 'L'
    .byte 'L'
    .byte 'O'
    
    .byte 'H', 'E', 'L', 'L', 'O'
    
    这和

    .byte 'H'
    .byte 'E'
    .byte 'L'
    .byte 'L'
    .byte 'O'
    
    .byte 'H', 'E', 'L', 'L', 'O'
    
    这一点不太明显:

    。填充重复、大小、值

    它将把
    重复次数
    值与大小
    大小

    示例

    。填充3、2、0xab

    这和

    。单词0xab,0xab,0xab

    。填充3,1,0xab

    .byte 'H'
    .byte 'E'
    .byte 'L'
    .byte 'L'
    .byte 'O'
    
    .byte 'H', 'E', 'L', 'L', 'O'
    
    。字节0xab,0xab,0xab

    完整示例:

    .ascii "HELLO"
    .fill 3,2,0xab
    .word 5
    .long 6
    
    这将在一个小小的endian系统上为您提供内存中的这些字节:

    'H', 'E', 'L', 'L', 'O', 0, 0xab, 0, 0xab, 0, 0xab, 0, 5,   0, 0, 0, 6
    |   .ASCII              |  .FILL                   | .WORD |   .LONG  |
    
    这些都很简单

    • .long value
      放入一个长值(4字节)
    • .word value
      放入一个单词值(2字节)
    • .byte value
      放入一个字节值(1字节)
    • .ascii“text”
      只将文本的字节放在没有NUL终止符的地方
    范例

    .ascii“你好”

    .byte 'H'
    .byte 'E'
    .byte 'L'
    .byte 'L'
    .byte 'O'
    
    .byte 'H', 'E', 'L', 'L', 'O'
    
    这和

    .byte 'H'
    .byte 'E'
    .byte 'L'
    .byte 'L'
    .byte 'O'
    
    .byte 'H', 'E', 'L', 'L', 'O'
    
    这一点不太明显:

    。填充重复、大小、值

    它将把
    重复次数
    值与大小
    大小

    示例

    。填充3、2、0xab

    这和

    。单词0xab,0xab,0xab

    。填充3,1,0xab

    .byte 'H'
    .byte 'E'
    .byte 'L'
    .byte 'L'
    .byte 'O'
    
    .byte 'H', 'E', 'L', 'L', 'O'
    
    。字节0xab,0xab,0xab

    完整示例:

    .ascii "HELLO"
    .fill 3,2,0xab
    .word 5
    .long 6
    
    这将在一个小小的endian系统上为您提供内存中的这些字节:

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


    为什么这个标签是C和python?你有没有阅读过汇编程序的文档?里面有你的问题的答案。用汇编语言编程时,RTFM通常是个好主意。哪种汇编语言和汇编语言?不仅仅有一种架构,而且对于一种架构来说,不仅仅有一种语言是它的同义词。顺便说一句,您可能可以将您的EDID数据放入
    .section.rodata
    ,除非您在可执行文件的读写数据段中需要它。@Nico:对,它是一个类似
    .text
    的section指令。为什么这个标记为C和python?您是否尝试过阅读汇编程序的文档?里面有你的问题的答案。用汇编语言编程时,RTFM通常是个好主意。哪种汇编语言和汇编语言?不仅仅有一种架构,而且对于一种架构来说,不仅仅有一种语言是它的同义词。顺便说一句,您可能可以将您的EDID数据放入
    .section.rodata
    ,除非您在可执行文件的读写数据段中需要它。@Nico:对,它是一个类似
    .text
    的节指令,首先,谢谢。在我的示例中,
    .fill 7,2,0x0101
    与.word 0x0101 x 7相同,这是否正确?所以我需要14个字节来写
    。填充7,2,0x0101
    ?对我来说很难理解你在这里的意思,因为我从来没有对二进制数据进行过操作:
    。ascii“text”只是将文本的字节放在没有NUL终止符的地方
    .fill 7,2,0x0101
    将导致7次
    。word 0x0101
    。fill 50,1,0xab
    (不是``。fill 50,
    。fill 50,0xab,1
    )将导致50次
    。字节0xab
    @Nico请参阅编辑的答案,以获得增强的解释。添加的信息使其更加清晰。我可以将
    .ascii“HELLO”
    转换为
    .byte“H”
    .byte“E”
    .byte“L”
    .byte“L”
    .byte“O”
    ?因为我知道如何用python将int和float转换为字节,但我无法想象我将如何编写
    .ascii“HELLO”
    ,首先,谢谢。在我的示例中,
    .fill 7,2,0x0101
    与.word 0x0101 x 7相同,这是否正确?所以我需要14个字节来写
    。填充7,2,0x0101
    ?对我来说很难理解你在这里的意思,因为我从来没有对二进制数据进行过操作:
    。ascii“text”只是将文本的字节放在没有NUL终止符的地方
    .fill 7,2,0x0101
    将导致7次
    。word 0x0101
    。fill 50,1,0xab
    (不是``。fill 50,
    。fill 50,0xab,1
    )将导致50次
    。字节0xab
    @Nico请参阅编辑的答案,以获得增强的解释。添加的信息使其更加清晰。我可以将
    .ascii“HELLO”
    转换为
    .byte“H”
    .byte“E”
    .byte“L”
    .byte“L”
    .byte“O”
    ?因为我知道如何用pythonb转换int和float