Ассемблер "сделай сам"

18 views
Skip to first unread message

Leo B.

unread,
Apr 20, 2021, 2:31:49 AM4/20/21
to БЭСМ-6
Как мы все знаем™ в юниксных ассемблерах существует возможность вводить локальные метки, обозначаемые цифрами, и ссылаться на ближайшую метку с данной цифрой, дополнительно указывая после цифры b или f, что значит "назад" и "вперёд".

Например (цитата из какого-то юниксного бутлоадера),
0:
    movzwl (r9)+,r0 # empty entry?
    beql 2f # yes, skip it
    clrl r1
1:  cmpb (r9)[r1],bootname[r1] # MicroVAX II doesn't have cmpc
    bneq 2f
    aoblss $DIRSIZ,r1,1b
    brb diryes # the name we want
2:  acbw $FSBSIZE-1,$DIRSIZ,r9,0b

Цифры для меток можно было переиспользовать сколько угодно раз.

Таким образом можно было заботиться о придумывании гораздо меньшего количества имён для меток. Похожая по духу фича была и в DEC-овском ассемблере, а вот в IBM-овском ничего подобного не было, потому что считалось, что с помощью макросов можно сделать что угодно.

Предлагается задача: реализовать на макроассемблере IBM/360 (он же БЕМШ) локальные метки в стиле юниксных, так, чтобы можно было писать, например,
0   МЕТ
...
    МПО 0,b запятая для удобства разбора аргументов макро 
...
    МПЕ 1,f
...
1   МЕТ
...

Есть ещё кто помнит, как это делается?

Leo

Michael Yaroslavtsev

unread,
Apr 20, 2021, 3:50:10 AM4/20/21
to be...@googlegroups.com
On Mon, Apr 19, 2021 at 11:31 PM Leo B. <leo...@gmail.com> wrote:
Как мы все знаем™ в юниксных ассемблерах существует возможность вводить локальные метки, обозначаемые цифрами, и ссылаться на ближайшую метку с данной цифрой, дополнительно указывая после цифры b или f, что значит "назад" и "вперёд".

Например (цитата из какого-то юниксного бутлоадера),
0:
    movzwl (r9)+,r0 # empty entry?
    beql 2f # yes, skip it
    clrl r1
1:  cmpb (r9)[r1],bootname[r1] # MicroVAX II doesn't have cmpc
    bneq 2f
    aoblss $DIRSIZ,r1,1b
    brb diryes # the name we want
2:  acbw $FSBSIZE-1,$DIRSIZ,r9,0b

Цифры для меток можно было переиспользовать сколько угодно раз.

Таким образом можно было заботиться о придумывании гораздо меньшего количества имён для меток. Похожая по духу фича была и в DEC-овском ассемблере,
ЕМНИП, это я впервые у Кнута в MIXAL ведел. 
а вот в IBM-овском ничего подобного не было, потому что считалось, что с помощью макросов можно сделать что угодно.

Предлагается задача: реализовать на макроассемблере IBM/360 (он же БЕМШ) локальные метки в стиле юниксных, так, чтобы можно было писать, например,
0   МЕТ
...
    МПО 0,b запятая для удобства разбора аргументов макро 
...
    МПЕ 1,f
...
1   МЕТ
...

Есть ещё кто помнит, как это делается?
Ох, сомнительно мне что-то, что ссылки вперёд получится сделать. А что такое МПО и МПЕ? Ясно, что надо &SNDX использовать. 

Leo

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/dc2f2d2a-cfd6-48c8-ae27-1b5538f4b129n%40googlegroups.com.


--
Thanks,
-- Michael

Leo B.

unread,
Apr 20, 2021, 4:00:45 AM4/20/21
to БЭСМ-6
On Tuesday, April 20, 2021 at 12:50:10 AM UTC-7 BOPOHOK wrote:


Таким образом можно было заботиться о придумывании гораздо меньшего количества имён для меток. Похожая по духу фича была и в DEC-овском ассемблере,
ЕМНИП, это я впервые у Кнута в MIXAL ведел. 

Ну да, вроде он это придумал, но не суть.
 
а вот в IBM-овском ничего подобного не было, потому что считалось, что с помощью макросов можно сделать что угодно.

Предлагается задача: реализовать на макроассемблере IBM/360 (он же БЕМШ) локальные метки в стиле юниксных, так, чтобы можно было писать, например,
0   МЕТ
...
    МПО 0,b запятая для удобства разбора аргументов макро 
...
    МПЕ 1,f
...
1   МЕТ
...

Есть ещё кто помнит, как это делается?
Ох, сомнительно мне что-то, что ссылки вперёд получится сделать. А что такое МПО и МПЕ? Ясно, что надо &SNDX использовать. 

Почему не получится? Глобальные переменные же есть. И разумеется, без &SNDX не обойтись. Кстати, меня позабавило, что в поле метки у макроса можно писать цифры, я уже проверил.

Leo

Leo B.

unread,
Apr 20, 2021, 4:01:54 AM4/20/21
to БЭСМ-6
А МПО и МПЕ - это будут макросы для ПО и ПЕ, аргумент которых - ссылка на локальную метку.
Reply all
Reply to author
Forward
0 new messages