WMmail.ru - сервис почтовых рассылок

среда, 2 ноября 2011 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Срочная распродажа брендовой одежды. Ликвидация коллекции!
  
  
Вклад "Осенняя десятка" - доход до 10% годовых! Вклад "Осенняя десятка" - доход до 10% годовых!
Подарок каждому вкладчику!
  

  Мои подписки      Мои группы      Мои новости     
        Автор 
Калашников О.А.
      
  
Компьютеры и интернет   →   Софт   →   Программирование   →   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  
RFpro.ru: Ассемблер? Это просто! Учимся программировать
 
 

Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2897
• повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2578
• повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2122
• повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1484
Дата выхода:03.11.2011, 00:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:193 / 61
Вопросов / ответов:1 / 1

Консультация # 184342: Здравствуйте! Нужна помощь по ассемблеру - имеется родительская и дочерняя программы, листинги программ прилагаю. Необходимо, чтобы родительская программа запускала по очереди 2 дочерних процесса, при этом чтобы один процесс открывал файл FILE.txt, а другой закрывал его. Заранее спасибо за ответ....


Консультация # 184342:

Здравствуйте! Нужна помощь по ассемблеру - имеется родительская и дочерняя программы, листинги программ прилагаю. Необходимо, чтобы родительская программа запускала по очереди 2 дочерних процесса, при этом чтобы один процесс открывал файл FILE.txt, а другой закрывал его. Заранее спасибо за ответ.

Дата отправки: 28.10.2011, 23:51
Вопрос задал: Федрычев Даниил Сергеевич (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Федрычев Даниил Сергеевич!
Использовать обычный запуск ax=4b00h не получится, т.к.
при завершении программы все открытые файлы закрываются.
В результате чего, нельзя получить из дочерней программы handle файла...
Можно реализовать, используя механизм оверлеев.
Итак, вот, что у меня получилось...
Handle передаю через регистр AX, т.к. в случае оверлеев имеем, фактически,
одну многосегментную программу.

Родительская программа ma.asm

Код :
;Родительская программа MA.ASM _code segment 'CODE'  assume cs:_code, ds:_data, ss:_stack  main proc  mov ax, _data  mov ds,ax   mov ah, 40h  mov bx, 1  mov cx, lStart ;Старт родительской программы  mov dx, offset sStart  int 21h   mov ax, zzz  mov dx, es  ;Освобождение  sub ax, dx  ;лишней памяти  mov  bx, ax  mov ah, 4ah  int 21h  ;Выделение памяти для оверлеев  mov ah, 48h  ;  mov bx, 1000h       ;запросим 64 кбайт  int 21h  jnc NoErrMem  jmp errmem  ;переход, если произошла ошибка NoErrMem:  mov EPB, ax  ;сохранение адреса памяти  mov EPB+2, ax ;для настройки адресов при загрузки оверлеев  mov run_seg, ax ;сегмент оверлея в длинном вызове  mov ax, ds  mov es, ax  ;Загрузка первого оверлея  mov bx, offset EPB ;блок EXEC Parameter Block  mov dx, offset chname1 ;имя файла в ASCIIZ  mov ax, 4B03h ;функция загрузки оверлея  int 21h  jnc NoErrOvr  jmp errexec  ;переход, если произошла ошибка NoErrOvr: ;Вызов оверлея  push ds  push es  mov cs:save_ss, ss  mov cs:save_sp, sp   call dword ptr run_adr ;длинный вызов оверлея   mov sp, cs:save_sp  mov ss, cs:save_ss  pop es  pop ds  mov handle, ax ;сохраним handle файла!  test ax, ax  jz errchild   mov ah, 40h  mov bx, 1  mov cx, lOk  ;Оверлей отработал  mov dx, offset sOk  int 21h  ;Загрузка второго оверлея  mov bx, offset EPB ;блок EXEC Parameter Block  mov dx, offset chname2 ;имя файла в ASCIIZ  mov ax, 4B03h ;функция загрузки оверлея  int 21h  jc errexec  ;переход, если произошла ошибка ;Вызов оверлея  push ds  push es  mov cs:save_ss, ss  mov cs:save_sp, sp   mov ax, handle   call dword ptr run_adr ;длинный вызов оверлея   mov sp, cs:save_sp  mov ss, cs:save_ss  pop es  pop ds   test ax, ax  jz errchild   mov ah, 40h  mov bx, 1  mov cx, lOk  ;Оверлей отработал  mov dx, offset sOk  int 21h  ;Освобождение памяти, которая использована для оверлея finish:  mov ah, 49h  ;функция освобождения памяти  mov es, EPB  ;получение адреса блока памяти  int 21h  ;вызов MS-DOS  jc errmem  ;переход, если произошла ошибка  outprog:  mov ax, 4c00h ;Завершение  int 21h  ;программы  errmem:  mov ah, 40h  mov bx, 1  mov cx, lErrMem ;Ошибка менеджера памяти  mov dx, offset sErrMem  int 21h  jmp outprog errchild:  mov ah, 40h  mov bx, 1  ;Вывод третьего  mov cx, lErrCh ;сообщения  mov dx, offset sErrCh  int 21h  jmp outprog errexec:  mov ah, 40h  mov bx, 1  mov cx, lErrOvr ;Ошибка загрузки оверлея  mov dx, offset sErrOvr  int 21h  jmp outprog  save_sp dw ? save_ss dw ?  main endp  _code ends  ;Сегмент данных _data segment 'DATA' EPB dw ?  ;адрес загрузки  dw 0  ;значение настройки run_adr dw 0  ;новый указатель инструкции run_seg dw ?  ;новое значение кодового сегмента  chname1 db "DO.EXE",0 ;Имя дочерней программы chname2 db "Close.EXE",0 ;Имя дочерней программы handle dw 0 sStart db "Родительский процесс запущен",10,13 lStart equ $-sStart sOk db "Дочерний процесс отработал",10,13 lOk equ $-sOk sErrOvr db "Дочерний процесс не активизирован",10,13 lErrOvr equ $-sErrOvr sErrCh db "Дочерний процесс вернул ошибку",10,13 lErrCh equ $-sErrCh sErrMem db "Ошибка работы с памятью",10,13 lErrMem equ $-sErrMem  _data ends  ;Сегмент стека _stack segment stack 'STACK'  dw 100h dup(?) _stack ends  zzz segment zzz ends  end main 

Оверлей do.asm (открывает файл)
Код :
;Дочерняя программа do.asm  .286  assume cs:_code, ds:_data, ss:_stack _code segment 'code' main proc  mov ax, _data  mov ds, ax   mov ah, 40h  mov bx, 1  mov cx, lStart ;Начало оверлея  mov dx, offset sStart  int 21h   mov ah, 3dh  ;Открытие файла  mov al, 0  ;для чтения  mov dx, offset fname  int 21h  jnc ok   mov ah, 40h  mov bx, 1  mov cx, lErrOp ;Ошибка открытия файла  mov dx, offset sErrOp  int 21h   xor ax, ax  ;возврящаем 0, как ошибку  jmp finend ok:  push ax  mov ah, 40h  mov bx, 1  mov cx, lOk  ;файл открылся  mov dx, offset sOk  int 21h  pop ax  ;возвращаем handle finend:  retf main endp _code ends  ;Сегмент данных _data segment 'data' sStart db 'Дочерний процесс запущен',10,13 lStart equ $-sStart sErrOp db 'Фаил не открылся !',10,13 lErrOp equ $-sErrOp sOk db 'Фаил открылся',10,13 lOk equ $-sOk fname db 'FILE.txt',0 _data ends  ;Сегмент стека _stack segment stack 'Stack'  dw 100h dup(?) _stack ends  end main 

Оверлей close.asm (закрывает файл)
Код :
;Дочерняя программа close.asm   assume cs:_code, ds:_data, ss:_stack _code segment 'code' main proc  push ax  ;handle   mov ax, _data  mov ds, ax   mov ah, 40h  ;Вывод первого  mov bx, 1  ;сообщения  mov cx, lStart  mov dx, offset sStart  int 21h   pop bx  ;handle файла  mov ah, 3eh  ;Закрываем файл  int 21h  jnc ok   mov ah, 40h  mov bx, 1  mov cx, lErrCl ;ошибка закрытия файла  mov dx, offset sErrCl  int 21h  xor ax, ax  ;пометим ошибку  jmp finend ok:  mov ah, 40h  mov bx, 1  mov cx, lOk  ;файл закрылся  mov dx, offset sOk  int 21h  mov ax, 1  ;все ок finend:  retf main endp _code ends  ;Сегмент данных _data segment 'data' sStart db 'Второй дочерний процесс запущен',10,13 lStart equ $-sStart sErrCl db 'Фаил не закрылся !',10,13 lErrCl equ $-sErrCl sOk db 'Фаил закрылся',10,13 lOk equ $-sOk _data ends  ;Сегмент стека _stack segment stack 'Stack'  dw 100h dup(?) _stack ends  end main 


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 29.10.2011, 21:15

5
нет комментария
-----
Дата оценки: 29.10.2011, 23:32

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


 
 
Комментировать выпуск
     В избранное

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    23 октября 2011, 21:34
RFpro.ru: Ассемблер? Это просто! Учимся программировать    21 октября 2011, 21:33
RFpro.ru: Ассемблер? Это просто! Учимся программировать    16 октября 2011, 02:03

Все выпуски рассылки

3 ноября 2011 отмечают:
День инженерных войск Украины
День ракетных войск и артиллерии Украины
День провозглашения независимости Панамы
День культуры в Японии

Именины: Аза, Захар, Иван, Иларион, Константин, Максимилиан, Николай, Павел, Пелагея, Федор, Яков, Александр, Алексей, Анатолий, Аркадий, Василий, Владимир, Денис, Дмитрий
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Свое дело
В данной группе будут публиковаться идеи для открытия собственного дела. Сайт группы Работай сам.ru Присоединяйтесь!
Темы: 396   Участники: 10456
  Бодибилдинг, Пауэрлифтинг! Группа посвящена полной информации по правильной и быстрой накачке мышц!
Группа посвящена полной информации по правильной и быстрой накачке мышц!!Упражнения для мышц написаны на простом человеческом языке без лишней информаци...
Темы: 170   Участники: 1719
  Уникальные новости от Свободного Журналиста
Я - свободный журналист. Моя работа - дать Вам пищу для ума. Испытываете инфо-голод? Вкусности здесь! Цель создания группы: публикация качественной, инт...
Темы: 62   Участники: 741
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

Комментариев нет:

Отправить комментарий