2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

アセンブラ初心者スレッド 2©2ch.net

1 :デフォルトの名無しさん 転載ダメ©2ch.net:2017/04/13(木) 17:35:55.70 ID:1WMn3pSz
初心者OK!質問大歓迎!のアセンブラのスレッドです。
基本情報の勉強中の人、PICやH8を勉強中の学生などなど…

前スレ
アセンブラ初心者スレッド
http://echo.2ch.net/test/read.cgi/tech/1314502612/

関連スレ
アセンブラ 13
http://echo.2ch.net/test/read.cgi/tech/1314512680/

2 :デフォルトの名無しさん:2017/04/13(木) 17:41:03.83 ID:m/ZfxtWH
>>1


3 :デフォルトの名無しさん:2017/04/13(木) 18:14:24.24 ID:VLmLig3K
v3

4 :あぼーん:2017/04/13(木) 18:15:04.12 ID:Gon4S40X
あぼーん

5 :デフォルトの名無しさん:2017/04/13(木) 18:15:32.34 ID:VLmLig3K
終了

6 : ◆QZaw55cn4c :2017/04/13(木) 19:36:20.78 ID:RYqONwMZ
きょうびの時代にアセンブラの優位性を主張する,とすれば
どのような分野で有効でしょうか?

7 :デフォルトの名無しさん:2017/04/13(木) 19:43:03.43 ID:VLmLig3K
asm.js とかさ
LLVM とかさ
このスレで扱っても良いと思うのね

8 :デフォルトの名無しさん:2017/04/13(木) 20:44:33.86 ID:nESB199J
ごもっともですわ

9 :デフォルトの名無しさん:2017/04/13(木) 21:26:38.34 ID:J4z4l4hW
うん需要ある?

10 :デフォルトの名無しさん:2017/04/14(金) 08:40:42.32 ID:sKcRbeeD
組み込みでなら多少は。

11 :デフォルトの名無しさん:2017/04/14(金) 10:04:28.48 ID:L6e5ZQwW
あ。。。IoTとか?

12 :デフォルトの名無しさん:2017/04/15(土) 04:12:03.81 ID:2Mj3RTtW
アセンブラはじめるならLinuxでやるといいよ
DOSと同じような感覚でアセンブラプログラミングができるから

こんな感じ

Linux でアセンブリプログラミング
http://www.mztn.org/lxasm/asm00.html
Linux で64bitアセンブリプログラミング
http://www.mztn.org/lxasm64/amd00.html

Linuxでのアセンブル方法はこんな感じ
as -a=hogehoge.lst -o hogehoge.o hogehoge.s
ld -o hogehoge hogehoge.s

gccのでアセンブラ出力&アセンブル
gcc -S -o hogehoge.s hogehoge.c
as -a=hogehoge.lst -o hogehoge.o hogehoge.s
gcc -o hogehoge hogehoge.o

13 :デフォルトの名無しさん:2017/04/15(土) 04:12:41.23 ID:2Mj3RTtW
ちなみにx86_64上のLinuxで32bitのバイナリを作成したい場合はこう


x86_64のLinuxでのCの32bitのx86バイナリのコンパイル
gcc -m32 -O2 -o hogehoge hogehoge.c

x86_64のLinuxでの32bitのx86アセンブル
as --32 -a=hogehoge.lst -o hogehoge.o hogehoge.s
ld -melf_i386 -o hogehoge hogehoge.o

x86_64のLinuxでのgccので32bitアセンブラ出力&アセンブル
gcc -m32 -S -o hogehoge.s hogehoge.c
as --32 -a=hogehoge.lst -o hogehoge.o hogehoge.s
gcc -m32 -o hogehoge hogehoge.o

14 :デフォルトの名無しさん:2017/04/15(土) 04:13:21.76 ID:2Mj3RTtW
nasmでのx86_64のLinuxでの32bitアセンブル

nasm -f elf hogehoge.s
ld -melf_i386 -o hogehoge hogehoge.o


nasmでのx86_64のLinuxでの64bitアセンブル
nasm -f elf64 $1.s
ld -o $1 $1.o


Ubuntuでのnasmのインストール方法

sudo apt-get install nasm

15 :デフォルトの名無しさん:2017/04/15(土) 04:42:00.93 ID:2Mj3RTtW
UbuntuだとQEMUを入れるだけでQEMU+binfmtの設定が自動せされるから
ライブラリへのリンクを貼るだけで他のCPUのバイナリをそのまま実行できるようになる
UbuntuだとARM、MIPS、PowerPCができる

64bitARMならこんな感じ
sudo apt-get install qemu
sudo apt-get install g++-aarch64-linux-gnu
sudo ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib
sudo ln -s /usr/aarch64-linux-gnu/lib /lib/aarch64-linux-gnu

32bitARMならこんな感じ
sudo apt-get install qemu
sudo apt-get install g++-arm-linux-gnueabihf
sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 /lib
sudo ln -s /usr/arm-linux-gnueabihf/lib /lib/arm-linux-gnueabihf

Cのコンパイル方法はこんな感じ
aarch64-linux-gnu-gcc -O2 -o hogehoge hogehoge.c

arm-linux-gnueabihf-gcc -O2 -o hogehoge hogehoge.c

数学ライブラリを使う場合のCのコンパイル方法はこんな感じ
aarch64-linux-gnu-gcc -O2 -o hogehoge hogehoge.c -lm
(Ubuntuでは依存するライブラリを後ろに書く)

arm-linux-gnueabihf-gcc -O2 -o hogehoge hogehoge.c -lm

16 :デフォルトの名無しさん:2017/04/15(土) 04:43:20.47 ID:2Mj3RTtW
アセンブル方法はこんな感じ
aarch64-linux-gnu-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
aarch64-linux-gnu-ld -o hogehoge hogehoge.s

arm-linux-gnueabihf-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
arm-linux-gnueabihf-ld -o hogehoge hogehoge.s

アセンブラソースの出力はこんな感じ
aarch64-linux-gnu-gcc -S -o hogehoge.s hogehoge.c
aarch64-linux-gnu-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
aarch64-linux-gnu-gcc -o hogehoge hogehoge.o

arm-linux-gnueabihf-gcc -S -o hogehoge.s hogehoge.c
arm-linux-gnueabihf-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
arm-linux-gnueabihf-gcc -o hogehoge hogehoge.o


できたバイナリは普通に実行できる
./hogehoge
バイナリがどのアーキテクチャかはfileコマンドで確認できる
file hogehoge

17 :デフォルトの名無しさん:2017/04/15(土) 04:44:00.98 ID:2Mj3RTtW
32bitのARMでUbuntuのgnueabihfではデフォルトでThumb-2でコンパイルされる
ARM命令でコンパイルする場合はオプションを追加する

ARM命令の場合の例
-marm -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16
-marm -march=armv7-a -mfloat-abi=hard -mfpu=neon -ffast-math

実行例)
arm-linux-gnueabihf-gcc -O2 -marm -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -o hogehoge hogehoge.c

arm-linux-gnueabihf-gcc -O2 -S -marm -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -o hogehoge.s hogehoge.c
arm-linux-gnueabihf-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
arm-linux-gnueabihf-gcc -marm -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -o hogehoge hogehoge.o

参考)
Thumb-2命令の場合の例
-mthumb -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16
-mthumb -march=armv7-a -mfloat-abi=hard -mfpu=neon -ffast-math

18 :デフォルトの名無しさん:2017/04/15(土) 04:47:16.32 ID:2Mj3RTtW
32bitARMアセンブラの参考URL
http://www.mztn.org/slasm/arm00.html

64bitbitARMアセンブラの参考URL
http://www.mztn.org/dragon/arm6400idx.html

19 :デフォルトの名無しさん:2017/04/15(土) 07:38:04.38 ID:2Mj3RTtW
>>18の32bitARMのアセンブラのサイトの

http://www.mztn.org/slasm/arm04.html
1: ldrb r3, [r0, #+1]! @ r3=mem[r0++]
strb r3, [r1, #+1]! @ mem[r1++]=r3
でエラーが出ます

ここは
1: ldrb r3, [r0], #+1 @ r3=mem[r0++]
strb r3, [r1], #+1 @ mem[r1++]=r3
ですね

20 :デフォルトの名無しさん:2017/04/15(土) 08:02:58.82 ID:2Mj3RTtW
補足
32bitARMでのシステムコールの呼び出しはEABIの方式で行ってください

.text
.align 2
.global _start
_start:
adr r1, msg @ address
mov r0, #1 @ stdout
mov r2, #13 @ length
mov r7, #4 @ sys_write
swi 0

mov r0, #0
mov r7, #1 @ sys_exit
swi 0

.align 2
msg:
.asciz "hello, world\n"

21 :デフォルトの名無しさん:2017/04/15(土) 08:35:58.99 ID:2Mj3RTtW
32bitARMでFPU命令を使う場合の例
arm-linux-gnueabihf-as -mfpu=vfpv2 -a=hogehoge.lst -o hogehoge.o hogehoge.s
arm-linux-gnueabihf-as -mfpu=vfpv3-d16 -a=hogehoge.lst -o hogehoge.o hogehoge.s

22 :デフォルトの名無しさん:2017/05/07(日) 22:56:59.24 ID:8v4hzv7f
Intel AVX512とか32ビットモードや16ビットモードでマシン語記述できるの?
16ビットモード(MS−DOS6.2)で32ビット命令を実行できることは確認ずみ。

23 :デフォルトの名無しさん:2017/05/08(月) 01:10:33.28 ID:UxHus5NQ
どうやってマシン語生成するつもりか分からんが、マシン語は記述できるだろ。

24 :デフォルトの名無しさん:2017/05/08(月) 01:56:11.92 ID:+dlahwH0
>>22
REXプリフィックスは別の命令の再定義なので

25 :デフォルトの名無しさん:2017/05/09(火) 04:41:32.11 ID:CfLPAbNS
いまじゃ解析とか簡単になっとるからなぁ
小学生でもできるんじゃない?

26 :デフォルトの名無しさん:2017/05/11(木) 21:51:54.08 ID:+ulrHAZU
ねえねえ、Altivecって知ってる?

27 :デフォルトの名無しさん:2017/05/13(土) 00:24:52.24 ID:YNo+ODse
それ作ったチームはインテルでAVX512に関わったんだっけ

9 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)