我是这个社区的新手。我们在大学里编程 mips,我需要一个解决我作业中的问题的方法。我们必须打开一个 .pgm 文件并读取所谓的标头(在本例中为 p5 格式和可变长度 x 宽)。当你打开你读过的文件时,你会得到 4 行第 1 行。p5; 第二。长x宽;第三个颜色深度和第四个 ascii 代码的长期。我现在的工作是转换这个 ascii,我想我必须知道这个 ascii 的大小。以前,我有一个用于转换 ascii 的 mips 代码,但这里的问题是,此代码仅转换我的 ascii 术语的一部分,如下所示(评论是德语 - 对此感到抱歉):
.data
str: .ascii "GV_]VTI=97:@JPH<1-/6;L\pz ¶³¶»ÃËËÄ»°y{xzk`L@@?>9326<DD:1.--++*-./-//000002222344///35;@LVau ¥´¬§»Çĸ³³»ª °¿Åù±¯¦||x{{yttw{sv}¡°¸±¡¡£¢£p_Z[_hfYUW^accacdehhhhdghjjlnnonnnljifjgfdggfdiiiillllglrvtkiltzx~«ÀÖ¿°©´¾ÃÇÈ×ßãÖÇ»º¡±¼ËÙENSOIHD>;>CHTPB4/+.6<JWizª¯®°¸ÃËËÄ»¶xvj\NECDB<735:?:40//---,+,--./00000222235400259=DNXdw£®³½Á½³¯¯²¢¥§°»ÃÆõ©«}z{|xtmmqus¡±À¹¦m`ZZ^ce\WZ^abcacdehhhhdghjjlnnonnnlljijhggihhfiiiillmljnuxvnlqw~|¤¶ÐáÕÉÅÇÈÇÉÌÝàÒľ³µª¡¡¤±¼ËÙBGIHB@??DILNRI=1,*-6=ISao §¨·ÃËËÄ»º¯wpg\SIEDC>83359520110//.--,-//0000022224751139=CGOXfx£®¼¶®¨¤£¥°»À»¾¼³©¥vnjjmsz¬ÅÅƳxxttxuja[Y[_c`^]^abcacdfhhhhdghjjlnnnnnnonkjlkihjjhghhhhkkjknsy}vpqw~¸ÏãéáÝ×ÓÌÁÂÈÙ඲ª¬¥¦¢§ ¡¨±¼ÌÙ@DFKC?=@CFFA<82.+)-6>IO[e| £«´ÅËËļÁ¹vndbVKACA<632247322321011/.-.//000022225772/4<AFIQYhx¢°½{¡±½½±²¶´®|lmos¸ÍÌ®tpmjgnnjc[XX[`a`_^abcacdfhjhhdghjjlnoonnnpomknmkjljihggggjjjjsv{wrs}¸ÑãíêÝß×ÏǸ´½ÐÛµ²§¡¨¡ª ¢«²¤¡«±ºÌÙ:ADEA>:5;94268501051"
# it converts just to: GV_]VTI=97:@JPH<1
.text
main:
addi $s0, $zero, 0 # $s0 :=0; hier wird das Ergebnis aufsummiert
la $s1,str # $s1 := &str; hier wird der Zeiger auf das nächste Zeichen gehalten
addi $s2, $zero, 10 # $s2 := 10; hier steht konstand die 10 zur Multiplikaton
addi $s3, $zero, 48 # s3 := 48; hier 48, um die ASCII "0" in den Wert 0 umzuwandeln
loop:
lb $s4,($s1) # Lade nächstes Zeichen des
sub $s4, $s4, $s3 #Bilde ASCII-Ziffer auf Integer-Wert [0..9] ab
bltz $s4,terminate # Wenn Zeichen <0,
mult $s0, $s2
mflo $s0 # §s0 := §s0 *10
add $s0, $s0, $s4 # s0= s0 + Ziffernwert
addi $s1, $s1, 1 # s1= s1+1; also auf die nächstes Zeichn im String
j loop
terminate:
li $v0,1 # Resultat ausgeben
or $a0, $zero, $s0 # in ss0 stand das Ergebnis
syscall
li $v0,10
syscall
希望你能给我一个提示。