-
[문제해설] 2진수 덧셈으로 8비트(bit) 레지스터 250과 10을 더하는 ADC 명령어를 사용하여 덧셈한 결과는?전자계산기조직응용기사/필기 기출문제 해설 2021. 10. 26. 09:42반응형
전자계산기조직응용기사 필기 기출문제 (1과목 전자계산기프로그래밍-어셈블리어) - 2019년1회
2진수 덧셈으로 8비트(bit) 레지스터 250과 10을 더하는 ADC 명령어를 사용하여 덧셈한 결과는?
① 000 1010 (10) ② 111 0000 (240)
③ 1111 1010 (250) ④ 1 0000 0100 (260)
- 문제 해설 -
어셈블리어 연산 명령어들은 레지스터 연산입니다. 일반적인 수리(數理)적인 연산이 아닌 레지스터 관점에서 연산을 하여야 합니다.
먼저 문제에서 제시된 ADC 명령어를 포함하여 간단한 연산 명령어를 알아보겠습니다.
명령어 기능 참고 ADD 레지스터끼리의 값을 더하거나, 레지스터의 값과 상수값을 더한다. ADD ADC 값을 더할 때, 캐리비트의 값을 추가한다. ADd with Carry SUB 레지스터끼리의 값을 빼거나, 레지스터의 값에서 상수값을 뺀다. SUBtract SBC 레지스터끼리 값을 빼며, 캐리비트의 값도 뺀다. SuBtract with Carry RSB 'SUB'와 동일하나 반대 방향으로 뺀다. Reverse SuBtract 위 표는 연산 명령어 중 가장 단순한 덧셈과 뺄셈의 명령어들입니다.
일반적인 덧셈(ADD)과 뺄셈(SUB) 명령은 주어진 레지스터의 비트수에 따라 연산을 해주며, 올림수나 빌림수가 발생할 경우는 무시하면 됩니다. 예를 들어 4비트 레지스터 연산일 경우, 13+5를 ADD연산을 할 경우 1101+0101=0010, 즉, 결괏값은 2가 됩니다.
하지만 ADC(add with carry)는 상태 레지스터(flag register)를 사용하여, 연산에 캐리를 반영합니다. 그럼 4비트 레지스터에서 13+5를 ADC연산을 하면 1101+0101=1 0010이 됩니다. 캐리가 발생하면 상태 레지스터를 활용하여 1 0010의 십진수 18이라는 결괏값을 표현합니다. 이때 상태 레지스터가 캐리 비트를 말합니다.
뺄셈도 마찬가지의 방식으로 SUB(subtract) 연산은 캐리를 무시하고 SBC(subtract with carry) 연산은 캐리를 포함합니다.
그럼 문제를 풀어보겠습니다.
문제에서 사용되는 레지스터는 8비트이며, 십진수 250과 10을 ADC연산을 합니다.
'250+10'을 8비트 레지스터 연산으로 표현하면, '1111 1010 + 0000 1010'입니다. 캐리를 포함하여 연산하면,
위와 같이 ADC연산 결과는 캐리 비트를 포함한 1 0000 0100 이므로 정답은 4번입니다.
https://youtube.com/playlist?list=PLboXycXmAIDuukQ2A6EvMZI-x1IMy3Xc-
반응형'전자계산기조직응용기사 > 필기 기출문제 해설' 카테고리의 다른 글
[문제해설] 다음 자료에 대하여 버블 정렬을 이용하여 오름차순으로 정렬할 경우 “pass 1"의 실행 결과는? (0) 2021.11.01 [문제해설] Infix 표기의 식 (A/(B^C))*D+E를 Postfix 방법으로 바르게 표현한 것은? (0) 2021.10.28 [문제해설] 다음의 프로그램을 실행한 결과로 옳은 것은? (0) 2021.10.25 [문제해설] 시프트 레지스터(shift register)의 내용을 오른쪽으로 한 번 시프트하면 데이터는 어떻게 변하는가? (0) 2021.10.24 [문제해설] 스택 S에서 B, A, D, C를 순서대로 입력시킬 때, 출력을 A, B, C, D 순으로 하기 위한 push와 pop의 횟수는? (0) 2021.10.23