2012-11-25 3 views
2

내가 레지스터 내로 .asciiz 매개 변수를로드하기 위해 노력하고있어에서 .asciiz에서 LW, 나는 오류가 발생,
코드 : MIPS 데이터

.data 


    stp: 
    .asciiz "stop" 

.text 

.globl main 

main: 

la $t1, stp 
lw $t1, 0($t1) 

내가 예외를 얻을 : 이달의 정렬되지 않은 주소를/data fetch,

레지스터로 .ascii를 단어로로드하는 방법은 무엇입니까?

입력 변수를 stp에 저장된 텍스트와 비교하고 싶습니다.
무엇이 잘못 되었나요?

답변

3

부호가있는 또는 0 확장 바이트 크기의로드에 대해 각각 lb 또는 lbu 명령어가 필요합니다.

단어로 4자를 모두로드하려면 적절한 어셈블러 지시문 (예 : .align 2)을 추가하여 문자열이 정렬되어 있는지 확인하십시오. 또는 ulw 의사 명령어를 사용하여 어셈블러가 올바른 순서 .

+0

'ulw'는 어떻게 작동합니까? 그것에 대한 정보를 찾을 수 없습니다 – res

+0

이것은 의사 명령어입니다. 어셈블러는 생성 된 코드로 대체합니다. 예를 들어 GNU 어셈블러는 이것을'LWL'과'LWR'로 변환합니다. 물론 동일한 코드를 직접 작성할 수 있습니다. – Jester

+0

감사합니다. 나는 'ulw'로 원했던 결과를 얻지 못했지만, .align n이 도움이되었습니다. – res