Win32汇编开始 Hello Asm

今天开始学习Win32汇编 因为自己很多都是Windows方面 所以 接触一下Win32汇编

.386                      ;.386指令集
.model flat,stdcall       ;工作模式
option casemap:none            ;关键字大小写不敏感

include Windows.inc
include kernel32.inc
includelib kernel32.lib

include user32.inc
includelib user32.lib

.data

MessageBoxText        db    "Hello ASM!",0
MessageBoxCaptiom    db    "我的第一个win32汇编程序",0
.code

start:
    invoke MessageBox,NULL,addr MessageBoxText,addr MessageBoxCaptiom,MB_OK

    ;-----------------------
    ;invoke 函数 ,参数列表 左-->右
    ;addr 取标号的地址addr 可以处理局部变量的地址 而offset不行 局部变量只在运行时才分配内存offset是在编译时编译器解释
    ;当addr 操作局部变量时 相当
    ;                            lea eax,localVar
    ;                            push    eax
    ;----------------------
    invoke ExitProcess,NULL
end start
时间: 2024-08-05 07:09:19

Win32汇编开始 Hello Asm的相关文章

二鸟学Win32 汇编——PE头文件

;代码段    .code;---------------------; 将内存偏移量RVA转换为文件偏移; lp_FileHead为文件头的起始地址; _dwRVA为给定的RVA地址;---------------------_RVAToOffset proc _lpFileHead, _dwRVA local @ret pushad mov esi, _lpFileHead assume esi:ptr IMAGE_DOS_HEADER add esi, [esi].e_lfanew ass

win32汇编实现阶乘和斐波那契数列

win32阶乘程序 .486 ;使用486处理器.model flat,stdcall include \masm32\include\msvcrt.inc includelib \masm32\lib\msvcrt.lib .data result0 dd 1;存储最终结果 inputdata dd ?;输入的阶乘的最大值 type0 db '%d',0 data4 db '请输入阶乘最大值ddddd: ',0 data1 db '请输入阶乘最大值: ',0 data2 db '阶乘结果为:

【Win32汇编】编译环境配置

开始学习[Win32汇编],编译过程较为繁琐,做个记录. 使用 MASM32 提供的 ml.exe 和 link.exe,以及 VS2013 中的 nmake.exe 和资源编辑器. ml.exe: ml  [选项]  文件列表  [/link] link.exe: link  [选项]  文件列表 nmake.exe: nmake  [选项]  [描述文件名]  [宏定义]  [目标文件] /f 描述文件名:指定其他的描述文件名,而不是默认的 makefile 宏定义:指定新的定义,覆盖描述文

谈Win32汇编

最近接触到Win32汇编,才知道汇编必须是和平台相关的,如做应用则和操作系统和CPU类型相关,而做操作系统就和只和的CPU类型有关.对于<微机原理>里面的汇编,那是DOS汇编,而Win32汇编是基于Windows的汇编.DOS和Windows是两个完全不同的操作系统了. DOS汇编功能的实现依靠的是DOS系统提供的软中断,DOS程序是面向过程的单任务的:而Win32汇编功能的实现依靠的是WinAPI,基本的元素是与具体CPU类型有关的汇编指令(一般都是X86啦,因为微软就支持这个~~).然后记

【win32汇编】0x01 开篇一些乱七八糟的话

之前弄完了16位汇编,现在正式学习win32汇编,首先就是一些原理了,其实就是在16位的基础上增加了一些内容,其程序主要的结构记录如下 (1)指令集    .386     这是指定指令集 必须工作在80386的处理器上    mov cr0,eax    这类指令在特权级0上运行,编译到这个就报错    如果要写VxD等驱动程序,中间要用到特权指令.必须定义.386p    但是在正常情况只要.386就可以了,这个是运行在特权级3上面的    Pentium MMX中增加了mmx指令     

win32汇编实现一个简单的TCP服务端程序(WinSock的简单认知应用)

Windows网络编程,相信好多人都知道,但是我们一般都是用其他语言编写,例如C,C++,JAVA,python等等,这些语言都可以,但是汇编语言比较底层,利用它,我们可以更清晰的了解到网络编程的内在部分,这是其他语言不能相比的,好了,废话不多说,这其实就是这次的目的(毕竟水平欠缺,还是先来按照罗云斌老师的WIN32汇编书上的例子加以学习,举一反三吧). 说道网络编程,现在我所接触到的程序开发,工具软件的使用,库等等都是基于Windows平台的,想要了解Windows的网络编程就必须要知道Win

Win32汇编基础1

1.关于寄存器Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,所以如果要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们 eax 是WIN32 API 默认的返回值存放处.ecx 是LOOP指令自动减一的寄存器,也就是一半用来计数,比如使用rep指令时,也是比较CX的值.esp 是堆栈指针,指向栈顶.ebp 经常用来在堆栈中寻址.esi 好像常常用在指针寻址中. edi 是目的地址寄存器. 2.关于堆栈 Windows为每个程

【win32汇编】0x04 第一个窗口程序

第一个win32汇编窗口程序,主要来自 win32汇编语言程序设计,然后加上了自己查阅msdn文档的一些理解,基本过程: start入口地址 --> _WinMain主函数 --> 定义一些需要用的消息实体和类实体 --> 注册窗口类 --> 建立并显示窗口 --> 消息循环 ( _ProcMain主要用于处理程序接受的消息 ) 1 ;模式定义 2 ;>>>>>>>>>>>>>>>>

win32汇编--第一个窗体程序

窗口创建过程     GetModuleHandle->RtlZeroMemory->LoadCursor->RegisterClassEx->CreateWindowsEx->ShowWindow->UpdateWindow 获得模块句柄->结构体初始化(填0)->加载光标->注册窗体类->创建窗体->显示窗体->更新客户区 win32API函数定义 GetModuleHandle,lpModuleName 参数:lpModuleN