编写一个程序,新建一个文件: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就好了。

补充

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

你可能感兴趣的:(汇编)