2011-10-22 2 views
0

MIPS 어셈블리에 맞게 문자열을 C의 이진 표현으로 변환하려고합니다 (C에서 MIPS 어셈블러 작성).MIPS 어셈블리 - 이진 표현의 문자열

00100000011001010110100001010100 
00100000011011010111010101110011 
01101110001000000110011001101111 
01100101011000100110110101110101 
01101001001000000111001101110010 
01110010011000010010000001101110 
00100000011110010110000101110010 

편지 T 바이너리에서 1,010,100입니다 : 문자열 "합", MIPS 그것은 다음과 같은 방법으로 (내가 MIPS의 데이터 섹션을 추출) 수행을 위해

. 첫 번째 줄 끝에 1010100이 표시되지만 나머지는 0이 아니어야합니다 (MIPS는 32 비트를 처리하므로 32 비트로 확장됩니다).

h은 1101000이고 두 번째 줄에는 1101000이 없습니다. 이유가 무엇입니까?

누군가 저에게 설명해 주시겠습니까?

답변

0

ASCII 데이터는 "부호 확장"되지 않습니다. MIPS 화성 시뮬레이터를 사용하여, 나는에 입력 :

.data 
.asciiz "The sum" 

.text 
main: 

이 데이터 세그먼트 생성 :

Address: Value: 
0x10010000 0x20656854 
0x10010004 0x006d7573 

을하지만 잠깐, 방금 54:68:65:20:73:75:6d "합"의 16 진수 값이 아닌가요? 그래, 그들이 실제로 저장되어있는 순서에 주목해라. 그렇지 않으면, Endianness를 보라. 가장 낮은 값은 가장 높은 주소를 갖습니다 (또는 가장 중요한 바이트가 첫 번째 주소 임). ASCII 문자열은 Big Endian 형식을 사용하여 저장됩니다.

문자열을 저장할 때 16 진수 값을 계산하고 문자열을 단어로 분할 한 다음 각 문자를 역순으로 저장하십시오. 그런 다음 이진으로 변환하십시오.

+0

어떤 명령에 공백이 있습니까? – darksky

+0

당신의 다른 질문에서 나는 공간이 0x20 인 것을 대답했습니다. – Ivan

+0

예, 알고 있습니다. 그러나 합계 사이의 공간은 "the"또는 "sum"과 함께 사용됩니까? 아니면 상관 없습니까? – darksky

0
$ echo "00100000011001010110100001010100 
00100000011011010111010101110011 
01101110001000000110011001101111 
01100101011000100110110101110101 
01101001001000000111001101110010 
01110010011000010010000001101110 
00100000011110010110000101110010 
"| perl -pe '$_=pack"B*",$_' 
ehT musn foebmui srra n yar 

어떻게 든, 해당 문자열의 문자는 이상한 순서대로, 감사합니다. int에 4자를 그룹화합니까?

+1

아마도 OP는 mips가 종종 빅 엔디안이라고 잊고 있습니까? – user786653

+0

나는 OP가 어떻게 .data 섹션을 추출했는지, 왜 ASCII 나 16 진수가 아닌 2 진수로 추출했는지 궁금합니다. – ninjalj

+0

기계어 코드를 ASCII로 추출합니다. – darksky