Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 有人能给我解释一下这个MIPS代码的一些部分吗?_String_Assembly_Char_Mips - Fatal编程技术网

String 有人能给我解释一下这个MIPS代码的一些部分吗?

String 有人能给我解释一下这个MIPS代码的一些部分吗?,string,assembly,char,mips,String,Assembly,Char,Mips,首先,这段代码的目的是从用户那里获取一个字符串并将其打印回来 我的第一个问题: 在第10行中,为什么要从$a0+5加载一个字节?我知道$a0是要打印的输入字符串,但我不明白为什么它会被5抵消 第二个问题: 在第11-14行中,如果字符小于“a”或大于“z”,为什么会分支到nomodify?这不是说如果角色不在a-z范围内,就打印它吗 第三个问题: 在第11-16行中,如果字符既不小于“a”也不大于“z”,则第15行表示将立即值-0x20添加到$t0中,注释表示“将字母封装”。这是什么意思 最后:

首先,这段代码的目的是从用户那里获取一个字符串并将其打印回来

我的第一个问题:

在第10行中,为什么要从$a0+5加载一个字节?我知道$a0是要打印的输入字符串,但我不明白为什么它会被5抵消

第二个问题:

在第11-14行中,如果字符小于“a”或大于“z”,为什么会分支到nomodify?这不是说如果角色不在a-z范围内,就打印它吗

第三个问题:

在第11-16行中,如果字符既不小于“a”也不大于“z”,则第15行表示将立即值-0x20添加到$t0中,注释表示“将字母封装”。这是什么意思

最后:

继续使用“char”这个词让我感到困惑。这个代码是用来读取/打印字符串的,对吗?字符不是字符串中的一个字符吗

1.数据
2 msg1:。字0:24
3.文本
4.环球大道
5主要:
6 li$v0,8#读取str的系统调用
7 la$a0,msg1#加载msg1的地址以存储字符串
8li$a1100#msg1是100字节
9系统调用

18 li$v0,4#打印str的系统调用
19系统调用
20 li$v0,10#系统呼叫退出
21系统呼叫#我们离开这里。


这将是简单地读/写输入字符串的真正代码。我问的问题(特别是第10-17行)中的代码对第6个字符做了额外的操作

Re。第三个问题:ASCII表中的大写字符未设置位5(0x20),而小写字符设置位5(0x20)。示例:“a”的值为0x61,“a”的值为0x41。“此代码的目的是从用户处获取一个字符串并将该字符串打印回来”。谁告诉你的?我想说它的目的(或者至少是它的作用)是读取字符串,如果第6个字符是字母,则将其大小写改为大写,然后打印字符串。@Kenney,那么这一行基本上是说将字符大写?但是如果输入字符串甚至不是一个字母呢?这是否意味着它接受任何不是小写a到z的字符?@Michael为什么是第六个字符?因为
5($a0)
是字符串的第六个字符。你必须问编写代码的人,为什么他们对这个角色特别感兴趣。
 1 .data
 2 msg1: .word 0:24
 3 .text
 4 .globl main
 5 main:
 6 li $v0, 8 #syscall for read str
 7 la $a0, msg1 #load address of msg1 to store string
 8 li $a1, 100 #msg1 is 100 bytes
 9 syscall
10 lb $t0, 5($a0) #load the character into $t0
11 li $t1, 'a' #get value of 'a'
12 blt $t0, $t1, nomodify #do nothing if letter is less than 'a'
13 li $t1, 'z' #get value of 'z'
14 bgt $t0, $t1, nomodify #do nothing if letter is greater than 'z'
15 addi $t0, $t0, -0x20 #encap the letter
16 sb $t0, 5($a0) #store the new letter
17 nomodify:
18 li $v0, 4 #syscall for print str
19 syscall
20 li $v0, 10 #system call for exit
21 syscall # we are out of here.