1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 汇编语言 借助dos 实现打开文件 读取文件内容输出到屏幕 然后关闭

汇编语言 借助dos 实现打开文件 读取文件内容输出到屏幕 然后关闭

时间:2023-05-23 04:05:38

相关推荐

汇编语言 借助dos 实现打开文件 读取文件内容输出到屏幕 然后关闭

没有汇编高亮,随便高亮一下,过会儿在别的文章里会补一题这个

12.8 利用IBM PC DOS提供的系统调用(详见附录D),将一个文件的内容复制到另一个文件中去。 要求文件名由用户从键盘上输入。

SSEG SEGMENTSTACK DB 80H DUP(0)SSEG ENDSDSEG SEGMENTASKFN DB 'File Name: $'FNAME DB 14,0,14DUP(?)ERRMSG DB 'FILE ERROR! $'BUFF DB 512 DUP(?)DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGFILE PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXLEA DX,ASKFN;提示信息的首地址MOV AH,09HINT 21H ;输出DS:DX指向的字符串(即提示信息)LEA DX,FNAME;MOV AH,0AH;把键盘输入的字符存入缓冲区(即DS:DX),然后把实际输入的数量存入FNAME+1INT 21H;MOV DL,0AH;这是换行符MOV AH,2;输出DL的字符到屏幕INT 21H;MOV BL,FNAME+1;MOV BH,0;这里是为了把BL扩展到BX;MOV [BX+FNAME+2],BH;文件名的最后放上一个0,BX是文件名的长度LEA DX,FNAME+2;把文件名的首地址取给DXMOV AX,3D00H;AH的3D是打开文件的功能,AL的内容是3种打开文件的格式,0=读,1=写,2=读和写INT 21H;JC EXIT;如果文件打开出错的话跳转到EXITMOV BX,AX;AGAIN:MOV CX,512;每次读入的字节数LEA DX,BUFF;把缓冲区的偏移地址取给DX,这样就可以把文件内容读进DXMOV AH,3FH;读取文件内容,如果读到文件尾部,AX是0,否则是实际读入数INT 21HJC EXIT;如果打开出错了跳转PUSH AX;MOV CX,AX;把实际读到的字节数给CXMOV SI,OFFSET BUFF;把缓存区首地址给SI,其实给哪个都可以,不限制PUTC:MOV DL,[SI];逐个输出INC SIMOV AH,2;输出DL的字符到屏幕INT 21H;LOOP PUTC;POP AX;CMP AX,512;如果读到文件尾部,AX是0,否则是实际读入数JE AGAIN;只有两种可能一种是读完了,那么AX是0,不相等,还有一种可能是没读完,那AX就是512MOV AH,3EH;关闭文件INT 21H;RETEXIT:LEA DX,ERRMSGMOV AH,9INT 21H;RET;MOV AH,4CH;INT 21H;FILE ENDPCSEG ENDS;

顺带一提,DOS是把设备也当做文件管理的

0000是显示器

0004是打印机

所以putc那段输出逻辑也可以改成

MOV BX,0MOV AH,40HINT 21H

也可以实现打印在显示器上

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。