Сравнение со знаком и без знака в аппаратной системе LC3 / LC4 - PullRequest
0 голосов
/ 02 июня 2018

Я создаю программу на C, которая имитирует от начала до конца вымышленную аппаратную систему LC4 (немного отличную версию от хорошо известной системы LC3. В настоящее время я нахожусь на инструкциях сравнения, которые обрабатываются арифметическим логическим мультиплексором. Ониперечислены следующим образом:

CMP Rs Rt: NZP = signed-CC(Rs-Rt) 0010sss00----ttt
CMPU Rs Rt: NZP = unsigned-CC(Rs-Rt) 0010sss01----ttt
CMPI Rs IMM7: NZP = signed-CC(Rs-SEXT(IMM7)) 0010sss10IIIIIII
CMPIU Rs UIMM7: NZP = unsigned-CC(Rs-UIMM7)

Я понимаю разницу между сравнением значений в двух регистрах и сравнением одного значения в регистре и другого значения, извлеченного из инструкции LC4 (например, CMP против CMPI).Может ли кто-нибудь объяснить мне точно, что значит делать сравнение со знаком и без знака (CMP против CMPU или CMPI против CMPIU), при каких обстоятельствах вы будете делать либо, желательно с примерами? Спасибо!

1 Ответ

0 голосов
/ 02 июня 2018

Указатели или (обычно) индексы не подписаны.При сравнении двух указателей значения не следует интерпретировать как значения, дополняющие два.В противном случае, если указатель пересечет порог, равный половине максимального значения слова, он будет выглядеть отрицательным, и при сравнении будет выглядеть меньше указателя до этого порога.

Другим примером является таймер или счетчик без знака.,Мы бы не хотели, чтобы значение, превышающее порог в половину максимального значения слова, казалось бы меньшим, чем значение до этого порога.

...