[어셈블리] sort 문 어떻게 짜야되나요?
글쓴이: kknd345 / 작성시간: 목, 2005/04/21 - 3:22오후
for (int i=0; i< array.Length ; i++) { for ( int j=i; j< array.Length ; j++) { if( array[j] < array[i] ) { temp = array[j]; array[j]= array[i]; array[i]= temp; } } } }
위 정렬코드를 바꾸려다가.....
;=======================================; mov i, 0 iLOOP: mov cx, LENGTHOF array ; 반복 횟수 지정 sub cx, i ; 반복 횟수 지정 mov si, i jLOOP: add si, TYPE array mov edx, array[i] ; 에러난 줄 cmp array[si], edx JAE NOT ; 에러난 줄 OK: mov eax,array[si] mov edx,array[i] ; 에러난 줄 mov array[i],eax ; 에러난 줄 mov array[si],edx NOT: ; 에러난줄 loop jLOOP add i, TYPE array cmp i, LENGTHOF array JB iLOOP ;=======================================;
배열은 DWORD 형이고요. i는 WORD형 데이터입니다.
삽질만 거듭하다가 결국 GG입니다 ㅜㅜ...
제 코드에서 문제점좀 지적해 주세요...
( 코드자체가 실행이 안되니 다 문제이긴 하지만... ^^;;)
어셈에서 jmp 는 밑에 있는 곳으로는 못 가나요?
그리고 어셈코드 대소문자 구분 하나요?
Forums:
not은 명령어라서 라벨로 못씁니다. 어셈블러에 따라 다르긴하지만 업
not은 명령어라서 라벨로 못씁니다. 어셈블러에 따라 다르긴
하지만 업계에서 많이 쓰는 masm의 경우는 명령어를 라벨로
못쓰게 하고 있습니다.
그리고 array[i]는 금시초문이네요.
메모리 주소 지정모드에 대해서 공부하시기 바랍니다.
메모리 주소 지정시 숫자와 레지스터 조합으로 하는데,
여기에는 제약이 있습니다. array[i]와 같은 경우 주소가
고정된 array는 상수 immediate로 넣고, i와 같은 변수는
레지스터에 넣어서 레지스터+메모리 형태로 주소접근하는게
보통입니다.
메모리 주소 지정모드만으로도 처리 못하는 array나(3차원이상) structure들은,
메모리 주소를 계산해서 레지스터에 넣은 다음 그 주소로
접근하도록 코드를 짭니다.
Written By the Black Knight of Destruction
[code:1].dataarray DWORD 21,40,22,3,7,
코드가 좀 지저분하긴 하지만 이렇게 하니깐 이제 sort 되네요 ^^
답변 주셔서~ 고맙습니다~
1%의 가능성이면 충분하다!
최선을 다하자!
댓글 달기