我正在尝试在汇编中重新创建C代码段。 C程序本质上:
创建一个char数组[256]和一个指针* A初始化为NULL。
然后将某些字符串的用户输入存储到char数组中
同时数组的第ith个元素!= 0
检查第ith个元素是否==一些已定义的char值V。
如果array [i] == V->设置A =&array [i]
break
最后检查A是否仍初始化为NULL如果不是,则为A的品脱地址和值[]]
[不幸的是,当我使用Qtspim
运行MIPS代码时,出现上述错误Exception at PC = 0x004000a8->(中止)->后跟inst /数据提取中的未对齐地址:0x1001012b
我感觉这与将字节值存储在数组中的方式或访问这些内存位置的方式有关,但是我无法弄清楚问题出在哪里。任何人都可以提供的任何见解将不胜感激。大家节日快乐!
下面是我的汇编代码:
# global functions aforementioned error
.globl main
# .text assembler directive
.text
# main
main:
# register map
# use $t0 for i
# use $t1 for NULL
# use $s0 for &inputArray[i]
# use $s1 for indexed array value
# use $s2 for the base address inputArray
# use $s3 for result
# use $t2 for constCharlwr
# Prompt user for input
la $a0, str1
li $v0, 4
syscall
# Get user input and store in input array
la $a0, inputArray
li $a1, 256
li $v0, 8
syscall
# set up registers
lb $t0, i
lb $t1, NULL
la $s2, inputArray
lb $s3, result
lb $t2, constCharlwr
li $s0, 0
add $s0, $s0, $s2 # s0 = &arrayA[i]
while: # while loop
add $s0, $s0, $t0 # base address + 1 byte
lb $s1, 0($s0) # load array index value into s1
beq $s1, $t1, outsideWhile # inputArray[i] != '\0'
if1:
bne $s1, $t2, outsideIf # check if inputArray[i] == e
move $s3, $s1 # if true copy s1(inputArray[i] into s3(result)
sb $s3, result
j outsideWhile
outsideIf:
addi $t0, $t0, 1
j while
outsideWhile:
if2:
beq $s3, $t1, else
# Print results
# Print string 2
lw $a0, str2
li $v0, 4
syscall
# Print address of result
la $a0, result
li $v0, 4
syscall
# Print next line
lb $a0, nextline
li $v0, 4
syscall
# Print string 3
lw $a0, str3
li $v0, 4
syscall
# Print result char value
lb $a0, result
li $v0, 4
syscall
# Print next line
lb $a0, nextline
li $v0, 4
syscall
j exitPrgm
else:
# Print No match
lw $a0, str4
li $v0, 4
syscall
# Exit the program by means of syscall.
exitPrgm:
li $v0, 10 # Sets $v0 to "10" to select exit syscall
syscall # Exit
# .data assembler directive
.data
inputArray: .space 256
constCharlwr: .byte 'e'
result: .byte 0
NULL: .byte 0
i: .byte 0
str1: .asciiz "Enter a word to search for letter e: \n"
str2: .asciiz "First match at address "
str3: .asciiz "The matching character is "
str4: .asciiz "No match found\n"
nextline: .asciiz "\n"
我正在尝试在汇编中重新创建C代码段。 C程序实质上是:创建一个char数组[256]以及一个指针* A,该指针被初始化为NULL。然后将用户输入的某些字符串存储到...
好吧,所以我弄清楚了我的最初问题,我没有在系统调用中使用la,一旦修复,我就开始获得想要的输出。现在唯一的问题是我可以弄清楚如何打印结果的实际地址。有人可以帮我弄这个吗。新代码,尝试一些不同的操作来获取内存地址,但似乎无济于事。