2017-12-23 9 views
1

내가 HL에서 가장 큰 숫자의 주소를 저장하고 싶지만 난 정말 할 방법을 모른다는 이 내가 지금까지 최대 수 - 8085 마이크로 프로세서

0000 LXI H,3000H  ;Load H-L pair with address 3000H 
    0001 
    0002 
    0003 MOV E,M  ;Move counter from memory to reg. E. 
    0004 INX H  ;Increment H-L pair 
    0005 MOV A,M  ;Move the 1st number from memory to reg. A. 
    0006 DCR E  ;Decrement counter. 
    0007 INX H  ;Increment H-L pair 
    0008 MOV D,M  ;Move the next number from memory to reg. D. 
    0009 CMP D  ;Compare D with A. 
    000A JNC 000EH ;Jump to address 000EH if there is no carry 
    000B 
    000C 
    000D MOV A,D  ;Move largest from reg. D to reg. A. 
    000E DCR E  ;Decrement counter. 
    000F JNZ 0007H ;Jump to address 0007H if counter is not zero. 
    0010 
    0011 
    0012 INX H  ;Increment H-L pair. 
    0013 MOV C,A  ;Move the result from reg. A to C 
    0014 HLT 


**MEMORY** 
3000H: 05 (counter) 
3001H: 2C 
3002H: 1E 
3003H: 58 
3004H: 46 
3005H: 53 

를 한 일이다

최대 숫자를 찾는 부분에서 코드가 올바르게 작동하지만 마지막에 HL에 최대 숫자의 주소를 저장하는 것입니다.

+0

코드를 주석 처리하는 것이 좋지만이 코드를 실행하면 정확히 작동하지 않는 것은 무엇입니까? ([mcve] 참조). 또한 서식을 수정할 수 있습니까? (더블 스페이스를 제거한 후 모든 코드를 선택하고'{}'아이콘을 클릭하여 코드 블록으로 만드십시오). –

+0

코드는 작동하지만 최대 값으로 주소를 저장하고 싶습니다. 이 경우, 프로그램을 실행 한 후, HL이 가장 높은 값을 가지기 때문에 3003H를 저장하기를 원합니다. – user1678

+0

좋은 편집. 가독성이 크게 향상되었으며 마지막 단락이 실제 질문으로 만듭니다. –

답변

1

저는 8085를 잘 모릅니다. 어떤 등록 기계에서나 작동하는 일반적인 대답. (또는 C 또는 무엇이든간에 : 답변이 "다른 언어와 마찬가지"인 질문 중 하나입니다.)

새로운 최대 값을 찾았 으면 주소를 으로으로 복사하십시오. 값. (조건부로 건너 뛰는 지침 블록 MOV A,D). 여전히 비교를위한 가치가 필요합니다.

8085에 충분한 레지스터가 없으면 메모리에 저장하십시오. 루프가 완료되면 원하는 경우 /에서 HL을 다시로드 할 수 있습니다. 의 값으로 귀하의 기능의 결과로 메모리에 둡니다.

최대 값 일 경우 첫 번째 요소에 시작 값과 주소를 모두 초기화해야합니다. 값만 검색하는 것과 달리 최대 값에 대한 이니셜 라이저로 가능한 최소값을 사용할 수 없습니다.

관련 문제