Pl INSTRUC2.DOC

From Atari Wiki
Revision as of 11:29, 17 December 2023 by Olivier.jan (talk | contribs)
Jump to navigation Jump to search
CONTINUATION OF THE COURSE ON INSTRUCTIONS from the INSTRUC.DOC file

LSL #BBB,dn (.B),[.W],(.L) (Logical Shift Left) -------------- or LSL dm,dn (.B),[.W],(.L) -------------- or LSL.W destination (.W) ------------------ Performs a shift of #BBB or dm (depending on the syntax) BITS of the data register dn to the left. The replacement bits are ZEROS. It is necessary that 1<= #BBB <= 8 for the 1st form. ------------- For the 3rd form, the allowed addressing modes for the destination operand are: ----------- BBBB BB (an) -(an) (an)+ d(an) d(an,rn) But in this case, the operation can only shift 1 SINGLE BIT. For example, if d0=%10000101110001101111011100000110 (word) ------ And if I write LSL.W #1,dn or MOVE.W #1,d1 LSL.W d1,d0, we get: d0=%00001011100011011110111000001100 <-------- <--:0 All the bits of the lower WORD of the data register dn (.W) have been shifted by 1 bit to the left: The least significant bit entering is always replaced by a NULL bit. Meaning: #BBB or dm BITS are shifted out of dn to the left and the replacement bits entering on the right of dn are NULL BITS. The contents of dn are therefore changed, the MSB is also likely to change, that's why the SIGN of dn may not necessarily be preserved. The CCR will change according to the new value of dn. --- N=1 if the MSB is 1, otherwise it is 0 Z=1 if all bits of dn are null, otherwise it is 0 V is always set to 0 C and X are set to the value of the LAST BIT EXITED from dn. Example of use: ---------------------- MOVE #%1111111101010101,d0 LSL.B #5,d0 A shift of 5 bits of the lower BYTE of d0 is operated (only bits 0 to 7 of d0 are therefore concerned by lsl.B) We get: CCR --------<------<:0 X=C=0 <- 1111111110100000 in d0 5 null bits have entered the right of the lower byte of d0, the last bit to exit from d0 was null: bit X=C=0 in the CCR LSR #BBB,dn (.B),[.W],(.L) (Logical Shift Right) -------------- or LSR dm,dn (.B),[.W],(.L) -------------- or LSR.W destination (.W) ------------------ Performs a shift of #BBB or dm (depending on the syntax) BITS of the data register dn to the right. The replacement bits are ZEROS. It is necessary that 1<= #BBB <= 8 for the 1st form. ------------- For the 3rd form, the allowed addressing modes for the destination operand are: ----------- BBBB BB (an) -(an) (an)+ d(an) d(an,rn) But in this case, the operation can only shift 1 SINGLE BIT. For example, if d0=%10000101110001101111011100000110 (word) ------ And if I write LSR.W #1,dn or MOVE.W #1,d1 LSR.W d1,d0, we get: d0=%01000010111000110111101110000011 0:--> -------> All the bits of the lower WORD of the data register dn (.W) have been shifted by 1 bit to the right: The most significant bit entering is always replaced by a NULL bit. Meaning: #BBB or dm BITS are shifted out of dn to the right and the replacement bits entering on the left of dn are NULL BITS. The contents of dn are therefore changed, the MSB is also likely to change, that's why the SIGN of dn may not necessarily be preserved. The CCR will change according to the new value of dn. --- N=1 if the MSB is 1, otherwise it is 0 Z=1 if all bits of dn are null, otherwise it is 0 V is always set to 0 C and X are set to the value of the LAST BIT EXITED from dn. Example of use: ---------------------- MOVE #%1111111101010101,d0 LSR.B #5,d0 A shift of 5 bits of the lower BYTE of d0 is operated. (only bits 0 to 7 of d0 are therefore concerned by lsr.B) We get: ------0:>------> CCR d0 :1111111100000010 -> X=C=1 5 null bits have entered the left of the lower byte of d0, the last bit to exit from d0 was 1: bit X=C=1 in the CCR ASL #BBB,dn (.B),[.W],(.L) (Arithmetic Shift Left) -------------- or ASL dm,dn (.B),[.W],(.L) -------------- or ASL.W destination (.W) ------------------ This instruction is identical to LSL. However, with ASL, the V bit of the CCR is set to 1 if the MSB of the destination operand is changed. --- ASR #BBB,dn (.B),[.W],(.L) (Arithmetic Shift Right) -------------- or ASR dm,dn (.B),[.W],(.L) -------------- or ASR.W destination (.W) ------------------ Performs a shift of #BBB or dm (depending on the syntax) BITS of the data register dn to the right. The replacement bits are equal to the most significant bit. It is necessary that 1<= #BBB <= 8 for the 1st form. ------------- For the 3rd form, the allowed addressing modes for the destination operand are: ----------- BBBB BB (an) -(an) (an)+ d(an) d(an,rn) But in this case, the operation can only rotate 1 SINGLE BIT. For example, if d0=%10000101110001101111011100000110 (word) ------ MSB=1 And if I write ASR.W #1,dn or MOVE.W #1,d1 ASR.W d1,d0, we get: d0=%11000010111000110111101110000011 MSB=1:--> -------> All the bits of the lower WORD of the data register dn (.W) have been shifted by 1 bit to the right: The least significant bit exits on the right. The replacement bit is identical to the MSB preceding the rotation. Meaning: #BBB or dm BITS are shifted out of dn to the right and they enter bits equal to the most significant bit on the left, in place of the missing bit. The contents of dn are therefore changed but its SIGN is PRESERVED because the MSB remains unchanged. The CCR will change according to the new value of dn. --- N=1 if the MSB is 1, otherwise it is 0 Z=1 if all bits of dn are null, otherwise it is 0 V is set to 1 if the MSB of the destination operand has been changed. C and X are set to the value of the LAST BIT EXITED from dn. Example of use: ---------------------- MOVE #%1111111101010101,d0 ASR.W #5,d0 bit nr°15=1 A shift of 5 bits of the lower WORD of d0 is operated. (only bits 0 to 15 of d0 are therefore concerned by asr.W) We get: MSB>---------------> CCR d0 :1111111111111010 -> X=C=1 at the end 5 bits are shifted out to the right of the lower WORD of d0 and we placed successively 5 bits equal to 1 (bit nr°15=1) in place of the most significant bit of the WORD. The sign of d0 remains preserved. The last bit to exit from d0 was equal to 1: the bit X=C=1 in the CCR ROL #BBB,dn (.B),[.W],(.L) ROtate Left -------------- or ROL dm,dn (.B),[.W],(.L) -------------- or ROL.W destination (.W) ------------------ Performs a ROTATION of #BBB or dm (depending on the syntax) BITS of the data register dn to the left. The replacement bits are equal to those that just exited. It is necessary that 1<= #BBB <= 8 for the 1st form. ------------- For the 3rd form, the allowed addressing modes for the destination operand are: ----------- BBBB BB (an) -(an) (an)+ d(an) d(an,rn) But in this case, the operation can only rotate 1 SINGLE BIT. For example, if d0=%10000101110001101111011100000110 (word) ------ And if I write ROL.W #1,dn or MOVE.W #1,d1 ROL.W d1,d0, we get: d0=%00001011100011011110111000001101 <----- <:1 All the bits of the lower WORD of the data register dn (.W) have been rotated by 1 bit to the left: The most significant bit exits on the left and returns on the right. (rotation) Meaning: #BBB or dm BITS are rotated out of dn on the left and they re-enter on the right, in place of the missing bits. The contents of dn are therefore changed, the MSB is also likely to be changed: the sign of the register is therefore not necessarily preserved. The CCR will change according to the new value of dn. --- N=1 if the MSB is 1, otherwise it is 0 Z=1 if all bits of dn are null, otherwise it is 0 V is set to 1 if the MSB of the destination operand has been changed. C is set to the value of the LAST BIT EXITED from dn. X is not affected. Example of use: ---------------------- MOVE #%1111111101010101,d0 ROL.B #5,d0 A rotation of 5 bits of the lower BYTE of d0 is operated. (only bits 0 to 7 of d0 are therefore concerned by rol.B) We get: -------C<------<:C CCR d0 :1111111110101010 -> C=0 at the end 5 bits are rotated out to the left of the lower byte of d0 and were replaced with bits equal to the least significant bit of the byte. The last bit to exit from d0 was equal to 0: the bit C=0 in the CCR Back to ASM_Tutorial