博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学 Win32 汇编[3]: 控制台下的几种输出方式
阅读量:5987 次
发布时间:2019-06-20

本文共 1778 字,大约阅读时间需要 5 分钟。

  hot3.png

在熟悉指令、伪指令和汇编语法的过程中, 首先需要的是输出显示的手段.
我刚开始学习时使用的是控制台输出, 最后发现既然是 Win32 汇编还是用 Debug 输出更好.
下面是之前尝试出的控制台输出的几种办法:
1、使用 MASM 提供的 StdOut 函数;
2、使用系统 API:
3、使用微软 C 标准库 msvcrt.dll 中的 printf 函数.
使用 MASM 的 StdOut 函数:

; Test3_1.asm; 测试代码前应先建立一个控制台工程: 文件 -> 新建工程 -> Console App ....386.model flat, stdcallinclude masm32.incinclude kernel32.incincludelib masm32.libincludelib kernel32.lib.data    szText db "Hello World!", 0.codestart:    invoke StdOut, addr szText    ret ;ret 是用于子程序返回的指令, 这里用它代替 ExitProcess(在没有生成 Win32 窗口时是可以的)end start
使用系统 API 函数:

; Test3_2.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incincludelib kernel32.lib.data    szText db 'Hello World!', 0;定义两个 DWORD 类型的变量, 分别是用于输出句柄和字符串长度.data?    hOut dd ?    len  dd ?.codestart:    ; 获取控制台输出设备的句柄, 其返回值会放在 eax 寄存器    invoke GetStdHandle, STD_OUTPUT_HANDLE    ; 把获取到的句柄给变量 hOut     mov hOut, eax    ; 通过 lstrlen 函数获取字符串长度, 返回值在 eax                            invoke lstrlen, addr szText          ; 把获取到的字符串长度给变量 len          mov len, eax    ; 输出到控制台, 参数分别是: 句柄、字符串地址、字符串长度; 后面是两个指针暂用不到                               invoke WriteFile, hOut, addr szText, len, NULL, NULL    retend start; 另外前面用到的 StdOut 也基本就是这样实现的, 源码在: masm32\m32lib\stdout.asm
使用微软 C 标准库中的 printf 函数; msvscrt.inc 把它声明做 crt_printf

; Test3_3.asm.386.model flat, stdcallinclude msvcrt.incincludelib msvcrt.lib.data    szText db 'Hello World!', 0.codestart:    invoke crt_printf, addr szText    retend start
三种方法相比之下, 应推荐使用 C 函数 crt_printf; 因为它可以方便输出更多数据类型, 如:

; Test3_4.asm.386.model flat, stdcallinclude msvcrt.incincludelib msvcrt.lib.data    szFmt db 'EAX=%d; ECX=%d; EDX=%d', 0.codestart:    mov eax, 11    mov ecx, 22    mov edx, 33    invoke crt_printf, addr szFmt, eax, ecx, edx    retend start

转载于:https://my.oschina.net/hermer/blog/320491

你可能感兴趣的文章
JVM性能测试与内存溢出
查看>>
高煥堂的VR课程/视频/演讲
查看>>
Windows管理框架WMF总览
查看>>
Python2.7 smtplib发送带附件邮件报错STARTTLS解决方法
查看>>
mysql语句优化
查看>>
PostgresSQL 主从搭建
查看>>
openstack概述
查看>>
shell脚本一键安装MySQL5.5
查看>>
oracle linux 5.8安装oracle 11g rac环境之oracle安装
查看>>
大数据测试回放视频-小强测试内部学员技术分享
查看>>
活动目录的优势
查看>>
《3D数学基础》1.8 混合积
查看>>
拍照之外, 游戏手机会成为手机新品类吗?
查看>>
Lync 小技巧-1-解决搜索不到联系人的方法
查看>>
数据仓库入门(实验6)添加层次结构
查看>>
第一次获得Microsoft MVP应该做的事
查看>>
用OSSIM发现网络扫描
查看>>
疯狂ios讲义疯狂连载之绘制曲线
查看>>
SonataEasyExtendsBundle功能包:概述
查看>>
WeX5 V3.6 正式版核心特性
查看>>