Вот простой пример кода, в котором используется флаг переноса:
int main (void)
{
unsigned int smallnum;
unsigned int largenum;
unsigned int temp_num;
printf("Enter a number: ");
scanf("%d", &smallnum);
printf("Enter a bigger number: ");
scanf("%d", &largenum);
temp_num = smallnum - largenum;
if (smallnum < largenum)
{
printf("Carry Flag SET!");
}
else
{
printf("Carry Flag CLEAR!");
}
return(EXIT_SUCCESS);
}
Если мы посмотрим на файл листинга, мы увидим следующее:
48:carry.c **** if (smallnum < largenum)
82 .loc 1 48 0
83 0090 8B542418 movl 24(%esp), %edx
84 0094 8B442414 movl 20(%esp), %eax
85 0098 39C2 cmpl %eax, %edx
86 009a 730E jae L2
Таким образом, оператор if
компилируется для сравнения двух операндов, за которым следует jae
или «Перейти, если больше или равно». Тест, используемый в команде jae
, должен проверить, равен ли флаг переноса 0
. См. этот справочник, чтобы узнать, какие флаги для каких условных переходов проверяются. .
Когда вы пишете код, создайте файл листинга и просмотрите все условные переходы. Многие из них проходят тестирование, чтобы проверить состояние флага переноски.
person
embedded.kyle
schedule
04.10.2012