我正在查看一段汇编代码,但我一直在试图理解某些东西:
incl (%ebx, %eax, 4)
这究竟是做什么的?我尝试将它插入一个.s
文件并编译然后观察 GDB 中的寄存器,但是当它在我设置ebx
为地址并设置eax
为 1 之后通过指令时它什么也没改变......我猜我不明白如何正确使用它。任何人都可以帮忙吗?
我正在查看一段汇编代码,但我一直在试图理解某些东西:
incl (%ebx, %eax, 4)
这究竟是做什么的?我尝试将它插入一个.s
文件并编译然后观察 GDB 中的寄存器,但是当它在我设置ebx
为地址并设置eax
为 1 之后通过指令时它什么也没改变......我猜我不明白如何正确使用它。任何人都可以帮忙吗?
它不是增加寄存器;它正在递增根据指令中寄存器的内容计算的内存位置。
我建议不要使用 GAS 和 AT&T 语法。它的发明是为了混淆语法并使其不清楚且对初学者没有吸引力。
创建此语法以供 HLL 编译器的后端使用。用它进行人类编写的编程是一种受虐狂。
即使是我(有 25 年的汇编编程背景)也几乎无法识别正常的指令:
inc dword [ebx+4*eax]
; increment a double word at memory address (ebx+4*eax)
请改用FASM。它具有清晰、以人为本的语法,最适合手写汇编程序。