汇编语言介绍

时间:2012-03-20 14:07:43

标签: assembly x86 masm32

我对汇编语言比较陌生。我找到了很多教程,解释了如何使用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位示例的一般性问题。

2 个答案:

答案 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才能开始,例如打印某些类型以查看你的程序正在运行。