2013-05-11 4 views
-2

이 질문은이 질문을 올릴 적절한 장소가 아니므로 읽어서 낭비하지 말아주십시오. 또한, 당시에는 stackoverflow.com이 무엇인지 알지 못했고 stackexchange.com 웹 사이트가 있다는 것을 알지 못했습니다.배열의 최소값 찾기

관련하여이 질문에 대한 투표를 다시 생각해보십시오 (삭제할 수는 있지만 할 수 없습니다). 고맙습니다.

====================

그래서,이 내 첫 어셈블리 코드 중 하나입니다, 당신은 그것에 대해 어떻게 생각하십니까?

특히

1 내가 배열에 10 개의 타워 갈 수있는 더 좋은 방법이 있나요?

2 배열 주소를 저장하기 위해 SI를 사용하고 있는데, 그 이유는 배열 패밀리를 저장하는 일반적인 패러다임이 있기 때문입니다. 그러나 왜 귀찮게해야합니까? 대신 'VECTOR'를 사용할 수 없습니까?

3 기타 일반적인 조언?

.org  100h 

.MODEL  SMALL 
.DATA 
    VECTOR  DW 3,4,2,0,54,-2,3,4 
    MIN   DW ? 

.CODE 
.STARTUP 
    XOR   AX,AX   ;counter 
    LEA   SI,VECTOR  ;store vector address in SI 
    MOV   BX,[SI]   ;BX is the minium, let's suppose it's the first element here 
    ADD   SI,2   ;I want to go through the array 2byte at once 
    INC   AX    ;scanned elements in AX 

TESTMIN: 
    CMP   BX,[SI] 
    JL   GOAHEAD 
    MOV   BX,[SI] 

GOAHEAD:  
    ADD   SI,2 
    INC   AX 
    CMP   AX,8 
    JL   TESTMIN    

ret 

너희들 :

+1

http://codereview.stackexchange.com/은 작업 코드에 대한 피드백의 장소입니다. –

+0

@ RaymondChen 감사합니다. 죄송합니다. 오류는 반복하지 않습니다. – doplumi

답변

0

1 내가 배열에 10 개의 타워 갈 수있는 더 좋은 방법이 있나요 감사 (그것은 ... 내 정말 첫 번째 코드이다)?

"개선"은 목표에 따라 다릅니다. 당신은 예를 들어 수 코드 크기 ..

  • 퓨즈 MOV BX,[SI]LODSWADD SI,2 (이것은 AX 대신 BX 당신에게로드 된 단어를 줄 것이다 참고)을 최소화하고 싶어합니다.
  • 루프 카운터를 8에서 시작하고 아래쪽으로 셉니다. 이렇게하면 CMP을 없애고 간단히 DEC/JNZ을 사용할 수 있습니다. 루프 카운터로 CX을 사용하고 LOOP 명령어 (CX이 감소)를 사용하십시오. 내가 그렇게하는 일반적인 패러다임입니다 본 적이 있기 때문에

나는 배열의 주소를 저장하기 위해 SI를 사용하고 있습니다. 그러나 왜 귀찮게해야합니까? 대신 'VECTOR'를 사용할 수 없습니까?

배열에서 레지스터의 주소를 레지스터에두면 프로그램의 여러 위치에서 참조하려는 경우 배열을 참조하려는 모든 명령에서 배치로 배치하는 것보다 더 간단한 코드가 생성됩니다 .