Страница 1 из 2

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

Добавлено: 22 дек 2016, 03:48
Egor668
Создайте приложение для пересчета из одной системы измерения в другую. Выбор системы измерения осуществить с помощью компонента TComboBox.
1 мм. рт. ст. = 133Па
1дин/см2 = 0,1Па
1 физ. Атм = 1,013 × 105 Па
1 кгс × м2 = 9,81 Па

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

Добавлено: 27 дек 2016, 12:22
Слива
1) Не "Ассамблер", а "Ассемблер". Уделяйте синтаксису больше внимания.
2) На чистом Ассемблере нет TComboBox, это нужно смешивать с Си++.

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

Добавлено: 27 дек 2016, 14:26
Слива
Сделал для первой строки: 1 мм. рт. ст. = 133Па.

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

asm{
//Перевод из мм.рт.ст. в Паскали(умножение на 133)
mov eax, 133  //коэффициент перевода
mov ebx, 15
mul ebx
//Перевод из Паскалей в мм.рт.ст.(деление на 133)
mov eax,2000
mov ebx,133
div ebx
}

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

Добавлено: 27 дек 2016, 14:50
Слива
Сделал для второй строки:1д/см2 = 0,1Па
asm{
//Перевод из 1д/см2 в Паскали
mov eax, 10
mov ebx, 35
mul ebx
//Перевод из Паскалей в 1д/см2
mov eax, 2000
mov ebx, 10
div ebx
}

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

Добавлено: 28 дек 2016, 09:12
somewhere
Можно просто imul dword ptr 35

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

Добавлено: 28 дек 2016, 09:33
Слива
imul dword ptr 35 - вот эта команда вызывает ошибку:
Invalid combination of opcode and operands.
Я вообще хотел спросить как запустить команду fmul - умножение средствами математического сопроцессора.
Что-то она совсем работать не хочет. Кто-нибудь может привести рабочий код программы с этой командой.

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

Добавлено: 28 дек 2016, 10:14
somewhere
Слива писал(а):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

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

Добавлено: 28 дек 2016, 11:18
Слива
Спасибо за ответ. Как fmov теперь завести?

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

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

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)
}