2016-11-04 6 views
1

사용자 입력 네 자리 숫자 (1960을 입력한다고 가정) 다른 숫자를 마지막 두 자리 (60)와 비교해야하지만 막혔습니다. 처음 두 자릿수는 00-99의 값이 될 수 있으므로 1900을 뺄 수는 없습니다. 바이너리를 조작하려고 시도했지만 행운은 없습니다. 나는 1960 년부터 60 세까지, 또는 2005 년부터는 5 세까지 어떻게 얻을 수 있는지에 대한 제안.정수의 처음 두 자리 제거 - 어셈블리/nasm

+1

또는 단순하지만 효율적이지 않은 방법은 값을 확인하고 100에서 100을 감산하는 루프를 만드는 것입니다. 마지막 결과는 답입니다. – lurker

답변

3

데이터 모드 100! (데이터 % 100) 또는 나누어 나머지를 취하십시오. 같은 생각이야.

+0

고마워, 아직 그걸 시도하지 havent 믿을 수 없어! – user1726845

2

나누기 (100)에 의해 나머지 사용 애초에 정수를 문자열로 변환 할 때의 처음 두 자릿수 스킵

mov dx, 0 
mov ax, 1960 
mov bx, 100 
div bx 
;REMAINDER 60 IS IN DX. 
0

한다.

10은 2의 거듭 제곱이 아니기 때문에 비트 트릭이 도움이 될 수 없으므로 10 진수의 상위 자릿수는 2 진 표현의 하위 비트에 영향을줍니다.

+0

처음 두 자리 *를 사용하지 않는 것이 좋습니다. 그러나 실제로는 입력 시간 (숫자가 문자열로 간결하게 존재하는 경우)과 사용 시간 (비교가 이루어지는 위치와 숫자는 정수로만 존재합니다). –

+0

@SepRoland : 네, 맞습니다. 가능한 경우 모든 바로 가기와 기회를 활용할 수 있고 사용해야하는 어셈블리 언어입니다. 더 큰 프로그램의 일부로 사용하고 싶다면 어쨌든 다시 작성해야합니다. 다른 답변은 이미 좀 더 일반적인/유연한 솔루션을 다루기 때문에 DIV (또는 모듈러 곱셈 역행렬을 효율적으로 사용하는 방법)에 대해서는 언급하지 않았습니다. –