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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2010, 19:41   #1
vlad_zasranec
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 11
По умолчанию Работа с сопроцессором асм.

Столкнулся с трудностями в работе с сопроцессором в ассемблере. Трудностей несколько: не нашёл как в стек без создания отдельной переменной записать цифру. Не знаю почему с данными типа float выходит неправильное отображение в регистрах без указания размера. НЕ МОГУ ПОСЧИТАТЬ ГРЁБАННЫЙ ДЕСЯТИЧНЫЙ ЛОГАРИФМ.
Сейчас прошу помощи в решении задачи с этим самым логарифмом.
вот моя наработка:
Код:
format pe console
entry start
Include 'win32axp.inc'
section '.text' code readable executable
start:
cinvoke printf,t0
cinvoke printf,cr
cinvoke scanf,f4,a
cinvoke scanf,f4,c
cinvoke scanf,f4,d
finit
fld dword [c]
fmul dword [two]
fisub dword [a]
fist dword [x]
fild dword [d]
fisub dword [onehun]
fist dword [d]
fild dword [a]
fidiv dword [four]
fiadd dword [c]
fist dword [y]
invoke Exitprocess, 0
ret
section '.data' data readable writable
f4 dd "%d",0
a dd ?
c dd ?
d dd ?
x dd ?
y dd ?
onehun dd 152
two dd 2
four dd 4
cr db 13,10,0
t0 db "BBeguTe A,C,D",13,10,0
t1 db "Pe3yJlTaT ypaBHeHu9l",13,10,0

section '.idata' import data readable writeable
library msvcrt, 'msvcrt.dll', kernel32, 'kernel32.dll'
import msvcrt, printf, 'printf', getchar,'getchar', scanf, 'scanf'
import kernel32, Exitprocess, 'ExitProcess'
vlad_zasranec вне форума Ответить с цитированием
Старый 19.12.2010, 20:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

М.м.м не столь силен в Асме, но по-моему выглядеть оно должно так:
Код:
format PE console
entry start

include 'D:\fasmw16726\INCLUDE\win32a.inc'

section '.code' code readable executable



start:

fld [c]
push 2
 fild dword [esp]
  add esp,4
fmul st0,st1
fld [a]
fsub st1,st0
fxch
FYL2X
fld [d]
fadd st0,st1
push 152
 fild dword [esp]
  add esp,4
fsub st1,st0
fxch
fld [a]
push 4
 fild dword [esp]
  add esp,4
fdiv st1,st0
fxch
fld [c]
fadd st0,st1
fdiv st2,st0

ret


 section '.data' data readable writeable
c dt 5.0;
a dt 3.4
d dt 2.0
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.12.2010, 20:51   #3
vlad_zasranec
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
include 'D:\fasmw16726\INCLUDE\win32a.inc'
зойчем это?
Да, спасибо, всё (наверное) работает
vlad_zasranec вне форума Ответить с цитированием
Старый 19.12.2010, 21:51   #4
vlad_zasranec
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 11
По умолчанию

Код:
format pe console
entry start
Include 'win32axp.inc'
section '.text' code readable executable
start:
cinvoke printf,t0
cinvoke printf,cr
cinvoke scanf,f4,a
cinvoke scanf,f4,c
cinvoke scanf,f4,d
finit
fld [c]
push 2
fild dword [esp]
add esp,4
fmul st0,st1
fld [a]
fsub st1,st0
fxch
FYL2X
fld [d]
fadd st0,st1
push 152
fild dword [esp]
add esp,4
fsub st1,st0
fxch
fld [a]
push 4
fild dword [esp]
add esp,4
fdiv st1,st0
fxch
fld [c]
fadd st0,st1
fdiv st2,st0
fxch st2
fist dword [x]
cinvoke printf,cr
cinvoke printf,t1
cinvoke printf,f4,[x]
invoke Exitprocess, 0
ret
section '.data' data readable writable
f4 dd "%d",0
a dd ?
c dd ?
d dd ?
x dd ?
cr db 13,10,0
t0 db "BBeguTe A,C,D",13,10,0
t1 db "Pe3yJlbTaT ypaBHeHu9l",13,10,0

section '.idata' import data readable writeable
library msvcrt, 'msvcrt.dll', kernel32, 'kernel32.dll'
import msvcrt, printf, 'printf', getchar,'getchar', scanf, 'scanf'
import kernel32, Exitprocess, 'ExitProcess'
Никак не получается вывести результат на экран. До шага fist dword [x] (пробовал по-разному: fst,fist, указывал размер, не указывал, разве что pop не пробовал) всё идёт нормально. После, в отладчике показывает, что туда возвращает какое-то странное значение, и явно не из вершины стека (?сопроцессора).

Помогите пожалуйста разобратся
vlad_zasranec вне форума Ответить с цитированием
Старый 19.12.2010, 22:19   #5
vlad_zasranec
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 11
По умолчанию

помогите пожалуйста!
vlad_zasranec вне форума Ответить с цитированием
Старый 20.12.2010, 07:46   #6
vlad_zasranec
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 11
По умолчанию

вот еще не могу разобраться с массивами. Не могу определить какой-то элемент посредством переменная(регистр-счётчик) в сопроцессоре. Пишет ошибку. Вообще надо найти произведение кубов всех отрицательных элементов массива. Вот моя наработка:
Код:
format pe console
entry start
Include 'D:\fasmw168\INCLUDE\win32axp.inc'
section '.text' code readable executable
start:
go:
finit
mov cx,15
mov si,0
push 0
fild mas[si]
fcom
jb minus
ja plus
fwait
minus:
mov eax,mas[si]
mul eax
mov [temp],eax

plus:
inc si
cmp cx,si
jne go
je end
end:
invoke Exitprocess, 0
ret
section '.data' data readable writable
f4 dd "%d",0
mas dd -5,1,10,-9,-50,-65,-1,5,36,94,58,-54,-3,7,1
temp dd ?
temp2 dd ?
i db 0
cr db 13,10,0
t0 db "BBeguTe ",13,10,0
t1 db "Pe3yJlbTaT ",13,10,0
section '.idata' import data readable writeable
library msvcrt, 'msvcrt.dll', kernel32, 'kernel32.dll'
import msvcrt, printf, 'printf', getchar,'getchar', scanf, 'scanf'
import kernel32, Exitprocess, 'ExitProcess'
vlad_zasranec вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из асм в с++ Flay Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 18.09.2010 21:05
Нужен программист С, АСМ SGkod Фриланс 1 19.05.2010 19:29
Требуеться АСМ программист worldhero Фриланс 2 28.10.2009 07:59
Перевод из HEX в АСМ PaperPlane Софт 12 30.04.2009 03:05
Двоичная система в АСМ.. smileman Помощь студентам 3 05.11.2008 13:40