2014-01-11 4 views
2

mips 어셈블리에서 어떻게 레지스터 (바이트 - 나는 lb 명령을 사용했습니다)의 내용을 ASCII 테이블을 기반으로 한 문자와 비교할 수 있습니까? beq $ t0,45, L1을 사용하는 것이 옳은가? 45 문자의 십진수레지스터와 아스키 문자 비교

+0

을, '-', L1' – Michael

+0

''을 사용할 수없는 경우를 대비하여? 나는 우리가 어떻게 해시계 번호 – user3185493

+0

과 비교할 수 있는지를 의미한다. 그리고 ascii 테이블에서 그것을 찾는다. – Michael

답변

1

내가 생각하는 한 가지는 데이터 유형의 개념을 잊어 버리는 것이다. 컴퓨터가 그렇게 똑똑하지 않기 때문입니다. 음, 물론 당신 수 없습니다 -

당신은 당신이 진수 값 45 $ T0를 비교할 수 있는지 여부를 묻는 것입니다. MIPS 프로세서는 십진수 값 45에 대해 아무것도 모릅니다. 단지 1과 0의 두 자릿수 만 알고 있습니다. 다행히도 십진수 값 45는 1과 0의 묶음으로 표현할 수 있습니다 - 0010 1101 정확히 8 비트 .

그러면 $ t0을 ASCII 문자 '-'와 비교할 수 있는지 궁금 할 것입니다. MIPS 프로세서는 십진수보다 ASCII 문자에 대해 더 이상 알지 못합니다. 다행히도 ASCII standard은 "this is a dash"라고 말하지 않습니다. 문자 '-'는 비트 패턴 0010 1101에 매핑됩니다.이 패턴은 십진수 45로 알고 있습니다. 또는 16 진수 0x2D -하지만 프로세서는 16 진수에 대해서도 알지 못합니다.

여기가 정말 운이 좋았습니다. 당신은 MIPS 코드를 1과 0으로 쓸 필요가 없습니다. 적어도 숙제를 마치면 한번도 할 수는 없지만 그렇게 할 필요는 없습니다. :) 어떤 스마트 한 친구들은 여러분이 입력 한 문자를 (예 : beq $t0, 45, L1) 하나 또는 그 이상의 32 진수로 바꾸는 어셈블러라는 것을 썼습니다. 친구들이 정말로 똑똑하다면, 아마도 어셈블러가 45가 0x2D와 같은 것을 알고 있는지, 그리고 아스키 문자 '-'와 같은 것임을 알았을 것입니다.

(그러나 @Konrad가 먼저 MARS 같은 어셈블러를 통해 코드를 실행하지 말았어야했다처럼 그래 ...?)

편집 : @Patrik가 언급 한 바와 같이, beq 소요 두 레지스터하지 레지스터와 즉각적인. 물론 beq $t0, 45, L1으로 구문 오류가 발생합니다. 먼저 값 45를 다른 레지스터 (아마도 $ t8)에로드 한 다음 beq $t0, $t8, L1을로드해야합니다.

+0

먼저 대답 해줘서 고마워. 둘째, 우리가 사용하는 어셈블러는 $ t0,45, L1, $ t0, '-', L1, $ t0,00101101, L1 – user3185493

+0

@ user3185493 명령 구문 오류를 찾습니다. @ Patrik의 대답을보십시오. 나는 beq가 레지스터와 즉치가 아닌 두 개의 * register * 피연산자를 취해야한다는 것을 기억해야했다. 따라서 레지스터에 체크 값을로드 한 다음 비교해야합니다. – RobertB

2

원리는 정확하지만 구문 오류가있는 경우, 당신은 레지스터에 문자 코드를로드하고 레지스터 비교할 수 있습니다 어떤 점잖은 어셈블러는`BEQ의 $ t0의를 작성할 수 것

li $t1, 45 
beq $t0, $t1, L1