2017-02-06 1 views
-4

지금 당장 어셈블리에 새로운 코드를 작성하고 있습니다. 도움이 필요합니다! 16h 인터럽트를 사용했는데 키 스트로크를 사용할 수 있는지 확인하고 싶습니다. 그래서 지금 제로 플래그가 있는지 확인하고 싶습니다. - 내가 어떻게 해?조립 - ZF가 0 또는 1인지 확인하는 방법은 무엇입니까?

감사합니다. :)

+4

내가 x86-16 가정, 맞나요? 'jz' 또는'je' (스타일에 따라 다름)는 ZF = 1인지 확인합니다. 'jnz' /'jne'는 ZF = 0을 검사합니다. [our doc] (https://stackoverflow.com/documentation/x86/5808/control-flow/20470/conditional-jumps#t=201702060901496425342)를 참조하십시오. –

+2

최소한 Intel x86 및/또는 x86_64 명령어 세트 설명서 사본을 얻으십시오. –

+0

또한 분기를 원하지 않고 0/1 값이 다음 코드에서 유용 할 수 있다면'setz/setnz'를 사용하여 ZF에 따라 8b 값을 0/1로 설정할 수 있습니다 ('jz/jnz' 브랜칭). 'int 16h, ah = 1' 다음에 ZF를 실제로 테스트해야하므로,이 대답은 관련이 없습니다.하지만 다음으로 배울 점이 있습니다 (값이 0인지 확인하는 방법). http://stackoverflow.com/a/41175294/4271923 – Ped7g

답변

1

here, ZF=1 키 스트로크를 사용할 수없는 경우 ZF=0 키 스트로크를 사용할 수있는 경우 표시됩니다. 당신은 JZ를 사용하여 그에 따라

분기하는 J(N)Z 지침을 사용할 수 있습니다

mov ax, 0100h 
    int 16h 
    jz no_key 
    ; Handle case if there is a key press here 
    ; AH will contain the scan code; AL will contain the ASCII code 

no_key: 
    ; Handle case if there is no key press here 

JNZ 사용 :

mov ax, 0100h 
    int 16h 
    jnz key_pressed 
    ; Handle case if there is no key press here 

key_pressed: 
    ; Handle case if there is a key pressed here 
    ; AH contains the scan code; AL contains the ASCII code 
+0

와우, 고마워! 그것은 저에게 정말로 도움이되었습니다! :) –

관련 문제