+ -
当前位置:首页 → 问答吧 → 32汇编真是郁闷

32汇编真是郁闷

时间:2011-12-12

来源:互联网

.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


include masm32.inc
includelib masm32.lib
include kernel32.inc
includelib kernel32.lib





;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const

szCaption db '恭喜',0
szText db '当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
mov eax,1;
invoke StdOut,addr szCaption;
invoke ExitProcess,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start




1.
学过c++,现在反过来学习汇编,好郁闷

不是语法复杂,相反觉得汇编语法过于简单,没c++复杂。。。

比如:退出函数用ExitProcess, 要是c++,肯定用return,否则 crt函数无法调用,exit无法调用,造成资源泄露。。。。


汇编居然可以这样。。。。。

2.kernel32.lib, 其实c:windows\system32\下有一个。。。。。。。。

显然我的汇编程序包含的这个lib,绝对不是systeme32下的。。。

它们有什么区别呢???


3. addr 和offset有什么区别呢???


作者: caddor   发布时间: 2011-12-12

找到篇http://apps.hi.baidu.com/share/detail/22190894,貌似挺详细的。

作者: bob008   发布时间: 2011-12-12

引用楼主 caddor 的回复:
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>……

addr 用于局部变量(变量在栈上)
offset 用于全局变量(变量定义在数据段里)

作者: gsy999   发布时间: 2011-12-12

如你所说,主帖中的用法是错误的。。。


应该用offset才对??、


另外:在16位下,offset和addr一样吧???




引用 2 楼 gsy999 的回复:

引用楼主 caddor 的回复:
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>……

作者: qunqun2012   发布时间: 2011-12-12