Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2009, 12:46   #1
leahov
 
Регистрация: 26.12.2008
Сообщений: 5
По умолчанию Создание файла

Столкнулся с ранее неизвестной ошибкой
(6) Illegal instruction: buflen=$-bufout or wrong parameters.
(21) Wrong parameters: MOV CX,buflen
(21) Second operand is undefined variable(?), no zero before hex number(?)

Вот код (нашел его в книге Рудакова), в чем беда подскажите?
Код:
.model	small
.stack	100h
.data
;В сегменте данных 
bufout db 'Потап Барсук' ;Данные для записи в файл 
buflen=$-bufout ;Ee длина (12 байт) 
handle dw 0 ;Ячейка для дескриптора 
fname db 'MYFILE.dat',0 ;Имя файла в формате ASCIIZ 
.code
start:
;В сегменте команд 
;Создадим файл 
mov AH,3Ch ;Функция создания файла 
mov CX, 0 ;Без атрибутов 
mov DX, offset fname ;Адрес имени файла 
int 21h 
mov handle,AX ;Сохраним дескриптор файла 
;Запишем в файл данные (в данном примере - текстовую строку) 
mov AH,40h ;Функция записи в файл 
mov BX,handle ;Дескриптор 
mov CX,buflen ;Число записываемых байтов 
mov DX,offset bufout;Адрес данных 
int 21h 
;Закроем файл (нет необходимости) 
mov AH,3Eh ;Функция закрытия файла 
mov BX,handle ;Дескриптор 
int	21h
end	start
leahov вне форума Ответить с цитированием
Старый 04.06.2009, 13:32   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
Столкнулся с ранее неизвестной ошибкой
Оригинальное начало
Код:
buflen=$-bufout
Так константы в ассемблере не задаются
В крайнем случае делай так
Код:
buflen  equ $-bufout
А если по правильному, то в масме для этого есть деректива sizeof, т.е.
Код:
mov CX,sizeof bufout
В тасме тоже есть что-то, но правда не помню что.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 04.06.2009 в 13:37.
Goodwin98 вне форума Ответить с цитированием
Старый 04.06.2009, 13:43   #3
leahov
 
Регистрация: 26.12.2008
Сообщений: 5
По умолчанию

Цитата:
Оригинальное начало
в голова уже нормально думать не может ;-)

Цитата:
Так переменные в ассемблере не задаются
Я тоже так думал, но вдруг, я ещё всего не знаю, думал раз такой дядька пишет наверное что то есть

Код:
buflen  equ $-bufout
не получается так как потом вылазит ошибка
Цитата:
(21) Wrong parameters: MOV CX,$-bufout
leahov вне форума Ответить с цитированием
Старый 04.06.2009, 14:14   #4
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Скомпилировал и ошибок не обнаружил. Код та ведь рабочий! В чем проблема?
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 04.06.2009, 14:25   #5
leahov
 
Регистрация: 26.12.2008
Сообщений: 5
По умолчанию

в чем компилировал? Я делаю в emu8086, там выдает ошибку
leahov вне форума Ответить с цитированием
Старый 04.06.2009, 15:30   #6
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

А я компилю в TASM'е и там у меня нет ошибок
Вообще то правильнее было бы так написать
Код:
text segment
assume cs:text, ds:data

begin:
       mov ax,data
       mov ds,ax
       mov AH,3Ch                    ;Функция создания файла 
       mov CX, 0                     ;Без атрибутов 
       mov DX, offset fname          ;Адрес имени файла 
       int 21h 
       mov handle,AX                 ;Сохраним дескриптор файла 
;Запишем в файл данные (в данном примере - текстовую строку) 
      mov AH,40h                    ;Функция записи в файл 
      mov BX,handle                 ;Дескриптор 
      mov CX,buflen                 ;Число записываемых байтов 
      mov DX,offset bufout          ;Адрес данных 
      int 21h 
;Закроем файл (нет необходимости) 
      mov AH,3Eh                    ;Функция закрытия файла 
      mov BX,handle                 ;Дескриптор 
      int	21h

text ends
data segment
; Поля данных в сегменте данных
bufout db 'Потап Барсук' ;Данные для записи в файл 
buflen=$-bufout ;Ee длина (12 байт) 
handle dw 0 ;Ячейка для дескриптора 
fname db 'MYFILE.dat',0 ;Имя файла в формате ASCIIZ 

data ends
 
stk    segment stack
       db 256 dup (0)
stk ends
    end begin
xor eax, eax
xchg [eax], eax

Последний раз редактировалось MalCer; 04.06.2009 в 15:43.
MalCer вне форума Ответить с цитированием
Старый 18.05.2011, 23:16   #7
Zueuk
 
Регистрация: 10.05.2011
Сообщений: 4
Вопрос

Написал программу создания файла. Но где-то ошибся. Поправьте, где не прав?
Описание: программа вызывает функцию создания файла, после отработки, по результату функции определяю, была ошибка или нет.
А файл создается в любом случае (что функция перезаписывает файл - это знаю).
Код:
CSEG segment
ASSUME CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG
org 100h

begin:
	mov ah,3Ch			;функция создания файла
	mov cx,00000000b		;указываем аттрибуты создаваемого файла: обычный файл
	mov dx,offset filename
	int 21h
	jc Error_create			;если файл не создан - сразу завершение программы
	mov handle,ax
	
Error_create:
	mov ah,09h
	mov dx,offset msg_error_create
	int 21h
	jmp Quit_prog

Error_delete:
	mov ah,09h
	mov dx,offset msg_error_delete
	int 21h
	jmp Quit_prog
	
Quit_prog:
	;mov al,32
	mov ah,04ch
	int 21h
	;int 20h

filename db '_file.txt',0
handle dw 0
msg_error_delete db 'Error! File not deleted.',0ah,0dh,'$'
msg_error_create db 'Error! File not created.',0ah,0dh,'$'
msg_ok db 'File created.',0ah,0dh,'$'
	
CSEG ends
end begin
Zueuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие файла и создание графика на основе чисел из файла Simon..14 Общие вопросы C/C++ 8 09.06.2009 10:18
Создание файла с подкаталогами pix_l Общие вопросы Delphi 5 31.03.2009 10:41
Создание файла Nowise Паскаль, Turbo Pascal, PascalABC.NET 7 04.04.2008 19:55
Создание файла BigRem Общие вопросы Delphi 8 06.01.2008 16:52
Создание файла Хs-You Общие вопросы Delphi 4 22.08.2007 22:04