簡體   English   中英

MIPS匯編-十六進制指令字符串

[英]MIPS Assembly - Instruction String to Hex

我正在組裝程序中需要一條字符串作為指令的內容,例如

add $t1, $t0, $t1 

並以十六進制打印指令。

我逐段掃描字符串,首先識別添加。 添加操作碼為001000(6位)

掃描t1並將其自身與數據部分進行比較,它的值是5位01001,與t0的01000相同,並且再次在01001的t1。所有這些都是按順序掃描的,因此優先級到目前為止沒有那么重要據我所知。

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

老實說,我對移位並不了解很多,所以答案可能就在那里。

這是我的代碼。 這是一個在制品

#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,則相加將是等效的。

意識到您正在做的是編寫匯編程序(這是個小例子)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM