2017-11-27 2 views
1

음수 값이 다른 플래그와 함께 작동하는 방식을 이해하려고합니다. 이 코드 :다른 플래그가있는 음수 값

지금은 ZF이 CF는,의, 그리고 SF가 될 것입니다 무엇을 쓰기로되어있어
mov ax, 0 
add al, 116 
sub al, 117 

.

  • 결과가 0이 아니므로 0 플래그가 0이됩니다. 나는 '차용'에 있었기 때문에

  • 캐리 플래그는 1이됩니다.

    문제점은 워크 시트에 있습니다. 캐리 플래그가 다음과 같은 형식으로 켜지거나 꺼지는 이유를 써야합니다. '작업 결과가 _______ (기수 10)이기 때문에 캐리 플래그가 켜지거나 꺼집니다. 이 값은 8 비트의 숫자 범위를 초과합니다. '

내가 꽤 결과가 부호에있을 것입니다 무엇을 이해하지 못하는 ..

  • 오버플로 플래그 나는 꺼져 있어야 이해하지만 난 왜하지 않습니다. 2의

보완 : 0001 -> 1110 + 1 -> 1111 = FFh
FF는이`-127의 범위 전달됩니다 255 - 128 ', 왜 오프의입니까?

  • 로그인 플래그 - 왜 그것은에있다?

도움 주셔서 감사합니다.

+0

왜 결과가 0이 될 수 없습니까? 'al'이 '1'이면 결과는 0이됩니다. – Ped7g

+0

'OF'는 부호있는 산술을위한 것이며, '116-117 = -1'이고 범위가 범위 내에 있으므로'OF '가 0입니다. 또한 음수이므로'SF '가 켜져 있지만 부호가없는 범위에 없습니다 (분명히) 그래서'CF'가 켜져 있습니다. – Jester

+0

@ Ped7g하지만 결과는 -1입니다. 그래서 어떻게해야합니까? t는 0일까요? – eitanmayer

답변

1

al의 결과 1111 1111베이스 (2) 인 등의 케이스에 맞지 않는다 8 비트가 1로 설정 됨).

은 부호가없는 8 비트 값으로으로 해석하면 255 = FFh입니다.

부호가 8 비트 값인으로 해석하면 -1 = -1h입니다.

당신이 볼 수 있듯이 al의 값은 정보가 없습니다. 부호가 있거나 부호없는 값인 경우에는 8 비트입니다. 논리적 인 의미와 유형은 코드에 의해 주어 지는데, 이것은 8 비트를 확실하게 해석합니다.

CF는 부호없는 수학과 관련되어 있으며 116-117은 부호없는 범위를 벗어나는 (가능한 모든 비트 크기에 대해 0부터 시작하는) "1보다 작습니다."입니다.

시트에 무엇을 써야할지 모르겠다. 아마 -1인데, 그 결과는 십진수이며 실제로는 (부호없는) 8 비트의 범위를 초과합니다.그런 다음 다시 부호없는 컴퓨터 수학 0-1에서 256 (또는 다른 비트 크기에 대해 다른 2의 제곱)을 감싸는 것처럼 8 비트 값에 대해 255가 분명합니다 (8 비트 수학은 그룹 256이거나 대수에서 호출되는 방식입니다. 0-1을하면 잘 정의되고 결과는 단순히 "255"입니다).

거기에 255을 쓰면 그 제안 된 문장에 당황 스럽습니다. 그게 정확한 결과이지만, 그것은 부호없는 8 비트에 잘 맞습니다. 부호있는 8 비트 값의 범위를 초과합니다 (최대 +127). 그러나 부호있는 8 비트 값을 사용하면 결과는 -1이 8 비트에 맞습니다.이 말이 부정확하게 말하면 예상되는 답변이 확실하지 않습니다. CF는 0 - 1 = 255이므로 (→ CF = 1로 감싸지 만) 255는 8 비트에 맞습니다. 그 정도로 정확합니다.

OF 부호 관련 수학. 부호있는 수학이 오버플로되면 설정됩니다. 116 + -117을 할 때, 그것은 양수 + 음수 값입니다. 두 소스 값은 이미 8 비트 부호 범위 (-128 .. + 127) 내에있었습니다. 그런 다음 양수를 음수로 추가하면 원래 값 사이에 값이 생길 수 있습니다. 그것이 그들 사이에 있다면, 그것은 반드시 합법적 인 8 비트 부호있는 값이 될 것이므로 오버 플로우가 전혀 발생하지 않을 것입니다.

두 개의 음수 값 또는 두 개의 양수 값을 더하면 오버플로가 발생할 수 있습니다. 그런 다음 결과에 소스 값과 다른 부호가 있으면 오버 플로우가 발생합니다 (OF = 1). 나는. 긍정 + 긍정의 음성 결과는 OF = 1이고 음성 + 음성의 긍정적/제로 결과는 OF = 1입니다. 다른 모든 조합은 OF = 0입니다.

이 특별한 경우에, 116 + -117 = -1 →은 모두 문제없이 8 비트 부호있는 값에 맞습니다. OF = 0.

SF는 부호없는 8 비트 값 0..127이 부호있는 8 비트에서 동일한 방식으로 해석되기 때문에 결과의 최상위 비트이지만 128..255는 부호있는 8 비트에서 -128 ..- 1로 해석됩니다 여기서 최상위 비트는 음수 값 신호이며, 값은 - (256 - unsigned_8b_value)와 같을 수 있습니다. 하여 예에서 - (256 - 255) = -1, 및 상부 최 좌측, 하나의 부호화 값 2 7 = 128)


당신이었다 = 11111111 (의 SF는 = 1 (상위 비트. 이전 질문에서 http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt으로 이미 제공되었는데, 모두 아주 잘 설명되어 있습니까?

0

결과가 음수이면 SF가 1이됩니다. 권선 1 OF

때 두 숫자와 같은 부호를 갖거나 다른 부호를 갖는 2 개 번호를 감산을 첨가함으로써, 그 결과는 전체 (