2011-11-23 3 views
2

내가 하루처럼 모든 관련 정보를 찾을 수없는이 문제에 붙어 봤는데 이상한 위치로 점프 IP .. 소요 내 코드에서이 한 부분있다8086 조립 - DIV가는 원숭이, 끝없이

숫자 (예 : 259)를 입력하고 숫자를 배열 슬롯으로 분리합니다. 나 터보 디버거를 디버깅 한

SEPERATE_DIGITS: 
    mov ax,RESULT    ; result is the number im working on. RESULT dw 259h 
    mov si,0 
    SEPERATE_DIGITS_LOOP: 
     div TEN     ; TEN dw 10h 
     add dl,30h    ; fix-up to print later on 
     mov SEPERATED[si],dl ; store separated digit in my array. 
     inc si 
     cmp ax,0 
    jne SEPERATE_DIGITS_LOOP 

은 .. 첫번째 부분은 잘 작동한다. (25는 도끼로, 9는 dx로) .. 다음 구획에서 IP는 원숭이가되고 "db FE"명령으로 점프하고 끝없이 반복됩니다.

무엇이 잘못 되었나요? q :

+1

'259'과 '259h'의 차이점을 알고 있습니까? – Gabe

+0

259h는 16 진수입니다. 259는 내가 믿는 10 진수입니다. (equivilent to 259d) – ckid

+0

@IgalKlebanov : 당신이 9, 5, 2를 원하기 때문에 그것은 단지 259 여야합니다. 만약 259 시간이 601과 같으면 1, 0, 6이됩니다. –

답변

6

여기서 DIV의 배수는 DX (상위 16 비트) 및 AX (하위 16 비트)에서 가져온 32 비트 값입니다.
배당금의 일부로 잔류 물을 재사용하지 않으려면 모든 DIV 전에 DX를 제로화해야합니다.

또한 디버거를 사용하십시오. 도움이됩니다.

+0

감사합니다 m8! 그것은 작동합니다. 실수로 div가 대상 레지스터 (dx, ax)에서 아무 것도 덮어 쓰지 않는다고 믿었습니다. – ckid

+2

글쎄, 그것은 모든 것을 덮어 씁니다. 그래서 그것이 문제를 일으켰습니다. –

+1

@IgalKlebanov : 정답이 답변으로 표시되어 있는지 확인하십시오. 질문에 대한 모든 답변 근처에 체크 표시가 있습니다. –