2016-12-05 2 views
1
00111100000000010001000000000001 
00110100001001000000000000000000 
00100100000000100000000000000100 
00000000000000000000000000001100 
00100100000000100000000000001010 
00000000000000000000000000001100 

이 기계어가 주어지면 첫 번째 줄 (32) 문자 만 가져와야하므로 다시 MIPS 명령으로 변환 할 수 있습니다. 첫 번째 코드 줄을 가져 와서 레지스터에 저장하는 방법을 찾는 데 문제가 있습니다. 누구든지 첫 번째 줄을 얻는 방법에 대한 아이디어가 있고 그 다음 줄은 무엇입니까? sll 또는 srl 지침을 사용하여 힌트를 얻었지만 그렇게하면 코드에 변경 사항이 표시되지 않습니다.MIPS의 문자열에서 지정된 문자 수를 얻는 방법은 무엇입니까?

파일 bincode1.txt에는 이전 6 행의 기계어가 있습니다. 32 시프트하려고하면 오류가 발생합니다.이 오류는 잘못된 것으로 알고 있지만 여기에서 무엇을해야할지 모르겠습니다. 어떤 제안이라도 도움이 될 것입니다.

+0

제 코드에서는 첫 번째 줄 위의 .data 부분을 복사하는 것을 잊었습니다. 거기에도 있어야합니다. – Jonathan

+0

질문을 수정하여 수정하고 태그 아래의 "편집"을 찾아보십시오.** 답변을 한 후에 코드/질문 **을 변경하지 마십시오. 그 시점에서 정오표 나 추가 정보가있는 단락을 추가하기 만하면 원래 질문과 관련성이 있습니다. 답변을 받기 전에 : 원하는만큼 질문을 개선하십시오. 이미 합리적인 것처럼 보이지만 어떤 환경 (어떤 어셈블러, 디버거, 명령 행 작성 실행 파일이 보이는지)에 정보를 추가하고 동일한 env를 가진 사람이 동일한 문제를 복사/붙여 넣기 할 수 있는지 확인하십시오. – Ped7g

답변

0

확인을 위해 내용을 인쇄 한 후 중단 점을 넣고 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 바이트가 단일 값으로 그룹화 된 경우 더 잘 볼 수 있습니다. 그런 다음 입력 데이터를 처리하여 예상 출력을 계산하고 알고리즘을 작성하는 방법을 상상해보십시오.