Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
Выбрать MASM для такого кода.
Здравствуйте, чатлане. Прошу помощи. Написал прогу на коде, понятном masm . Для компилирования использую 2 exe - LINK и ML , и батник с таким содержимым:
Код:
ML /c 1.asm
pause
LINK16 1.obj;
Pause
Прога компилится, но пашет неправильно. Хочу трассировать прогу, а не просматривать содержимое переменных таким образом:
Код:
mov dx, peremennaya
mov ax, 0Ah
int 21h
Скачал с http://masm32.com/ прог. среду masm32 v10, но он не хочет компилировать такой код:
Код:
.model small
.stack
.data
msgEnterFName db "Enter #x file name: $"
msgError db "Error!",10,13,"$"
msgErrorAccess db "Error access to output file!",10,13,"$"
msgErrorIdent db "Error ident of output file!",10,13,"$"
msgErrorFileWrite db "Error file write!$"
msgErrorFileRead db "Error file read!$"
msgErrorFileOpen db "Error file open!$"
msgNoEr1 db "first in file open",10,13,"$"
msgNoEr2 db "second in file open",10,13,"$"
msgNoEr3 db "output file created",10,13,"$"
msgComplite db 10,13,"Programm is complited",10,13,"$"
fnameout db 'out.txt',0
handlerIn1 dw ?
handlerIn2 dw ?
handlerOut dw ?
fNameAdr db 254 ; макс длинна строки (адрес начала строки)
fNameLen db 0 ; длинна строки
db 254 dup (?) ; строка
fbuf1 db 6 dup (?);
fbuf2 db 6 dup (?);
end_f1 db ?
end_f2 db ?
flagsEof db 0,0
.code
main proc
mov ax,@data
mov ds,ax
xor ax,ax
;;;;; Открытие первого фйала ;;;;;;;;;
;;;;; Принимаем имя для первого файла ;;;
;; Подставляем номер файла в приглашение
mov bx, offset msgEnterFName
mov byte ptr [bx+7],31H
;; Выводим приглашение
mov ah,09h
mov dx, offset msgEnterFName
int 21h
;; Принимаем имя первого файла
mov ah, 0ah
mov dx, offset fNameAdr
int 21h
; Обрабатываем введенное значение, приводим его к имени файла
xor bx,bx
mov bl,ds:fNameLen ; bl - длина введенной строки
add bx,dx ; получаем смещение к концу строки
mov byte ptr [bx+2],0 ; запишем 0 в конец строки
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call NewStr ; перевод строки
;;;; Открываем первый файл ;;;;;;;;;;;
mov dx, offset fNameAdr
add dx, 2
mov ah,3dh ; Открыть файл
mov al,0 ; Режим доступа - только чтение
int 21h ; открываем первый файл
jc erroFileOpen ; уходим на ошибку если CF=1
mov handlerIn1, ax ; сохраняем указатель на первый файл
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Открытие второго фйала ;;;;;;;;;
;;;;; Принимаем имя для второго файла ;;;
;; Подставляем номер файла в приглашение
mov bx, offset msgEnterFName
mov byte ptr [bx+7],32H
;; Выводим приглашение
mov ah,09h
mov dx, offset msgEnterFName
int 21h
;; Принимаем имя второго файла
mov ah, 0ah
mov dx, offset fNameAdr
int 21h
;; Обрабатываем введенное значение, приводим его к имени файла
xor bx,bx
mov bl,ds:fNameLen ; bl - длинна введенной строки
add bx,dx ; получаем смещение к концу строки
mov byte ptr [bx+2],0 ; запишем 0 в конец строки
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call NewStr ; перевод строки
;;;; Открываем второй файл ;;;;;;;;;;;
mov dx, offset fNameAdr
add dx, 2
mov ah,3dh ; открыть файл
mov al,0 ; режим доступа - только чтение
int 21h ; открываем второй файл
jc erroFileOpen ; уходим на ошибку если CF=1
mov handlerIn2, ax ; сохраняем указатель на второй файл
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;; Создаем третий файл для вывода ;;;;;;;;;;;
mov ah,3ch ; создать файл
mov cx,0 ; атрибуты - обычный файл
mov dx, offset fnameout ; имя файла
int 21h
jc erroFileOpen
mov handlerOut,ax
mov ah,09h ; вывод сообщения на экран
mov dx, offset msgNoEr3 ; это выводим
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;Логика;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Читаем файлы ;;;;
readFiles:
;; обнуляем флаги окончания файлов
mov [flagsEof], 0
mov [flagsEof+1], 0
;; обнуляем буфер чтения файлов
mov [fbuf1], 0
mov [fbuf2], 0
Если помог, проси поставить минус. Будь оригинален!
|