Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

S/390ใฎๆฉŸๆขฐ่ชžใ‚’็ทๅฝ“ใŸใ‚Š่ชฟๆŸป

5
Last updated at Posted at 2015-10-08

S/390ใฏ1960ๅนดไปฃใซ้–‹็™บใ•ใ‚ŒใŸSystem/360ใ‹ใ‚‰ใƒใ‚คใƒŠใƒชไบ’ๆ›ๆ€งใ‚’ไฟใฃใฆใ„ใ‚‹ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใงใ™ใ€‚S/390ใฎๅ‘ฝไปคใ‚’่ชฟในใ‚‹ใŸใ‚็ทๅฝ“ใŸใ‚Šใง้€†ใ‚ขใ‚ปใƒณใƒ–ใƒซใ—ใฆใฟใพใ—ใŸใ€‚

ใ“ใฎ่จ˜ไบ‹ใซใฏๅง‰ๅฆน็ทจใŒใ‚ใ‚Šใพใ™ใ€‚

ใ‚ฏใƒญใ‚นใ‚ณใƒณใƒ‘ใ‚คใƒฉ

S/390ใฎๆฉŸๆขฐ่ชžใ‚’ๆ‰ฑใ†ใŸใ‚ใ€S/390ใ‚’ใ‚ฟใƒผใ‚ฒใƒƒใƒˆใซใ—ใŸใ‚ฏใƒญใ‚นใ‚ณใƒณใƒ‘ใ‚คใƒฉใŒๅฟ…่ฆใงใ™ใ€‚ไปฅไธ‹ใฎๆ‰‹้ †ใ‚’ๅ‚่€ƒใซs390-linux-gccใ‚’ใƒ“ใƒซใƒ‰ใ—ใฆใใ ใ•ใ„ใ€‚

ใƒ†ใ‚นใƒˆ

ๅ…ˆใฎ่จ˜ไบ‹ใจๅŒใ˜ใƒ†ใ‚นใƒˆใ‚’ใ—ใฆใฟใพใ™ใ€‚

add.c
int add(int a, int b) {
    return a + b;
}

ใ‚ณใƒณใƒ‘ใ‚คใƒซใ—ใพใ™ใ€‚

$ s390-linux-gcc -nostdlib -g -O add.c
/usr/lib/gcc/../../s390-linux/bin/ld: ่ญฆๅ‘Š: ใ‚จใƒณใƒˆใƒชใ‚ทใƒณใƒœใƒซ _start ใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใจใ—ใฆ 0000000000400094 ใ‚’ไฝฟ็”จใ—ใพใ™

โ€ป ่ญฆๅ‘Šใฏ็„ก่ฆ–ใ—ใพใ™ใ€‚

ๅ‡บๅŠ›ใ•ใ‚ŒใŸใƒใ‚คใƒŠใƒช๏ผˆa.out๏ผ‰ใ‚’้€†ใ‚ขใ‚ปใƒณใƒ–ใƒซใ—ใฆใ€ใฉใ‚“ใชๆฉŸๆขฐ่ชžใŒๅ‡บๅŠ›ใ•ใ‚Œใฆใ„ใ‚‹ใ‹ใ‚’็ขบ่ชใ—ใพใ™ใ€‚

$ s390-linux-objdump -S a.out

a.out:     ใƒ•ใ‚กใ‚คใƒซๅฝขๅผ elf32-s390


ใ‚ปใ‚ฏใ‚ทใƒงใƒณ .text ใฎ้€†ใ‚ขใ‚ปใƒณใƒ–ใƒซ:

00400094 <add>:
int add(int a, int b) {
    return a + b;
}
  400094:       1a 23                   ar      %r2,%r3
  400096:       07 fe                   br      %r14

ๅผ•ๆ•ฐใŒ%r2ใจ%r3ใงๆธกใ•ใ‚Œใฆใ€ๆˆปใ‚Šๅ€คใฏ%r2ใง่ฟ”ใ•ใ‚Œใ‚‹ๆง˜ๅญใŒ่ชญใฟๅ–ใ‚Œใพใ™ใ€‚%r14ใฏใƒชใƒณใ‚ฏใƒฌใ‚ธใ‚นใ‚ฟใฎใ‚ˆใ†ใงใ™ใ€‚

ๆฉŸๆขฐ่ชžใ‚’่ฆ‹ใ‚‹ใจใ€ไปฅไธ‹ใฎๅฏพๅฟœ้–ขไฟ‚ใŒ่ฆ‹ใฆๅ–ใ‚Œใพใ™ใ€‚

1a 23    ar %r2,%r3
1a    -> ar
   2  ->    %r2
    3 ->        %r3
07 fe    br %r14
07 f  -> br
    e ->    %r14

ใฉใ†ใ‚„ใ‚‰ๆง‹ๆˆ่ฆ็ด ใฏใƒ‹ใƒ–ใƒซ๏ผˆ16้€ฒๆ•ฐ1ๆก๏ผ‰ๅ˜ไฝใงใ€ใ‚ชใƒšใ‚ณใƒผใƒ‰ใฏ2ใƒ‹ใƒ–ใƒซ๏ผˆ1ใƒใ‚คใƒˆ๏ผ‰ใพใŸใฏ3ใƒ‹ใƒ–ใƒซใฎใ‚ˆใ†ใงใ™ใ€‚

ใ‚ชใƒšใ‚ณใƒผใƒ‰

ใ‚ชใƒšใ‚ณใƒผใƒ‰ใ‚’็ทๅฝ“ใŸใ‚Šใ™ใ‚Œใฐใ€ใ™ในใฆใฎๅ‘ฝไปคใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใŒๅˆ†ใ‹ใ‚‹ใฏใšใงใ™ใ€‚

00

ๆ‰‹ๅง‹ใ‚ใซ1ใƒใ‚คใƒˆใฎใ‚ผใƒญใง่ฉฆใ—ใพใ™ใ€‚

$ echo ".byte 0" | s390-linux-as
$ s390-linux-objdump -d a.out
๏ผˆ็•ฅ๏ผ‰
00000000 <.text>:
   0:   00 07 07 07             .long   0x00070707

.longใฏๆœชๅฎš็พฉใงใ‚ใ‚‹ใ“ใจใ‚’่กจใ—ใพใ™ใ€‚

ใ‚ขใƒฉใ‚คใƒณใƒกใƒณใƒˆใŒ4ใƒใ‚คใƒˆใ‚‰ใ—ใใ€07ใงใƒ‘ใƒ‡ใ‚ฃใƒณใ‚ฐใ•ใ‚Œใฆใ„ใพใ™ใ€‚ไป–ใฎใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใงใฏใƒ‡ใƒผใ‚ฟใŒ่ถณใ‚Šใชใ„ๆ™‚ใซใฏใ‚จใƒฉใƒผใซใชใ‚‹ใฎใงใ€ใ“ใฎใ‚ˆใ†ใซใƒ‘ใƒ‡ใ‚ฃใƒณใ‚ฐใ•ใ‚Œใ‚‹ใฎใฏ็ใ—ใ„ๆŒ™ๅ‹•ใงใ™ใ€‚

nopr

่ฃœๅฎŒใ•ใ‚ŒใŸ07ใฎๆญฃไฝ“ใ‚’็ขบ่ชใ—ใพใ™ใ€‚

$ echo ".byte 7" | s390-linux-as
$ s390-linux-objdump -d a.out
๏ผˆ็•ฅ๏ผ‰
00000000 <.text>:
   0:   07 07                   nopr    %r7
   2:   07 07                   nopr    %r7

noprใฏใ„ใ‚ใ‚†ใ‚‹NOPใฎใ‚ˆใ†ใงใ™ใ€‚ใ‚ชใƒšใƒฉใƒณใƒ‰ใฏ็„ก่ฆ–ใ•ใ‚Œใ‚‹ใŸใ‚ไฝ•ใงใ‚‚ใ‚ˆใใ€07ใง่กจ็พใงใใ‚‹%r7ใ‚’ไฝฟใฃใฆใ„ใ‚‹ใ‚ˆใ†ใงใ™ใ€‚

็ทๅฝ“ใŸใ‚Š(1)

ๆœ€ๅˆใฎ1ใƒใ‚คใƒˆใ‚’็ทๅฝ“ใŸใ‚Šใ—ใพใ™ใ€‚ๅ‘ฝไปค้•ทใŒไธๆ˜ŽใชใŸใ‚ใ€ๅพŒใ‚ใฏ07ใงๅŸ‹ใ‚ใพใ™ใ€‚ใ‚ขใƒฉใ‚คใƒณใƒกใƒณใƒˆใ‚’ไบˆๆƒณใ—ใฆ16ใƒใ‚คใƒˆใงๆƒใˆใพใ™ใ€‚

ใ‚ขใƒ‰ใƒฌใ‚นใจใƒ‘ใƒ‡ใ‚ฃใƒณใ‚ฐใฎnoprใ‚’ๅ–ใ‚Š้™คใ„ใฆใƒ•ใ‚กใ‚คใƒซใซไฟๅญ˜ใ—ใพใ™ใ€‚

$ for i in {0..255}; do printf ".byte 0x%02x,7,7,7, 7,7,7,7, 7,7,7,7, 7,7,7,7\n" $i; done > allop.s
$ s390-linux-as -o allop.o allop.s
$ s390-linux-objdump -d allop.o | cut -sf2- | grep -v nopr | tee allop.d
00 07 07 07             .long   0x00070707
01 07                   sckpf
02 07 07 07             .long   0x02070707
๏ผˆ็•ฅ๏ผ‰
fd 07 07 07 07 07       dp      1799(1,%r0),1799(8,%r0)
fe 07 07 07             .long   0xfe070707
ff 07 07 07             .long   0xff070707

ๅ‘ฝไปค้•ท

ๆœชๅฎš็พฉใฎ.longใ‚’ๅ–ใ‚Š้™คใ„ใฆๅ‘ฝไปคใ‚’็œบใ‚ใพใ™ใ€‚

$ grep -v long allop.d
01 07                   sckpf
05 07                   balr    %r0,%r7
๏ผˆ็•ฅ๏ผ‰
3e 07                   aur     %f0,%f7
3f 07                   sur     %f0,%f7
40 07 07 07             sth     %r0,1799(%r7,%r0)
41 07 07 07             la      %r0,1799(%r7,%r0)
๏ผˆ็•ฅ๏ผ‰
be 07 07 07             stcm    %r0,7,1799
bf 07 07 07             icm     %r0,7,1799
c0 07 07 07 07 07       xilf    %r0,117901063
c4 07 07 07 07 07       sthrl   %r0,0xe0e1a4e
๏ผˆ็•ฅ๏ผ‰
fc 07 07 07 07 07       mp      1799(1,%r0),1799(8,%r0)
fd 07 07 07 07 07       dp      1799(1,%r0),1799(8,%r0)

ๅ‘ฝไปค้•ทใŒใใ‚Œใ„ใซๅˆ†ๅธƒใ—ใฆใ„ใพใ™ใ€‚ๅพŒใฎ่ชฟๆŸป็ตๆžœใ‚’่ฆ‹ใฆใ‚‚ไพ‹ๅค–ใฏใชใ„ใ‚ˆใ†ใงใ™ใ€‚

ๅ…ˆ้ ญ1ใƒ‹ใƒ–ใƒซ ๅ‘ฝไปค้•ท
0-3 2
4-b 4
c-f 6

ๅฏๅค‰้•ทใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใงใฏใ‚ใพใ‚Šใซ้•ทใ„ๅ‘ฝไปคใฎใƒ€ใƒณใƒ—ใŒ้€”ไธญใงๆ”น่กŒใ•ใ‚Œใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใŒใ€allop.dใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใŸ้™ใ‚Šใงใฏใฏใฟๅ‡บใ—ใฆใ„ใพใ›ใ‚“ใ€‚

็ทๅฝ“ใŸใ‚Š(2)

ๅ‘ฝไปค้•ทใŒๅˆ†ใ‹ใฃใŸใฎใงๅพŒ็ถšใฎใƒใ‚คใƒˆใ‚‚็ทๅฝ“ใŸใ‚Šใ—ใพใ™ใ€‚ใŸใ ใ—ๅฎŒๅ…จใช็ทๅฝ“ใŸใ‚Šใงใฏๆ™‚้–“ใŒๆŽ›ใ‹ใ‚Š้ŽใŽใ‚‹ใŸใ‚ใ€ไปฅไธ‹ใฎๆ–น้‡ใง้–“ๅผ•ใใพใ™ใ€‚

  • 2ใƒใ‚คใƒˆๅ‘ฝไปคใฏๅฎŒๅ…จใช็ทๅฝ“ใŸใ‚Š (64*256=16,384้€šใ‚Š)
  • ใใ‚Œไปฅๅค–ใฏๆœ€ๅˆใฎ2ใƒใ‚คใƒˆใจๆœ€ๅพŒใฎ1ใƒใ‚คใƒˆใ‚’็ทๅฝ“ใŸใ‚Š (192256256=12,582,912้€šใ‚Š)

่จ˜ไบ‹ใ‚’ๆ›ธใๅ‰ใฎไบˆๅ‚™่ชฟๆŸปใงใ‚ชใƒšใƒฉใƒณใƒ‰ใจๆฉŸๆขฐ่ชžใฎๅฏพๅฟœ้–ขไฟ‚ใ‚’่ชฟในใŸ้š›ใ€ๆœ€็ต‚ใƒใ‚คใƒˆใซใ‚ชใƒšใƒฉใƒณใƒ‰ใŒๆฅใชใ„ใƒ‘ใ‚ฟใƒผใƒณใ‚’่ฆ‹ไป˜ใ‘ใŸใŸใ‚ใ€็ทๅฝ“ใŸใ‚Šใฎๅฏพ่ฑกใจใ—ใฆใ„ใพใ™ใ€‚

$ for i in {0..63}; do for j in {0..255}; do printf ".byte 0x%02x,0x%02x,7,7\n" $i $j; done; done > allop2.s
$ for i in {0..255}; do for j in {0..255}; do printf ".byte X,0x%02x,Y,0x%02xZ\n" $i $j; done; done > allop-template.s
$ for i in {64..191}; do hex=`printf "%02x" $i`; sed "s/X/0x$hex/" allop-template.s | sed "s/Y/0x12/" | sed "s/Z//"; done > allop4.s
$ for i in {192..255}; do hex=`printf "%02x" $i`; sed "s/X/0x$hex/" allop-template.s | sed "s/Y/0x12,0x34,0x56/" | sed "s/Z/,7,7/"; done > allop6.s
$ for i in 2 4 6; do s390-linux-as -o allop$i.o allop$i.s; s390-linux-objdump -d allop$i.o | grep -v long | cut -f2- | grep -v "^07 07" > allop$i.d; done
$ (cat allop[24].d; grep -v "^56" allop6.d) > allop-2.d

ๅ‡บๅŠ›ใ•ใ‚ŒใŸallop-2.dใ‚’ใ‚นใ‚ฏใƒชใƒ—ใƒˆใงๅˆ†ๆžใ—ใพใ™ใ€‚

allop-2.pl
# !/usr/bin/env perl

%mne = ();
$cur = "";

sub output {
    my %tmp = ();
    while (my ($m, $o) = each %mne) {
        $o =~ s/^(.. ..) 12/$1 --/;
        $o =~ s/^(.. .. ..) 34 56/$1 -- --/;
        $tmp{$o} = $m;
    }
    foreach $o(sort keys %tmp) {
        print "$o\t$tmp{$o}\n";
    }
}

while (<>) {
    chop while substr($_, -1) le " ";
    @f = split(/\t/);
    $o = $f[0];
    $m = $f[1];
    $o1 = substr($o, 0, 2);
    if ($cur ne $o1) {
        output();
        %mne = ();
        $cur = $o1;
    }
    $t = $mne{$m};
    if ($t eq "") {
        $mne{$m} = $o;
    } else {
        $oo = "";
        for ($i = 0; $i < length($t); ++$i) {
            $ch = substr($t, $i, 1);
            $oo .= $ch eq substr($o, $i, 1) ? $ch : "-";
        }
        $mne{$m} = $oo;
    }
}
output();

ใ‚ฝใƒผใ‚นใ‚’ๆจ™ๆบ–ๅ…ฅๅŠ›ใงๆธกใ—ใฆๅฎŸ่กŒ็ตๆžœใ‚’ใƒ•ใ‚กใ‚คใƒซใซๅ‡บๅŠ›ใ—ใพใ™ใ€‚

$ ./allop-2.pl < allop-2.d | tee allop-2.txt
01 01             	pr
01 02             	upt
01 04             	ptff
๏ผˆ็•ฅ๏ผ‰
fb -- -- -- -- -- 	sp
fc -- -- -- -- -- 	mp
fd -- -- -- -- -- 	dp

ใƒ‹ใƒผใƒขใƒ‹ใƒƒใ‚ฏใ”ใจใซๆฉŸๆขฐ่ชžใฎๅค‰ๅŒ–ใ‚’่ชฟในใพใ™ใ€‚16้€ฒๆ•ฐใฏๅค‰ๅŒ–ใ—ใชใ„ใ‚ชใƒšใ‚ณใƒผใƒ‰ใฎ้ƒจๅˆ†ใงใ€-ใฏๅค‰ๅŒ–ใ™ใ‚‹ใ‚ชใƒšใƒฉใƒณใƒ‰ใฎ้ƒจๅˆ†ใงใ™ใ€‚

ๅ…จ้ƒจใง777ๅ‘ฝไปคใงใ™ใ€‚

$ wc -l allop-2.txt
777 allop-2.txt

ใ‚ชใƒšใ‚ณใƒผใƒ‰ใฎใ‚ฟใ‚คใƒ—ใฏ13็จฎ้กžใงใ™ใ€‚้ฃ›ใณๅœฐใซใชใฃใฆใ„ใ‚‹ใฎใŒ็ขบ่ชใงใใพใ™ใ€‚

$ cut -f1 allop-2.txt | sed s/[0-9a-f]/X/g | sort | uniq -c | nl
     1       33 XX -- -- -- -- --
     2       79 XX -- -- --
     3       56 XX --
     4      189 XX -- -- -- -- XX
     5       60 XX -X -- -- -- --
     6       16 XX X- -- --
     7       39 XX -X -- --
     8       16 XX X-
     9        1 XX -X
    10       92 XX -X -- -- -- XX
    11       32 XX XX -- -- -- --
    12      154 XX XX -- --
    13       10 XX XX

ใ‚ชใƒšใƒฉใƒณใƒ‰

ใ‚นใ‚ฏใƒชใƒ—ใƒˆใงใ‚ชใƒšใƒฉใƒณใƒ‰ใฎ้ƒจๅˆ†ใซ้ฉๅฝ“ใชๅ€คใ‚’ๅŸ‹ใ‚่พผใ‚“ใงใ€ใƒ†ใ‚นใƒˆ็”จใ‚ขใ‚ปใƒณใƒ–ใƒชใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

allop-3.pl
# !/usr/bin/env perl

while (<>) {
    @f = split(/\t/);
    $o = $f[0];
    chop $o while substr($o, -1) le " ";
    $o =~ s/^(..) -/$1 1/;
    $o =~ s/^(.. .)-/$1.2/e;
    $o =~ s/^(.. ..) -- --/$1 34 56/;
    $o =~ s/^(.. .. .. ..) --/$1 78/;
    $o =~ s/^(.. .. .. .. ..) --/$1 9a/;
    print ".byte 0x", join(", 0x", split(/ /, $o)), "\n";
}

ใ‚ฝใƒผใ‚นใ‚’ๆจ™ๆบ–ๅ…ฅๅŠ›ใงๆธกใ—ใฆๅฎŸ่กŒ็ตๆžœใ‚’ใƒ•ใ‚กใ‚คใƒซใซๅ‡บๅŠ›ใ—ใพใ™ใ€‚

$ ./allop-3.pl < allop-2.txt | tee allop-3.s
.byte 0x01, 0x01
.byte 0x01, 0x02
.byte 0x01, 0x04
๏ผˆ็•ฅ๏ผ‰
.byte 0xfb, 0x12, 0x34, 0x56, 0x78, 0x9a
.byte 0xfc, 0x12, 0x34, 0x56, 0x78, 0x9a
.byte 0xfd, 0x12, 0x34, 0x56, 0x78, 0x9a

็ต„ใฟๅˆใ‚ใ›

ใ‚ขใ‚ปใƒณใƒ–ใƒซใ—ใฆ้€†ใ‚ขใ‚ปใƒณใƒ–ใƒซใ—ใพใ™ใ€‚

$ s390-linux-as -o allop-3.o allop-3.s
$ s390-linux-objdump -d allop-3.o | cut -sf2- | grep -v "^07 07" | tee allop-3.d
01 01                   pr
01 02                   upt
01 04                   ptff
๏ผˆ็•ฅ๏ผ‰
fb 12 34 56 78 9a       sp      1110(2,%r3),2202(3,%r7)
fc 12 34 56 78 9a       mp      1110(2,%r3),2202(3,%r7)
fd 12 34 56 78 9a       dp      1110(2,%r3),2202(3,%r7)

ใ‚ชใƒšใƒฉใƒณใƒ‰ใฎ็ต„ใฟๅˆใ‚ใ›ใ‚’็ขบ่ชใ™ใ‚‹ใจใ€็›ธๅฏพใ‚ขใƒ‰ใƒฌใ‚นใŒๅˆฅใ‚ซใ‚ฆใƒณใƒˆใ•ใ‚Œใฆใ—ใพใ„ใพใ™ใ€‚

$ cut -f3 allop-3.d | sort | uniq -c | nl
     1       10
     2        2 %a1,%a2,1110(%r3)
     3        2 %a1,%a2,492630(%r3)
๏ผˆ็•ฅ๏ผ‰
    29        1 %r1,0x68acf65a
    30        1 %r1,0x68acf666
    31        1 %r1,0x68acf750
๏ผˆ็•ฅ๏ผ‰
   123        9 1110(2,%r3),2202(3,%r7)
   124        1 18
   125       10 492630(%r3),18

ๅˆ†ๅ‰ฒ่ชฟๆŸป

็›ธๅฏพใ‚ขใƒ‰ใƒฌใ‚นใ‚’ๆƒใˆใ‚‹ใŸใ‚ใ€ไธ€่กŒใšใคๅˆ†ใ‘ใฆๅ‡ฆ็†ใ—ใพใ™ใ€‚

$ while read line; do echo $line | s390-linux-as; s390-linux-objdump -d a.out | head -n8 | tail -n1 | cut -f2-; done < allop-3.s | tee allopr.d
01 01                   pr
01 02                   upt
01 04                   ptff
๏ผˆ็•ฅ๏ผ‰
fb 12 34 56 78 9a       sp      1110(2,%r3),2202(3,%r7)
fc 12 34 56 78 9a       mp      1110(2,%r3),2202(3,%r7)
fd 12 34 56 78 9a       dp      1110(2,%r3),2202(3,%r7)

ใ‚ชใƒšใƒฉใƒณใƒ‰ใฎ็ต„ใฟๅˆใ‚ใ›ใฏ62็จฎ้กžใงใ™ใ€‚

$ cut -f3 allopr.d | sort | uniq -c | nl
     1       10
     2        2 %a1,%a2,1110(%r3)
     3        2 %a1,%a2,492630(%r3)
๏ผˆ็•ฅ๏ผ‰
    60        9 1110(2,%r3),2202(3,%r7)
    61        1 18
    62       10 492630(%r3),18

ๅฏพๅฟœ้–ขไฟ‚

ใ‚ชใƒšใƒฉใƒณใƒ‰ใฏใƒ‹ใƒ–ใƒซๅ˜ไฝใงๅŒบๅˆ‡ใ‚‰ใ‚Œใพใ™ใ€‚ใƒ“ใƒƒใƒˆๆผ”็ฎ—ใŒไธ่ฆใงใƒ€ใƒณใƒ—ใ‹ใ‚‰่ฆ–่ชใงใใ‚‹ใฎใงไพฟๅˆฉใงใ™ใ€‚

ไพ‹ใ‚’็คบใ—ใพใ™ใ€‚ๆ‹ฌๅผงใฎไธญใฎๅณๅ€คใฏ+1ใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใซๆณจๆ„ใ—ใพใ™ใ€‚

fd 12 34 56 78 9a    dp 1110(2,%r3),2202(3,%r7)
fd                -> dp
   1              ->         2=1+1
    2             ->                     3=2+1
      3           ->           %r3
       4 56       ->    1110=0x456
            7     ->                       %r7
             8 9a ->                2202=0x89a

ใƒฌใ‚ธใ‚นใ‚ฟใฏใƒ‹ใƒ–ใƒซใŒใใฎใพใพใƒฌใ‚ธใ‚นใ‚ฟ็•ชๅทใซใชใ‚‹ใฎใงใ€ๅฏพๅฟœ้–ขไฟ‚ใŒ็ฐกๅ˜ใซๅˆ†ใ‹ใ‚Šใพใ™ใ€‚

ๅˆ†ๆž

ใ‚ชใƒšใƒฉใƒณใƒ‰ใ‚’1ใคใšใคๅ–ใ‚Šๅ‡บใ—ใฆ็จฎ้กžใ‚’่ชฟในใพใ™ใ€‚ๆ‹ฌๅผงใฎไธญใงๅŒบๅˆ‡ใ‚‰ใ‚Œใชใ„ใ‚ˆใ†ใซใ€ไธ€ๆ—ฆใ‚ปใƒŸใ‚ณใƒญใƒณใซ็ฝฎใๆ›ใˆใฆๅˆ†ๅ‰ฒใ—ใฆใ‹ใ‚‰ๅ…ƒใซๆˆปใ—ใพใ™ใ€‚

$ cut -f2- allopr.d | cut -sf2 | sed 's/(\([^)]*\),\([^)]*\))/(\1;\2)/g' | sed 's/,/\n/g' | sed 's/;/,/g' | sort | uniq > allopr.txt

ใ“ใฎ็ตๆžœใ‚’ๆ‰‹ไฝœๆฅญใงๅˆ†ๆžใ—ใฆใ€ๅฏพๅฟœใ™ใ‚‹ๆฉŸๆขฐ่ชžใ‚’ๆŽจๅฎšใ—ใพใ™ใ€‚

็จฎ้กž ใ‚ชใƒšใƒฉใƒณใƒ‰ ๆฉŸๆขฐ่ชž ๅ‚™่€ƒ
ใƒฌใ‚ธใ‚นใ‚ฟ %a1 -- 1
ใƒฌใ‚ธใ‚นใ‚ฟ %a2 -- -2
ใƒฌใ‚ธใ‚นใ‚ฟ %c1 -- 1
ใƒฌใ‚ธใ‚นใ‚ฟ %c2 -- -2
ใƒฌใ‚ธใ‚นใ‚ฟ %f1 -- 1
ใƒฌใ‚ธใ‚นใ‚ฟ %f2 -- -2
ใƒฌใ‚ธใ‚นใ‚ฟ %f3 -- -- 3
ใƒฌใ‚ธใ‚นใ‚ฟ %f5 -- -- -- 5
ใƒฌใ‚ธใ‚นใ‚ฟ %f6 -- -- -- -6
ใƒฌใ‚ธใ‚นใ‚ฟ %f7 -- -- -- -- 7
ใƒฌใ‚ธใ‚นใ‚ฟ %r1 -- 1
ใƒฌใ‚ธใ‚นใ‚ฟ %r2 -- -2
ใƒฌใ‚ธใ‚นใ‚ฟ %r3 -- -- 3
ใƒฌใ‚ธใ‚นใ‚ฟ %r5 -- -- -- 5
ใƒฌใ‚ธใ‚นใ‚ฟ %r6 -- -- -- -6
ใƒกใƒขใƒช 1110(%r1,%r3) -- 1- 34 56 0x456=1110
ใƒกใƒขใƒช 1110(%r2,%r3) -- -2 34 56
ใƒกใƒขใƒช 1110(%r3) -- -- 34 56
ใƒกใƒขใƒช 1110(19,%r3) -- 12 34 56 0x12+1=19
ใƒกใƒขใƒช 1110(2,%r3) -- 1- 34 56 1+1=2
ใƒกใƒขใƒช 2202(%r7) -- -- -- -- 78 9a 0x89a=2202
ใƒกใƒขใƒช 2202(19,%r7) -- 12 -- -- 78 9a 0x12+1=19
ใƒกใƒขใƒช 2202(3,%r7) -- -2 -- -- 78 9a 1+1=2
ใƒกใƒขใƒช 492630(%r2,%r3) -- -2 34 56 78 0x78456=492630
ใƒกใƒขใƒช 492630(%r3) -- -- 34 56 78
ๅณๅ€ค 0 -- 0 ใ‚ชใƒšใ‚ณใƒผใƒ‰ใฎไธ€้ƒจ๏ผŸ
ๅณๅ€ค 1 -- 1
ๅณๅ€ค 2 -- -2
ๅณๅ€ค 3 -- -- 3
ๅณๅ€ค 4 -- -- -4
ๅณๅ€ค 7 -- -- -- -- 7
ๅณๅ€ค 8 -- -- -- -- -8
ๅณๅ€ค 18 -- 12 0x12=18
ๅณๅ€ค 52 -- -- 34 0x34=52
ๅณๅ€ค 86 -- -- -- 56 0x56=86
ๅณๅ€ค 120 -- -- -- -- 78 0x78=120
ๅณๅ€ค 13398 -- -- 34 56 0x3456=13398
ๅณๅ€ค 30874 -- -- -- -- 78 9a 0x789a=30874
ๅณๅ€ค 878082202 -- -- 34 56 78 9a 0x3456789a=878082202
็›ธๅฏพใ‚ขใƒ‰ใƒฌใ‚น 0x468 -- -2 34 0+2*0x234=0x468
็›ธๅฏพใ‚ขใƒ‰ใƒฌใ‚น 0x68ac -- -- 34 56 0+2*0x3456=0x68ac
็›ธๅฏพใ‚ขใƒ‰ใƒฌใ‚น 0x68acf134 -- -- 34 56 78 9a 0+2*0x3456789a=0x68acf134
็›ธๅฏพใ‚ขใƒ‰ใƒฌใ‚น 0xacf134 -- -- -- 56 78 9a 0+2*0x56789a=0xacf134
็›ธๅฏพใ‚ขใƒ‰ใƒฌใ‚น 0xf134 -- -- -- -- 78 9a 0+2*0x789a=0xf134

็›ธๅฏพใ‚ขใƒ‰ใƒฌใ‚นใฎๅŸบ็‚นใฏไปŠใฎๅ‘ฝไปคใงใ™๏ผˆใ“ใฎไพ‹ใงใฏ0็•ชๅœฐ๏ผ‰ใ€‚ๅ‘ฝไปค้•ทใฏๅถๆ•ฐใฎใŸใ‚ใ‚ชใƒšใƒฉใƒณใƒ‰ใ‚’2ๅ€ใ—ใฆใ„ใพใ™ใ€‚ๅคงๆŠตใฎใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใงใฏๆฌกใฎๅ‘ฝไปคใŒๅŸบ็‚นใซใชใฃใฆใ„ใ‚‹ใฎใจ็•ฐใชใ‚‹ใŸใ‚ใ€ๆณจๆ„ใŒๅฟ…่ฆใงใ™ใ€‚

ๅ‘ฝไปคใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆไธ€่ฆง

่ชฟๆŸป็ตๆžœใ‚’ๅŸบใซใ‚นใ‚ฏใƒชใƒ—ใƒˆใงๅ‘ฝไปคใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆไธ€่ฆงใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

format.pl
# !/usr/bin/env perl

%opt = (
    "%a1"             => ["%aS"        , "-- S"             ],
    "%a2"             => ["%aT"        , "-- -T"            ],
    "%c1"             => ["%cS"        , "-- S"             ],
    "%c2"             => ["%cT"        , "-- -T"            ],
    "%f1"             => ["%fS"        , "-- S"             ],
    "%f2"             => ["%fT"        , "-- -T"            ],
    "%f3"             => ["%fU"        , "-- -- U"          ],
    "%f5"             => ["%fW"        , "-- -- -- W"       ],
    "%f6"             => ["%fX"        , "-- -- -- -X"      ],
    "%f7"             => ["%fY"        , "-- -- -- -- Y"    ],
    "%r1"             => ["%rS"        , "-- S"             ],
    "%r2"             => ["%rT"        , "-- -T"            ],
    "%r3"             => ["%rU"        , "-- -- U"          ],
    "%r5"             => ["%rW"        , "-- -- -- W"       ],
    "%r6"             => ["%rX"        , "-- -- -- -X"      ],
    "1110(%r1,%r3)"   => ["V(%rS,%rU)" , "-- S- UV VV"      ],
    "1110(%r2,%r3)"   => ["V(%rT,%rU)" , "-- -T UV VV"      ],
    "1110(%r3)"       => ["V(%rU)"     , "-- -- UV VV"      ],
    "1110(19,%r3)"    => ["V(S,%rU)"   , "-- SS UV VV"      ],
    "1110(2,%r3)"     => ["V(S,%rU)"   , "-- S- UV VV"      ],
    "2202(%r7)"       => ["Z(%rY)"     , "-- -- -- -- YZ ZZ"],
    "2202(19,%r7)"    => ["Z(S,%rY)"   , "-- SS -- -- YZ ZZ"],
    "2202(3,%r7)"     => ["Z(T,%rY)"   , "-- -T -- -- YZ ZZ"],
    "492630(%r2,%r3)" => ["YV(%rT,%rU)", "-- -T UV VV YY"   ],
    "492630(%r3)"     => ["YV(%rU)"    , "-- -- UV VV YY"   ],
    "0"               => ["S"          , "-- S"             ],
    "1"               => ["S"          , "-- S"             ],
    "2"               => ["T"          , "-- -T"            ],
    "3"               => ["U"          , "-- -- U"          ],
    "4"               => ["U"          , "-- -- -U"         ],
    "7"               => ["Y"          , "-- -- -- -- Y"    ],
    "8"               => ["Z"          , "-- -- -- -- -Z"   ],
    "18"              => ["S"          , "-- SS"            ],
    "52"              => ["U"          , "-- -- UU"         ],
    "86"              => ["W"          , "-- -- -- WW"      ],
    "120"             => ["Y"          , "-- -- -- -- YY"   ],
    "13398"           => ["U"          , "-- -- UU UU"      ],
    "30874"           => ["Y"          , "-- -- -- -- YY YY"],
    "878082202"       => ["U"          , "-- -- UU UU UU UU"],
    "0x468"           => ["0xT"        , "-- -T TT"         ],
    "0x68ac"          => ["0xU"        , "-- -- UU UU"      ],
    "0x68acf134"      => ["0xU"        , "-- -- UU UU UU UU"],
    "0xacf134"        => ["0xW"        , "-- -- -- WW WW WW"],
    "0xf134"          => ["0xY"        , "-- -- -- -- YY YY"]
);

while (<>) {
    chop while substr($_, -1) le " ";
    ($bin, $mne, $opr) = split(/\t/);
    $opr =~ s/\(([^)]+),([^)]+)\)/($1;$2)/g;
    @oprs = ();
    foreach $o(split(",", $opr)) {
        $o =~ s/;/,/g;
        ($o1, $b1) = @{$opt{$o}};
        for ($j = 0; $j < length($b1); ++$j) {
            $ch = substr($b1, $j, 1);
            if ($ch ge "S") {
                $bin = substr($bin, 0, $j) . $ch . substr($bin, $j + 1);
            }
        }
        push(@oprs, $o1);
    }
    print "$bin\t$mne\t", join(",", @oprs), "\n";
}

ใ‚ฝใƒผใ‚นใ‚’ๆจ™ๆบ–ๅ…ฅๅŠ›ใงๆธกใ—ใฆๅฎŸ่กŒ็ตๆžœใ‚’ใƒ•ใ‚กใ‚คใƒซใซๅ‡บๅŠ›ใ—ใพใ™ใ€‚

$ ./format.pl < allopr.d | tee format.txt
01 01                   pr
01 02                   upt
01 04                   ptff
๏ผˆ็•ฅ๏ผ‰
fb ST UV VV YZ ZZ       sp      V(S,%rU),Z(T,%rY)
fc ST UV VV YZ ZZ       mp      V(S,%rU),Z(T,%rY)
fd ST UV VV YZ ZZ       dp      V(S,%rU),Z(T,%rY)

ไปฅไธŠใง็ทๅฝ“ใŸใ‚Šใซใ‚ˆใ‚‹่ชฟๆŸปใฏๅฎŒไบ†ใ—ใพใ—ใŸใ€‚

ใพใจใ‚

ไปŠๅ›žใฎใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚„ๅ‡บๅŠ›็ตๆžœใฏไปฅไธ‹ใซ็ฝฎใ„ใฆใ‚ใ‚Šใพใ™ใ€‚

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

@7shi's pickup articles

Today's trending articles

ใŠ้กŒใฏไธๅ•๏ผQiita Tech Festa 2026ใง่จ˜ไบ‹ๆŠ•็จฟ๏ผ
sei_official

ๆ”ปๆ’ƒ่€…ใฏใƒ–ใƒฉใ‚ฆใ‚ถใ‚’้–‹ใ„ใฆๆœ€ๅˆใฎ5ๅˆ†ใงไฝ•ใ‚’่ฆ‹ใ‚‹ใฎใ‹ใ€œใƒใ‚ฐใƒใ‚ฆใƒณใƒ†ใ‚ฃใง่ชๅฏไธๅ‚™๏ผˆP1/P2๏ผ‰ใ‚’ๅ ฑๅ‘Šใ—ใฆใใŸ่ฆ–็‚นใงๆ›ธใใ€ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ใฎๅฎŸ่ฃ…้˜ฒๅพกใ‚ฌใ‚คใƒ‰ใ€œ

Linked from these articles

Comments

No comments

Let's comment your feelings that are more than good

Being held Article posting campaign

5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address