Это оставляет меня сбитым с толку, и я действительно не могу понять, почему у меня возникает эта проблема. Я должен создать программу на c, которая выводит беззнаковое значение непосредственно перед установкой флага C, используя ассемблер для накопления переменной с помощью addcc и отправки значения обратно в main в c. Я считаю, что код, который у меня есть для c, правильный:
unsigned int func();
int main(void){
printf("The max value before the C flag is set is: %u\n", func());
}
Теперь проблема со сборкой...
.global func
func: save %sp, -128, %sp
addcc %g0, 1, %g0
clr %l0
loop:
bcs away
mov %l0, %i0
addcc %i0, 1, %l0
ba loop
nop
away:
ret
restore
Что это должно делать, так это накапливать %l0, когда установлен флаг C, передавая значение обратно в %i0 и возвращая его. Когда я запускаю это, я получаю 0. Это имеет смысл для меня, так как я считаю, что должен получить гораздо большее число. Любая помощь будет оценена по достоинству.
UINT_MAX
. ТеперьUINT_MAX + 1
равно 0. - person Daniel Fischer   schedule 03.04.2013unsigned int
в C, так что это не может быть-1
(ну, битовый шаблонUINT_MAX
обычно такой же, как уint
-1). - person Daniel Fischer   schedule 03.04.2013