2013-10-07 5 views
0

부호, AVR서명 내가 ASM의 지침에 대한 몇 가지 질문이 조립

1) RD, Rr을 추가; Rd와 Rr은 부호없는 번호입니까?

2) 서명 된 numer를 레지스터에로드하는 방법은 무엇입니까? 나는 LDI Rd, K이 (가) unisgned되고 있다는 것을 알고 있습니다.

3) 두 개의 16 비트 숫자를 추가하여 구체적인 예를 나에게 제공 할 수 있습니까? 하나의 숫자가 음수라는 것이 중요합니까?

답변

1

2의 보수 연산에 대한 좋은 점은 덧셈과 뺄셈이 피연산자가 서명되었는지 여부에 관계없이 동일하게 작동한다는 점입니다. 피연산자와 결과를 적절히 해석하는 것은 프로그래머의 몫입니다. 그러나 오버 플로우 감지는 다릅니다.

12345-10을 추가합니다. 123450x3039이고 -100xfff6입니다. 먼저 낮은 바이트를 추가 한 다음 첫 번째 연산에서 올림으로 높은 바이트를 추가합니다.

LDI R16, 0x39 ; low byte of 12345 
LDI R17, 0x30 ; high byte of 12345 
LDI R18, 0xf6 ; low byte of -10 
LDI R19, 0xff ; high byte of -10 
ADD R16, R18 ; add low bytes without carry 
; R16 is now 0x39 + 0xf6 = 0x2f and carry is 1 
ADC R17, R19 ; add high bytes and the carry 
; R17 is now 0x30 + 0xff + 0x01 = 0x30 

그래서 결과 12335하고 예상 값 0x302f이다. 이제 초기 -10이 부호가없는 번호 65526으로 간주 될 수 있습니다. 결과는 변경되지 않고 그대로 유지되지만이 경우 오버플로가 발생합니다.

2's complement on wikipedia을 읽을 수 있습니다.

+0

내가 잘못하면 번호 12345 (0x3039)에 서명 되었습니까? – user16401

+2

서명과 서명 모두 동일합니다. 16 비트에서 '0'에서 '0x7fff'('32767')까지의 숫자, 즉 음수가 아닌 부호가있는 숫자는 부호가 있고 부호가없는 표현이 동일합니다. – Jester

관련 문제