2017-02-08 2 views
3

으로 변환합니다. 지금까지이 코드를 번역했는데 이해할 수없는 것은 16 비트 직접 주소의 양을 계산하는 방법입니다.다음 기계 언어 코드 (0x2237FFF1)를 MIPS 어셈블리

0x2237FFF1 

0010 0010 0011 0111 1111 1111 1111 0001 

지금은 오피 코드 (001000)를 읽고 있어요으로

하고 I 형과

가 지금은에 진을 그룹화하고있어 addi 명령 것을 알고 I 형 명령어

op  rs rt  imm 
001000 10001 10111 1111111111110001 
    8  17 23  ? 

MIPS 참조 시트 그리고 명령이

addi $s7,$s1,???? 

내가 여기 스택을 해요 어떻게 genral에서 16 비트 즉시 주소를 확인하는 방법을 모르는해야합니다 것을 알아 냈다. 당신이

.word 0x2237FFF1 

후 조립 및 분해 당신은 도구를 수 있도록함으로써 시작할 수 있습니다

+1

당신은 이미 즉각적인를 발견, 그것은'1111111111110001'을합니다. 바이너리에서 변환 할 수 있습니까? immediates는 부호가 확장되어 있으므로 실제로는 십진수로 '-15'입니다. – Jester

+1

* "즉각적인 주소"*는 대개 의심 스럽습니다. Assembly에서는 대개 직접적으로 (즉, 명령어에서 직접 인코딩 한 값인 '0xFFF1' => sign to 32b ='0xFFFFFFF1' = '-15') , 또는 * 주소 *를 사용할 수있는 어드레싱 모드 중 하나에서, 즉각적인 모드는'pc + offset'이고,이 경우'pc-15' 주소입니다. 나는 일반적인 정보로이 글을 쓰고 있는데, MIPS 레퍼런스 가이드에서 특정 opcode를 검사하지 않았으므로, MIPS에 그러한 주소 모드가 있는지 알지 못한다. 그러나 어쨌든 당신은 직접적인 변형을 가지고 있다고 생각한다. – Ped7g

+1

또는 절대 주소 지정조차도 작업 할 메모리의 절대 주소가 명령어에 포함되어있는 경우와 같이 즉각적인 인코딩과 비슷하지만 일반적으로 RISC와 유사한 프로세서에서는 "워드"크기의 고정 크기 명령어와 절대 주소는 일반적으로 그것을 정의하기 위해 전체 "단어"를 요구합니다. 따라서 어떤 주소 지정이 관련되면 부호 확장 된 오프셋으로 값을 사용하여 99 % 상대 주소가됩니다. – Ped7g

답변

2

그것을 할.

mips-elf-as so.s -o so.o 
mips-elf-objdump -D so.o 

so.o:  file format elf32-bigmips 

Disassembly of section .text: 

00000000 <.text>: 
    0: 2237fff1 addi s7,s1,-15 

다음은 0x0000FFF1 또는 0xFFFFFFF1 당신이 당신의 계산기를 사용하거나 중 하나가 될 것입니다,이 경우 당신은 뭘하고 있었 일반적으로 immediate 만이 중 하나를 (명령어 세트 내에서 걸쳐 일반적으로) 서명되지 않았거나 일을 당신이 확장 한 비트를 보아서, 2의 보수가 반전을 반전하고 1을 더해서 여러분의 숫자가 1510 인 이진수 1110 + 1 또는 1111이되도록 0xFFFFFFF1이 -15의 부호있는 숫자가됩니다. 또는 서명 된 0xFFFFFFF1이 무엇이든, 수십억입니다.

편집이

ABI 레지스터 이름을 사용하여 내 바이너리 유틸리티를보고 실망

, 그래서 고정 :

Disassembly of section .text: 

00000000 <.text>: 
    0: 2237fff1 addi $23,$17,-15 
+0

해답을 주셔서 감사 드리며 2의 보수를 사용했습니다. 또한 모든 비트를 반전하고 1을 최하위 비트에 추가하십시오. 0000 0000 0000 1110 +1 = 0000 0000 0000 1111 '이것은 십진수로 15이므로 숫자가 음수입니다. -15입니다. – Adam