Помогите! Прога должна загружать файл в память а потом байты надо чита

Тема в разделе "WASM.BEGINNERS", создана пользователем ZwerugaVS, 20 авг 2009.

  1. ZwerugaVS

    ZwerugaVS New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2009
    Сообщения:
    8
    Немогу догнать что я делаю не так.Прога должна загружать файл в оперативку а потом побайтно читать. Пишу в ТАSМе.
    masm
    model small
    stack 100h

    DATA Segment byte public 'DATA' ; Описываем сегмент данных

    pl DW 0 ;длинна сстроки 2байта
    pl2 DW 0 ;длинна сстроки 2байта
    py DW 0 ;кол-во строк 2 байта
    pz DB 0 ;глубина фрезы 1байт pz=0 черный цвет, pz=FF белый цвет
    pd DB 0 ;диаметр фрезы 1 байт
    pz2 DB 0 ;глубина фрезы (2-ой параметр) 1байт
    pzi DB 0 ;истинное значение глубины фрезы 1байт
    pi DB 0 ;
    S23 DW 0
    S22 DW 0
    S21 DW 0
    Ha DW 0
    D22 DW 0 ;\
    D21 DW 0 ; ---длинна файла в байтах
    Mem DW 0 ;переменная для начала сегмента выделенной памяти
    NA DB 's.bmp',0
    NA2 DB 'sss.bmp',0 ;название открываемого файла
    DATA ENDS ; конец сегмента данных

    ; Сегмент кода - в нем расположим саму программу
    CODE Segment byte public 'CODE'
    ASSUME CS:CODE,DS:lol: ATA,ES:lol: ATA
    START:
    mov ah,48h
    mov bx,32768 ;512*(1024/16)
    int 21h ; Выделяем 512Kb памяти
    jnc Mee ; Продолжаем, если памяти хватает
    ;действие если ошибка
    ;........
    Mee:
    mov Mem,ax
    mov es,ax ; ES = сегмент начала выделенной памяти
    mov ah,49h
    int 21h
    ;открыть фаил
    MOV AX,0019;H;
    INT 10H
    MOV AH,3DH
    MOV DX,SEG NA
    MOV DS,DX
    MOV DX,OFFSET NA2
    MOV AL,0
    INT 21H
    mov Ha,AX
    ;определяем размер файла
    mov bx,ax
    xor cx,cx
    xor dx,dx
    MOV AL,02 ; 0-Начало,1-В Текущ,2-На конец
    MOV AH,42H
    INT 21H ;в DX:AX -возвращается длинна файла в байтах

    mov D22,DX ;-длинна файла в байтах
    mov D21,AX ;-длинна файла в байтах
    ;указат
    MOV AH,42H
    MOV CX,0
    MOV DX,0
    MOV AL,0; 0-Начало,1-В Текущ,2-На конец
    INT 21H
    ;взять из файла
    MOV AH,3FH
    MOV BX,5
    MOV DX,D22;---\
    MOV DS,DX; }адрес куда послать даные файла
    MOV DX,D21;------/
    MOV CX,65535;Длина фаила
    INT 21H
    ;закрыть
    MOV AH,3EH
    MOV BX,5
    INT 21H
    ;читаем первый байт из памяти куда сохранили часть файла
    MOV DX,D22 \
    MOV BX,D21 \
    MOV DS,DX \
    MOV AL,DS:[BX];-И ЭТО В ЦИКЛЕ ВОБЩЕМ

    ret
    code ends
    end start

    можно писать в АСЮ:429297632. могу небольшим денежным вознагрождением отблагодарить за помощь
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    оффтоп.
    такое не держим. ставь скайп
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    но вообще в bx должен находится дескриптор файла, а вы его зачем-то затираете числом 5
     
  4. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    оффтоп.
    хм, а чем icq лучше скайпа?
     
  5. ZwerugaVS

    ZwerugaVS New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2009
    Сообщения:
    8
    установил скайп . логин:ZloiXaker
    MOV BX,5 поменял на MOV BX,На - и это непомогает
     
  6. IceT

    IceT IceT

    Публикаций:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    233
    Адрес:
    RU
    А где хоть ошибка возникает? Или что не так?
     
  7. ZwerugaVS

    ZwerugaVS New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2009
    Сообщения:
    8
    IceT
    дальше идет дополнение к программе где она должна в порт этот байт выводить , а его там я невижу. вот и незнаю толи файл негрузится в память толи он неоттуда читает
     
  8. ZwerugaVS

    ZwerugaVS New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2009
    Сообщения:
    8
    нули в порту показывает
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    1) не из всякого порта можно прочитать то, что записали.
    2) где вы смотрите, что в порту и в какой порт пишите?
    3) вы вообще слышали про сегменты, 512Кб сегментов в реальном режиме не держат
    4) а отладчик на что
    5) а зачем читать все разом, можно читать по частям, хоть по 1024 байта
    6) в общем алгоритм следующий
    Код (Text):
    1. 1. читать из файла 1024 байт
    2. 2. выводить в порт прочитанное количество байт
    3. 3. если было прочитано 1024 байта, то перейти к п.1
     
  10. ZwerugaVS

    ZwerugaVS New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2009
    Сообщения:
    8
    max7C4
    да это мне понятно уже пробовал выделить памяти всеголиш в 64кБ. и вы меня наверное неправильно поняли. читаю из файла, сохраняю в память, а из памяти в порт ЛПТ. если сам переменную выводимую в порт меняю то и в порту меняются еденицы на нули, а вот тут чтото немогу понять что нетак я зделал
     
  11. ZwerugaVS

    ZwerugaVS New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2009
    Сообщения:
    8
    max7C4
    скорее всего чтото с сегментами и сегментирование памяти но вот непойму....блин
     
  12. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    ладно, тогда по порядку.
    1) куда программа выходит после выделения памяти (сработало ли jnc)
    2)
    Код (Text):
    1. ;открыть фаил  
    2.     MOV     AX,0019;H;
    3.     INT     10H
    вы представляете, что оно выдаст (всмысле какой режим установит, 320*200 16 цветов)
    3) уверены, что файл открывается?
    4) чет не то, вам так не кажется?
    5) опять не то?
     
  13. ZwerugaVS

    ZwerugaVS New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2009
    Сообщения:
    8
    max7C4
    jnc на ошибку не проверял
    пункт 2 мне такой экран нужен
    3 пункту неуверен
    4 и 5 пунк я непойму что я там нетак написал.
    можете пояснить?
    заранее спасибо
     
  14. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    mov D22,DX ;-длинна файла в байтах
    mov D21,AX ;-длинна файла в байтах
    MOV DX,D22;---\
    MOV DS,DX; }адрес куда послать даные файла
    MOV DX,D21;------/
    пункт 4 аналогично
     
  15. ZwerugaVS

    ZwerugaVS New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2009
    Сообщения:
    8
    max7C4
    спасибо за подсказку
    я сам нашёл. проблема была не в этом ..)