2012-05-01 3 views
1

작성할 어셈블리 프로그램이 있습니다. AX 레지스터가 0보다 큰 경우 BX에서 +1 이동하고, AX 레지스터가 0보다 작은 값을 가지면 BX에서 -1을 이동하고 AX = 0이면 BX에서 0을 이동합니다. 나는 다음과 같은 코드를 가지고 있지만 대체 솔루션을 찾고있다. 제발 도와주세요. 감사합니다AX 레지스터와 0을 비교합니다.

CMP AX, 0 
JG GREATER 
JL LESS 
MOV BX, 0 
GREATER: 
MOV BX, 1 
LESS: 
MOV BX, -1 
+0

왜 대안이 필요합니까? –

+0

@KendallFrey : 할 수있는 방법이 있는지 이해하고 싶습니다. – Foo

+0

원하는대로 할 수 있습니다. 원하는 경우 자체 하드웨어 장치를 만들어 변환을 수행하십시오. 다시 말해, 여러 가지 방법이 있습니다. 작동하는 작은 솔루션을 사용하십시오. –

답변

3

당신이 준 코드는 항상 -1을 반환합니다. 이 시도 :

CMP AX, 0 
JG GREATER 
JL LESS 
MOV BX, 0 
JMP END 
GREATER: 
MOV BX, 1 
JMP END 
LESS: 
MOV BX, -1 
END: 
+0

오, 내 잘못이야. 종료 점프를 추가해 주셔서 감사합니다. – Foo

1

는 하나의 조건 분기없이 무조건 점프를 필요로하는이, 시도 :

mov  bx, ax  // copy ax to bx 
    sarw bx, 15  // arithmetic shift - any -ve => -1, 0 or +ve => 0 
    cmp  ax, 0  // compare original number to zero 
    jle  end   // if it's <=, we're done 
    mov  bx, 1  // else bx = 1 
end: 

NB - 제 86 코드는 아주 아주 녹슨 입니다. 또한, sar의 버전은 8086 년 아니었지만, 나중에 286 년이었고, 80386.

편집은 내가없이 386+위한 더 나은 버전을 찾을 생각까지 특히 신속한하지 않았다 모든 지점 :