2014-10-04 2 views
0

Я пытаюсь напечатать целое число без знака из регистра MIPS в виде текста ASCII на консоль.Печать MIPS Регистрация Содержание

Другими словами, давайте притворимся, что в $ a0 есть «0x4ab3c823». Я хочу распечатать «4ab3c823» для консоли в xSPIM.

Вот моя попытка. Я продолжаю получать десятичные значения, а не ASCII. Это всего лишь отрезанная от всей программы, поэтому я вырезал все остальное.

.data 
printspace: .space 8 
.text 
printHex: 
    move $t0,$a0 
    la  $a0,printspace #Save address of 8 blank bytes to $a0 
    sw  $t0,0($a0)  #Copys the integer I want to print to $a0's address in memory 
    li  $v0 1 
    syscall 

    jr  $ra 

ответ

1

Я предполагаю, что вы имеете в виду, что хотите получить шестнадцатеричный выход, поскольку вывод ASCII будет с другими буквами.

Я не думаю, что SPIM имеет шестнадцатеричный выход. Это означает, что вам придется печатать символ по символу. Это потребует принятия $ a0 по четыре бита за раз и добавления константы (в зависимости от того, находится ли она между 0-9 или A-F), чтобы превратить ее в печатный символ ASCII.

В тренажере MARS, li $v0 34 печатает в шестнадцатеричном формате.

+0

Я попытаюсь повторить то, что я хотел бы сделать. У меня возникли проблемы с пониманием hex, ASCII и т. Д., Поэтому трудно объяснить ... Например, у меня есть регистр $ t1 = a1b2c3d4. То, что я хотел бы сделать, это распечатать на консоли именно этот «a1b2c3d4». Насколько я понимаю, мне нужно взять один символ регистра, определить, есть ли a-f или 0-9, добавить соответствующее смещение, а затем напечатать как символ (syscall 11)? Я просто не уверен в простой способ сделать это, не загружая каждый отдельный символ в память для печати. В идеале я печатаю все «a1b2c3d4» сразу, а не буквой. – user3290553

+1

@ user3290553 К сожалению, для этого SPIM не имеет простой syscall. Вам не обязательно обязательно искать символы, потому что для 0-9 значение ASCII является вашим значением + ASCII '0'. Для a-f вы добавляете int ('a') - 10. Подробности здесь http://stackoverflow.com/questions/19370600/mips-assembly-convert-from-integer-to-hexadecimal – qwr

0

С некоторой вопльностью я получил следующее, чтобы сделать то, что мне нужно. Проводка для будущих сторон.

.text 

hexToConsole: 
    #$t0 already contains what we want to print 

    li  $t1,58   
    la  $t2,0xf0000000 


    maskAndShift: 
      beq  $t0,$zero,exit  
      and  $t3,$t2,$t0   
      sll  $t0,$t0,4    
      srl  $t3,$t3,28    
      addi $t3,$t3,48    
      blt  $t3,$t1,print  
      addi $t3,$t3,39    
      b  print 

    print: 
      move $a0,$t3     
      li  $v0,11     
      syscall 
      b  maskAndShift 

    exit: 
      j  $ra 
Смежные вопросы