ここは新しいです。 ファイル名を読み込み、 ".IN"で終わるかどうかを確認する必要があります。そうでない場合は、ファイルを開くために追加する必要があります。 ".IN" の助けを文字列を変更する(ファイル名拡張子)
GetFileName proc near
lea bx,MsgEnterFilename
call printf_s ;It prints the string above
mov ah,0ah
lea dx,FileNameBuffer
mov byte ptr FileNameBuffer,100
int 21h
lea si,FileNameBuffer+2
lea di,FileName
mov cl,FileNameBuffer+1
mov ch,0
mov ax,ds
mov es,ax
rep movsb
mov byte ptr es:[di],0 ;Puts a '\0' at the end
ret
GetFileName endp
fileNameInfo proc near ;Puts ".IN" and ".OUT"
lea si, FileName
lea di, FileNameCopy
mov cx, MAXSTRING ; MAXSTRING is set to 256, yeah, I am copying beyond the string end
rep movsb
; Search for ".IN"
mov si, 0
start_filename_length:
mov al, FileNameCopy[si]
cmp al, 0
je end_filename_length
inc FileNameLength
inc FileNameLengthAux
add si, 1
jmp start_filename_length
end_filename_length:
sub FileNameLengthAux, 2 ; To begin the test in the last 3 bytes (".IN")
mov si, word ptr FileNameLengthAux
cmp FileNameCopy[si], "."
je test_i
jmp no_extension
test_i:
inc si
mov si, word ptr FileNameLengthAux
cmp FileNameCopy[si], "I"
je test_n
cmp FileNameCopy[si], "i"
je test_n
jmp no_extension
test_n:
inc si ; last byte
mov si, word ptr FileNameLengthAux
cmp FileNameCopy[si], "N"
je correct_extension
cmp FileNameCopy[si], "n"
je correct_extension
;jmp no_extension
no_extensao: ;wrong extension counts as no extension
inc FileNameLengthAux ;goes to '\0' position
mov si, word ptr FileNameLengthAux
mov FileNameCopy[si], "."
inc si
mov FileNameCopy[si], "O"
inc si
mov FileNameCopy[si], "U"
inc si
mov FileNameCopy[si], "T"
inc si
mov FileNameCopy[si], 0 ;End the string
lea si, FileNameCopy
lea di, FileNameOut
mov cx, MAXSTRING ; copy 256 bytes
rep movsb
jmp return_filename_info
correct_extension: ;copyies till the "."
mov bl, FileNameLengthAux
mov FileNameLength, bl
sub FileNameLength, 2
lea si, FileNameCopy
lea di, FileNameOut
mov ch, 0
mov cl, FileNameLengthAux
rep movsb
mov si, word ptr FileNameLengthAux ; it is on "." position
inc si
mov FileNameOut[si], "O"
inc si
mov FileNameOut[si], "U"
inc si
mov FileNameOut[si], "T"
inc si
mov FileNameOut[si], 0 ;End the string
;jmp return_filename_info
return_filename_info:
ret
fileNameInfo endp
感謝= D
です:メインプログラムPSである... –
私はMOV \tの「無効なオペランド」を取得しますString [si]、FileBuffer – Caiorrs
(終了する前にコメントに入力してください) コードは正しいですか? – Caiorrs