8088 어셈블리, IBM PC DOS, 25 바이트
미 조립 :
BA 0110 MOV DX, OFFSET GB ; point DX to 'Good','Bad' string
D1 EE SHR SI, 1 ; point SI to DOS PSP (80H)
02 04 ADD AL, [SI] ; add input string length to AL, set parity flag
7B 02 JNP DISP ; if odd parity, input was 'Bad' so jump to display 'Good'
02 D0 ADD DL, AL ; otherwise add string length as offset for 'Bad' string
DISP:
B4 09 MOV AH, 9 ; DOS display string function
CD 21 INT 21H ; call DOS API, write string to console
C3 RET ; return to DOS
GB DB 'Good$','Bad$'
설명:
DOS가 메모리 주소에 저장하는 입력 문자열의 길이 (및 선행 공백)를보고 80H
이를 AL
초기 0
에 DOS에 추가합니다 . 1
문자열 길이의 이진 표현에 홀수 비트 가 있으면 CPU 패리티 플래그는 홀수로 설정되고 그 반대도 마찬가지입니다. 따라서 입력 문자열 ' Bad'
길이 4
( 0000 0100
)는 홀수 패리티이고 입력 문자열 ' Good'
은 5
( 0000 0101
)은 짝수 패리티입니다.
DX
처음에 문자열을 가리 키도록 설정되어 'Good$Bad$'
있고, 패리티가 짝수 (입력을 의미 함 ' Good'
) 인 경우 문자열 포인터를 해당 길이만큼 앞쪽으로 이동 5
하여 이제 가리 킵니다 'Bad$'
. 패리티가 홀수이면 이미를 가리 키므로 아무 것도 수행하지 마십시오 'Good$'
. 그런 다음 DOS API를 사용하여 $
종료 된 문자열을 콘솔 에 표시하십시오 .
예:
GOODBAD.COM을 다운로드하여 테스트 하거나 xxd
덤프 에서 빌드하십시오 .
0000000: ba10 01d1 ee02 047b 0202 d0b4 09cd 21c3 .......{......!.
0000010: 476f 6f64 2442 6164 24 Good$Bad$