我对汇编语言比较陌生。我找到了很多教程,解释了如何使用ML64和MASM32创建一个HelloWorld应用程序,但没有一个详细解释该程序。例如,看看下面的例子,我在网上找到并编译(64位):
main proc
sub rsp, 68h ; space for 4 arguments + 16byte aligned stack
xor r9d, r9d ; 4. argument: r9d = uType = 0
lea r8, [caption] ; 3. argument: r8 = caption
lea rdx, [text] ; 2. argument: edx = window text
xor rcx, rcx ; 1. argument: rcx = hWnd = NULL
call MessageBoxA
xor ecx, ecx ; ecx = exit code
call ExitProcess
main endp
end
我可以遵循这一点。我知道有通用寄存器和段寄存器但你如何决定使用哪一个。例如,为什么'r8'包含标题而不是r9?是否有WinAPI的程序集参考?我意识到这是一个基本问题。我选择了MASM32标签,因为这是64位示例的一般性问题。
答案 0 :(得分:2)
例如Windows x64 calling convention描述了here。
要知道参数的顺序,请查找例如MessageBoxA
here。
答案 1 :(得分:0)
我建议一些事情,首先是单独学习汇编语言和学习操作系统调用。第二个不要从x86开始作为你的第一个汇编语言。使它成为您学习的第三或第四或最后一个。如果您觉得必须我建议从8088/8086开始并在x86中获得基础,然后再深入了解它。
arm / thumb / msp430 / mico8 / avr都是好的第一,第二,第三等指令集,由第二或第三(不同的家庭),如果不是第一,你将有一个良好的计算机如何工作的基础。 pcemu不是我的,我分叉了一个版本并剥离了操作系统,因此它可以用来学习汇编语言。只需几美元,您就可以从英特尔获得8088/8086手册的好用副本
http://www.amazon.com/gp/product/1555120814
再次,今天成为x86的良好基础。
完成所有这些后,然后开始查看来自asm的操作系统调用...确保你可能需要一些来自asm才能开始,例如打印某些类型以查看你的程序正在运行。