📄 file.asm
字号:
stack segment para stack
dw 100h dup(?)
stack ends
data segment para
filename db 'f1.dat',0
handle dw ?
rbuff db 1024*10 dup(?)
wbuff db 1024*10 dup(?)
len dw ?
readaddr dw 0
writeaddr dw 0
data ends
code segment para
assume cs:code,ds:data,ss:stack
main proc near
mov ax,data;数据段指针
mov ds,ax
mov ax,stack;堆栈段指针
mov ss,ax
lea dx,filename;打开文件
mov cx,0
mov ah,3dh
mov al,2
int 21h
jnc l
jmp return
l: mov handle,ax
l1: mov bx,handle;读文件
mov dx,offset rbuff
mov cx,1024*10
mov ah,3fh
int 21h
cmp ax,0
jz return
mov len,ax
add readaddr,ax;改写读文件指针
call change;将0d0a转换成0a
xor cx,cx;写文件
mov dx,writeaddr;移动写文件指针
xor ax,ax
mov ah,42h
mov al,0
mov bx,handle
int 21h
mov dx,offset wbuff;写文件
mov bx,handle
mov cx,len
mov ah,40h
int 21h
mov ax,len;改写写文件指针
add writeaddr,ax
xor cx,cx;移动读文件指针
mov dx,readaddr
mov ah,42h
mov al,0
mov bx,handle
int 21h
jmp l1
return: mov dx,writeaddr;移动写文件指针
xor ax,ax
mov ah,42h
xor cx,cx
mov bx,handle
int 21h
mov dx,offset wbuff;写文件0个字符
mov bx,handle
xor cx,cx
mov ah,40h
int 21h
mov bx,handle;关闭文件
mov ah,3eh
int 21h
mov ax,4c00h
int 21h
main endp
change proc near;将0d0a换成0d
push es;保护es
push ds
pop es
mov di,offset wbuff
mov si,offset rbuff
cld;si递增
push cx
mov cx,len
lp1: lodsb
cmp al,0dh
jnz continue
cmp cx,1
jz spe
cmp byte ptr[si],0ah
jnz continue
dec len
loop lp1
spe: dec len;0d在最后
dec readaddr
pop cx
pop es
ret
continue: stosb
loop lp1
pop cx
pop es
ret
change endp
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -