понимать работу LB MIPS

Операция LB MIPS: ссылка: http://www.ece.cmu.edu/~ece447/s13/lib/exe/fetch.php?media=mips_r4000_users_manual.pdf Страница 549

32 vAddr ← ((offset15)16 || offset15...0) + GPR[base]
(pAddr, uncached) ← AddressTranslation (vAddr, DATA)
 pAddr ← pAddrPSIZE – 1 ... 3 || (pAddr2...0 xor ReverseEndian3)
 mem ← LoadMemory (uncached, BYTE, pAddr, vAddr, DATA)
 byte ← vAddr2...0 xor BigEndianCPU3
 GPR[rt] ← (mem7+8*byte)24 || mem7+8*byte...8*byte

Ниже приведен код c:

//Defines for easier readability of registers
#define OPCODE ((curr_instr >> 26) & 0x3F) 
#define OPCODE_SPECIAL (curr_instr & 0x3F) 
#define OPCODE_REGIMM ((curr_instr >> 16) & 0x3F) 

#define SIGNEXD(val) ((val & 0x8000) ? ((val) | 0xFFFF0000 ) \
                                            : ((val) & 0x0000FFFF))
#define TARGET (SIGNEXD(curr_instr)<<2)
#define RS ((curr_instr>>21) & 0x1F)
#define RT ((curr_instr>>16) & 0x1F)
#define RD ((curr_instr>>11) & 0x1F)

 void lb()
 {
  uint32_t addr = CURRENT_STATE.REGS[RS] + SIGNEXD(curr_instr);
  uint32_t mem = mem_read_32(addr - (addr&0x3));

  mem = (mem >> ((addr & 0x3)*8));
  NEXT_STATE.REGS[RT] = (mem & 0x80) ? (mem | 0xFFFFFF00) : (mem & 0xFF);
  //NOTE: Exceptions ignored
  }

Я не понимаю, почему работа LB закодирована, как указано выше?


person lul    schedule 18.05.2018    source источник
comment
Почему бы не это было бы закодировано таким образом в эмуляторе MIPS? За исключением ужасного стиля кодирования с использованием глобальных переменных вместо аргументов функций вместо передачи командного слова в виде uint32_t...   -  person Peter Cordes    schedule 18.05.2018
comment
Я не понимаю, что означают строки в операции... Есть хороший учебник? извините я только начинающий...   -  person lul    schedule 18.05.2018
comment
Ну, мы можем видеть из C, что lb является знаком- расширение загрузки байтов, в отличие от lbu (без знака: ноль-расширение). Младшие 16 бит командного слова представляют собой смещение от базового регистра. Я не уверен, почему все элементы с порядком байтов входят в состав операций в руководстве по MIPS или почему он выполняет загрузку ПОЛСЛОВА; Вы уверены, что получили правильную инструкцию?   -  person Peter Cordes    schedule 18.05.2018
comment
Разве само руководство MIPS не описывает используемый им псевдокод и что это означает?   -  person Peter Cordes    schedule 18.05.2018
comment
Я ошибся, но обновил. Код и псевдокод здесь совершенно разные... Не могли бы вы немного объяснить псевдокод...   -  person lul    schedule 18.05.2018
comment
или можно написать несколько строк кода (каждая строка кода соответствует каждой строке операций в руководстве), чтобы объяснить... Большое спасибо...   -  person lul    schedule 18.05.2018
comment
(mem7+8*byte)24 || mem7+8*byte...8*byte похоже, что это может быть описание расширения знака. Я не знаю обозначения руководства MIPS. Остальная часть выглядит довольно просто, за исключением настройки прямого/обратного порядка байтов, меняющей порядок адресов байтов в слове. Почти уверен, что это то, что делает линия между преобразованием адреса и загрузкой. (MIPS может работать в режиме с прямым порядком байтов или с прямым порядком байтов. Код симулятора C, вероятно, имитирует только прямой порядок байтов)   -  person Peter Cordes    schedule 18.05.2018
comment
Привет, спасибо за помощь. Я все еще не понимаю pAddrPSIZE – 1 ... 3 ?   -  person lul    schedule 18.05.2018
comment
Я тоже. Кажется, это часть изменения младших битов адреса, если обратный порядок байтов, но я не совсем понял, что он делает.   -  person Peter Cordes    schedule 18.05.2018
comment
Я чувствовал, что для этой лаборатории лучше просто посмотреть, что она делает в целом, а затем перейти к следующей. самообучающаяся компьютерная арка от профессора онура. любой совет?   -  person lul    schedule 18.05.2018