以下是16位汇编源码,功能是创建一个文件,并且保存我们输入的数据到文件中,以ctrl+Z结束输入
assume cs:code,ds:data
eof=1Ah
data segment
fname db 'test1.txt',0
errmsg1 db 'Can not create file!',07h,0
errmsg2 db 'Write error!',07h,0
buffer db ? ;一个字节缓冲区
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,3c00h ;创建文件
mov dx,offset fname ;获取文件名
mov cx,0
int 21h
jc ferr1 ;创建失败
mov bx,ax ;保存文件句柄
next:
call getchar ;接收按键字符
push ax ;因为getchar的出口为ax,所以要保护起来,放到堆栈
call writechar ;按键字符写入文件
jc write_err ;调用写入文件子程序
pop ax ;堆栈平衡
cmp al,eof ;判断文件是否到了结尾
jz close
jmp next
write_err: ;写入错误时,提示
mov dx,offset errmsg2
call dmess
jmp close
close: ;关闭文件
mov ax,3e00h
int 21h
jmp over
ferr1: ;创建失败时提示
mov dx,offset errmsg1
call dmess
jmp over
over: ;结束程序
mov ax,4c00h
int 21h
;子程序:向文件写入字符
;子程序名:writech
;入口参数al,读到的字符ASCII码
;调用40h功能号,写入文件
writechar proc
mov buffer,al ;al移入缓冲区
mov dx,offset buffer ;缓冲区首地址
mov cx,1 ;每次写入一个字节
mov ah,40h ;置功能号
int 21h ;写
ret
writechar endp
;子程序:接收按键字符
;子程序名:getchar
;调用1号功能
;入口参数无
;出口参数:AL=读到字符的代码ASCII码
getchar proc
mov ah,1
int 21h
ret
getchar endp
;子程序显示一个以0结尾的字符串
;子程序名:dmess
;入口参数si=字符串首地址
;出口参数无
dmess proc
dmess1:
mov dl,[si]
inc si
or dl,dl
jz dmess2
mov ah,2
int 21h
jmp dmess1
dmess2:
ret
dmess endp
code ends
end start