Сообщение
Gregory » 27.04.2022,18:31
другим наглядным примером этого является команда LA (загрузка адреса):
"In the 24-bit addressing mode, the address is placed in bit positions 40-63, bits 32-39 are set to zeros, and bits 0-31 remain unchanged. In the 31-bit addressing mode, the address is placed in bit positions 33-63, bit 32 is set to zero, and bits 0-31 remain unchanged. In the 64-bit addressing mode, the address is placed in bit positions 0-63"
общие регистры в zSeries 64-разрядные, в S/360-S/370-S/390 регистры были 32-разрядными, поэтому команда LA вычисляет адрес второго операнда по правилам адресной арифметики и затем:
- если адресация 24-бита, помещает вычисленный адрес в биты 40-63 (т.е. правые 3 байта регистра), биты 32-39 (предыдущий байт) обнуляется, биты 0-31 (т.е. левые 4 байта регистра) не изменяются;
- если адресация 31-бит, помещает вычисленный адрес в биты 33-63 (т.е. правые 3 байта регистра), бит 32 обнуляется, биты 0-31 (т.е. левые 4 байта регистра) не изменяются;
- если адресация 64-битa, помещает вычисленный адрес в биты 1-63 (т.е. изменяется весь 64-битный регистр);
команда LA вида LA Rx,1(Rx)широко применялась в S/360-S/370 для увеличения значения в регистре на 1. В 24-разрядной адресации эта команда будет увеличивать значение в трех последних байтах, в 31-разрядной - в 4 последних байтах, при этом левые 4 байта не изменяются. в 64-разрядной адресации команда увеличивает на 1 значение всех 8 байт регистра