Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > как сохранить файл


Автор: делитает 7.9.2004, 09:48
вот построил график в досе!!!
взял данные из микроконтроллера через com порт , создал массив и построил
в ассемблере график!!!
удача,конечно большая!!!!

а вот сохранить ни массив ни график не получается!!!-----
----- это чтобы потом посмотреть.
может кто - нить подскажет как это сделать!??????/

лучше бы в реальном режиме -- я ведь начинающий пока.
не могу разобраться с прерываниями дос.
вот если бы еще простейший пример!!!!

Автор: Akina 7.9.2004, 11:56
Код
.data

FileName db 'c:\folder\filename.ext',0
Array db MaxLengthOfArrayInBytes dup (?)

.code

mov ax,data
mov ds,ax
mov ah,3Ch
mov cx,20h
lea dx,FileName
int 21h
jc ErrorWhileCreateOrTruncateFile
mov bx,ax
mov ah,40h
mov cx,RealLengthOfArrayInBytes
lea dx,Array
int 21h
jc ErrorWhileWriteToFile
mov ah,3Eh
int 21h
jc ErrorWhileCloseFile

Автор: Guest 8.9.2004, 13:24
спасибо конечно!!!!!
а может хоть скажешь пару слов о проге то!!!!??/

Автор: Guest 8.9.2004, 13:29
я ваще то в masm611 пишу , а тут похоже TASM!,,,..

НУ ХОТЬ ПАРУ КОМЕНТАРИЕВ ТО СБРОСЬ!!!

то что у тебя по int 21h я понял.

ну все равно бы прокоментировал!!!!?

Автор: Akina 8.9.2004, 13:30
Комментов не будет. Во-первых, ты не зарегистрирован, во-вторых, изволь почитать доки по прерываниям.

Автор: Guest 8.9.2004, 13:40
я пока не сильно врубился !!
мне надо сохранить набранную инфу --- она в db .......-----
---- то что я массивом называю-----
----- например в конце проги info db ...... куда я все пишу.
и сохранить график в досе !!----- построенный по массиву.
.
поясни пожалуйста!!!!

Автор: Guest 8.9.2004, 13:50
я может непонятно выражаюсь , но
массив набираю в ячейки памяти , которые я обозвал под хххх db .....
по ним строю график функции времени-- все пока получается
а мне сохранить надо и массив и график в разных файлах.

Автор: Chingachguk 8.9.2004, 18:45
Напиши на паскале или си аналог того, что ты хочешь. Тогда кто-то из нас перебьет это на асме или что-то подскажет.

Автор: oleg1973 8.9.2004, 20:34
да шкрин ему нада походу получить

Автор: Akina 9.9.2004, 07:56
oleg1973
ему походу надо получить готовый код, ни фига не делая.

Автор: oleg1973 9.9.2004, 09:35
Akina
что ни есть гуд

Автор: Guest 12.9.2004, 11:58
oleg1973
ему походу надо получить готовый код, ни фига не делая.

!!!!!!!!!!!!

ты не прав, ОЛЕГ!!

хорошо рассуждать,когда ты мастер!!!

я вот только учусь в реальном режиме программировать.
ничего позорного я не спросил --- всего лишь как файло --
-- график в досе -сохранить!!!!
ващето я только принцип спрашивал, а не готовую прогу.

если тебе жалко поделиться такими крохами знаний -- не пиши !!!
я у других спрошу! --- на то и существует форум в росии.

Автор: Guest 12.9.2004, 12:06
хорошо вам ребята в москве рассуждать!!

а у нас на севере инет полчаса в день и то с низкой скоростью
и никакой информации нету больше.

Автор: Chingachguk 12.9.2004, 13:24
Гвест-делитает, напиши код примерно - я тебе напишу ответ. Я же обещал.

Автор: oleg1973 12.9.2004, 14:43
да написать не жалко
просто я не пойму что именно сохранить нада
шкриншот графика?
или координаты ?
или че?

Автор: Guest 13.9.2004, 08:01
Спасибо!
Задача вот в чем:
Из микроконтроллера 51 серии по порту RS-232 принимаю байты информации.
Режим полудуплексный.
Использую прерывания BIOS для инициализации COM1 , его опроса—
--- на предмет получения байта , а далее чтение порта.
Результат – полученный байт в регистре AL.
Далее создаю массив М известным способом—
MOV CX,512 ; можно и больше, от графика зависит.
MOV BX,offset M
Met1: MOV byte ptr [bx][si],AL
INC SI
LOOP met1
………………………………
M DB 512 DUP(0)

Потом в графическом режиме DOS ( 11h) рисую оси координат.
Потом строю график.
Координата X –номер байта из массива M.
Координата Y—значение байта из массива M.
Программа элементарная, единственно, что неприятно,
смещение точек по Y приходится изначально рассчитать.
При разрешении 470*630 неплохой график.

НЕ получается вот что :
1 – сохранить в отдельном файле набранный массив M,
а их надо несколько набрать.
2-- сохранить построенный график тоже в отдельном файле.
Их тоже надо несколько , чтобы потом распечатать.

Распечатать я думаю догадаюсь как.
Писать на асме в защищенном режиме пока не умею,
только в реальном , используя MASM611.


Автор: Guest 13.9.2004, 08:11
возможно неправильно номер графического режима DOS написал
то ли 11h то ли 12h , но 470*630.

Автор: Guest 13.9.2004, 08:13
но это наверно не так важно.

Автор: _Chingachguk_ 13.9.2004, 16:39
Насчет скинуть массив.

Пусть есть массив M:

M db 480*640 dup(?)

...
; Допустим, он чем-то уже заполнен.

...
; Скидываем его в файл как есть:

FILE_SIZE equ 180*340

mov ah,3Ch
mov dx,offset filename
xor cx,cx ; Attributes
int 21h
jc @@Error

mov bx,ax ; handle file (ax)

mov ah,40h
mov cx,FILE_SIZE
mov dx,offset mas ; ds:dx=seg:ofs of mas
int 21h
cmp ax,cx ; if error, cx <> ax
jnz @@Error

; close file
mov ah,3Eh
int 21h

@@Error:

filename db 'file01.dat',0
mas db FILE_SIZE dup(1)

Автор: _Chingachguk_ 13.9.2004, 16:40
Насчет картинок. Для доса можешь поставить себе ~graphics.com - драйвер печати экрана по PrintScreen. После нажатия клавиши он скинет тебе график на печать.

Автор: Guest 13.9.2004, 17:08
СПАСИБО!!!
ПОПРОБУЮ РАЗОБРАТЬСЯ.

Автор: Chingachguk 14.9.2004, 06:48
Да, и вот еще что. Почему ты пишешь код получения и построения данных на асме ? Не потому ли, что ты не можешь написать этот код в паскале или си ? Так вот - это сделать гораздо легче, чем написать весь код на ассемблере.

Автор: Guest 14.9.2004, 08:00
Chingachguk !!!!!!!
пишу на асме --- потому , что хочу еще и с машиной разобраться!!
наверно ты со мной согласишься , что АСМ --- САМЫЙ МОЩНЫЙ ЯЗЫК!!
на паскале -- конечно проще --- но НЕ ИНТЕРЕСНО!
можно и на фортране-- тоже не интересно.
СИ--- хорошо , но только после асма!
пока АСМ не освою , ничего учить не буду.
мне так преподаватель информатики рекомендовал.
я начинал учиться по КАЛАШНИКОВУ -- он конечно феномен , но
его часто заносит --- пишет как будто для людей своего уровня.
На его месте я бы вначале все способы адресации объяснил, а
потом объяснял оболочку типа дяди нортона , но не наоборот.
Вобще то , когда информации мало, колоть асм самостоятельно довольно тяжело, но интересно.

Автор: Guest 14.9.2004, 08:28
Chingachguk !!!!!!!
хочу еще с тобой посоветоваться.
Как ты считаешь , можно ли в DOS реализовать такой режим ,
что бы при формировании массива (--- инфа идет из МК по rs-232)
сразу было все видно на графике!?????
Мне кажется , что нельзя.
Наверно для этого должен работать параллельный процессор.
То есть один процессор работает на набор , а второй на график.
Вообще я слышал , что американцы разработку многопроцессорных
систем типа ЕС-эвм продолжают.

Автор: Guest 14.9.2004, 08:38
Chingachguk !!!!!!!
я еще про ТРАНСПЬЮТЕРЫ читал.
Как думаешь-- почему это направление не развивается?

а на счет graphics.com ------ почему то нет -- везде ice-graphics
так это для чтения текста.

Автор: _Chingachguk_ 14.9.2004, 15:07
Ну если ты хочешь на асме только, то это здорово. Я сам так начинал.

Цитата
Как ты считаешь , можно ли в DOS реализовать такой режим ,
что бы при формировании массива (--- инфа идет из МК по rs-232)
сразу было все видно на графике!?????


Я не очень тебя понял, возможно, тебе помогут прерывания. Я в свое время рисовал графики получая данные с КАМАКА, так я использовал графический режим 640x350 и приращение гистограммы рисовал белым цветом (так быстрее). При работе с режимом 13h вообще все просто: там прямая запись байтов в память приводит к немедленной выдачи на монитор.

Берешь байт данных, сохраняешь в буфере и сразу рисуешь на экране точку (или столбец).

Цитата
еще про ТРАНСПЬЮТЕРЫ читал.


Ничего не знаю про это.

Автор: LOXX 14.9.2004, 18:03
Chingachguk !!!!!!! Братишка,помоги!!! Как из биоса вирус вывести,а? Грузится сразу после опроса флоппи...забивает оперативку говном,так что ,пока не забьёт,на экране все цвета радуги прям...или вобще гаснет...я дамп смотрю,но нифига не понимаю...я ж лох... удели внимание,а..? только на тебя вся надежда...

Автор: Guest 14.9.2004, 18:29
После опроса флоппи ? А может он на винте у тебя ? Слишком мало вирусов умеют переписыать bios.

Автор: _Chingachguk_ 14.9.2004, 18:30
Прошлое сообщение by me.

Автор: Guest 19.9.2004, 12:33
_Chingachguk_

а знаешь, оказывается довольно просто формировать массив
и строить график одновременно!!!!!
Практически одни и те же команды.
Даже при высоком разрешении в досе получается.

ТОЛЬКО ВОТ ВОПРОС К ТЕБЕ :
как можно оценить быстродействие, чтобы наверняка знать
какую максимальную скорость передачи по COM порту можно
устанавливать без потери данных !?????

Автор: Chingachguk 19.9.2004, 14:14
Я не очень хорошо представляю себе твой стенд, но вот как мы раньше меряли максимальную загрузку: на вход АЦП (аналогово-цифровой преобразователь) вместо реальных данных давали сигнал с генератора с заданной частотой. На малых частотах процент регистрации был 100%, далее показатель запоминался и частота увеличивалась до того момента, пока программа не начинала "захлебываться". Вообще насколько мне позволяют судить мои скромные познания в com-портах, если приходит прерывание (а ты читаешь через прерывания ?) типа "буфер передачи содержит данные", то ты читаешь какой-то там регистр состояния буфера передачи до того времени, пока не выберешь все данные, те теоретически прерывание срабатывает "всегда" и все данные будут в буфере (если, конечно, он не переполниться). На обычном современном компе вполне можно ставить 115200, я думаю. На работе была моя программка типа терминал-терминал по com-портам, передающая файлы и т.п. Если что, я могу дать тебе ее исходняк.

Автор: Guest 23.9.2004, 12:59
уважаемый Chingachguk !!!!

я разобрался в твоей проге.
мне показалось ,что создать и сохранить файл можно проще:

; создать файл
mov AH,3Ch
XOR CX,CX
MOV DX,offset fname
INT 21h ; создать c:\masm611\bin\myfile.dat
JC err
mov bx,ax ; AX - дескриптор
; записать в файл
mov AH,40h
MOV CX,8 ; число байт
mov dx,offset m1
int 21h ; записать
cmp ax,cx
jnz err
; закрыть
MOV AH,3Eh
int 21h
err: MOV AH,4Ch
int 21h
m1 DB 8 DUP(0) ;резервируем 8 яп
fname db "c:\masm611\bin\myfile.dat",0

здесь , конечно нет необходимых тестов.

относительно твоего последнего сообщения , не совсем ясно-
-- о каких буферах идет речь.
я пока с буферами просто не разбирался.

А относительно стенда , это просто -- микроконтроллер 51 серии с ацп
с которого по rs-232 сигналы идут в комп.

На ацп подаем сигналы с датчика.
Диапазон от 0 до 5 вольт.

Может ты сталкивался с такой задачкой :::::

мы создаем файл , но таких файлов то много надо!!!!
Есть идея -- присваивать им название минута-час -месяц.dat
Допустим , мы умеем считывать эти параметры из компа.

Но как их представить в виде названия файла!???!!!!!!!!!!!!!!!!

И как при этом еще и в виде сервиса предварительно вывести
на экран в виде сообщения?

Все известные мне прерывания перебрал, ничего не получается.
Слышал, что на других языках это можно, но на других не интересно.




Автор: Guest 23.9.2004, 13:09
Chingachguk !!!!

кстати, как ты считаешь:

будет ли быстрей работать прога , если порты программировать
на самом низком уровне без использования прерываний биос!???

я пока не умею, но мне кажется должно быть быстрее.

Конечно, лучше всего набор байтов делать в микроконтроллере,
но память у него всего 256 байт максимум, да и то часть ее
идет на программу.
А если нужно 16 бит, то вааще мало памяти.

Автор: Chingachguk 25.9.2004, 09:17
Получить текущие дату и время в дос и создать имя файла:

Код
; Date-> cx:dh:dl = YYYY:MM:DD
 mov  ah,2ah
 int  21h
 mov  year,cx
 mov  mon,dh
 mov  day,dl
; Time-> ch:cl:dh:dl = HH:MM:SS:MSEK
 mov  ah,2ch
 int  21h
 mov  hour,ch
 mov  min,cl
 mov  sec,dh
 mov  msec,dh

; Make filename "YY:MM:DD:HH.MM" (Year:Mon:Day:Hour.MIN)

 mov  ax,year
 mov  bl,100
 div  bl
 mov  al,ah
 call WORDtoBIN
 mov  word ptr FileNameYear,ax
 mov  al,mon
 call WORDtoBIN
 mov  word ptr FileNameMon,ax
 mov  al,day
 call WORDtoBIN
 mov  word ptr FileNameDay,ax
 mov  al,hour
 call WORDtoBIN
 mov  word ptr FileNameHour,ax
 mov  byte ptr FileNamePoint,'.'
 mov  al,min
 call WORDtoBIN
 mov  word ptr FileNameMin,ax
 mov  byte ptr FileNameEnd,'$'

; printf FileName

 mov  ah,9
 mov  dx,offset FileName
 int  21h

...

; Conver BYTE (AL) to string in AX (ex: AL=56->AX='65')
; Attension: AL must be less than 100 !
WORDtoBIN proc
 push bx
; AL:AH= AL / 10
 xor  ah,ah
 mov  bl,10
 div  bl
; make ASCII
 add  ax,'00'
 pop  bx
 ret
WORDtoBIN endp
year dw ?
mon  db ?
day  db ?
hour db ?
min  db ?
sec  db ?
msec db ?
FileName label byte
FileNameYear  db 2 dup(?)
FileNameMon   db 2 dup(?)
FileNameDay   db 2 dup(?)
FileNameHour  db 2 dup(?)
FileNamePoint db 1 dup(?)
FileNameMin   db 2 dup(?)
FileNameEnd   db ?


Диалоги можно организовать разными способами, в том числе и через функции дос (запрос на ввод строки или на ввод 1-го символа).

Но у таких функций есть свои ограничения: это обработка специальных клавиш и проч. Наиболее оптимальный (но и более трудоемкий) путь: использовать int 16h для проверки нажатия клавиши или ее считывания, для рисования использовать прямой вывод в видеобуфер в текстовом режиме 03h (запись в память с адреса 0B800h).

Можешь посмотреть мою библиотеку pas_lib, размещенную в каталоге программ Vingrad.ru - там я организую менюшечные диалоги именно таким образом и именно на ассемблере.

Насчет быстрее или медленнее - сказать трудно, написать самому получение данных с ком-порта совсем не сложно, для этого нужно написать обработчик прерывания линии ком-порта. Я могу тебе дать его вариант на си/пасе/асме. Скорее всего на современных компах даже на скорости 115200 ты не заметишь разницы. Однако в ряде случаев int 14h может не дать необходимую гибкость.

Автор: Guest 25.9.2004, 13:50
Chingachguk !!!!

ОГРОМНОЕ СПАСИБО!!

обязательно ознакомлюсь с твоей библиотекой--Vingrad.ru

а относительно варианта обработчика прерываний---
---- попробую написать самостоятельноя, помучаюсь,
если не получится --тебя попрошу выслать, СПАСИБО!

речь идет о реализации максимального быстродействия,
которое я то не замечу, но искажение сигнала не должно
быть.

Автор: Guest 25.9.2004, 14:03
Chingachguk


Статус: Freeware Обращений: 359
Автор: Chingachguk Сайт: перейти...
Описание:
Библиотека для разработки простых интерфейсов для *.pas. Функции на *.asm. Исходный текст. Поддержка мыши. Есть два примера.
Доступные файлы: 10 Кб (Скорость загрузки: 28.8 < 1 мин; 33.6 < 0 мин; ADSL < 1 мин)

НЕ СКАЧИВАЕТСЯ --- НЕДОСТУПНО!
попробую в другой день

Автор: Guest 25.9.2004, 14:13
Chingachguk

если не трудно, сбрось на [email protected]

Автор: Chingachguk 29.9.2004, 20:51
Сбросил на mail.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)