Преобразование BIN -->BCD

а кто их писал? вот то-то…вот к примеру появилось у меня как-то желание мир осчастливить, написать “Эта таинственная Кундалини”, а потом одумался, если не знает кто-то ему и не нужно знать, а кто знает то и так не нужно…
Вывод: “собрать все книги…да и сжечь”! )))

Да, в Си можно делать Асм вставки? (на Си можно делать все!)
А есть ли аналогичная возможность у Асм? (делать Си-вставки)

Спойлер

(с какой стороны ни зайди - всегда преимущества у Си перед Асм)

4 лайка

Я больше скажу. На языке следующего поколения - на Rust, тоже сохранена возможность ассемблерных вставок.
Цель этого проста. Любой язык, предназначенный (в числе прочего) для системного программирования (в настоящее время их два с половиной главных: С, С++ и Rust) должен иметь возможность точного управления периферией. Исключительно для быстроты внедрения новых аппаратных возможностей. Именно как прослойку между абстракциями языка и НОВЫМ железом. Внедряя хитрый таймер (к примеру), не обязательно переделывать компилятор целиком или писать модуль на голом ассемблере, а достаточно уточнить обращения к регистрам настройки, написав остальное на читаемом языке.
Такой подход сохраняет относительно удобное сопровождение кода, не препятствуя внедрению нового железа.

1 лайк

Совершенно верно.
Даже простой NOP записывается вставкой на асме.

И чо? (С)

1 лайк

Что же ты как муха- нафлудил и убежал. Где скомпилированный хекс?
Давай вместе посмотрим что там получается.

Есть ещё порох в пороховницах!))))

1 лайк

Накину по наводке детсимена на ассемблерную колибриос на затихающий вентилятор:

Второй большой работой, все ещё незавершённой, было преодоление наследства «тяжелого финского прошлого». Во-первых, в коде Менует не использовались символьные имена переменных. В ранних ревизиях Колибри приходилось продираться через

mov eax,[0xFE00]
shr eax,1
mov [0xFB0A],ax
mov eax,[0xFE04]
shr eax,1
mov [0xFB0C],ax

или

mov edi, [0x3004]; the last process (number)
movzx esi, word [0xC400 + edi * 2]
shl esi, 5
add esi, window_data

Во-вторых, «маленькое ассемблерное ядро» жрало память в совершенно диких количествах. Для байтовой переменной было типичным выделение килобайта, для буфера десятков килобайт — адреса абсолютные, поэтому выравнивали на красивые круглые значения. Всё это было от бедности. Если ядро не умеет динамически выделять память, остаётся резервировать статически и с запасом.

Важна ли совместимость c аппаратными платформами или другими ОС для KolibriOS?

Колибри ассемблерная система для x86. Вряд ли есть смысл говорить о других аппаратных платформах.

Для меня знать куда сейчас смотрит указатель стека - задача ни о чём !!!
Вы видимо не поняли что я тут на форуме один из не многих, кто иногда пишет на ASM !

1 лайк

Кстати, Евгений Петрович иногда тоже пишет, когда надо чтобы на код версия компилятора не смогла повлиять, то-есть когда ЭТО ДЕЙСТВИТЕЛЬНО НЕОБХОДИМО

Как раз понял, поэтому и хочу вместе показать глупость сишного компилятора относительно проггера, который знает что ему нужно, и о чем не может догадываться компилятор.
Не понял пока только какой ассемблер он имеет ввиду- православный или встроенный в GCC.
Что не одно и то же.

Докатились…епта FASM, он имеет ввиду, полегчало? Или он не в те ОПкоды переводит?

Тупому проггеру НИЧТО НЕ ПОМОЖЕТ !

void setup () {
    Serial.begin(9600);
    Serial.println(F("Start"));
    uint16_t* current_SP = (uint16_t*)SP;
    Serial.println(*current_SP, HEX);
}

void loop() {
}




На этом вопрос вашего невежества относительно C/C++ vs ASM закрыт ???

Если uint16_t поменять на uint32_t:

Абащщи, щас он начнёт заставлять проверять быстродействия с наносекундомером, а то инструкции отличаются буквочками. Или устроит “симулятор - это не то, давай плату на КР800 паяй, докажи проигрыш” . Или за какой он там проц премии получал, что так прикипел.

Тактика ж простая, это видно - нихера самому не делать, только нудить и обгаживать чужие результаты. Вампиризм 100%.

3 лайка

Грех дедушку обманывать. Боженька накажет. В ардуиновском компиляторе временные регистры

R24-R25 а у тебя пара 30-31. В том то и дело, что если мне нужно полистать стэк, вершину стека мне нужно записать в пару индекстных регистов, чтобы потом использовать команды
LD Rxx,X-1 Х-2 и т.д. Ты похоже сообразил, где лажанулся, решил схитрить. Чем компилировал?

На картинках видно что это Proteus… Нет никакого обмана !!!

А с какого Х он использует индексные пары для временных регистров?

Он использует стандартный GCC компилятор !!!
Вам ваше тупое заблуждение о тупости компилятора очень мешает - вот главная проблема !!!

1 лайк

Покажите мне документ об этом !!!
Очередное заблуждение !

1 лайк

При Сталине такого не было. Аргумент?