2017-12-22 40 views
2

thx 도움이 내 질문에 대한 도끼 값 아래에서받은?조립 물결 부호

mov al,22h 
mov cl,0fdh 
imul cl 
  • 실기 결과 : ff9a
  • I 예상 내용 :

제 수가 너무 22H 인 00:9a (이진 곱하여)의 34 진수는 이미 부호 번째 숫자 바이너리에서 fd입니다 11111101 처럼 그것의 서명처럼 그 의미 -3

그래서 22 * ​​-3 그 66; 서명 9A에 및 -66

그래서 FF는이 단지의 보수에 예상되는 동작입니다 시작

답변

2

거기 왜. 이후,

0000 0000 0110 0110 
1111 1111 1001 1001 #Flip bits 
1111 1111 1001 1010 #Add 1 
    f f 9 a 

내가 방금 상위 바이트를 무시 같은데요 : (102)의 전체 표현에서 시작합니다 (두 개의 피연산자, 34 진수 결과의 절대 값 -3) 우리는 16 비트에있다 당신은 아래쪽을 올바르게 바꿨습니다. 결과와 출력 레지스터가 설정된 크기이며, 산술에서이 레지스터의 일부를 무시할 수 없음을 기억하십시오.

4

imul clAX = AL * CL입니다. 8 비트 부호있는 입력에서 완전한 16 비트 부호있는 제품을 생성합니다.

왜 상위 바이트가 0 일 것으로 예상 했습니까? 그것은 서명 된 또는 서명되지 않은 것에 대해 말이되지 않습니다.

0x009a은 부호가있는 2의 보수 16 비트 정수로 +154을 나타냅니다. 0x10000 = -102 - 부호있는 2의 보수 16 비트 정수로

0xff9a0xff9a를 나타냅니다. -3 * 34에 대한 올바른 결과입니다. 이 숫자는 8 비트 부호의 경우 -128..127 범위에 있으므로 상위 8 비트 (0xff)는 하위 8 비트의 2's complement sign extension입니다.


는 이미 서명

아니, 긍정적 인 서명입니다. signed와 unsigned는 비트 해석 방법에 대한 질문입니다. 부호가있는 해석에서 숫자는 양수, 음수 또는 0 일 수 있습니다. 하지만 부호 비트가 0 인 숫자는 음수가 아닙니다.