- 浏览: 108709 次
- 性别:
- 来自: Mars
文章分类
最新评论
-
a376730551:
红色部分表示 把进位值传递给bh
汇编语言AAA指令多字节加法代码分析(5) -
madbluesky:
死了,只剩下赞扬了...看来不只是中国,全世界都是同一套啊.. ...
麦克杰克逊--------世界上最傻的明星 -
sunloveny:
敬你!
麦克杰克逊--------世界上最傻的明星 -
jiorry:
感动
MJ 一路走好
麦克杰克逊--------世界上最傻的明星 -
javaboy2006:
MJ单纯到不懂得保护自己。永远怀念。
麦克杰克逊--------世界上最傻的明星
内容来自于《Intel汇编语言程序设计》(第四版)第11章--------32位Windows编程。
我们的整个顺序应该是,首先将内容写入文件(如果没有文件,将会创建新文件),然后将内容从文件中读出。
首先来看一下将数据写入文件:
TITLE Using WriteFile ( WriteFile.asm )
INCLUDE Irvine32.inc
.data
buffer BYTE "This text is written to an output file.",0dh,0ah
bufSize = ( $ - buffer)
errMsg BYTE "Cannot create file",0dh,0ah,0
filename BYTE "output.txt",0
fileHandle DWORD ? ; handle to output file
bytesWritten DWORD ? ; number of bytes written
.code
main PROC
INVOKE CreateFile,
ADDR filename , GENERIC_WRITE , DO_NOT_SHARE , NULL ,
CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , 0
mov fileHandle , eax ; save file handle
.IF eax == INVALID_HANDLE_VALUE
mov edx,OFFSET errMsg ; display error message
call WriteString
jmp QuitNow
.ENDIF
INVOKE WriteFile, ; write text to file
fileHandle, ; file handle
ADDR buffer, ; buffer pointer
bufsize, ; number of bytes to write
ADDR bytesWritten, ; number of bytes written
0 ; overlapped execution flag
INVOKE CloseHandle , fileHandle
QuitNow:
INVOKE ExitProcess,0 ; end program
main ENDP
END main
程序首先使用CreateFile函数打开一个文件:
INVOKE CreateFile,
ADDR filename , GENERIC_WRITE , DO_NOT_SHARE , NULL ,
CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , 0
因为这里使用了 CREATE_ALWAYS 标志,所以现存的文件将被覆盖。
后面的代码:
mov fileHandle , eax ; save file handle
.IF eax == INVALID_HANDLE_VALUE
mov edx,OFFSET errMsg ; display error message
call WriteString
jmp QuitNow
.ENDIF
首先将句柄保存到fileHandle 中,然后会判断文件打开是否成功,如果未成功,则会输出一条错误语句之后跳转到QuitNow退出。
如果得到句柄,则程序会使用WriteFile将字符串写入文件:
INVOKE WriteFile, ; write text to file
fileHandle, ; 前面得到的句柄值
ADDR buffer, ; 要输入的字符串的首地址
bufsize, ; 将要写入的数据的长度
ADDR bytesWritten, ; 函数执行完成之后实际写入的数据的byte数,bytesWritten就是返回值
0 ; 异步信息的指针,这个参数是可选的,这里传入0
然后将数据写入文件之后,我们要关闭文件:
INVOKE CloseHandle , fileHandle
这时我们只需要将我们打开的文件的句柄传入即可。
将数据写入文件的代码到这里就结束了。下面来看一下将数据从文件中读取的代码:
TITLE Using ReadFile ( ReadFile.asm )
INCLUDE Irvine32.inc
.data
buffer BYTE 500 DUP(?)
bufSize = ( $ - buffer )
errMsg BYTE "Cannot open file",0dh,0ah,0
filename BYTE "output.txt",0
fileHandle DWORD ? ; handle to output file
byteCount DWORD ? ; number of bytes written
.code
main PROC
INVOKE CreateFile, ; open file for input
ADDR filename , GENERIC_READ,
DO_NOT_SHARE , NULL , OPEN_EXISTING ,
FILE_ATTRIBUTE_NORMAL , 0
mov fileHandle , eax ; save file handle
.IF eax== INVALID_HANDLE_VALUE
mov edx,OFFSET errMsg ; display error message
call WriteString
jmp QuitNow
.ENDIF
INVOKE ReadFile, ; read file into buffer
fileHandle , ADDR buffer ,
bufSize , ADDR byteCount , 0
INVOKE CloseHandle, ; close the file
fileHandle
mov esi , byteCount ; insert null terminator
mov buffer[esi] , 0 ; into buffer
mov edx,OFFSET buffer ; display the buffer
call WriteString
QuitNow:
INVOKE ExitProcess , 0 ; end program
main ENDP
END main
程序首先仍然使用CreateFile打开将要读取数据的文件,这里使用了OPEN_EXISTING 参数。之后同样把eax中的句柄保存到变量中。然后调用ReadFile函数,将句柄参数传入,然后将数据读取到缓冲区buffer中,之后将文件句柄关闭。
之后的程序如下:
mov esi , byteCount ; 首先将调用ReadFile返回的字节数byteCount赋值到esi中
mov buffer[esi] , 0 ; 这样就取到了buffer的最后一个元素的地址,因为是字符串的结束,所以将0赋给最后一个元素。
mov edx,OFFSET buffer ; 将buffer的偏移地址赋值到edx中
call WriteString ; 打印出buffer缓冲区中的数据内容
读取文件代码结束。
发表评论
-
IA-32处理器内存管理学习总结?
2009-10-23 14:58 1327内容来自于《Intel汇 ... -
汇编语言秒表程序代码分析(21)
2009-10-23 10:40 2255本文代码来自于《Intel汇编语言程序设计》 (第四版) ... -
汇编语言GetDateTime代码分析(20)
2009-10-23 10:14 1798本文代码来自于 ... -
汇编语言计时器代码分析(19)
2009-10-23 09:45 2178来自于《Intel汇编语言程序设计》(第四版)第1 ... -
汇编语言32位控制台读取用户输入字符程序代码分析(17)
2009-10-22 15:00 4094来自于《Intel汇编语言程序设计》(第四版)第1 ... -
汇编语言循环遍历链表代码分析(16)
2009-10-22 11:28 1791来自于《Intel汇编语言程序设计》(第四版)第10章- ... -
汇编语言醉汉走路代码分析(15)
2009-10-22 10:50 1306来自于《Intel汇编语言 ... -
汇编语言显示系统时间代码分析(14)
2009-10-21 15:18 2129代码来自于《Intel汇编语言程序设计》(第四版)第10 ... -
汇编语言二分查找排序代码分析(13)
2009-10-21 09:52 1888来自于《Intel汇编语 ... -
汇编语言冒泡排序算法代码分析(12)
2009-10-20 16:52 4174来自于《Intel汇编 ... -
汇编语言裁剪字符串代码分析(11)?
2009-10-20 15:27 1319来自于《Intel汇编语言程序设计》(第四版 ... -
汇编语言求字符串长度代码分析(10)
2009-10-20 11:05 2178来自于《Intel汇编语言程序设计》(第四版)第八 ... -
汇编语言数组乘法代码分析(9)
2009-10-20 10:07 1563来自于《Intel汇编语言程序设计》(第四版)第八章,主 ... -
汇编语言实现递归阶乘算法代码分析(8)
2009-10-20 08:49 3697来自于《Intel汇编语言程序设计》(第四版)第八 ... -
《Intel汇编语言程序设计》第四版勘误
2009-10-19 16:14 995215页: mov BYTE PTR [e ... -
汇编语言16位随机整数填充数组代码分析(7)
2009-10-19 14:55 1401来自于《Intel汇编语言》(第四版)第八章的一段 ... -
汇编语言值传递和引用传递代码分析(6)
2009-10-19 09:40 1185来自于《Intel汇编语言程序设计》(第四版)的第 ... -
汇编语言AAA指令多字节加法代码分析(5)
2009-10-18 10:44 4335来自于《Intel汇编语言程序设计》(第五版)第七章的代 ... -
汇编语言表格驱动分支选择代码分析(4)
2009-10-16 14:48 1451来自于《Intel汇编语言程序设计》(第四版)第六章。 ... -
汇编语言数组中查找正数代码分析(3)
2009-10-15 16:54 1303《Intel汇编语言程序 ...
相关推荐
汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...
汇编语言”作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM, TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象...
本设计时应用汇编语言编辑文件管理系统,对当前目录下的文件属性管理,如文件的创建、文件的删除、在文件中输入内容、阅读一个文件里的内容、更改文件名等。并对程序的界面做进一步的设计。 在Dos界面下,输入命令。...
汇编语言课程设计文件操作的实现的题目!任务!源代码!
汇编语言可以用于完成文件的读写操作。下面是一个简单的示例汇编代码,演示如何使用汇编语言完成文件的读写操作。这个示例使用了Linux系统的系统调用来实现文件的读写操作。
这是用汇编语言写的小汽车在屏幕上运行的代码,这是我的课程设计,有需要的朋友可以去下载看看!
在阅读Linux源代码时,你可能碰到一些汇编语言片段,有些汇编语言出现在以.S为扩展名的汇编文件中,在这种文件中,整个程序全部由汇编语言组成。有些汇编命令出现在以.c为扩展名的C文件中,在这种文件中,既有C语言...
27个汇编简单例子..有可以执行的.exe文件和.asm 的代码文件
大量的汇编语言演示实例 包括27个完整的演示实例 内含源代码 实在是学习汇编语言编程的良好参考资料
x86汇编语言 从实模式到保护模式,
采用汇编语言编写的Windows记事本程序源代码,模拟XP自带记事本,未实现打印功能,拖放文件功能,基本实现所有功能,添加了工具栏和状态栏,增加颜色功能,学习罗云彬《windows环境下32位汇编语言程序设计》一个月记。...
利用汇编语言编写的文件加密解密程序,有详细解释说明、源代码
汇编 文本编辑器 打开,保存,关闭,help
这是一个字母或数制之间的转化程序,5为主模块,调用模块1和模块7 模块1又调用模块2、3、4和6四个模块,其中: ...使用时,需将7个文件分别汇编,连接的方法为: 5+1+2+3+4+6+7 生成可执行文件“5” 即可运行。
可能部分程序杀毒软件误报,原因我也不清楚,但保证无毒。 将HEX文件用记事本打开,然后把代码复制到...如果想练习汇编语言写单片机,但是又不够熟练,不妨用C语言写好将HEX文件转换成汇编语言代码然后来参考学习。
汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以...
× 《Windows环境下32位汇编语言程序设计》 × × 附书代码说明 × ××××××××××××××××××××××××××× 1. 编译器和链接器 本附书代码全部采用 MASM 格式编写,推荐使用 MASM32 软 件包作为...
1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储器的读写 1.8 地址总线 1.9 数据总线 1.10 控制总线 1.11 内存地址...
3、掌握汇编语言程序从设计到形成可执行程序文件的方法和步骤。 4、了解汇编语言的系统工作文件和工作环境。理解汇编程序和连接程序的作用。理解列表文件内容。 5、初步了解程序的运行和调试方法。学会使用Debug主要...
汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言”作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。