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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2022, 14:34   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию Два байта в ворд

Можно ли как-то в процедуру передать два байта так, чтобы они зашли в нее как 1 word ?

Не вручную их склеить перед вызовом процедуры, а именно при вызове процедуры

Потому как в процедуру через регистры можно передать ограниченное число параметров, остальные начнут идти через стек - так вот чтобы через регистры прошли две переменные используя 1 и 2 байты регистра как разные переменные
Kronos913 вне форума Ответить с цитированием
Старый 25.08.2022, 15:01   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Нельзя. Изучайте тип вызова register. Он предполагает совершенно конкретные местоположения параметров передаваемых в процедуру. Хотя склеивая эти два значения в одно вручную вы можете передать их как один параметр, тогда будет задействован один регистр. Для склеивания можно задействовать записи
Код:
type TComplexParam = packed record
  a, b: byte;
end;

...

function GetComplexParam(aValue, bValue: Byte): TComplexParam; inline;
begin
   with Result do begin
      a := aValue; b := bValue;
   end;
end;

procedure MyProc(arg12: TComplexParam); register;
asm
...
end;

procedure OnClick(...);
begin
   MyProc(GetComplexParam(9, 100));
end;
macomics вне форума Ответить с цитированием
Старый 25.08.2022, 22:06   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Если через дополнительную функцию - можно просто вот так =))
Код:
Function TwoByteToWord(const a, b: byte):word;
asm
  mov dl, b
  mov dh, a
  mov result, dx
end;
Но мне кажется, что вызов дополнительной функции съест на себя все, что можно отыграть на уменьшении количества переменных
Kronos913 вне форума Ответить с цитированием
Старый 25.08.2022, 23:47   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Если ее сформулировать вот так вот глупо - тогда да. Для уменьшения количества манипуляций надо учитывать тип вызова и механизм ее применения.

Код:
function Parg(a, b: byte): word; register; inline;
asm
  mov ah, b
end;
macomics вне форума Ответить с цитированием
Старый 26.08.2022, 01:56   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Можно ли как-то в процедуру передать два байта так, чтобы они зашли в нее как 1 word ?

Не вручную их склеить перед вызовом процедуры, а именно при вызове процедуры
Можно. По крайней мере двумя разными способами. Либо используя тип record с case, либо используя директиву компилятора absolute
northener вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Точность до 1 байта ImmortalisNox Помощь студентам 9 09.12.2017 13:07
Отправить два байта по HID Joslen_bomon C# (си шарп) 5 20.10.2016 21:10
Xor байта с qword Dartes Помощь студентам 9 08.06.2013 09:09
шифрование байта Oleg1988 Общие вопросы C/C++ 7 31.08.2012 19:41
объеденить 2 байта NEoMASTERR Общие вопросы Delphi 1 01.05.2012 12:33