LA instruction in assembler

Author Message
janishyathi bonam

New User

Joined: 05 May 2020
Posts: 2
Location: USA

 Posted: Tue May 05, 2020 8:17 am Hi! I'm trying to LA R1,5000 and it says invalid displacement. Is there a limit to the value of the second operand? How can I achieve this?
steve-myers

Active Member

Joined: 30 Nov 2013
Posts: 891
Location: The Universe

Posted: Tue May 05, 2020 9:52 am

Yes, there is a limit: 4095. There are at least three ways to achieve your goal.
• Two LA instructions, for example
 Code: LA    R1,2500          LA    R1,2500(,R1)

Dinosaurs like me would use this solution. The actual immediate values can be anything that adds to 5000; they do not have be 2500.
• LHI instruction  Code: LHI   R1,5000

This solution uses just 4 bytes.
• LGFI instruction  Code: LGFI  1,5000

This is hidden in Principles of Operation, but the sign of the immediate value is extended to bits 0 through 31 of the register. This solution uses 6 bytes.
janishyathi bonam

New User

Joined: 05 May 2020
Posts: 2
Location: USA

 Posted: Tue May 05, 2020 9:56 am Thank you!!
Ravi GA

New User

Joined: 20 Mar 2020
Posts: 12
Location: India

Posted: Tue May 05, 2020 10:47 am

 janishyathi bonam wrote: Hi! I'm trying to LA R1,5000 and it says invalid displacement. Is there a limit to the value of the second operand? How can I achieve this?

LAY R1,5000 is one more way to load values greater than 4095.
steve-myers

Active Member

Joined: 30 Nov 2013
Posts: 891
Location: The Universe

Posted: Tue May 05, 2020 11:43 am

 Ravi GA wrote: ... LAY R1,5000 is one more way to load values greater than 4095.
Yes, indeed. I had forgotten about LAY. I would suggest you read Principles of Operation very carefully before using it.
 View Bookmarks All times are GMT + 6 Hours

 Topic Forum Replies Similar Topics Assembler test under mask question PL/I & Assembler 5 Assembler - Packed Decimals - PACK in... PL/I & Assembler 3 Calling Assembler from REXX PL/I & Assembler 5 Learning about Systems Assembler prog... PL/I & Assembler 5 Using L' to get length of instruction PL/I & Assembler 1
Search our Forums: