2016-11-20 3 views
0

i8080 프로세서 용 어셈블러에서 두 개의 16 비트 숫자를 뺄 때 문제가 있습니다.어셈블러 빼기 16 비트 숫자

예 : 0f70 - 00f0 및 제 번호 제 D에서, 레지스터 B 및 C로하고 E. 것이다

이진 :

B = 0,000 1,111 C = 0111 0000

D = 0000 0000 E = 1111 0000

그래서 CE를 빼면 "빌려"해야합니다. 좋아, 그래서 나는 B를 감소시킬 것이지만 C는 어떨까? 나는이 경우에 C가 1000 0000이 될 것이라고 알고 있지만 다른 경우는 무엇입니까?

코드 :

ORG 800H 
RST 5 
MOV B,D 
MOV C,E //after this in B and C I have 16bit minuend 
RST 5  //after this in D and E I have 16bit subtrahend 
MOV A,C  //Move C to Accumulator 
SUB E  //subtract E 
JC SUBTRACTINGB //if it don't need borrow jump 
DCR B  //else decrement B 
MVI C,? // and what should be in C??? 
+0

무엇 C''에 대해? 당신은 그것을 고쳐 줄 필요가 없습니다. 아니면 빌리는 것만 더 높은 비트로갑니다. – harold

+1

"C는 어떨까요?" 너 자신에게만 의미가있다. C는 어때? 날씨는 어떨까요? 1. 코드를 보여주십시오. 2. 입력과 출력을 보여줍니다. 3. 예상 출력을 표시하십시오. –

+0

자, 내 코드의 일부분을 주석으로 가지고 있습니다. 질문 "C는 어떨까요?"라는 의미는 레지스터 C의 숫자로 무엇을해야합니까? sth을 빼야할까요? 나는 이진수를 빼는 방법을 알고 있지만 여기에서는 조금 다르다. –

답변

1

변경 없음 C에 필요합니다. 최하위 바이트에 빌림이 없으며 가장 낮은 바이트 빌림은 자체 값에 아무런 영향을 미치지 않으며 다음 바이트에서 1을 더 빼야합니다.

당신은 SBB를 사용하여 조건부 감소를 자동으로 수행 할 수 있습니다

; subtract low byte 
mov a,c 
sub e 
mov c,a 
; subtract high byte with borrow 
mov a,b 
sbb d 
mov b,a