([DPSOH 7ZR
$ VWULQJ LQ PHPRU\ OLPLWHG WR D PD[LPXP OHQJWK RI FKDUDFWHUV
VWDUWLQJ DW ORFDWLRQ '$7$ LV WR EH PRYHG WR DQRWKHU PHPRU\ ORFDWLRQ
VWDUWLQJ DW ORFDWLRQ %8))(5 XQWLO DQ $6&,, XVHG DV D VWULQJ GHOLPLWRU
LV IRXQG 7KLV RSHUDWLRQ LV SHUIRUPHG DV IROORZV
LOOP:CP
END:
1LQHWHHQ E\WHV DUH UHTXLUHG IRU WKLV RSHUDWLRQ
([DPSOH 7KUHH
$ GLJLW GHFLPDO QXPEHU LV VKLIWHG DV GHSLFWHG LQ WKH )LJXUH 7KLV
VKLIW LV SHUIRUPHG WR PHFKDQL]H %&' PXOWLSOLFDWLRQ RU GLYLVLRQ 7KH
GLJLW GHFLPDO QXPEHU LV UHSUHVHQWHG LQ SDFNHG %&' IRUPDW WZR %&'
GLJLWVE\WH 7KH RSHUDWLRQ LV SURJUDPPHG DV IROORZV
ROTAT:RLD
80
LD
HL, DATA ;STARTING ADDRESS OF DATA STRING
LD
DE, BUFFER;STARTING ADDRESS OF TARGET BUFFER
LD
BC, 132
;MAXIMUM STRING LENGTH
LD
A, '$'
;STRING DELIMITER CODE
(HL)
;COMPARE MEMORY CONTENTS WITH
;DELIMITER
JR
Z, END-$ ;GO TO END IF CHARACTERS EQUAL
LDI
;MOVE CHARACTER (HL) to (DE)
;INCREMENT HL AND DE, DECREMENT BC
JP
PE, LOOP ;GO TO "LOOP" IF MORE CHARACTERS
;OTHERWISE, FALL THROUGH
;NOTE: P/V FLAG IS USED
;TO INDICATE THAT REGISTER BC WAS
;DECREMENTED TO ZERO.
LD
HL, DATA;ADDRESS OF FIRST BYTE
LD
B, COUNT;SHIFT COUNT
XOR A
;CLEAR ACCUMULATOR
;ROTATE LEFT LOW ORDER DIGIT IN ACC
;WITH DIGITS IN (HL)
INC HL
;ADVANCE MEMORY POINTER.
DJNZ ROTAT-$ ;DECREMENT B AND GO TO ROTAT IF
+DUGZDUH DQG 6RIWZDUH ,PSOHPHQWDWLRQ ([DPSOHV
< %27
7UGT U /CPWCN
Need help?
Do you have a question about the Z80 and is the answer not in the manual?