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

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Egor668
Сообщения: 1
Зарегистрирован: 22 дек 2016, 03:36

22 дек 2016, 03:48

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

27 дек 2016, 12:22

1) Не "Ассамблер", а "Ассемблер". Уделяйте синтаксису больше внимания.
2) На чистом Ассемблере нет TComboBox, это нужно смешивать с Си++.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

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
}
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

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
}
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

28 дек 2016, 09:12

Можно просто imul dword ptr 35
It's a long way to the top if you wanna rock'n'roll
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

28 дек 2016, 09:33

imul dword ptr 35 - вот эта команда вызывает ошибку:
Invalid combination of opcode and operands.
Я вообще хотел спросить как запустить команду fmul - умножение средствами математического сопроцессора.
Что-то она совсем работать не хочет. Кто-нибудь может привести рабочий код программы с этой командой.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

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
It's a long way to the top if you wanna rock'n'roll
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

28 дек 2016, 11:18

Спасибо за ответ. Как fmov теперь завести?
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

28 дек 2016, 11:54

Нет команды FMOV в IA-32
Для загрузки данных в стек используются FILD, FLD, FLD1, FLDPI и другие...
It's a long way to the top if you wanna rock'n'roll
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

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)
}
Ответить