그래서이 책의 "단계별 어셈블리 언어"는 정말 멋지지만 실제로 메모리와 레지스터 데이터를 작업 할 때 2의 보수가 어떻게 작동하는지에 대해서는 다소 비밀 스러웠습니다. 그와 함께, 나는 서명 된 값들이 메모리에 어떻게 표현되는지에 대해서 확신하지 못한다. 나는 나를 혼란스럽게 만든다. anywho ...ASM 질문, 2의 보수
"-1 = $ FF, -2 = $ FE 등등"이라고 표시됩니다. 이제 저는 2의 보수에 -1이 곱 해져서 원본에 추가되면 0이됩니다. 따라서 FF는 2 진수 11111111과 십진수 255의 16 진수입니다. 그래서 내 질문은 : "-1 = $ FF"라고 할 때 책의 내용은 무엇입니까? -255 + -1은 0을 제공 할 것이지만 OF 플래그를 명시 적으로 설정하지 않았습니까?
실제적으로 우리는 11h, 즉 17 진수이고 00100001은 2 진수라고 가정 해 봅시다. 이 값은 AL입니다. 그러면 NEG AL이됩니다. 그러면 CF와 SF가 설정되고 AL의 값이 소수점 239, 이진수 11101111 또는 EFh로 변경됩니다. 그게 17 * -1이 될지 모르겠다. 아니면 그 책이 잘못 말한 설명 일뿐입니다. 실제로는 오버플로를 유발하는 데 필요한 가치를 제공한다는 의미입니까?
감사합니다.
빠른 답변을 보내 주셔서 감사합니다. 알았어. 알았어. 그래서 지금 내 질문은, 이런 종류의 표기법이 성취한다는 것입니다. 1과 2의 보수가 모두있는 이유는 무엇입니까? –
2의 보수는 부호있는 숫자를 나타내는 매우 편리한 방법이기 때문에 일반적입니다. 'x - y == x + -y', 일관되게. IP에서 체크섬 (IIRC)으로 사용하는 것 이외에, 좋은 점이 무엇인지 잘 모르겠습니다. – cHao
@ 제로 : 내 기억은 2의 보수입니다 일반적으로 하나의 보완에 비해 하드웨어 구현 (약간의 경우 하드웨어 논리에 빼기 또는 뭔가 특별한 경우가 필요하기 때문에)보다 간단합니다. 또한 0에 대한 표현이 하나 뿐인 이점이 있습니다 (하나의 보수에는 '음수 0'이 있음). 생각할 수있는 2의 보완에 대한 유일한 단점은 음수보다 표현할 수있는 양수가 적다는 것입니다. 예를 들어, 서명 된 문자는'-128'까지 내려갈 수 있지만'127'까지만 올라갈 수 있습니다. 그 음의 제로는 어딘가로 가야했다. –