Assembly MIPS汇编-指令字符串到十六进制
我在汇编程序中做一些事情,它以字符串作为指令,比如Assembly MIPS汇编-指令字符串到十六进制,assembly,mips,spim,Assembly,Mips,Spim,我在汇编程序中做一些事情,它以字符串作为指令,比如 add $t1, $t0, $t1 并以十六进制打印出指令 我逐段扫描字符串,首先识别add。Add的操作码为001000(6位) t1被扫描,它将自身与数据段进行比较,它的值为5位01001,与t0的01000相同,t1的值再次为01001。所有这些都是按顺序扫描的,所以就我所知优先级并不是那么重要 从那时起,我知道我需要以某种方式将它们组合在一起,然后从二进制转换为十六进制。我的问题是,我不确定如何在读取这些二进制值时存储它们。是否将它
add $t1, $t0, $t1
并以十六进制打印出指令
我逐段扫描字符串,首先识别add。Add的操作码为001000(6位)
t1被扫描,它将自身与数据段进行比较,它的值为5位01001,与t0的01000相同,t1的值再次为01001。所有这些都是按顺序扫描的,所以就我所知优先级并不是那么重要
从那时起,我知道我需要以某种方式将它们组合在一起,然后从二进制转换为十六进制。我的问题是,我不确定如何在读取这些二进制值时存储它们。是否将它们存储在数据部分(由于它们的奇数位大小,这似乎不正确),或者是否有更简单的方法
老实说,我不太了解位转移,所以答案可能就在那里
这是我的密码。这是一个很大的在制品
#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
是的,你的答案是位移位和逻辑OR'ing。您可以将指令组件指示的各个部分移动到生成的指令字中的适当位置,并在逻辑上或将它们一起移动。(假设其他位为0,则相加是等效的
意识到你正在做的是写作(一个小例子)汇编程序。您是否可以在刚才所说的基础上进一步扩展,也许可以举个例子?我真的很感谢您的帮助!请参阅一门好的本科CS课程的课堂讲稿,例如,从不同处理器的第14页开始,但总体思路相同。读了一些书后,我了解了位移位的方式和作用,但我不知道我无法将其应用于我的问题。有人有其他指导吗?