2013-10-26 7 views
-1

이 지연 루틴을 어셈블리 언어로 가지고 있는데, 어떻게 작동하는지 설명 할 수 있습니까? 저는 통찰력을 이해하고 이해하려고 애를 씁니다. 아무도 나를 밀어 넣기 기능을 이해하는 데 도움이 될 수 & POP? 모든 도움을 주신 것입니다 :)누군가가 어셈블리 언어로 작성된이 지연 루틴을 설명 할 수 있습니까?

DELAY: MOV CX, 0FFH 

    DLY5: PUSH CX 
      MOV CX, 03FFH 

    DLY10: NOP 
      LOOP DLY10 
      POP CX 
      LOOP DLY5 
      RET 
+0

'CX'가 루프 카운터로 사용됩니다. 따라서 0x100 * 0x400 라운드의 no-ops를하고 있습니다. –

+0

예 알아요. 하지만이 지침의 실행 흐름은 무엇입니까? –

+0

'LOOP'는'CX'를 감소시키고'CX'가 0이되지 않는 한 주어진 레이블로 점프합니다. Google "x86 루프 명령어"또는 "x86 명령어 세트"를 사용하면 x86 명령어에 대한 많은 유용한 정보를 찾을 수 있습니다. – lurker

답변

2

이 경우 push/pop은 외부 루프를 실행하는 역할을합니다. 두 개의 카운터 (내부 루프는 03FFH, 외부 루프는 0FFH)를 가지면서 전체 지연에 대해 하나의 레지스터 만 사용하십시오.

아마도 저자는 다른 레지스터를 망치고 싶지 않았거나 cx 레지스터가 필요한 루프 명령어를 사용하려고했을 것입니다.

+0

도움이 되셨습니다 :) 고마워 .. 지금 당장 .. –

+0

답변을 표시하거나 적어도 마커를 높이는 것이 좋을 것입니다. :) – Devolus