Эти молодые ребята, что они знают?
В одном из оригинальных встроенных языков - PL / M (-51 да как в 8051, -85, -86, -286, -386) - не было никакой разницы между логическими операторами (!, &&, || в В) и поразрядно (~, &, |, ^). Вместо этого PL / M имеет NOT, AND, OR и XOR, заботящиеся об обеих категориях. Нам лучше с двумя категориями? Я не уверен. Я скучаю по логическому оператору ^^ (xor) в C, хотя. Тем не менее, я предполагаю, что было бы возможно создавать программы на C без использования логической категории.
В PL / M False определяется как 0. Логические значения обычно представлены в байтовых переменных. True определяется как NOT False, что даст вам 0ffh (PL / M-ese для C's 0xff).
Чтобы увидеть, как происходило преобразование переноса флага состояния перед сохранением в байтовой переменной (булево значение не было доступно как тип), PL / M мог использовать инструкцию по сборке "sbb al, al" перед сохранением. Если было установлено значение carry, al будет содержать 0ff, если нет, то будет 0h. Если требуется противоположное значение, PL / M вставит «cmc» перед sbb или добавит «not al» после (на самом деле xor - один или другой).
Таким образом, 0xff для TRUE - это порт прямой совместимости от PL / M. Необходимо? Вероятно, нет, если вы не уверены в своих навыках (в C) И не играете в них супер-безопасно.
Как я бы.
PL / M-80 (используемый для 8080, 8085 и Z80) не имел поддержки целых чисел или чисел с плавающей запятой, и я подозреваю, что это было то же самое для PL / M-51. В PL / M-86 (используется для 8086, 8088, 80188 и 80186) добавлены целые числа, с плавающей запятой одинарной точности, указатели сегмента: смещение и стандартные модели памяти малого, среднего, компактного и большого размера. Для тех, кто был склонен к этому, были специальные директивы для создания гибридных моделей памяти «сделай сам». Огромная модель памяти Microsoft была эквивалентна большой Intel. MS также носила крошечные, маленькие, компактные, средние и большие модели.