当前位置: 代码迷 >> 汇编语言 >> 32汇编真是郁闷,该如何解决
  详细解决方案

32汇编真是郁闷,该如何解决

热度:9489   发布时间:2013-02-26 00:00:00.0
32汇编真是郁闷
.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有什么区别呢???




------解决方案--------------------------------------------------------
offset的编译结果是线性地址,0x40000001这样的,显然不使用于栈变量....
addr比较高级,可以用于代码段的数据,用于栈变量是编译成ebp+编译的方式...
  相关解决方案