1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
| DATA SEGMENT
NUM DB 20,?,20 DUP(?)
RESULTS DB 0,0,0,0,'$'
CRLF DB 0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET NUM
MOV AH,0AH
INT 21H
LEA SI,NUM
MOV CL,[SI+1]
XOR BX,BX
B1:
MOV AX,[SI+2]
CMP AL,'0'
JE S0
CMP AL,'1'
JE S1
S0:
MOV AX,0
ROL BX,1
ADD BX,AX
INC SI
LOOP B1
S1:
MOV AX,1
ROL BX,1
ADD BX,AX
INC SI
LOOP B1
LEA DX,CRLF
MOV AH,09H
INT 21H
MOV DI,OFFSET RESULTS
MOV CH,4
ROTATE:
MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL C1
ADD AL,07H
C1:
MOV [DI],AL
INC DI
DEC CH
JNZ ROTATE
MOV DI,OFFSET RESULTS
D1:
CMP BYTE PTR[DI],'0'
JNZ DISPLAY
INC DI
LOOP D1
DISPLAY:
MOV DX,DI
MOV AH,09H
INT 21H
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START
|