현재 사용자에게 정수 값을 묻는 메시지가 화면에 출력되는 ci20 컴퓨터의 작은 프로그램을 작업 중입니다.어셈블리 ci20에서 사용자 입력 프롬프트 표시 오류
내 현재 코드
.data
prompt:
.asciiz "Please enter an integer: "
message:
.asciiz "\nValue entered: "
.text
.global main
main:
addiu $sp, $sp, -4 # push stack
sw $ra, ($sp) # save return address
addi $v0, $0, 4
la $a0, prompt
syscall # printing prompt
addi $v0, $0, 5
syscall # get user input
move $t0, $v0 # save input in $t0
move $a0, $v0
addi $v0, $0, 1 # Not sure if this is right to print message
la $a0, message # Not sure if this is right to print message
syscall
lw $ra, ($sp) # restoring $sp
addiu $sp, $sp, +4 # release the stack space used for $sp
내가 독방 감금 오류를 얻을 프로그램을 실행하려고 그 이유는 확실하지 않다. 어떤 도움이나 제안이라도 대단히 감사하겠습니다.
네, 리눅스 읽기/쓰기 시스템 호출은 파일 디스크립터 (예 : stdin은 0, stdout은 1), 버퍼 주소와 바이트 수를 취해야합니다. –
응답 @ Ped7g에 감사드립니다. 나는 gdb를 돌리는 Linux 기반의 머신 인 ci20 머신에서이 프로그램을 실행하고 있습니다. gdb 디버거를 통해 실행할 때 오류가 발생하지 않으므로 오류가 발생하는 이유를 혼동하지 않습니다. – TurtleMan
@ TurtleMan 그럼 인수는 segfault만큼 독성이 없지만 리눅스가 아닌 syscall에 MARS 인수를 사용하고 있습니다. 웹에서 간단히 살펴보면,'v0' ='4' (sys_write),'a0' ='1' (파일 설명자 stdout),'a1' ='prompt' (주소 .ascii 문자열),'a2' ='25' (.ascii 문자열의 길이)'syscall'. 짧은 코드에서 먼저 이것을 시도해보십시오 ... 오, 그리고'v0' ='1'은 sys_exit입니다 (종료 코드로'a0' 값을 가짐). 아마 a0 = 123과'echo $? '를 사용하여 종료 코드가 123인지 확인하기 위해 첫 번째 코드로 테스트하십시오. – Ped7g