当前位置: 代码迷 >> 汇编语言 >> 哪位高手帮小弟我解释标注下这个输入子程序
  详细解决方案

哪位高手帮小弟我解释标注下这个输入子程序

热度:5532   发布时间:2013-02-26 00:00:00.0
谁帮我解释标注下这个输入子程序?
其中数据段中定义了: FILENAME DB 30,?,30 DUP(?)
其他什么提示就不写出来了,比如MES1什么的。。问题如下:

INPUT PROC NEAR ;输入文件名子程序
  LEA DX,FILENAME  
  MOV AH,0AH ;键盘输入到缓冲区,即就是输入名字
  INT 21H  
  LEA SI,FILENAME
  MOV AL,[SI+1]
  XOR AH,AH
  ADD SI,2
  ADD SI,AX
  MOV BYTE PTR [SI],0 ;将回车符转换为0
  RET
INPUT ENDP

然后我在代码段中调用创建文件:就是CALL CREATEFILE_
CREATEFILE_ PROC NEAR  
mov dx,offset MES1
mov ah,9
int 21h
call INPUT
mov dx ,offset FILENAME ;creat file
add dx,2
mov ah,3ch
mov cx,0
int 21h
jc ERRMES ;判断成功否
lea dx,OK
mov ah,9
int 21h 
ret

ERRMES:mov dx,offset ERR
mov ah,9
int 21h
RET
CREATEFILE_ ENDP

此时你输入比如:d:\1.txt 它就建了个这个文件,我的问题是,怎么改,才能使不用输入前面的盘符,直接输入后面的文件名就保存在D:\MINGA 文件夹下呢??

------解决方案--------------------------------------------------------
Assembly code
ASSUME CS:CODE ,DS:DATADATA SEGMENT  FILENAME DB 30,?,30 DUP(?)  FULLPATH DB 'D:\TEST\',31 DUP(0)  MES1 DB 'INPUT THE FILE NAME:',0DH,0AH,'$'  OK   DB 'CREATE FILE SUCCESSED',0DH,0AH,'$'  ERR  DB 'CREATE FILE FAILED',0DH,0AH,'$'DATA ENDSCODE SEGMENT   START:        ;INIT THE DS AND ES REGISTERS        MOV AX,DATA        MOV DS,AX        MOV ES,AX                ;GET THE INPUT STRING        CALL INPUT        ;CR LF        MOV DL,0DH        MOV AH,2        INT 21H        MOV DL,0AH        MOV AH,2        INT 21H        ;CONNECT THE INPUT STRING WITH D:\TEST\        LEA SI,FILENAME        INC SI        XOR CX,CX        MOV CL,BYTE PTR DS:[SI]        INC SI        LEA DI,FULLPATH        ADD DI,8        REP MOVSB         ;CREATE THE FILE WITH THE FULLPATH STRING        CALL CREATEFILE_        MOV AX,4C00H        INT 21HINPUT PROC NEAR ;输入文件名子程序  ;--------------------  MOV DX,OFFSET MES1  MOV AH,9  INT 21H  ;----------------------  LEA DX,FILENAME    MOV AH,0AH ;键盘输入到缓冲区,即就是输入名字  INT 21H    LEA SI,FILENAME  MOV AL,[SI+1]  XOR AH,AH  ADD SI,2  ADD SI,AX  MOV BYTE PTR [SI],0 ;将回车符转换为0  RETINPUT ENDP;然后我在代码段中调用创建文件:就是CALL CREATEFILE_CREATEFILE_ PROC NEAR      ;MOV DX,OFFSET MES1    ;MOV AH,9    ;INT 21H    ;-----------------------------------------    ;MOV DX ,OFFSET FILENAME ;CREAT FILE    MOV DX,OFFSET FULLPATH    ;------------------------------------------    ADD DX,2    MOV AH,3CH    MOV CX,0    INT 21H    JC ERRMES ;判断成功否    LEA DX,OK    MOV AH,9    INT 21H     RETERRMES:    MOV DX,OFFSET ERR    MOV AH,9    INT 21H    RETCREATEFILE_ ENDP CODE ENDSEND START
  相关解决方案