확인을 위해 내용을 인쇄 한 후 중단 점을 넣고 buffer
을 가리 키도록 메모리보기를 열면 파일의 내용이 텍스트를 형성하기 위해 ASCII 인코딩 된 연속 바이트 값으로 읽혔습니다.
그래서 실제 바이트 값은 다음과 같습니다
buffer: .byte 48, 48, 49, 49, 49, ... , 48, 49, <EOL>, 48, 48, ...`
<EOL>
라인 (MIPS에 아마
13
, 어쩌면 그냥
10
또는 둘 다)의 끝은
및 48
ASCII 문자의 값이 '0'
및 49
이의 값입니다 ASCII 문자 '1'
.
일부 헥사 뷰어에서 "bincode1.txt"파일의 내용을 볼 때 같은 바이트를 볼 수 있습니다.
32 ASCII 문자를 단일 32b 값으로 변환하려면 문자 읽기 ('0' (48)
/'1' (49)
)에 따라 단일 비트를 0/1로 설정하고 0/0이 아닌 문자로 잘못된 입력을 처리하는 방법을 결정하십시오. 1 자릿수로 단순화하기 위해 and char,1
을 사용하여 임의의 바이트에서 0/1 비트를 얻거나 심지어 숫자가 아닌 비트를 얻고 잘못된 파일을 무시하고)이 비트들을 함께 병합 할 수 있습니다.
함께 비트를 병합하는 가장 쉬운 방법은 루프 t0 = 0
의 제로 앞서 일부 임시 레지스터를 설정하는 IMO이며, 다음 다음 첫 번째 sll $t0, $t0, 1
왼쪽에 모든 비트를 이동 buffer
에서 다음 문자를 읽고, 이후 최하위를 설정 (가장 오른쪽에있는 비트를 추출 할 때 이 도움이 될 수 있습니다. and char,1
). 루프를 32 번 반복하면, t0
에 32b의 숫자가 생깁니다 (왼쪽으로 이동하면 첫 번째 문자 읽기가 가장 왼쪽 비트로 끝나기 때문에 원하는대로 될 가능성이 큽니다).
그런 다음 숫자 값으로 인쇄하여 변환 결과가 올바른 결과인지 확인할 수 있습니다.
힌트 : 입출력 데이터를 시각화하고 해당 비트가 어떻게 관련되어 있는지 확인하고 디버거로 비트를 재생하여 메모리 및 레지스터 값을 표시하는 방법을 확인하십시오 (여러 가지 형식/그룹화 가능). 이것은 다른 상황에서 특정 값을 쉽게 검사 할 수 있습니다. ASCII 데이터를 검사 할 때와 같이 별도의 바이트를 보는 것이 좋지만, 예를 들어 word
크기가 4 바이트가 단일 값으로 그룹화 된 경우 더 잘 볼 수 있습니다. 그런 다음 입력 데이터를 처리하여 예상 출력을 계산하고 알고리즘을 작성하는 방법을 상상해보십시오.
제 코드에서는 첫 번째 줄 위의 .data 부분을 복사하는 것을 잊었습니다. 거기에도 있어야합니다. – Jonathan
질문을 수정하여 수정하고 태그 아래의 "편집"을 찾아보십시오.** 답변을 한 후에 코드/질문 **을 변경하지 마십시오. 그 시점에서 정오표 나 추가 정보가있는 단락을 추가하기 만하면 원래 질문과 관련성이 있습니다. 답변을 받기 전에 : 원하는만큼 질문을 개선하십시오. 이미 합리적인 것처럼 보이지만 어떤 환경 (어떤 어셈블러, 디버거, 명령 행 작성 실행 파일이 보이는지)에 정보를 추가하고 동일한 env를 가진 사람이 동일한 문제를 복사/붙여 넣기 할 수 있는지 확인하십시오. – Ped7g