В llvm есть такие операции как усечение значений и расширение. Например усечением 16 битного слова будет являться 8 бит, т.е. 1 байт. Это легко реализуется, например, усеченным значением регистра HL будет регистр L.
Теперь о расширении значений. Всего имеется 3 вида расширений:
1. zext - расширение с обнулением старшей части. Например расширение регистра A в регистра HL будет выглядеть так:
2. anyext - расширение с неопределенной старшей частью:
3. sext - знаковое расширение. Т.е. если 7 бит равен единице, то старшая часть заполняется единицами. Что-то вроде этого
Код:
LD L,A
LD H,#00
BIT 7,A
JR Z,NO_SIGN
LD H,#FF
NO_SIGN:
Пример написал для большего понимания. Посоветуйте как эффективнее и короче можно сделать знаковое расширение.