MIPS ,擦除或转为空数组数据

MIPS , erase or turning null Array data

如何更改数组中每个名字和姓氏的值?所以当我尝试在控制台中打印它们时,它们不会输出任何内容,如下所示:

第一个数组:

name1:

surname1:

.data



DATA:    .word data1,data2,data3

data1:   .word nome1,cognome1
name1:       .asciiz "john"
surname1:    .asciiz "cena"


data2:    .word nome2,cognome2
name2:       .asciiz "giorno"
surname2:    .asciiz "giovana"


data3:   .word nome3,cognome3
name3:       .asciiz "nikola"
surname3:    .asciiz "tesla"

我想做的是 "erase" 当我 运行 我的程序时每个数组的数据,所以我可以选择何时擦除它们。

有很多不同的方式,但基本上两个主要的是:

1) .asciiz .. 你检查过它是如何编译成字节本身的吗?我认为是"zero terminated string",所以.asciiz "AB"被编译成三个字节65, 66, 0

现在如果要显示空字符串而不是name空字符串,则将其设为空字符串,即在字符串的第一个位置写入零,从而将先前字节数组的内容更改为0, 66, 0。这当然会永远损坏数据。

2) 如果你想在内存中保持原始名称完整,使用你的 2 级深度指针结构 (DATA->data1->string) 你可以在某个地方有像 empty: .asciiz "" 这样的空字符串,并修改 data1 结构中的指针。因此,从 data1: .word nome1,cognome1 开始,您可以将该内存的内容修改为 data1: .word empty,empty.

在任何一种情况下,您都必须确定要覆盖的内存(即加载 data1 或特定字符串的地址),并在该地址存储零字节(如果您正在覆盖字符串)或空字符串的地址(如果您要覆盖名称指针)。

之后就像以前一样显示东西,新修改的内存内容从人的角度看起来就像名字被删除了。

顺便说一句,如果您要处理敏感数据,在某些安全应用程序中,覆盖整个名称字符串是有意义的,即。从 65, 66, 00, 0, 0,所以在擦除程序之后,当你转储内存内容时将没有原始名称的痕迹(这是第三个选项,如何擦除它们,与 1 非常相似),但不是在第一个位置写零,而是一直写零,因为目的地有非零内容。