2016-10-31 5 views
0

나는 아주 간단한 프로그램을 실행하려고하지만 난 오류가 계속 : Invalid language element어셈블리 잘못된 언어 요소 MIPS

lw $t0, 0($a0)    #load integer from $a0->$t0 
beq $t0, 1, 1dimensional  #branch if $t0=1 

1dimensional: 
do something 

나는 오류가 발생하고 왜 이해하지 못할.

+0

http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html BEQ는 두 개의 레지스터 피연산자와 라벨을 취합니다. 즉각적인 것이 아닙니다. –

+0

@PeterCordes'beq'가 pseudo-op [어셈블러가 그것을 지원하면'mars'가하기 때문에] 두번째 인수로 immediate를 사용하는 것은 _valid_입니다. 다음의 "실제"명령 시퀀스를 생성합니다 : addi $ at, $ zero, 1' /'beq $ at, $ t0,1dimensional'. –

+0

아, 그래, 그럼 결국 http://stackoverflow.com/questions/16760255/why-we-cant-compare-bne-beq-a-register-with-an-immediate-assembly-mips의 복제본이 아닙니다. beq를 의사 연산으로 확장하면서 $ r1을 파괴 할 어셈블러를 사용한다면. 저에게는 정말 이상하게 보입니다.하지만 31 개의 아키텍처 레지스터가있을 때 OS가 비동기 적으로 clobber를 허용하는 것과 같이 일부는 낭비하는 것이 "ok"입니다. –

답변

2

오류 메시지의 중요한 부분, 즉 은 무엇이 잘못된 언어 요소 였는지입니다.
어셈블러에서 불평하는 것은 레이블 1dimensional입니다. 어셈블러는 글자와 밑줄 (그리고 아마도 하나의 .)을 레이블의 첫 번째 문자로 허용하는 것이 일반적입니다. 해당 라벨의 이름을 해당 요구 사항을 충족시키는 것으로 변경하십시오 (예 : onedimensional.