32汇编真是郁闷
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
includemasm32.inc
includelib masm32.lib
includekernel32.inc
includelibkernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const
szCaptiondb'恭喜',0
szTextdb'当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
mov eax,1;
invoke StdOut,addr szCaption;
invokeExitProcess,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
endstart
1.
学过c++,现在反过来学习汇编,好郁闷
不是语法复杂,相反觉得汇编语法过于简单,没c++复杂。。。
比如:退出函数用ExitProcess, 要是c++,肯定用return,否则 crt函数无法调用,exit无法调用,造成资源泄露。。。。
汇编居然可以这样。。。。。
2.kernel32.lib, 其实c:windows\system32\下有一个。。。。。。。。
显然我的汇编程序包含的这个lib,绝对不是systeme32下的。。。
它们有什么区别呢???
3. addr 和offset有什么区别呢???
[解决办法]
offset的编译结果是线性地址,0x40000001这样的,显然不使用于栈变量....
addr比较高级,可以用于代码段的数据,用于栈变量是编译成ebp+编译的方式...