|
|||
push DX. mov DL, letter. print_mes macro message. local msg, nxt. push AX. push DX. mov DX, offset msg. mov AH, 09h. jmp nxt. print_letter CR. print_letter LF. mov AH, 0Ah. mov DX, offset FileName. print_letter CR. print_letter LF. xor BH, BH. mov FileNam ⇐ ПредыдущаяСтр 3 из 3 push DX mov DL, letter mov AH, 02 int 21h pop DX pop AX endm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; print_mes macro message local msg, nxt push AX push DX mov DX, offset msg mov AH, 09h int 21h pop DX pop AX jmp nxt msg DB message,'$' nxt: endm ; ;=============================================================== start: print_letter CR print_letter LF print_mes 'Input File Name > ' mov AH, 0Ah mov DX, offset FileName int 21h print_letter CR print_letter LF ;=============================================================== xor BH, BH mov BL, FileName[1] mov FileName[BX+2], 0 ;=============================================================== mov AX, 3D02h ; Open file for read/write mov DX, offset FileName+2 int 21h jnc openOK print_letter CR print_letter LF print_mes 'openERR' int 20h ;=============================================================== openOK: print_letter CR print_letter LF print_mes 'openOK' mov AX, 4C00h int 21h ; FileName DB 14,0,14 dup (0) code_seg ends end start
Поле
FileName DB 14,0,14 dup (0) Определено так – сначала 14 десятичных это максимальная длина строки. Затем 0 – байт для длины строки, которая будет действительно введена и затем 14 нулевых байтов для строки.
Заметим, что если строка для ввода будет определена следующим образом
FileName DB 20 dup (‘ ‘) Как 20 пробелов. То ошибки при использовании функции 0Ah не будет, т.к. ASCII код пробела 32 (20h) будет интерпретирован как максимальная длина строки. Правда сама строка может быть максимум только 32-3 = 29 знаков без знака 0Dh (Enter).
|
|||
|