汇编语言文件的读写源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;-------------------------------------
;汇编语言的文件的读写
;注意:这个C:\emu8086\MyBuild\123.txt绝度路径需要你安装emu8086演示
;若改成C:\123.txt之类的不行的因为汇编程序没有权限在硬盘上读取或者建立文件
;所以,这个路径必须是你的编译程序支持的就可以运行,否者显示错误。
;不过,大家看一下这个程序的注释,对考试有帮助的。
;---------------------------------
;-----------------------
.DATA
path_name db'D:\emu8086\MyBuild\123.txt',00 ;ASCIZ串最后一定以00结束
error db'Sorry,there is something ERROR!','$';错误信息
string db'I like Bakestball!','$';任意定义的字符串
codename db 10 dup(0) ;存储文件代号(程序操作是是多次使用的)
buffer db 13 dup(0)
;--------------------------
.CODE
main proc far
start:
mov ax,@DATA
mov ds,ax
;-----------------------
;1.首先新建一个新文件的操作(初始时文件不存在)
mov ah,3ch ;记住DOS的3c号功能是建立文件
mov cx,00 ;cx是文件属性,0号表示为默认属性
lea dx,path_name ;需要新建文件的绝对路径的偏移量传送到dx寄存器中
int 21h ;中断后,系统开始建立文件,若成功返回一个代号到ax中供以后使用若出错置位CF标志位
jc next ;jc是判断CF标志位的若cf=1表示新建文件出错跳转到next执行处理程序
lea bx,codename ;获取存储代号的地址偏移量
mov [bx],ax ;寄存器的间接寻址,将AX中的代号数据保存起到codename中
;---------------------
;2.对新建的文件的写操作(写入字符串数据)
lea si,codename ;回去代号所在的地址偏移量
mov ah,40h ;记住是DOS的40号功能
lea dx,string ;将需要传递的数据的地址偏移量传送给dx寄存器
mov bx,[si] ;bx接收的是文件代号数据([si]表示寄存器间接寻址方式)
mov cx,13h ;cx存储你打算写入的字符串的字节数
int 21h ;开启软中断
jc next ;jc是判断CF标志位的若cf=1表示对文件的写出错跳转到next执行处理程序
;----------------------
;3.完成了所有操作后,关闭文件的操作
lea si,codename ;回去代号所在的地址偏移量
mov ah,3fh ;3f号功能
mov bx,[si]
int 21h
jc next ;jc是判断CF标志位的若cf=1表示关闭文件出错跳转到next执行处理程序
;-----------------------------
;4.再次打开我们新建的文件,这一步获取文件的代号同时指定打开文件干什么mov ah,3dh ;3d号功能的调用
mov al,00h ;00指定了打开这个文件只为了读
lea dx,path_name ;ASCIZ串地址首地址
int 21h ;开启软中断
jc next ;jc是判断CF标志位的若cf=1表示打开文件过程出错跳转到next执行处理程序
lea bx,codename ;获取存储代号的地址偏移量
mov [bx],ax ;寄存器的间接寻址,将AX中的代号数据保存起到codename中
;---------------------------
;5.打开了文件开始读文件到缓冲区
lea si,codename
mov ah,3fh
lea dx,buffer ;读出的数据存储在buffer中
mov bx,[si] ;同样bx存储的是文件的代号
mov cx,13h ;你打算要读取的字节数根据需要任意设定
int 21h
jc next ;jc是判断CF标志位的若cf=1表示读取文件出错跳转到next执行处理程序
;----------------------
;6.完成了所有操作后,关闭文件的操作
lea si,codename
mov ah,3fh ;3f号功能可以关闭文件,打开文件后需要关闭文件
mov bx,[si] ;文件代号
int 21h
jc next ;jc是判断CF标志位的若cf=1表示关闭文件出错跳转到next执行处理程序
;-------------------------
;7.把读出的放在缓冲池的数据在屏幕上显示
mov dx,offset buffer ;获取偏移量
mov ah,09h
int 21h
;------------------------------
final:
mov ah,4ch ;返回DOS系统
int 21h
;----------------------------
;错误处理程序
next:
lea dx,error ;若没有建立文件则输出错误信息
mov ah,09
int 21h
jmp final
;---------------------------
main ENDP
end start;程序结束