Я думаю, что вы немного обошли дома.
BUF01 DS CL4 First data location
...
BUF02 DS CL4 Second data location
...
BUF03 DS CL4 Third data location
...
FINBUF DS 0CL9 Final location
FINB01 DS CL3 First final part
FINB02 DS CL3 Second final part
FINB03 DS CL3 Third final part
L R7,BUF01 Load first data to available gp register
STCM R7,B'0111',FINB01 Store low-order three where needed
L R7,BUF02 Load second data to available gp register
STCM R7,B'0111',FINB02 Store low-order three where needed
L R7,BUF03 Load third data to available gp register
STCM R7,B'0111',FINB03 Store low-order three where needed
ETVOILA Required data arrives at this point in FINBUF
Если ваши данные (или какой-либо из него) происходит уже быть в регистрах, канавы нагрузку и изменить R7
в соответствующий реестр.
Преимущество ICM
с B'1111'
, которое вы использовали в своем вопросе, заключается в том, что он устанавливает код условия, а LOAD - нет. Если вам не нужен CC, ICM будет медленнее LOAD, поэтому вы не будете использовать его.
Здесь нет проблем с слепотой загрузки четырех байтов в регистр, а затем хранения нижнего порядка. Возможны многочисленные вариации, но нет оснований держать это в противовес простым.
Все четыре байта загружаются в регистр. Только три младших байта регистра хранятся в памяти из-за маски, являющейся B'0111 '. Любые байты из регистра, которые соответствуют 1 в маске, будут храниться смежно, начиная с адреса второго операнда. Вы получаете свои непрерывные девять байтов, просто не сохраняя первый байт когда-либо. Нет необходимости в смене, а затем комбинировать.
Вот выдержка из объяснения хранения символов Под маской (STCM) инструкции, начиная со страницы 313 Глава 7. Общие указания тока (от г/OS 2.1 элементы и особенности страница, связанная с документацией) z/Архитектура Принципы работы, который является вашим справочным руководством для ассемблера мейнфреймов.
Б, выбранный из регистра общего назначения R (1) под контролем маски размещен на смежных местах байт, начиная со вторым операндом адреса.
Содержимое поля M (3) используется как маска . Эти четыре бита, слева направо, соответствуют одному для одного с четырьмя байтами , слева направо, общего регистра R (1).Для STORE CHARACTERS ПОД МАСКИ (STCM, STCMY) четыре байта, к которым соответствуют биты маски>, находятся в разрядных позициях 32-63 общего регистра R (1) ... Байт , соответствующий , для единиц в маске помещается в том же порядке в последовательном порядке и смежных местах хранения, начинающихся со второго операнда. Когда маска не равна нулю, длина второго операнда равна количеству символов в маске. Содержимое общего регистра остается неизменным.
Примечание. Ваш CPU может быть не последним, но описание и использование всех инструкций по вашему вопросу будет таким же. Спросите техническую поддержку, какую POP (Принципы работы) вы должны использовать, чтобы соответствовать вашему фактическому процессору.
Я считаю, что вы ищете опционный код типа «или» –
На самом деле простая загрузка и сохранение под маской. Не требуется никаких изменений или необходимости. –