2017-11-29 69 views
0

사람들이 비슷한 위치에 대해 glassdoor에 게시 한 인터뷰 질문을 수행하기 위해 인터뷰 준비를하고 있습니다. 나는 갇혀 있고 조금 혼란스러워.기계 수준 아키텍처, 다른 사람을 사용하여 명령을 구현하십시오.

레지스터가 1 개인 메모리 슬롯이 2 개인 프로세서. 그것은 두 가지 지침 SUB와 STO가 있습니다. 1 메모리,

  • SUB의 A, 메모리 2
  • STO의 MEMORY1하는
  • STO의 메모리 2하는
  • I를

    1. 서브 A :, LOD를 구현 추가하고, MOV는 다음을 사용하여 STO가 매장이고 LOD가 여기에 있다고 가정합니다. 그래서 레지스터는 0의 값으로 시작한다고 가정할까요? 그렇지 않다면 나는 값을 가지지 않는다면 레지스터로 빼기를 사용할 수 없기 때문에 시작하는 법을 모르겠다. 그렇지 않습니까? 여기에서 잃어버린 비트.

    답변

    2

    이것은 기본적으로 퍼즐을 푸는 것입니다. 인터뷰 기술로서 굉장히 생산적이지는 않지만 어떤 경우인지 이해하고 그에 대해 약간 다르게 대하는 것이 좋습니다. 체계적인 프로그래밍 문제. 인터뷰의 맥락에서 당신은 검색 공간에 어떻게 접근하고 있는지 그리고 대답을 뱉어 내기보다는 당신이 생각하고있는 것을 아주 분명하게하고 싶습니다.

    이 정신

    는, 우리는 초기 값이 임의의 경우 무엇을 할 것, a 처음에 제로하는지 여부의 질문 당

    ...이 좀 더 대화 형식 접근하는 것? 어떻게하면 0이 될까요? 우리가 가지고있는 유일한 계산 명령은 빼기 (subtract)입니다 ... 어떻게 그것으로부터 0이 보장됩니까? 음 X - X은 항상 제로입니까? 따라서 누산기를 0으로 만들 필요가 있으면 메모리 위치에 저장 한 다음 누적기를 다시 뺍니다. 포스트 조건은 누산기가 0이라는 것입니다.

    여기에서 우리는 하나 또는 둘 모두의 메모리 위치를 임시 저장소로 사용한다는 것을 알 수 있습니다. 이것은 상당히 큰 문제이지만, 합성 명령 시퀀스가 ​​하나의 메모리 위치를 임시로 사용하고 다른 하나는 입력 피연산자라고 주장해야 할 것입니다. 모든 작업이 입력을 손상시키지 않고 구현 될 수 있는지 여부는 공개적인 질문입니다.

    로드가 가장 간단해야하므로 시작하겠습니다. 우리가 원하는 :

    # zero a 
    STO a, memory2 
    SUB a, memory2 
    SUB a, memory1 # a == -memory1 
    # Save -memory1 and zero a again 
    STO a, memory2 
    SUB a, memory2 # a = 0 
    SUB a, memory2 # a = 0 - (-memory1) 
    

    LOD있다 :

    LOD a, memory1 # a = *memory1 -- destroys value in memory2 
    

    시도 할 수 있습니다. 더 효율적 일 수는 있지만 가능하면 시작해야합니다.

    ADD a, memory1 # a = a + *memory1 -- destroys value in memory2 
    

    위와 같이, 우리는 X - (-Y) == X + Y 대수 동등 물을 사용할 것입니다.

    STO memory2, a # save a, call this "original_a" 
    SUB a, memory2 # a = 0 
    SUB a, memory1 # a = -*memory1 
    SUB a, memory2 # a = -*memory1 - original_a 
    # Save -*memory1 - original_a, then zero a 
    STO a, memory2 
    SUB a, memory2 
    SUB a, memory2 # a = -(-*memory1 - original_a) == *memory1 + original_a 
    

    등등 ... 대답 메이트에 대한

    +0

    건배 –