나는 특별한 제한없이 여러 문자를 읽지 만 Enter 키를 눌러 프로그램을 만들고 싶다. (Enter 키의 아스키 코드가 13이라는 것을 발견했다. 'm 잘못)와 종류의 "스티치".어셈블리 MIPS : 함께 syscall 12 서비스에 의해 주어진 sticking 문자
예를 들어, 사용자가 '3', '4', '5'문자를 입력하면 프로그램은 정수 '345'를 표시해야합니다. 따라서 각 문자는 약간 일치해야합니다. 때문에 "매장 바이트"에 :
.text
.globl main
main:
add $t0, $zero, $zero #counter
loop:
li $v0, 12 #v0 = the character that was read
syscall
subi $v0, $v0, 48
#from the register column, I found that after the syscalls, the v0
#register always adds 48 to the given character
beq $v0, 13, exit #if Enter is given, exit from the loop
move $t1, $v0 #move the character to t1
sb $t1, ($t0) #store the character to t0
addiu $t0, $t0, 1 #point to the next spot of the t0
j loop
exit:
add $a0, $t0, $zero #load the contents of t0 to a0
li $v0, 1 #print the result
syscall
li $v0, 10
syscall
내 awkardly 작성된 코드를 보여줍니다 오류는 "주소 범위를 0x00000000에서 런타임 예외 0x00400020에서"
나는 다음과 같이 루프로 재생하려고 명령.오프셋을 주어야합니까?
"저장소 바이트"전체가 근본적으로 잘못 되었습니까?
given_character-48은 매번 필요합니까?
어떻게해야합니까?
난 네이티브 큰 정수를 다루는 방법에 대해서는 아무것도 대답하지 않았습니다. 현재의 어셈블리 기술 IMO에서는 너무 복잡해 보입니다. 그래서 나는 당신을 "문자열"해결책으로 밀어 넣을 것이지만, 아마도 그것이 당신이 기대했던 것이 아닙니다. – Ped7g
BTW, 왜 '3', '4', '5'입력이 출력시 '347'을 생성해야하는지 파악할 수 없습니다. 귀하의 질문에서 명확하지 않은 것은 입력 값으로 어떤 계산을하고 싶은지 ... 그래서 오타라고 생각합니다. – Ped7g
정말 오타입니다 – Coursal