간단한 수학 계산을하려고합니다. 내 코드는 다음과 같습니다.
mov al, 128
sub al, -128
하위 명령어에 의해 설정된 플래그를 알아야합니다. 내 계산은 다음과 같습니다. 아이디어로 시작 sub
과 동일합니다 +(- your number)
. mov, al 128 에서 시작 하면 다음과 같습니다.
여기 있습니다 AL
:
128 = 0x80 = 1000 0000b
두 번째 단계 -128
는 128의 두 번째 보수 인 을 얻는 것입니다. 즉,
128 = 1000 0000b
-128 = 0111 1111b (1st complement) + 1 = 1000 0000b
그래서 ... 우리는 같은 수를 얻었습니다. 이제 우리는 그것들을 더해야합니다. 왜냐하면 그것이 실제 뺄셈 대신에 음수를 더하는 것이기 때문입니다.
최종 결과는 다음과 같습니다.
1000 0000b +
1000 0000b
----------
10000 0000b
이는 다음 플래그가 설정되었음을 나타냅니다. CF (캐리 있음), ZF (AL의 0) 및 PF (d0에서 d3까지 1의 짝수).
동일한 코드를 실행하면 다시 :
mov al, 128
sub al, -128
그것은 단지 설정합니다 ZF 와 PF 하지만, 어떤 CF를 . 그 이유는 무엇입니까? 내가 무엇을 잘못하고 있지 ?
sub가 + (-your number)와 같다는 생각.
CPU에 이것은 사실이 아닙니다. 첫 번째 숫자와 두 번째 숫자는 같습니다. 인간으로서 두 번째 숫자가 음수라는 것을 이해한다는 사실은 프로세서에 영향을 미치지 않습니다. 2 개의 동일한 숫자를 빼므로 빌릴 필요가 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다