Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. taksos

    taksos New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2008
    Сообщения:
    23
    Задача была написать программу, которая копирует файл. Вот кусок кода. Происходит считывание имен файлов, проверка, на ошибки, создание файла приемника, открытие файла источника. В последнем вызове read происходит ошибка, помогите разобраться.
    Код (Text):
    1. section .data
    2.     msg1    db  'Full path to destination file: '
    3.     msg1_l      equ $ - msg1
    4.     msg2    db  'Full path to source file: '
    5.     msg2_l      equ $ - msg2
    6.     errd    db  'Error with destination file!',0Dh,0Ah
    7.     errd_l      equ $ - errd
    8.     errs    db  'Error with source file!',0Dh,0Ah
    9.     errs_l      equ $ - errs
    10. section .bss
    11.     dst     resb 50
    12.     dst_l       equ $ - dst
    13.    
    14.     src     resb 50
    15.     src_l       equ $ - src
    16.  
    17.     buf     resb 64
    18.     buf_l       equ $ - buf
    19.    
    20.     h_dst       resw 1
    21.     h_src       resw 1
    22. section .text
    23.     global _start:
    24. _start:
    25. ; System call #4 "write"
    26.     mov eax,4
    27.     mov ebx,1
    28.     mov ecx,msg1
    29.     mov edx,msg1_l
    30.     int 80h
    31. ; System call #3 "read"
    32.     mov eax,3
    33.     mov ebx,0
    34.     mov ecx,dst
    35.     mov edx,dst_l
    36.     int 80h
    37. ; Дописать 0 в конец строки с именем файла
    38.     mov byte [dst+eax-1],0
    39. ; System call #8 "creat"
    40.     mov eax,8
    41.     mov ebx,dst     ; Создание файла с именем по адресу dst
    42.     mov ecx,0444        ; Права
    43.     mov edx,02
    44.     int 80h
    45. ; Проверка на ошибку
    46.     jc err1         ; Если CF=1, то переход на сообщение об ошибке
    47.     jmp next1
    48. err1:
    49. ; System call #4 "write"
    50.     mov eax,4
    51.     mov ebx,1
    52.     mov ecx,errd
    53.     mov edx,errd_l
    54.     int 80h
    55.     jmp _start
    56. next1:
    57. ; Запись дескриптора в h_dst
    58.     mov dword [h_dst],eax
    59. rw_src:
    60. ; System call #4 "write"
    61.     mov eax,4
    62.     mov ebx,1
    63.     mov ecx,msg2
    64.     mov edx,msg2_l
    65.     int 80h
    66. ; System call #3 "read"
    67.     mov eax,3
    68.     mov ebx,0
    69.     mov ecx,src
    70.     mov edx,src_l
    71.     int 80h
    72. ; Дописать 0 в конец строки с именем файла
    73.     mov byte [src+eax-1],0
    74. ; System call #5 "open"
    75.     mov eax,5
    76.     mov ebx,src
    77.     mov ecx,00  ; read only access
    78.     int 80h
    79. ; Проверка на ошибку
    80.     jc err2         ; Если CF=1, то переход на сообщение об ошибке
    81.     jmp next2
    82. err2:
    83. ; System call #4 "write"
    84.     mov eax,4
    85.     mov ebx,1
    86.     mov ecx,errs
    87.     mov edx,errs_l
    88.     int 80h
    89.     jmp rw_src
    90. next2:
    91. ; Запись дескриптора в h_src
    92.     mov dword [h_src],eax
    93. rw:
    94. ; System call #3 "read" from src
    95.     mov eax,3
    96.     mov ebx,h_src
    97.     mov ecx,buf
    98.     mov edx,buf_l
    99.     int 80h
    100. ....
     
  2. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    q_q
    СПАСИБО ТЕБЕ ОГРОМНОЕ!!!!!!!!!!!!!!
    Я запустила этот файл, у меня он теперь тоже открывается, вот только в Access ничего не пишет, может ошибка в том, что у меня версия 2003? Вот, а ещё у меня было 28 ошибок и я их исправила(ну почти все, некоторые сами удалялись)в основном добавляла вот такую штуку: ADODB::_
    Ну почему нет ошибок и не работает??????
     
  3. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    4) bat-файл, который демонстрирует, как запускать exe'шник.
    Вот этот вот bat пишет непонятные закорючки, понятно только то, что он указывает не месторасположение папки
    foo, она у меня находится на рабочем столе.
     
  4. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    q_q
    А ещё эта программа создает текстовые файлы out1, out2, out3.
     
  5. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    q_q
    А где в программе он читает имена текстовых файлов, которые ему надо загрузить в базу.
     
  6. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    q_q
    У меня запись получилась, он записывает в базу данных. Ура!!!!!!!
    Спасибо вам большое!!!!!!! Класс!!!! :)))))))))) Спасибо.
     
  7. Andrej_ka

    Andrej_ka New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    3
    Ребята, страницей ранее писал о проблема с компиляцией.
    Дык вот, не компилилось под Вистой, а под Хрюканьей все сделалось за милую душу)))
    Так что имейте в виду.! МАСМ32 под Вистой не работает как надо.
     
  8. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    q_q
    Когда щелкаю по бат-файлу, тогда работает запись в базу, а если просто из С++, то ничего не записывает.
    А что находится внутри бат-файла, там тоже какая-то программа.
    А почему у меня нигде С++ не создает exe файло? вирусы могли испортить програмку?
    Microsoft Visual Studio .NET 2003 у меня вот такая версия
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    OlechkaA
    > меня было 28 ошибок
    Я компилировал при помощи vc++2005ee & psdk Svr2003R2 5.2.3790.2075.51

    > Access ... у меня версия 2003
    У меня нет компьютера, на котором был бы установлен только access 2003, на том где установлен 97 и 2003 программа работает.

    > где в программе он читает имена текстовых файлов
    > Когда щелкаю по бат-файлу, тогда работает запись в базу
    > если просто из С++, то ничего не записывает.
    Моя версия берет имя файла (из которого писать в базу, или в который писать из базы) из командной строки. В студии, скорее всего не заполнена командная строка. Открой bat-файл текстовым редактором (в dos-кодировке, потому что имена таблиц русскими буквами) - увидишь имена файлов и имена таблиц.

    > что находится внутри бат-файла, там тоже какая-то программа.
    Я уже писал в #1280: "демонстрирует, как запускать exe'шник"

    > Вот этот вот bat пишет непонятные закорючки
    Если его исполнение прошло удачно, то будет выведено шесть раз "ok", если неудачно, то сообщения об ошибках. Если ошибки при обращении к ado, то сообщения на русском в кодовой странице 1251.

    > почему у меня нигде С++ не создает exe файло?
    Если сборка проекта проходит удачно, то exe'шник создается. Ищи.
     
  10. RadASM

    RadASM New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    12
    Здравствуйте. Дано задание "Защита дисковода паролем", под 8086 (тз не определено - на своё усмотрение). Незнаю с чего начать (знаний мало и матерьяла по работе с дисководом тоже почти ничего ненашёл).
    Подскажите пожалуйста команды, прерывания... что мне поможет в данном задание при работе с дисководом (ну и всё что будет полезно на эту тему).
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    RadASM
    Материал по работе с дисководом - справка по тринадцатому прерыванию BIOS. Заменяете обработчик этого прерывания, в котором проверяете, идёт ли обращение к дисководу, и правильность пароля. В случае правильного пароля передаёте управление на оригинальный обработчик прерывания.
     
  12. RadASM

    RadASM New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    12
    l_inc спасибо
    Есть ли подробная справка на русском для 13h (встречал по мышке 33h довольно подробную справку найти бы такоеже на 13)
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    RadASM
    Ральф Браун.
    Прошу прощения. Не заметил, что нужна "на русском".
     
  14. RadASM

    RadASM New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    12
    можно поподробнее
    хорошая книженция буду разбираться
     
  15. dave101ua

    dave101ua New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2009
    Сообщения:
    6
    Всем привет!
    такая задача: дана строка с нулевым завершителем, для каждого символа из этой строки нужно подсчитать сколько раз он в ней встречается.

    я представляю как решить эту задачу на php , преобразовал бы строку в массив, прошелся бы по нему и посчитал бы сколько раз каждый елемент встречается, на выходе бы имел ассоциативный массив где ключ это символ а значение - количество повторений. с пхп понятно, там есть ассоциативные массивы а есть ли такое в асме ?


    написать нужно под х86 на тасме, ДОС.
    по задаче: вобщем то не указано откуда брать строку, думаю можно с клавы вводить, в этом случае можно заюзать ф-ю приема строки с клавиатуры. попробовал так:
    Код (Text):
    1.  .model small
    2.     .386
    3.     .stack
    4.     .data
    5. mes1 db 0ah, 0dh, 'str1: $'
    6. mes2 db 0ah, 0dh, 'str2: $'
    7.  
    8. str1 db 10,0, 11 dup (' ')
    9.     .code
    10. start:
    11.     mov ax, @data
    12.     mov ds, ax
    13.     mov es, ax
    14.  
    15.     mov dx, offset mes1
    16.     mov ah, 9
    17.     int 21h  ;output mes1
    18.  
    19.     inc ah
    20.     mov dx, offset str1
    21.     int 21h
    22.  
    23.     mov str1[10],'$'
    24.     mov ah, 9
    25.     mov dx, offset str1
    26.     int 21h  
    27.  
    28.     mov ax, 4c00h
    29.     int 21h
    30. end start
    вобщем то в память пишется, но когда я пытаюсь вывести полученную строку на экран то работает неправильно, такое ощущение будто я в dx не совсем то передаю.

    помогите кодом по задаче пожалуйста.
     
  16. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    dave101ua
    хеш для оссемблера: hash db 256 dup (0)
     
  17. Liam

    Liam New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    7
    Как из строки вырезать слово? Можно пример?
     
  18. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    dave101ua
    Создаём массив с количествами символов, где каждый элемент соответсвует символу из ASCII таблицы.
    Код (Text):
    1. org 100h
    2. mov cx,11               ;длина строки
    3. mov si,txt
    4. calc:lodsb
    5.      movzx bx,al
    6.      inc byte[ds:bx+txt]
    7. loop calc
    8. ret
    9. txt   db 'абракадабра' ;текст
    10. count rb 256           ;массив с количествами символов
     
  19. taksos

    taksos New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2008
    Сообщения:
    23
    Ребята, помогите, пжлст, с моей задачей. А то сообщение вообще без внимания осталось: #1281 2009-01-04 18:03:03
     
  20. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    taksos
    resd надо, а не resw
    наверно ты хотел "mov ebx,[h_src]"

    P.S.
    я бы записал проще: "jnc next1" и "jnc next2".