2010-04-12 3 views
4

나는 MARS simulator을 사용하여 MIPS 어셈블리 언어에 젖은 채로 노력하고있다.MIPS 어셈블리 : .data 섹션에서 정수 값을 선언하는 방법?

내 주요 문제는 어떻게 어셈블리 언어 지침을 통해 나중에 액세스 할 수 있도록 메모리 위치 집합을 초기화하는 것입니까?

예를 들어 주소 0x1001000 - 0x10001003을 0x99, 0x87, 0x23, 0x45 값으로 초기화하고 싶습니다. 내 어셈블리 프로그램의 데이터 선언 (.data) 섹션에서이 작업을 수행 할 수 있다고 생각하지만 구문을 잘 모르겠습니다. 이것이 가능한가?

.data 섹션에서 일부 메모리 위치에 정수 값을 저장하도록 지정하는 방법 (어디에서나 상관 없지만 그냥 어딘가에 참조하려는 경우). 그래서 나는 "int x = 20, y = 30, z = 90;"에 해당하는 C 코드를 찾고있다. MIPS 명령어를 사용하는 방법을 알고 있지만 MIPS 어셈블리 프로그램의 .data 섹션에서 이와 비슷한 것을 선언 할 수 있습니까?

답변

6

보통 특정 메모리 위치를 초기화하지 않습니다. 각 섹션 (.data 포함)은 링크 시간에 위치하며 재배치가 해결됩니다.

데이터 항목을 재배치하려면 이름을 선택하고 나중에 name:을 입력하면 나중에 이름으로 참조 할 수 있습니다 . .size value을 사용하여 데이터 블록을 지정합니다. 예를 들어 :

.data 
    x: .word 20 
    y: .word 30 
    z: .word 90 

그런 다음 당신은 당신의 어셈블리에 라벨을 사용할 수 있습니다

.text 
    lw $t0, x 
0

을 내가 선언 된 경우 x : .word 701 y : .word 701 then .text bge y, x, endin 프로그램의 본체, 조건은 정수를 허용합니다 변수 x와 y 따라서 끝 방법을 완료 할 수 있습니까?

밉스 프로그램에서 x 또는 y를 지정하면 x와 y의 기본 주소 만 반환됩니다. 예를 들어 , 입력 한 경우

addi $t0,y,8 

당신에게시겠습니까 $ T0 = 10000010는 (Y의 가정 주소 10000000에서 시작)

라벨 x와 y로 2 단어에서 두 값을 비교하는 올바른 방법

.data 
x: .word 701 
y: .word 701 

.text 
main: 
    lw $t0,x    #loads $t0 with 701 
    lw $t1,y    #loads $t1 with 701 
    bge $t0,$t1,end  #compares $t0 and $t1, if equal, jump to address [end] 

end: 
    #the code segment for end label 
관련 문제