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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2023, 22:24   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Первый байт word

Вопрос такой: есть ли какой-то прямой доступ к первому байту переменной word?

То есть, ко второму байту есть простой доступ:
Код:
byte(w)
А есть ли какой-то прямой доступ к второму байту?

Я пользуюсь пока вот такой вот функцией. Но местами мне кажется, что это - костыль... Существует ли какой-то прямой доступ?
Код:
Function FirsByteFromWord(const Word1:Word):byte; register
asm
  shr ax, 8
end;
Kronos913 вне форума Ответить с цитированием
Старый 21.09.2023, 22:52   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Есть же Hi и Lo
p51x вне форума Ответить с цитированием
Старый 22.09.2023, 12:50   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Это функции, или это команды для компилятора, к какой ячейке памяти обращаться?
Kronos913 вне форума Ответить с цитированием
Старый 22.09.2023, 18:53   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Если посмотреть дизассемблер, то Hi превращается в тот же "shr reg, 8". Если гарантировать размещение word в регистрах AX, CX, DX или BX, то к старшему байту можно обращаться через регистры AH, CH, DH или BH. Но вряд ли на этом можно получить какой-то заметный выигрыш.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.09.2023, 02:10   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Это функции, или это команды для компилятора, к какой ячейке памяти обращаться?
А какая вам разница?
northener вне форума Ответить с цитированием
Старый 23.09.2023, 12:15   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Вот пример через record:
Код:
type TWord = record
  case boolean of
  true: (w: word);
  false: (l, h: byte);
end;
var
  a: TWord;
begin
  a.w := 37450;
  writeln('a = ', a.w);
  writeln('hi(a) = ', a.h, '; lo(a) = ', a.l);
end.
Можно обращаться к переменной или как к целому word, или к половинкам как к байтам.
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си - Сделал указатель на первый байт массива, сравниваю переменную i, которая равна одному байту, с количеством байтов и обращаюсь к каждому байту в массиве, но это не работает. Roberttt Помощь студентам 4 12.07.2021 13:54
[РЕШЕНО] Первый байт WideChar. Артист Общие вопросы Delphi 0 14.10.2017 11:09
Как получить указатель на первый байт битового образа? Don Karleone Общие вопросы Delphi 2 05.05.2012 09:12
Почему первый байт пропускает? FantomasRUS Общие вопросы Delphi 2 12.05.2010 21:36