카테고리 없음

[어셈블리] AL의 ASCII 값이“0 – 9”범위의 숫자인지 테스트합니다. [Assembly X86]

행복을전해요 2021. 2. 20. 05:18

몇 가지 실수가 있습니다.

  1. DWORD 요소의 배열을 선언했지만 EDI와 ESI는 각 반복에서 1 바이트 씩만 증가합니다. 내가 당신이라면 바이트 배열을 사용합니다.
  2. 입력 배열 요소는 문자가 아닌 리터럴 숫자이므로 그 어떤 것도있는 그대로 일치하지 않습니다. 차이점을 확인하려면 요소 중 하나를 4 대신 '4'로 변경하십시오.
  3. WriteString문자열이 아니고 길이를 지정하지 않은 DWORD 요소의 배열을 인쇄 할 것으로 예상 합니다.

ZF의 경우이를 설정하고 지우는 전용 명령이 없습니다 (CF 및 IF 및 DF와 같은 몇 가지 다른 플래그와 마찬가지로). 당신은 그러나 알고 있어야 cmp당신은 다음과 플래그 확인 이렇게 할 때, 당신은 수정 플래그를 사용하는 명령 jbja및 점프는 ZF가 (표 참조 설정되지 않았 음을 확신 할 수 발생 여기를 ). 반면에 점프가 발생하지 않으면 ZF는 두 상태 (두 번째 비교 후 AL이 '9'이면 ZF가 1, 그렇지 않으면 0) 일 수 있으므로 수동으로 설정해야합니다. 여러 가지 방법으로이 작업을 수행 할 수 있지만 간단한 예를 들어 보면 괜찮습니다.

cmp al, al ; as AL equals itself, ZF would be set after this instruction is executed


출처
https://stackoverflow.com/questions/22079918