359a: 41 51 push %r9
359c: 45 31 c9 xor %r9d,%r9d
359f: ff b4 24 a8 00 00 00 pushq 0xa8(%rsp)
35a6: 6a 00 pushq $0x0
35a8: 6a 00 pushq $0x0
查看以上指令代码,有的用 push,有时用 pushq;
汇编指令通常以字母"b"、"s"、"w"作为后缀, "l"、"q"或 "t"来确定正在操作的操作数的大小。
b = 字节(8 位)
s = short(16 位整数)或单个(32 位 float )
w = 字(16 位)
l = 双字,long(32 位整数或 64 位 float )
q = 四字(64 位)
t = 十个字节(80 位 float )
如果未指定后缀,并且指令没有内存操作数,GAS 会根据目标寄存器操作数(最终操作数)的大小推断操作数大小。
pushq $0x0 只是将 8 个零字节压入堆栈。然后 push %r9 定义 %r9 是 64 位寄存器并将它的值压入堆栈。