Nano Hash - криптовалюты, майнинг, программирование

Как правильно завершить сборку?

У меня проблема с правильным завершением 16-битной программы DOS, написанной на ассемблере. Вот часть кода:

.386P
.model flat

stack_s segment stack 'stack' 
        db 256 dup(0)
stack_s ends

data segment use16
data ends

code segment 'code' use16
assume cs:code, ds:data

main proc
    mov ax, data
    mov ds, ax

    iretd
main endp

code ends
end main

Проблема в том, что программа завершается некорректно. DOSBox просто зависает. Я пытался понять, что происходит с помощью отладчика, и мне кажется, что программа просто заходит в бесконечный цикл после выполнения iretd. Почему так происходит? Как правильно завершить работу 16-битного приложения DOS?

11.01.2012

  • Попробуйте изменить iretd на ret 11.01.2012
  • Я уже пробовал это делать. Не работает. 11.01.2012
  • Как насчет mov ax, 4c00h, за которым следует int 21h (это рекомендуемый способ завершить работу приложения DOS) 11.01.2012
  • Для завершения программы DOS требуется системный вызов. Int 21h с ah = 4Ch и al = кодом выхода. 11.01.2012
  • Ну, я попытался написать mov ah, 4ch и int 21h, но ничего не изменилось. 11.01.2012
  • Извините, я только что попытался отследить код. Отладчик сообщает, что программа завершена. Проблема в том, что при попытке запустить саму программу dosbox зависает, как и раньше. Может проблема в dosbox? 11.01.2012
  • @Farrel: тебе удалось это понять? У меня точно такая же проблема. 24.09.2012

Ответы:


1

Самый правильный способ завершить программу DOS - использовать функцию «завершить» DOS; с последующими адекватными комментариями, чтобы люди понимали, что эта функция не вернется.

Например:

pleaseKillMeNow:
    mov ah,0x4C          ;DOS "terminate" function
    int 0x21
23.11.2012

2

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

Если вы хотите выйти с уровнем ошибки 0:

mov ax,0x4c00
int 0x21

Если вы хотите выйти с уровнем ошибки 1:

mov ax,0x4c01
int 0x21
01.07.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..