Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 18:17   #1
Livores
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 10
Восклицание Выкидывает из ЕХЕ файла

Доброго времени суток =)

Я столкнулся с такой проблемой, что при запуске моей программы (*.ехе) она открывается и моментально закрывается, хотя не должна (в конец кода вставил mov ah, 01h || int 21h).

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

НО если из моей программы убрать одну строчку с делением (div bx), то при нажатии на ехе программа сразу не вылетает и ждет нажатия любой клавиши перед закрытием. Правда без деления ответ естественно выходит не тот.

Перевожу число 1234h в четверичную систему делением 1234h на 4 и записывая в память остаток.
Код:
TITLE bar
.Model Small
.STACK 100h
.Data   
a db 8 dup(?)
.Code
begin:
	mov	ax, @data
	mov	ds, ax	

	mov	ax, 1234h
	mov	bx, 4d

	lea	si, a
	add	si, 8d
	mov	cx, 8d
delenie:	
	dec 	si
	div	bx  ; Вот это горестная строчка
	mov	[si], dl
	loop	delenie

	mov	cx, 8d
	mov	ah, 02h
vivodchis:
	mov	dl, [si]
	add	dl, 30h
	int	21h
	inc	si
	loop 	vivodchis

        mov 	ah, 01h
	int 	21h

    mov ax, 4c00h  
    int 21h        
END begin

В чем проблема? Вроде же все верно, да и в турбо дебагере работает.
Livores вне форума Ответить с цитированием
Старый 25.05.2010, 20:23   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а вы запустите свой EXE из командной строки (Пуск - Программы - Стандартные - Командная Строка)...

и увидете, что программа (скомпилированная, кстати TASM 1.0 + TLINK 2.0 ) выдаёт ошибку:
Цитата:
Код:
C:\TP\PAS\asm>S5.EXE

Переполнение деления
p.s. А под турбодебаггером действительно отработало без ошибок.


_____________
Добавлено.


попробуйте такой код:

Код:
begin:
        mov     ax,@data
	mov	ax, @data
	mov	ds, ax	

	mov	ax, 1234h

	lea	si, a
	add	si, 8d
	mov	cx, 8d
delenie:	
	mov	bx, 4d
	cwd
	dec 	si
	div	bx  
	mov	[si], dl
	loop	delenie

Последний раз редактировалось Serge_Bliznykov; 25.05.2010 в 20:44.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.05.2010, 23:11   #3
Livores
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 10
По умолчанию

вышло, спасибо))
Livores вне форума Ответить с цитированием
Старый 26.05.2010, 10:28   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Livores
команду cwd правильнее использовать с idiv bx
а перед div bx нужно использовать xor dx,dx
Mikl___ вне форума Ответить с цитированием
Старый 26.05.2010, 12:39   #5
Livores
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 10
По умолчанию

спасибо, буду знать))
Livores вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как уменьшить размер .ехе файла? D7 dx+ Общие вопросы Delphi 28 16.03.2012 20:38
Иконка скомпилированного ехе-файла Aries Паскаль, Turbo Pascal, PascalABC.NET 0 27.04.2010 21:06
как поменять иконку своего ехе файла Skalik Общие вопросы .NET 4 22.12.2007 17:51
Код ехе файла Micha Общие вопросы Delphi 4 09.10.2007 18:06