2012-04-14 3 views
1

필자는 이전 학교에서 x86 아키텍처로 프로그래밍했고, 필자가 택한 새로운 클래스에서는 MIPS에 대한 지식이 필요합니다. 두 세계 사이의 개념과 아키텍처의 주요 차이점은 무엇입니까? 감사x86 어셈블리 프로그래머가 MIPS로 변환 중 무엇을 알아야합니까?

+3

실마리가 없다면 MIPS 클래스를 먼저 취해야합니다. 그래서 교육에 대한 대용품이 아니기 때문에, 학기를 대답으로 밀어 넣을 수는 없습니다. –

답변

1

그것은 내가 MIPS ASM 보았다 이후 잠시 있었지만

... 내가 무엇을 기억에서 이미 86 어셈블리 언어를 알고 얼마나 잘 따라했다, 나는 MIPS ASM이 너무 어려울 것입니다 생각하지 않습니다 데리러. 분명히 매우 순수한 RISC 명령어 세트라는 점은 x86보다 훨씬 간단합니다. 데이터 이동 명령어 (로드/저장), 일부 산술 명령어 (더하기, 빼기, 곱하기, 비트 시프트 및 마스킹) 및 분기 (비 조건부 점프)가 있습니다. 그 주제들에는 너무 많은 꾸밈이 없습니다.

실제로 MIPS를 시도하고 엄청나게 많은 범용 레지스터를 볼 때 약간의 부끄러움을 느낄 수도 있습니다. x86이 7-8 범용 명령 (ESP 계산 여부에 따라 다름)과의 투쟁이되는 것을 알고 있습니까? MIPS 단위로 32 개의 GP가 있습니다.

익숙해 져야 할 것은 파이프 라이닝 또는 파이프 라이닝의 의미입니다. 하나의 명령어가 더하기를 실행하고 그 결과가 r5 레지스터에 들어가면 다음 명령어가 실행될 때까지 실제로는 사용할 수 없습니다. r5가 합계를 보유하기 전에 다른주기 또는 2가 필요할 수도 있습니다 (세부 사항을 기억하지 마십시오). 따라서 코드에서이를 계획해야합니다. 또 다른 의미는 분기 명령어가 즉시 분기하지 않는다는 것입니다 (다시 말하면, 파이프 라이닝으로 인해 사이클 또는 2가 걸릴 수 있습니다). 따라서 분기 이후의 명령어가 이상한 방법으로 프로그램 상태를 엉망으로 만들지 않도록해야합니다 (의심스러운 경우 분기 이후에 NO-OP를 넣으십시오).

필자는 항상 ASM을 배우는 가장 좋은 방법은 프로그램을 ASM으로 분해하고 지침을 찾는 것임을 발견했습니다. 이를 위해 MIPS 툴체인 (here's a great place to get up to date, cross-compiling toolchains for numerous architectures, including MIPS)을 다운로드하여 설치하십시오. 이것을 사용하여 "Hello World"C 프로그램과 몇 가지 기본 수학 수식을 컴파일 한 다음 실행 파일에서 'objdump -d'의 MIPS 버전을 실행합니다. main() 함수를 시작으로 출력을 연구합니다. C 연산이 MIPS ASM으로 어떻게 매핑되는지 이해합니다.

행운을 빈다. 그것은 결코 사소한 것은 아니지만, 이미 x86 기술을 사용하고 있다면, 아마도 한 학기 동안이 과목을들을 필요없이 다른 ASM 세트를 배울 수있을 것입니다.

+0

감사합니다! 내가 필요한 것! – Bonk

관련 문제