在 mips 中从 "string" 中删除一个字符
deleting a char from a "string" in mips
我想从 MIPS 汇编语言的字符串中完全删除某些字符(数字)
我找到了一种方法来识别哪些需要删除并尝试替换它们,但我还没有找到一个简单的空白 ascii 值(不是 ' ' 中的 space,而是只是'') 并使用 '' 会导致错误。
我的代码在下面有详细的评论。它有效,但我还没有找到合适的字符来使用。
我的问题是有没有办法用替换删除一个字符?或者我需要做一些地址操作来丢失我不想要的字符吗?
.data
str: .asciiz "i wa32n099na r9epl87ac2156e al6l52 15numb5e1rs in here"
.text
main: nop #main starts here
la $a0, str #load address of str into a0
la $t5, str
li $t1, '*' #load '*' into t1 this is the replacing bit so i wanna load a blank here
li $t2, '0' #this will be used as the min val t2
li $t3, '9' #this is max val t3
loop:
lb $t0, ($t5) #load the first byte of str into t0
beq $t0, $zero,done #stop condition if equals [=11=]
bgt $t0,$t3,continue #if first byte(asciival) is greater than '9' than it isnt a number, so continue. on false it will check if num is below 0
blt $t0,$t2,continue #if first byte(asciival) is smaller than '0' and than it isnt a number, so continue
#if we got here than byte is a num
sb $t1, ($t5) #store the byte in first position (of moved addr)
continue:
addi $t5,$t5,1 #increment the address
j loop #loop up!
done:
li $v0, 4 #load string read into v0
syscall
jr $ra
如果要从 integers/words 的数组中删除一个元素,我们不会寻找一个特殊的值来将该元素标记为无效;一个人会像彼得说的那样,通过重新定位后续元素来缩小差距,有效地缩短原位数组。
同样适用于字符串,也是数组:字符串是bytes/characters.
的数组
要理解为什么删除元素比覆盖它更好,请考虑我们可以用字符串做的除了打印之外的其他事情:例如,我们可以比较它们,我们可以询问它们的长度,我们可以提取单个字节,搜索子字符串,将它们保存到文件中供其他程序稍后使用,等等。
对于随机位置的有趣字符,所有这些操作要么不起作用,要么需要特殊的外壳。最好完全删除缩短字符串的不需要的字符,而不是用具有特殊含义的字符覆盖它们。
此外,与没有 zero-width ASCII 字符类似,对于 integer/word 数组,没有特殊的元素值可供选择——所有可能的值都已经具有数字意义。
我想从 MIPS 汇编语言的字符串中完全删除某些字符(数字)
我找到了一种方法来识别哪些需要删除并尝试替换它们,但我还没有找到一个简单的空白 ascii 值(不是 ' ' 中的 space,而是只是'') 并使用 '' 会导致错误。 我的代码在下面有详细的评论。它有效,但我还没有找到合适的字符来使用。 我的问题是有没有办法用替换删除一个字符?或者我需要做一些地址操作来丢失我不想要的字符吗?
.data
str: .asciiz "i wa32n099na r9epl87ac2156e al6l52 15numb5e1rs in here"
.text
main: nop #main starts here
la $a0, str #load address of str into a0
la $t5, str
li $t1, '*' #load '*' into t1 this is the replacing bit so i wanna load a blank here
li $t2, '0' #this will be used as the min val t2
li $t3, '9' #this is max val t3
loop:
lb $t0, ($t5) #load the first byte of str into t0
beq $t0, $zero,done #stop condition if equals [=11=]
bgt $t0,$t3,continue #if first byte(asciival) is greater than '9' than it isnt a number, so continue. on false it will check if num is below 0
blt $t0,$t2,continue #if first byte(asciival) is smaller than '0' and than it isnt a number, so continue
#if we got here than byte is a num
sb $t1, ($t5) #store the byte in first position (of moved addr)
continue:
addi $t5,$t5,1 #increment the address
j loop #loop up!
done:
li $v0, 4 #load string read into v0
syscall
jr $ra
如果要从 integers/words 的数组中删除一个元素,我们不会寻找一个特殊的值来将该元素标记为无效;一个人会像彼得说的那样,通过重新定位后续元素来缩小差距,有效地缩短原位数组。
同样适用于字符串,也是数组:字符串是bytes/characters.
的数组要理解为什么删除元素比覆盖它更好,请考虑我们可以用字符串做的除了打印之外的其他事情:例如,我们可以比较它们,我们可以询问它们的长度,我们可以提取单个字节,搜索子字符串,将它们保存到文件中供其他程序稍后使用,等等。
对于随机位置的有趣字符,所有这些操作要么不起作用,要么需要特殊的外壳。最好完全删除缩短字符串的不需要的字符,而不是用具有特殊含义的字符覆盖它们。
此外,与没有 zero-width ASCII 字符类似,对于 integer/word 数组,没有特殊的元素值可供选择——所有可能的值都已经具有数字意义。