Win32的基础就是由DLL组成的.核心由3个DLL提供
KERNEL32.DLL:系统服务功能,包括内在管理,任务管理和动态链接等
GDI32.DLL:图形设备接口,利用VGA与DRV之类的显示设备驱动程序完成显示文本和矩形等功能
USER32.DLL:用户接口服务,建立窗口和传送消息等
Invoke:是不个MASM编译器的伪指令,而TASM没有,直接使用call指令实现同样功能
有些Windows9x系统不支持Unicode
if UNICODE
MessageBox equ <MessageBoxW>
else
MessageBox equ <MessageBoxA>
endif
然后在源程序的头部UNICODE=1或UNICODE=0,重新编译就可以产生不同的版本
静态库:是一组已经编写好的代码模块,在程序中可以自由引用,在源程序编译成目标文件,
最后要链接成可执行文件时,由link程序从库中找到相应的函数代码,一起链接到最后的可执
行文件中.
库的出现为程序员节省了大量的开发时间,缺点就是每个可执行文件中都包括了要用到了
相同函数的代码,占用了大量的磁盘空间,在执行时,这些代码同样占用了内存
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;.386是使用的指令集
;.model 内存模式[,语言模式][,其它模式]
;flat:Win32程序只有一种内存模式flat(平坦模式),代码和数据段使用4GB段
;stdcall:语言模式,子程序的调用方式,指出了调用子程序或Win32API时参数传递的次序和堆栈平衡的方法
;option casemap:none:定义了程序是否大小写敏感,因为Win32API是区分大小写的
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szCaption db 'A MessageBox !',0
szText db 'Hello, World !',0dh,0ah,'Hello again',0ah,'adsf',0
;.data,.data?和.const定义的是数据段,分别对应不同方式的数据定义,在最
;后生成的可执行文件中也分别放在不同的节区(Section)中
;1.可读写的已定义变量:在源程序中已经定义了初值,而且在程序中有可能被改
;动,必须定义在.data段中;.data段一般放在可执行文件的_DATA节区
;2.可读写的末定义变量:当作缓冲区或程序执行后才开始使用,可以定义在.data
;段中,但一段定义在.data?段中,因为不会增加.exe文件的大小,.data?段一般放在
;可执行文件的_BSS节区
;3.常量:一些要显示的字符串信息,可以放在.const段中,可读不可写.但为了方便,小
;程序一般就把常量放.data中了
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke MessageBox,\
NULL,\
offset szText,\
offset szCaption,\
MB_ICONWARNING
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
makefile
NAME = Hello #指定输出文件
OBJS = $(NAME).obj #需要的目标文件
LINK_FLAG = /subsystem:windows #连接选项
ML_FLAG = /c /coff #编译选项
$(NAME).exe: $(OBJS)
Link $(LINK_FLAG) $(OBJS)
.asm.obj:
ml $(ML_FLAG) $<
clean:
del *.obj
标号:当在程序中使用一条跳转指令的时候,可以用标号来表示跳转的目的地,编译器在编译的时候会把它替换成地址,标点既可以定义在目的指令同一行的头部,也可以在目的指令前一行单独用一行定义:
标号名: 目的指令 ;方法1
@@做标号时,可以用@F和@B引用,@F表示本条指令后的第一个@@标号,@B表示本条指令前的第一个@@标号
宏定义:assum esi:ptr WNDCLASS
如果要用指定类型之外的长度访问变量,必须地指出要访问的长度,这产,编译器忽略语法的长度检验.
Sizeof伪指令可以取得变量,数据类型或数据结构以字节为单位的长度,lengthof可以取得变量中数据的项数
- 大小: 8.3 KB
分享到:
相关推荐
在提供的描述中,“输出HELLOWORLD然后输出Helloworld最后的最后的输出Helloworld”暗示了可能的练习目标是让初学者了解字符串的处理和输出格式。这可能涉及到变量的使用、字符串的拼接以及大小写的转换。例如,可以...
标题中的“hello world hello world”和描述中的“hello world”似乎是在引用计算机编程中的经典入门程序,通常用于演示一个语言的基本输出功能。在大多数编程语言中,“Hello, World!”是初学者编写的第一个程序,...
2. 编写源代码:在`src`目录下创建一个名为`helloworld.c`的C语言源文件,内容如下: ```c #include int main() { printf("Hello, World!\n"); return 0; } ``` 3. 配置Makefile:`Makefile`应包含以下内容,...
在这个"OpenWrt之helloworld程序"中,我们将探讨如何在OpenWrt环境中编写、编译和运行一个简单的 HelloWorld 程序,这将帮助初学者了解OpenWrt的开发流程。 首先,`helloworld` 文件通常是一个C或C++源代码文件,...
根据给定的文件信息,我们可以总结出以下关于“汇编语言实现输出HelloWorld”的相关知识点: ### 汇编语言简介 汇编语言是一种低级编程语言,它为每种类型的计算机提供了一对一的机器指令映射。汇编语言程序通常由...
### 深入淺出Hello World —— Hacking HelloWorld (Part I) #### 概述 在《深入淺出Hello World》这一系列文章中,作者Jim Huang(黃敬群/"jserv")通过深入剖析经典的“Hello World”程序,旨在帮助读者理解在...
8. **获取Bean**:在程序中,我们可以从`ApplicationContext`获取已定义的Bean,如`HelloWorld helloWorld = context.getBean("helloWorld", HelloWorld.class);`,然后调用其方法进行交互。 9. **运行和测试**:...
如何创建QT项目之QTcreator输出HelloWorld,小白保姆级别的教程,还有提供参考链接. HelloWorld程序是一个基于Qt框架的简单示例程序,用于展示如何使用Qt进行图形界面编程。这个程序的主要目的是在窗口中显示一个...
g++ HelloWorld.cpp -o HelloWorld ./HelloWorld ``` 这将生成一个名为 "HelloWorld" 的可执行文件,运行它就会在终端看到 "Hello, World!"。 了解了基础的 "Hello, World!" 程序后,你可以逐步学习C++的其他核心...
本压缩包包含的“一个简单的qt版helloworld程序”是初学者接触Qt编程的一个基础示例,旨在帮助理解Qt的基本语法和项目构建过程。 首先,让我们来理解一下Qt中的"Hello, World!"程序的基本结构。在Qt中,我们通常会...
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` 这两个例子展示了不同编程语言中输出文本到控制台的方法。 标签“hello_world_ world”...
《SpringBoot HelloWorld初探》 在当今的Java开发领域,SpringBoot框架因其简化Spring应用的初始搭建以及开发过程而备受青睐。"springboot-helloworld.rar"这个压缩包,显然是一个入门级的示例,旨在帮助开发者快速...
这个"HelloWorld_"项目正是这样一个入门实例,用于在Visual Studio这个强大的集成开发环境中展示基本的代码编写和运行流程。 首先,让我们了解什么是Visual Studio。Visual Studio是由微软开发的一款全面的开发工具...
helloworld
在IT行业中,"HelloWorld"是一个非常基础且重要的概念,它是初学者接触编程时第一个编写的程序。这个简单的程序在各种编程语言中的实现都大同小异,主要目的是为了让新手了解如何在计算机上打印出“Hello, World!”...
### JNI入门之HelloWorld(一)详解 #### 一、引言 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI接口提供了若干公共服务,并为Java虚拟机和本机应用程序或...
在`HelloWorld.asm`中,我们可能会看到类似以下的代码片段,用于打印"Hello, World!": ```assembly section .data hello db 'Hello, World!',0 section .text global _start _start: ; 设置段寄存器 mov ax,...
在这个“linux环境下用makefile编译简单的helloworld程序”的主题中,我们将深入理解如何创建并使用`Makefile`来编译一个基本的C或C++程序,例如“helloworld”。 首先,`helloworld`程序是一个经典的入门示例,...
飞凌OK6410开发板上的“helloworld”应用程序是一个经典的入门级示例,用于在Windows Embedded Compact(简称WINCE)操作系统上进行应用软件开发。这个简单的程序旨在帮助开发者熟悉WINCE SDK的使用和环境配置,从而...
本教程将围绕“creo二次开发helloworld”这个主题,详细介绍如何在CREO 2.0环境中利用Visual Studio 2010进行基本的二次开发。 首先,我们需要理解CREO的二次开发主要基于Parametric Technology Corporation(PTC)...