Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Минимизация логических операций
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
toweroff
То ли поздно уже... никак не соображу. А, может, вообще компилятору отдать, но sm.gif

uint32_t a;

a = (a & 0x0FFFFFFF) | 0x80000000;

кроче говоря - буквально - одно действие возможно?







firew0rker
Невозможно, если только у процессора нет инструкции, записывающей константу в старший полубайт старшего байта. Я таких процессоров не знаю.
adnega
Цитата(firew0rker @ Jul 10 2013, 05:57) *
Невозможно, если только у процессора нет инструкции, записывающей константу в старший полубайт старшего байта. Я таких процессоров не знаю.

У Cortex-M3 есть инструкция
Цитата
BFI.W Rd, Rn, #<lsb>, #<width> Insert bit field to a register

Правда, в Rn должен быть подготовлен шаблон.
Цитата
Bit Field Insert (BFI) copies 1–31 bits (#width) from one register to any location (#lsb) in another
register. The syntax is as follows:
BFI.W <Rd>, <Rn>, <#lsb>, <#width>
For example,
LDR R0,=0x12345678
LDR R1,=0x3355AACC
BFI.W R1, R0, #8, #16 ; Insert R0[15:0] to R1[23:8]
This will give R1 = 0x335678CC.
toweroff
Цитата(adnega @ Jul 10 2013, 09:47) *
У Cortex-M3 есть инструкция

нет, это, к сожалению, ARM7

Цитата(adnega @ Jul 10 2013, 09:47) *
Правда, в Rn должен быть подготовлен шаблон.

спасибо, буду знать
правда, не очень-то мне это помогло бы. Мне нужно заменить не байт, а старшую тетраду старшего байта
Сергей Борщ
QUOTE (toweroff @ Jul 10 2013, 10:46) *
Мне нужно заменить не байт, а старшую тетраду старшего байта
Так в описании к инструкции же сказано - "битовое поле от 1 до 31 бита длиной".
toweroff
Цитата(Сергей Борщ @ Jul 10 2013, 12:52) *
Так в описании к инструкции же сказано - "битовое поле от 1 до 31 бита длиной".

точно.. невнимателен rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.