2012-04-27 109 views
0

我的工作在大會的東西它需要一個字符串的指令,如MIPS大會 - 指令字符串轉換爲16進制

add $t1, $t0, $t1 

,並打印出十六進制的指令。

我一塊一塊掃描字符串,首先識別添加。添加了一個操作碼001000(6位)

t1被掃描,它將自己與數據段進行比較,它具有5位01001的值,t0與01000相同,t1再次位於01001。所有這些都是按順序掃描的,所以優先級並不重要,據我所知。

從那時起,我知道我需要以某種方式將它們一起擦掉,然後從二進制轉換爲十六進制。我的問題是,我不知道我應該如何在讀取這些二進制值時存儲這些值。是否將它們存儲在數據部分,由於它們的奇數位大小,或者有更簡單的方法,這看起來不正確。

老實說,我不太瞭解位移,所以答案可能在那裏。

這是我的代碼。這是一個WIP

#text segement 
    .text 
    .globl main 

main: 
    li $t0, 0 #pointer for input 
    li $t1, 0 #pointer for storing 
    li $t2, 0 #parser 
    li $t3, 0 #temp hold t0 
    li $t4, 0 #hold reg num 
    li $t8, 0 #number of reg 

    li $v0, 8 
    la $a0, input 
    li $a1, 32 
    syscall 

    la $a0, input 

    li $v0, 10 #end 
    syscall 


scan: 
    lb $t2, input($t0) 
    #beq $t2,'$',pass 
    beq $t2,' ',pass 

    beq $t2,'*',next 
    beq $t2,',',next 

    beq $t2,10,end 

    sb $t2, inst($t1) 

    addi $t1,1 
    addi $t1,1 

    j scan 

next: 
    move $t3, $t0 #store in t3 temporarily 
    move $t0, $0 
    move $t1, $0 
    move $t2, $0 
next2: 
    lb $t2, inst($t0) 
    beq $t2,'$',register #t2 = $, reg 
    bge $t2,65,funct  #t2 >= 65, funct 
    ble $t2,57,num   #57 >= t2, num 

funct: 
    lb $t2, inst($t0) 
    beq $t2, 'a', afunct 
    beq $t2, 's', sfunct 
    beq $t2, 'm', afunct 
afunct: 
    lb $t2, inst($t0) 

sfunct: 

mfunct: 

num: 
    lb $t2, inst($t0) 


register: 
    addi $t0, 1 
    lb $t2, inst($t0) #get reg type 

    addi $t0, 1   #increase pointer 

    lb $t4, inst($t0) #find reg num and convert to t4 
    addi $t4, -48 

    beq $t2, 't', treg 
    beq $t2, 'a', sreg 
    beq $t2, 'v', vreg 

treg: 
    mult $t4,4 
    mflo $t4 
    lw $t2, tr($t4) 
areg: 
    mult $t4,4 
    mflo $t4 
    lw $t2, ar($t4) 

vreg: 
    mult $t4,4 
    mflo $t4 
    lw $t2, vr($t4) 

.data 
input: .space 32 
inst: .space 32 
tr: 01000,01001,01010,01011,01100,01101,01111 
sr: 00100 
vr: 00010 

a: 001000 
+0

做一些閱讀後,我是這麼理解的方式和內容位移位呢,但我一直無法將它應用於我的問題,有沒有人有任何指導? – mooooooose 2012-04-28 02:25:46

回答

1

是的,你的答案是位移和邏輯OR'ing。您將指令組件指示的各個部分移到其生成的指令字中的適當位置,並將它們邏輯或地結合在一起。 (假設其他位爲0,將是等效的。

意識到你正在做的是寫(的一個微不足道的情況下)的彙編。

+0

有無論如何,你可以展開你剛剛說的多一點,可能有一個例子嗎?我真的很感謝你的幫助! – mooooooose 2012-04-27 21:54:52

+0

看到講座從一本好的本科CS課程的筆記,例如從http://6004.csail.mit.edu/Fall09/handouts/L11-4up.pdf的第14頁開始。不同的處理器,但具有相同的總體思路。 – 2012-04-27 22:02:57

相關問題