The Gateway to Computer Science Excellence
First time here? Checkout the FAQ!
+12 votes

Consider the following assembly language program for a hypothetical processor A, B, and C are 8 bit registers. The meanings of various instructions are shown as comments.

  MOV B, #0 ; $B \leftarrow 0$
  MOV C, #8 ; $C \leftarrow 8$
Z: CMP C, #0 ; compare C with 0
  JZ X ; jump to X if zero flag is set
  SUB C, #1 ; $C \gets C-1$
  RRC A, #1 ; right rotate A through carry by one bit. Thus:
    ; If the initial values of A and the carry flag are $a_7..a_0$ and 
    ; $c_0$ respectively, their values after the execution of this
    ; instruction will be $c_0a_7..a_1$ and $a_0$ respectively.
  JC Y ; jump to Y if carry flag is set
  JMP Z ; jump to Z
Y: ADD B, #1 ; $B \gets B+1$
  JMP Z ; jump to Z


If the initial value of register A is A0 the value of register B after the program execution will be

  1. the number of 0 bits in $A_0$
  2. the number of 1 bits in $A_0$
  3. $A_0$
  4. 8
asked in CO & Architecture by Veteran (69k points)
retagged by | 2.1k views
can anyone plz explain this ques. solution with example.
Content of A0 is copied to A, we are rotating register to right with Carry, every 1 present in the register A carry will be set to 1, and everytime carry flag is set to 1, B will be incremented.

A contains the content of A0, it means when this program terminates, B will contain the number of 1's in the A (or) A0. there will be 8 iterations of the loop as value of C is initially 8 and with every iteration it is decremented by 1.

1 Answer

+16 votes
Best answer
B. The code is counting the number of 1 bits in A0. When a 1 is moved to carry, B is incremented.
answered by Veteran (346k points)
edited by

Dear Arjun sir

I have a very stupid doubt here. Please pardon my ignorance.

First time the value of C will be 8 ==> 1000

Now , after SUB C,#1 , value of C will be 7 ==> 0111

Now , will the RRC be 1011 ? so , B will be 0+1 = 1

After this C will be 7 ( CMP C,#0 will be zero flag false ) , now C <- C-1 , so C is 6 , 0110 ,

Now , RRC will be 0011 , so B will not be incremented.

Will this program flow happen in this way ?

@ Arjun sir, In 49 , why rotation will happen 8 times ?
@coolcoder are you rotating C? Question is rotating A and decrementing C.

@Amsar Because C is initialized to 8.

Arjun sir,

yes yes , sorry ... 


@Arjun SIR 
Can u pls explain what is happening in line

RRC A, #1

Carry Flad =0 Regiser A = 10010
After RRC  010010
When does carry flag set? 

when $a_0=1$. This is mentioned in question.
Sir what will be contents of A after this code. Will it be 00000000, bcoz of CMP imstruction, as it will reset carry and zero flag when C !=0.
please provide the steps and iterated solution with one example.....

Related questions

Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true

33,687 questions
40,230 answers
38,791 users