编写一个程序,新建一个文件:d:\abc.txt,从键盘输入abc.txt内容(不超过100个字符)。然后新建另外一个文件:d:\def.txt,将abc.txt的前10个字符复制到def.txt上

汇编程序小实验

题目

编写一个程序,新建一个文件:d:\abc.txt,从键盘输入abc.txt内容(不超过100个字符)。然后新建另外一个文件:d:\def.txt,将abc.txt的前10个字符复制到def.txt上

GitHub下载地址

下载地址
希望给个星星~

代码

DATAS SEGMENT
    ;此处输入数据段代码  
    pathname1 db 'abc.txt',0
    pathname2 db 'def.txt',0
    opnmsg db 'open error$'
    opnok db 'open finish',0dh,0ah,'$'
    wrtmsg db 'write error$'
    wrtok db 'write finish',0dh,0ah,'$'
    cpymsg db 'write error$'
    cpyok db 'copy finish',0dh,0ah,'$'
    clsok db 'close finish',0dh,0ah,'$'
    str1 db 'please input the content of abc.txt:$'
    errcde db 0   ;错误码
    handle dw ?   ;公用文件号
    handle1 dw ?  ;abc文件号
    handle2 dw ?  ;def文件号
    content db 100 dup(?),'$'
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
main proc far
    ASSUME CS:CODES,DS:DATAS,SS:STACKS

    MOV AX,DATAS
    MOV DS,AX
    ;新建文件abc
    mov ax,0
    lea dx,pathname1
    call newfile
    cmp errcde,0
    jz contin1
    jmp exit
    
contin1:
	;新建完成提示
	mov dx,offset opnok
	mov ah,09h
	int 21h
	mov bx,handle
	mov handle1,bx
	mov bx,0
	;输入文件内容
	call proch
    cmp errcde,0
    jz contin2
    jmp exit
    
contin2:
	;输入完成提示
	mov dx,offset wrtok
	mov ah,09h
	int 21h
	;新建文件def
	lea dx,pathname2
    call newfile
    cmp errcde,0
    jz contin3
    jmp exit
contin3:
	;新建完成提示
	mov dx,offset opnok
	mov ah,09h
	int 21h
	mov bx,handle
	mov handle2,bx
	mov bx,0
	;复制文件
	call copy
	cmp errcde,0
    jz contin4
    jmp exit
contin4:
	;复制完成提示
	mov dx,offset cpyok
	mov ah,09h
	int 21h
	;关文件
	mov bx,handle1
	call clseh
	mov bx,handle2
	call clseh
	;关闭文件完成提示
	mov dx,offset clsok
	mov ah,09h
	int 21h
exit:
    MOV AH,4CH
    INT 21H
main endp


;creat file 
newfile proc near
	mov ah,3ch
	mov cx,0
	int 21h
	jc a1
	mov handle ,ax
	ret
a1: mov dx,offset opnmsg    ;error
	MOV AH,09H
    INT 21H
	call errm
	ret
newfile endp

;input
proch proc near
	mov ah,09h
	mov dx,offset str1
	int 21h
	
	mov di,0
b1:
	;输入
	 mov ah,01
	 int 21h
	;判断回车
	 cmp al,0dh
	 je b2
	;存入inpuf
	 mov content[di],al
	 inc di
	 jmp b1
b2:
	;输入完成,写入文件
	mov ah,40h
	mov bx,handle1
	mov cx,di
	lea dx,content
	int 21h
	jc b3
	cmp ax,di
	jne b3
	ret
b3:
	mov dx,offset wrtmsg    ;error
	MOV AH,09H
    INT 21H
	call errm
	
	ret
proch endp

copy proc near
	mov ah,40h
	mov bx,handle2
	mov cx,10
	lea dx,content
	int 21h
	jc c1
	cmp ax,10
	jne c1
	ret
c1:
	mov dx,offset cpymsg    ;error
	MOV AH,09H
    INT 21H
	call errm
	
	ret
copy endp

clseh proc near
	mov ah,3eh
	int 21h
	ret
clseh endp

;error
errm proc near
	mov errcde,01
	ret
errm endp
    
CODES ENDS
    END main
注意

文件是写在…\Masm\bin中的,不是直接像c语言一样写在该项目的文件夹中

或者你可以自己去盘里面搜一下文件在哪

另外

虽然题目是要在d盘创建,但是如果这么写会有问题,老师的意思是虚拟内存什么的问题,如果有别的需要,自行修改pathname就好了。

补充

其实,这个算法就改进空间很多,因为做的比较急,而且也懒得改了,就这样。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六月飞冷雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值