Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
programmisto
116 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
1

Как завершить com программу без прерываний.

18.04.2012, 15:27. Просмотров 2657. Ответов 17
Метки нет (Все метки)

Подскажите, пожалуйста, как завершить без прерывания программу com (и без ret).
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2012, 15:27
Ответы с готовыми решениями:

Как написать ввод/вывод без прерываний?
Код на ассемблере встроенном в турбо паскаль. В массиве из 10 целых чисел сосчитать сумму чётных и...

Как правильно завершить поток без исключения ThreadInterruptedException?
В общем, есть отдельный проект dll-ки с компонентом, наследующим MonthCalendar. В нем дополнительно...

Debian: Как завершить работу без сохранения сессии?
Здравствуйте! При запуске системы Debian 10 x64 (xfce) и входе в учётку user на рабочем столе...

Видеоконтроллер без прерываний, да и вообще без процессора
Только два таймера, spi, dma и 40 строчек программы инициализации ) Полный размер кадра - 288...

17
Mikl___
Ушел с форума
Автор FAQ
13768 / 6832 / 749
Регистрация: 11.11.2010
Сообщений: 12,265
18.04.2012, 15:29 2
programmisto, сделай деление на ноль и система сама прихлопнет твою программу
1
programmisto
116 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
18.04.2012, 15:31  [ТС] 3
Вроде при делении на 0 прерывание вызывается, а мне необходимо, чтобы без прерываний.
0
zzzyyyxxx
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 704
18.04.2012, 15:38 4
ну вообще-то, завершение программы предполагает передачу управления ОС, поэтому тут для .сom проги ret и требуется, но если тебе нужно обойтись без неё, то вот её эквивалент:
Assembler
1
2
  pop ax
  jmp ax
0
Charles Kludge
Клюг
7658 / 3173 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
18.04.2012, 15:38 5
Ну поставь вместо int 20h ret.
0
Mikl___
Ушел с форума
Автор FAQ
13768 / 6832 / 749
Регистрация: 11.11.2010
Сообщений: 12,265
18.04.2012, 15:47 6
programmisto, ну тогда выключением питания, если так интересно, возьми отладчик и зайди внутрь прерывания int 20h или внутрь 0-ой или 4Ch функции 21h прерывания, вообще программирование на ассемблере "наскоком" не взять — читай книжки, пиши программы, эксперементируй

Charles Kludge, а какой команде в real mode соответствует опкод 0C4h,0C4h?

zzzyyyxxx, проще mov ax,0/jmp ax в случае деления на ноль int 0 вызывается "неявно", также как и для варианта zzzyyyxxx будет неявно вызвано int 20h
0
programmisto
116 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
18.04.2012, 15:51  [ТС] 7
Мне как раз и нужно, чтобы по завершению программы компьютер выключался. Как это сделать?

Добавлено через 2 минуты
Прыжки к нулевому адресу не подходят, потому что они переходят на команду int 20h (в отладчике смотрел).

А насчет того, чтобы вскрыть прерывание, я пробовал для int 16h и ничего не понял. Может быть в этом пойму.
0
Mikl___
Ушел с форума
Автор FAQ
13768 / 6832 / 749
Регистрация: 11.11.2010
Сообщений: 12,265
18.04.2012, 15:51 8
programmisto, пиши прямо, здесь экстрасенсы хреновые, Виндовз не даст ком-программе выключить питание
0
AFP
649 / 336 / 37
Регистрация: 04.04.2012
Сообщений: 887
18.04.2012, 15:58 9
Если в досе то:
Assembler
1
2
3
4
dw_jmp   dw  0
         dw  0ffffh
;-------------------------------
jmp dword ptr ds:[dw_jmp]
0
Mikl___
Ушел с форума
Автор FAQ
13768 / 6832 / 749
Регистрация: 11.11.2010
Сообщений: 12,265
18.04.2012, 16:00 10
AFP, это ресет и то в "чистом ДОСе", а под WinNT/ХР ничего не произойдет
0
zzzyyyxxx
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 704
18.04.2012, 16:01 11
Цитата Сообщение от Mikl___ Посмотреть сообщение
проще mov ax,0/jmp ax
чем же?
Assembler
1
2
3
1) pop ax    - 1байт
2) xor ax,ax - 2байта
3) mov ax,0 - 3байта
да и 1, короче, для тех кто писать не любит...

да и вообще programmisto, следует указать, для чего оно тебе..(ну теперь уже понятно, что для ОС)
0
Charles Kludge
Клюг
7658 / 3173 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
18.04.2012, 16:04 12
Цитата Сообщение от Mikl___
а какой команде в real mode
http://www.ragestorm.net/tutorial?id=27
0
Mikl___
Ушел с форума
Автор FAQ
13768 / 6832 / 749
Регистрация: 11.11.2010
Сообщений: 12,265
18.04.2012, 16:04 13
zzzyyyxxx, а почему int 0 в самопальной ОСи нельзя использовать? Это же немаскируемое прерывание - уровень аппаратуры
При старте программы jmp AX, AX всё равно ноль содержит
0
zzzyyyxxx
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 704
18.04.2012, 16:07 14

Не по теме:

Цитата Сообщение от Mikl___ Посмотреть сообщение
zzzyyyxxx, а почему int 0 в самопальной ОСи нельзя использовать? Это же немаскируемое прерывание - уровень аппаратуры
я этими делами не интересовался, так что извиняй, что там можно, а что нет, не знаю..



Цитата Сообщение от Mikl___ Посмотреть сообщение
При старте программы jmp AX, AX всё равно ноль содержит
так а если будут какие-то манипуляции, тогда что? просто pop ax - более универсальный вариант, как ни крути...
0
Mikl___
Ушел с форума
Автор FAQ
13768 / 6832 / 749
Регистрация: 11.11.2010
Сообщений: 12,265
18.04.2012, 16:08 15
Charles Kludge, спасибо, но всё равно не понятно - недокументированная инструкция, попытаюсь сам ее разложить
0
AFP
649 / 336 / 37
Регистрация: 04.04.2012
Сообщений: 887
18.04.2012, 16:13 16
Вот поэтому я и забросил АСМ. Винда развернуться не дает.
0
Charles Kludge
18.04.2012, 16:24
  #17

Не по теме:

Цитата Сообщение от AFP
Винда развернуться не дает.
А кто мешает работать в ДОСе? Кстати, нарыть старый комп = пиво+самовывоз.

0
programmisto
116 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
19.04.2012, 06:23  [ТС] 18
А мне вообще на "голое" железо.

Добавлено через 2 минуты
Я пишу ось и мне нужно, чтобы компьютер выключался при выходе. Int 20h смотрел, ничего не понял.
0
19.04.2012, 06:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2012, 06:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как завершить поток принудительно без смс и регистрации и гарантировать выполнение finally?
Привет, в C# я бы сделал так Thr.Abort(); Thr.Join();// дабы удостовериться о выходе и при...

Как завершить программу из функции?
предположим я объявил функцию void function(char* s) { \\код \\а тут мне надо завершить прогу....

Как завершить программу ПОЛНОСТЬЮ?
Как можно из процедуры закрыть программу ПОЛНОСТЬЮ? С exit; не работает, т.к. exit; завершает...

Как завершить программу из блока if?
Доброго времени суток, вопрос следующий: Каким образом завершить программу в исключении if, если я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.