Написать программу на языке Ассамблер

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Написать программу на языке Ассамблер

Re: Написать программу на языке Ассамблер

somewhere » 28 дек 2016, 15:39

Да, я подумал, что это два разных независимых куска кода

Re: Написать программу на языке Ассамблер

Слива » 28 дек 2016, 15:09

Комментарий к сообщению выше: доработка заключается в том, что в операциях умножения и деления участвуют регистры edx:eax. Описание смотрите в описании команд. somewhere, мне по почте пришло сообщение по этой ошибке, но здесь я его не обнаружил - стерли?

Re: Написать программу на языке Ассамблер

Слива » 28 дек 2016, 15:04

А, блин, извиняюсь, прокосячил. Первую формулу нужно переделать вот так:
asm{
//Перевод из Паскалей в мм.рт.ст.(Умножение на 133)
mov eax, 133 //коэффициент перевода
mov ebx, 0x6D2693E
mul ebx
//результат в паре edx:eax
//Перевод из мм.рт.ст. в Паскали(деление на 133)
mov eax, 0x8B50AD8E //делимое
mov edx, 0x3
mov ebx, 133
div ebx //делитель
//Частное помещается в eax, а остаток — в edx.
}
2 формула будет аналогично, только коэффициент слева.

Re: Написать программу на языке Ассамблер

Слива » 28 дек 2016, 14:13

Ну закинь туда(в конец) команду finit, да и все.

Re: Написать программу на языке Ассамблер

somewhere » 28 дек 2016, 13:46

Стек FPU не освобождается, это грубая ошибка

Re: Написать программу на языке Ассамблер

Слива » 28 дек 2016, 13:14

Для 4 строки будет тоже самое, только вместо К подставляй К2.

Re: Написать программу на языке Ассамблер

Слива » 28 дек 2016, 13:14

Сделал для 3 строки(пишу на С++Builder 6):
float K = 1.013e5, K2 = 9.81, Pa = 15, Fa = 1519500;
asm{
//Перевод из Паскалей в Физ.Атм.
//(Умножение на К = 1.013e5)
finit
fld Pa
fld K
fmul st(0), st(1)
//Перевод из Физ.Атм. в Паскали
//(Деление на К = 1.013e5)
finit
fld K
fld Fa
fdiv st(0), st(1)
}

Re: Написать программу на языке Ассамблер

somewhere » 28 дек 2016, 11:54

Нет команды FMOV в IA-32
Для загрузки данных в стек используются FILD, FLD, FLD1, FLDPI и другие...

Re: Написать программу на языке Ассамблер

Слива » 28 дек 2016, 11:18

Спасибо за ответ. Как fmov теперь завести?

Re: Написать программу на языке Ассамблер

somewhere » 28 дек 2016, 10:14

Слива писал(а):imul dword ptr 35 - вот эта команда вызывает ошибку:
Invalid combination of opcode and operands.
Это потому что инструкция imul imm32 введена на современных процессорах и компилятор ее не знает. Не помню с какого поколения, но кажется ее ввели начиная с Pentium 4
Я вообще хотел спросить как запустить команду fmul - умножение средствами математического сопроцессора.
Что-то она совсем работать не хочет. Кто-нибудь может привести рабочий код программы с этой командой.

Код: Выделить всё

const1_1 dd 10.0
const1_2 dd 35.0
result1 dd ?
const2_1 dd 10
const2_2 dd 35
result2 dd ?
....
fld const1_1
fmul const1_2
fstp result1
fild const2_1
fimul const2_2
fistp result2

Вернуться к началу