Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - [решено] Помогите разобраться с программой на ассемблере

Ответить
Настройки темы
Assm - [решено] Помогите разобраться с программой на ассемблере

Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток. Есть написанная программа, направленная на возведение числа в степень с использованием возможностей математического сопроцессора. Код взят с какой-то методички. Вопрос заключается в том, почему она корректно не запускается, и что можно сделать, чтобы она всё-таки запустилась? Компилировал через Tasm и линковал с помощью Tlink с ключами /x /3. Код программы прикладываю. Буду благодарен всем откликнувшимся.

Цитата:
.286
.model tiny
.code
org 100h
start:
.386
finit ;
fldln2;st(0):=ln(2)
fild X;st(0):=X, st(1):=ln(2)
fyl2x;st(0):=st(1)*log2(st(0))=ln(2)*log2(x)
fimul dword ptr Y;st(0):=ln(2)*log2(x)*Y
FLDL2E;st(0):=log2(e) st(1):=ln(2)*log2(x)*Y
FMULP ST(1),ST(0);st(0):=ln(2)*log2(x)*Y*log2(e)
FLD ST(0);copy the logarithm; st(1):=st(0):=ln(2)*log2(x)*Y*log2(e)
FRNDINT;keep only the characteristic
FSUB ST(1),ST(0);keeps only the mantissa
FXCH ST(1);get the mantissa on top
F2XM1;->2^(mantissa)-1
FLD1;st(0)=1.0
FADDP ST(1),ST(0);add 1 back
;the number must now be readjusted for the characteristic of the logarithm
FSCALE;scale it with the characteristic
mov edi,offset buffer
fbstp Data_BCD ;извлечь число в коде BCD
mov ecx,9 ;в десятом байте информация о знаке числа
b2: cmp byte ptr [ecx-1+Data_BCD],0
jnz b3
loop b2 ;пропускаем незначащие (нулевые) разряды слева
b3: mov al,byte ptr [ecx-1+Data_BCD];загружаем первую значащую пару разрядов
cmp al,9 ;если в старшей тетраде 0 - пропустить старшую тетраду
ja b4
add al,30h ;младшую тетраду переводим в ASCII
stosb
dec ecx
b4: xor ax,ax ;распаковываем остальные разряды числа
mov al,byte ptr [ecx-1+Data_BCD]
shl ax,4 ;выделяем старшую и младшую тетрады
shr al,4
add ax,3030h ;переводим в ASCII-код
xchg ah,al
stosw
loop b4
a2: mov ax,3;очищаю экран
int 10h
mov ah,9; вывожу результат
mov edx,offset buffer
int 21h
mov ah,0; жду нажатия на любую клавишу
int 16h
retn; выхожу из программы
buffer db 25 dup ('$')
X dd 81
Y dd 9;81^9=22876792454961=14CE6B167F31h
Data_BCD dt 0;число в BCD-формате
end start

Отправлено: 10:40, 23-12-2013

 

Аватара для yurfed

Ветеран


Сообщения: 20133
Благодарности: 3145

Профиль | Отправить PM | Цитировать


Цитата Shenochek:
почему она корректно не запускается, и что можно сделать, чтобы она всё-таки запустилась? »
А что пишет, как ругается. Операционная система под которой запускаете, какая?

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Отправлено: 10:48, 23-12-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата yurfed:
А что пишет, как ругается. Операционная система под которой запускаете, какая? »
yurfed, Операционная система Windows XP. При линковке пишет предупреждение Warning: No stack.
Программа собирается и при её запуске выводится куча невразумительных крякозябров.

Отправлено: 10:52, 23-12-2013 | #3


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


Shenochek, простите, а чем Вы её компилируете и какой формат исполняемого файла? Данная программа должна быть построена как исполняемый файл формата "сом" и запускаться в режиме эмуляции процессора 8086. Поскольку она содержит вызовы прерываний BIOS.

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:24, 23-12-2013 | #4


Старожил


Сообщения: 283
Благодарности: 53

Профиль | Отправить PM | Цитировать


Цитата Shenochek:
Вопрос заключается в том, почему она корректно не запускается »
Цитата Shenochek:
При линковке пишет предупреждение Warning: No stack. »
потому, что компоновщик собирает *.exe файл MZ формата, который имеет структуру. А com программа это бинарная программа, код данные и стек которой находятся в одном сегменте, и загрузка его осуществляется совершенно иначе нежели .exe. "Warning: No stack." появляется потому что сегмент стека не объявлен, но для com программы объявление и ненужно т.к. уже сказал находится все в одном сегменте.

Цитата Shenochek:
Tlink с ключами /x /3 »
свитч /3 - это поддержка 32-х разрядного кода, но даже не в этом дело. Компоновщик должен собрать com файл, для этого по спецификации используется ключ /t.

Цитата Shenochek:
Операционная система Windows XP »
в хп есть порезаный DOS эмулятор, Debug называется. Отладчик это по факту.

Последний раз редактировалось Efir, 23-12-2013 в 19:26.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:08, 23-12-2013 | #5


Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата AMDBulldozer:
простите, а чем Вы её компилируете и какой формат исполняемого файла? »
AMDBulldozer, По малоопытности пытался скомпилировать в exe.
Цитата Efir:
Компоновщик должен собрать com файл, для этого по спецификации используется ключ /t. »
Efir, Если вас не затруднит, то можете более подробно объяснить как это сделать, когда я попытался по вашему совету использовать ключ /t (tlink /t 2.obj) для сбора и нажал Enter, в командной строке просто появился мигающий курсор и ничего больше не происходит уже минут как 10.

Отправлено: 20:07, 23-12-2013 | #6


Старожил


Сообщения: 283
Благодарности: 53

Профиль | Отправить PM | Цитировать


Shenochek, нет ничего особо подробного, компилируете в объектник, компонуете в com. Для ассемблера никаких ключей кроме имени исходника ненадо, раз у вас уже собирался объектник. Для компоновщика строка выглядеть должна как и показали.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:21, 23-12-2013 | #7


Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Efir:
нет ничего особо подробного, компилируете в объектник, компонуете в com. Для ассемблера никаких ключей кроме имени исходника ненадо, раз у вас уже собирался объектник. Для компоновщика строка выглядеть должна как и показали. »
Efir, Пересобрал объектник без ключей.
Цитата Efir:
Для компоновщика строка выглядеть должна как и показали. »
Из пересобранного объектника выполнил компоновку, так же как писал выше в сообщении. Теперь никакого простоя нет, а просто выдаётся сообщение: Fatal: 32-bit record encountered in module C:\ASM\2.ASM. Как быть дальше?
Я заранее прошу прощения за свою назойливость, просто позарез надо разобраться с этой программой. А, так как в ассемблере я далеко не профи, то обращаюсь за помощью к более опытным форумчанам. Даже про то, что ассемблер com программы делает впервые от вас узнал. Век живи, век учись!

Отправлено: 20:37, 23-12-2013 | #8


Старожил


Сообщения: 283
Благодарности: 53

Профиль | Отправить PM | Цитировать


Цитата Shenochek:
А, так как в ассемблере я далеко не профи, то обращаюсь за помощью к более опытным форумчанам »
я на ассемблере кроме хеллоуворлд ничего не писал, а турбоассемблер вообще впервые в глаза вижу, просто они с макроассемблером очень похожи.

Цитата Shenochek:
Fatal: 32-bit record encountered in module C:\ASM\2.ASM »
верните ключ /3. В код не глянул, там оперируют 32-х разрядными регистрами, а точнее 32-х разрядными типами.

Последний раз редактировалось Efir, 23-12-2013 в 21:06.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:56, 23-12-2013 | #9


Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Efir:
верните ключ /3. В код не глянул, там оперируют 32-х разрядными регистрами, а точнее 32-х разрядными типами. »
Efir, Спасибо вам огромное, добавил ключ и всё получилось, программа откомпановалась

Отправлено: 21:09, 23-12-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - [решено] Помогите разобраться с программой на ассемблере

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите, плз, разобраться с программой на shell sade Программирование в *nix 1 26-05-2010 23:47
Помогите с программой на shell pogo Программирование в *nix 4 21-05-2010 12:24
Assm - Помогите решить задание на ассемблере Wild_cat Программирование и базы данных 3 10-03-2009 09:49
программа на Ассемблере himik Программирование и базы данных 9 22-11-2003 04:40
Помгите разобраться с программой TarasBulba Программирование и базы данных 1 30-08-2002 22:26




 
Переход