I am trying to explain to myself the following assembly code 8085
I have this code that requests two numbers (from the virtual keyboard inside the IDE) and displays them on LEDs 7 and 8:
.ORG 0000 CALL DATA MOV C,A CALL PRNT CALL DATA MOV E,A CALL PRNT MVI D,00H MOV L,E MVI H,00H MOV A,C DCR A JUMP: DAD D DCR A JNZ JUMP MOV A,L DAA JMP IMPR RET DATA: MVI A,00000000B OUT 00H IN 00H RLC RLC RLC RLC ANI F0H MOV B,A MVI A,00000000B OUT 00H IN 00H ANI 0FH ORA B RET IMPR: MOV B,A ANI F0H RLC RLC RLC RLC CALL NUMZ OUT 06H MOV A,B ANI 0FH CALL NUMZ OUT 07H RET NUMZ: CPI 00H JNZ ONE MVI A,01110111B JMP EXIT ONE: CPI 01H JNZ TWO MVI A,01000100B JMP EXIT TWO: CPI 02H JNZ THREE MVI A,00111110B JMP EXIT THREE: CPI 03H JNZ FOUR MVI A,01101110B JMP EXIT FOUR: CPI 04H JNZ FIVE MVI A,01001101B JMP EXIT FIVE: CPI 05H JNZ SIX MVI A,01101011B JMP EXIT SIX: CPI 06H JNZ SEVEN MVI A,01111011B JMP EXIT SEVEN: CPI 07H JNZ EIGHT MVI A,01000110B JMP EXIT EIGHT: CPI 08H JNZ NINE MVI A,01111111B JMP EXIT NINE: CPI 09H JNZ SAL MVI A,01001111B JMP EXIT EXIT: RET
I do not include PRNT because it is not important for my question.
I understand .ORG 0000 , which is the beginning of the program - it's like BEGIN in Pascal.
CALL DATA is a routine that fills the Battery with binary zeros and displays them (?) In port 0 (00H in hexadecimal format), then it receives (from the virtual keyboard) a number, and then rotates it to the left of the shift.
My question is why? What is the point of this? What is the use? I read about it on Wikipedia, but I still don't get it. What does he do in this code and why is it needed?