我有一个函数,我想检查我的参数是否等于iOne,但我如何将寄存器与.byte进行比较?在顶部,我有这样的iOne:
iOne: .byte 1
在函数中,第一个命令应该是这样的:
beq $a0, iOne, exit #exit if n == 1
我该如何解决这个问题?
fzsnzjdm1#
add $s3, $zero, $zero
这执行加法$s3 = 0 + 0,有效地将寄存器$s3设置为零值。
lb $t0, 1($s3)
这会将内存中某个位置的一个字节加载到寄存器$t0中。内存地址由1($s3)给出,即地址$s3+1。这将是0+1=内存中的第一个字节。由于我们采用了big-endian架构,因此我们读取字节时,将采用“大端优先”的4字节块。
byte: 0 1 2 3 00 90 12 A0
第0个字节是00,第1个字节是90。因此,我们将字节90加载到$t0中。
sb $t0, 6($s3)
这将寄存器$t0中的一个字节存储到由6($s3)给出的存储器地址中。这也意味着地址$s3+6。
byte: 4 5 6 7 FF FF FF FF
变成了
byte: 4 5 6 7 FF FF 90 FF
现在,如果体系结构是小端字节序呢?这意味着字节在内存中的排列方式是“小端优先”,因此第二条和第三条指令的效果会发生变化。
这会将内存地址1中的字节加载到寄存器$t0中。但现在地址是“小端优先”,所以我们改为将12读入寄存器。
byte: 3 2 1 0 00 90 12 A0
接下来......
这会将寄存器$t0中的字节(即12)存储到内存地址6中。同样,在小端结构中:
byte: 7 6 5 4 FF FF FF FF
byte: 7 6 5 4 FF 12 FF FF
1条答案
按热度按时间fzsnzjdm1#
这执行加法$s3 = 0 + 0,有效地将寄存器$s3设置为零值。
这会将内存中某个位置的一个字节加载到寄存器$t0中。内存地址由1($s3)给出,即地址$s3+1。这将是0+1=内存中的第一个字节。由于我们采用了big-endian架构,因此我们读取字节时,将采用“大端优先”的4字节块。
第0个字节是00,第1个字节是90。因此,我们将字节90加载到$t0中。
这将寄存器$t0中的一个字节存储到由6($s3)给出的存储器地址中。这也意味着地址$s3+6。
变成了
现在,如果体系结构是小端字节序呢?这意味着字节在内存中的排列方式是“小端优先”,因此第二条和第三条指令的效果会发生变化。
这会将内存地址1中的字节加载到寄存器$t0中。但现在地址是“小端优先”,所以我们改为将12读入寄存器。
接下来......
这会将寄存器$t0中的字节(即12)存储到内存地址6中。同样,在小端结构中:
变成了