2013-05-03 4 views
0

내 프로그램에서 0과 2^32 또는 4,294,967,295 사이의 입력을 받아 들여야합니다.MIPS 3000 어셈블리, 32 비트 부호없는 정수로드 및 인쇄

비트 단위로 32 바이트를 수행 할 수 있어야하지만 부호없는 정수로 만드는 방법을 모르므로 네거티브에 넘쳐납니다. 내가 산술을 통해 할 수있는 지침을 가지고 있지만, 난 그냥 레지스터에로드하고 그것을 인쇄하려는 경우? 지금은 항상 음수를 출력합니다.

답변

1

int가 서명되었거나 서명되지 않았는지 여부는 레지스터에 어떻게 존재하는지에 관계가 없습니다. 어느 쪽이든 그것은 단지 일련의 비트들입니다. 2^32 -1 = 0xFFFFFF. 이를 부호없는 정수로 해석하면이 값은 4,294,967,295 또는 2^32-1입니다. 2의 보수를 사용하는 부호있는 정수로 읽는 경우 0xFFFFFFFF는 -1입니다. 인쇄 명령에 문제가 있다고 생각합니다. 인쇄물을 서명되지 않은 것으로 포맷하십시오.

+0

나는 당신의 말의 첫 부분을 이해하고 있지만 MIPS 3000의 인쇄되지 않은 정수는 syscall로 보이지 않으므로 확실치 않습니다. – SomeRandomDeveloper

+0

레지스터를 인쇄하는 데 사용하는 코드를 표시하는 것이 좋습니다. 나는 이것이 MIPS에 관한 것이 아니라 OS에 대한 당신의 시스템 콜에 관한 것이고, 그 다음 당신이 결과로 무엇을하는지 생각한다. –

+0

@ A.E.Drew : 문자열로 직접 변환 할 수 있습니다 (그렇게하는 방법은 여기에 수십 개의 질문이 있습니다). 그런 다음 print_string syscall (4)을 사용하십시오. – Michael