学 Win32 汇编[3]: 控制台下的几种输出方式
2010-04-03 14:25
746 查看
在熟悉指令、伪指令和汇编语法的过程中, 首先需要的是输出显示的手段.
我刚开始学习时使用的是控制台输出, 最后发现既然是 Win32 汇编还是用 Debug 输出更好.
下面是之前尝试出的控制台输出的几种办法:
1、使用 MASM 提供的 StdOut 函数;
2、使用系统 API:
3、使用微软 C 标准库 msvcrt.dll 中的 printf 函数.
使用 MASM 的 StdOut 函数:
使用系统 API 函数:
使用微软 C 标准库中的 printf 函数; msvscrt.inc 把它声明做 crt_printf
三种方法相比之下, 应推荐使用 C 函数 crt_printf; 因为它可以方便输出更多数据类型, 如:
我刚开始学习时使用的是控制台输出, 最后发现既然是 Win32 汇编还是用 Debug 输出更好.
下面是之前尝试出的控制台输出的几种办法:
1、使用 MASM 提供的 StdOut 函数;
2、使用系统 API:
3、使用微软 C 标准库 msvcrt.dll 中的 printf 函数.
使用 MASM 的 StdOut 函数:
; Test3_1.asm ; 测试代码前应先建立一个控制台工程: 文件 -> 新建工程 -> Console App ... .386 .model flat, stdcall include masm32.inc include kernel32.inc includelib masm32.lib includelib kernel32.lib .data szText db "Hello World!", 0 .code start: invoke StdOut, addr szText ret ;ret 是用于子程序返回的指令, 这里用它代替 ExitProcess(在没有生成 Win32 窗口时是可以的) end start
使用系统 API 函数:
; Test3_2.asm .386 .model flat, stdcall include windows.inc include kernel32.inc includelib kernel32.lib .data szText db 'Hello World!', 0 ;定义两个 DWORD 类型的变量, 分别是用于输出句柄和字符串长度 .data? hOut dd ? len dd ? .code start: ; 获取控制台输出设备的句柄, 其返回值会放在 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 ret end start ; 另外前面用到的 StdOut 也基本就是这样实现的, 源码在: masm32\m32lib\stdout.asm
使用微软 C 标准库中的 printf 函数; msvscrt.inc 把它声明做 crt_printf
; Test3_3.asm .386 .model flat, stdcall include msvcrt.inc includelib msvcrt.lib .data szText db 'Hello World!', 0 .code start: invoke crt_printf, addr szText ret end start
三种方法相比之下, 应推荐使用 C 函数 crt_printf; 因为它可以方便输出更多数据类型, 如:
; Test3_4.asm .386 .model flat, stdcall include msvcrt.inc includelib msvcrt.lib .data szFmt db 'EAX=%d; ECX=%d; EDX=%d', 0 .code start: mov eax, 11 mov ecx, 22 mov edx, 33 invoke crt_printf, addr szFmt, eax, ecx, edx ret end start
相关文章推荐
- 学 Win32 汇编[3]: 控制台下的几种输入、输出方式
- Win32汇编控制台下的几种输入输出方式
- ACE日志输出的几种重定向方式
- C++ win32控制台下输出宽字符串(包括汉字)
- C语言字符串输入及输出的几种方式
- 关于如何用od反汇编win32 控制台程序
- awk输出单引号'的几种方式
- Js输出消息的几种方式和转义字符
- 汇编语言入门:几种寻址方式之比较
- 单链表逆序输出的几种实现方式
- C#程序输出信息到调试窗口的几种方式
- ACE日志输出的几种重定向方式
- 详解python的几种标准输出重定向方式
- 配置win32控制台输出文本属性
- vector的几种输出方式
- win32控制台输出带中文Unicode字符串
- win32 程序开启控制台输出信息
- c++中win32控制台输出宽字符
- win32程序启用控制台-- 调试输出
- 汇编最后一次实验(给定两个数组,以十六进制的方式输出其中的最大值)