воскресенье, 15 марта 2015 г.

Right shifting instruction in MIPS

В наборе инструкций MIPS32 имеются две инструкции для битового сдвига вправо: 1) sra - арифметический сдвиг; 2) srl - логический сдвиг.
При арифметическом сдвиге знак числа распространяется.
При описании операции >> в книгах по языку программирования Си указывается, что для чисел без знака будет использоваться логический сдвиг, а для чисел со знаком используемая операция зависит от реализации (в частности, от процессорной архитектуры, в которую транслируется код; есть ли там команда арифметического сдвига).

Написал маленькую тестовую программу на Си для проверки действий на процессорных архитектурах x86 и MIPS:
#include <stdio.h>
#include <inttypes.h>

int main ()
{
    int32_t val;
   
    val = 0x80000000;
   
    val = val >> 31;
   
    if (val == -1)  // -1 = 0xFFFFFFFF
      printf ("Arithetic shifting is used for right shifting\n");
    else
      printf ("Logical shifting is used for right shifting\n");
   
    return 0;
}


В двух вариантах архитектуры программа показала использование арифметического сдвига.

Комментариев нет:

Отправить комментарий