2016-11-05 1 views
-1

나는 '코드 전문가 - 익스트림'이라는 경쟁 업체에 참가합니다. 이 대회에는 8086 회의 안전 금고와 열쇠가 있습니다. 안전하고 중요한 열쇠는 공동 데이터 세그먼트이며, 금고를 깨는 열쇠. 안전에 예 : 안전조립식 안전 대회

L: 
    mov ax, 5678 
    mov [1234], ax 
jne L 

휴식 그리고 지금 나는 그것을

and  al, 0FEh 
push ax 
clc 
mul  ax 
xor  ax, dx 
or  al, 1 
loc_10A: 
    sub  [0A2h], ax 
    pop  ax 
    push ax 
jnz  loc_10A 

도끼를 중단 할 수없는 안전이 키에

L: 
    mov ax, [1234] 
    cmp ax, 5678 
jne L 

예는 0을 사이에 무작위입니다 -64K

+1

무엇이 질문입니까? – fuz

+0

그 예는별로 의미가 없습니다. 원래 잠금 코드를 변경 했습니까? 그렇다면'je L '만이 아니겠습니까? 원래의 락보다 먼저 키를 추가하면,'L' 라벨과'jne L'은 키에 속하지 않습니다 (ZF = 0이면 무한 루프도 가능합니다). – Ped7g

+1

그 잠금 장치가 이미 실행 중이면 'ax'는 무작위로 0-64k 상수입니다. 따라서 nopasara와 같이 똑같은 일을 할 수 있습니다. 또는 모든 짝수를 [0A2h]에 넣어야합니다. 너무 빠르다), 우연히 정확한 것을 명중 할 때까지. (잠금 해제에 대한 제한이 있습니까?) – Ped7g

답변

2

우선 AX는 알 수 없지만 계산은 의미가 없지만 push ax;. 나중에 루프의 2 단계에서 시작하여 AX는 알려지지 만 일정하지 않으므로 2 개의 "메모리 var"값 사이의 차이를 포착해야하며 AX 값이됩니다. 다음과 같은 것이 있습니다 :

mov cx, 0ah;  
    delay: 
     nop; 
     loop delay; 
    l2: 
     mov ax, [0A2h]; 
     mov bx, [0A2h]; 
     sub ax, bx 
    jz l2; 
     mov [0A2h], ax; 
    jmp l2 
+0

도움에 감사드립니다. –

+0

* L2 * 루프는 끝이없는 루프입니다. 아니면 * 0A2h * 메모리 단어가 시간이 지남에 따라 비동기 적으로 변경된다는 것을 알고 있습니까? –