質問: . - msg0 @ 文字列の長さを計算 data1: .hword 12345 .bss @ bss セクション .align 2 /* 初期化が必要なデータを置く */ data: .long 0 @ 今回不使用 ``` ### 試したこと https://qiita.com/edo_m18/items/a7c747c5bed600dca977 https://www.mztn.org/slasm/arm07.html 上のサイトを見て作っています。 Raspberry pi なので、ARMアーキテクチャで間違いないと思います。 ### 補足情報(FW/ツールのバージョンなど) アセンブラは上のサイトと同じas、ldです。 役に立つがわかりませんが ``` GNU アセンブラ (GNU Binutils for Raspbian) 2.28 Copyright (C) 2017 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or later. This program has absolutely no warranty. ```
回答: 解決されていますが折角調べが付いたので一応書いておきますと、 どうやらシステムコールの呼び方がその参考のLinux Zaurus環境とRaspbianで異なるようです。 Zaurusではswi命令の引数にシステムコール番号を入れていますが、Raspbianでは、「追記:参考にしたサイト」や下記のサイトにあるようにシステムコール番号をr7レジスタに入れswi(=svc)の引数は0とするようです。 それでwriteが無視されて何も出力されず、exitが無視されて終了せずにその先のリテラル領域を命令として実行したためにIllegal instructionが発生したということです。 システムコールの呼び方の変更と、以下のサイトを参考にr7・lrを退避するpush・popを加えて、正しく動作しました。 https://thinkingeek.com/2014/05/24/arm-assembler-raspberry-pi-chapter-19/