网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
学 Win32 汇编 [3]: 控制台下的几种输出方式
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/26
下载{$ArticleTitle}原创论文样式

  尽管是学习 Win32 汇编, 也应该先从控制台程序起步; 因为一个基本的 Windows 窗口都需要不少代码.

  为了查看测试结果, 首先需要知道输出呈现的办法, 目前我尝试出了 3 种办法:

  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 只是为了简单(但不知是否合适) 
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 
(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号