アセンブラ 13

■ このスレッドは過去ログ倉庫に格納されています
2011/08/28(日) 15:24:40.59
前スレ
http://pc11.2ch.net/test/read.cgi/tech/1187079488/
2014/10/25(土) 04:17:33.76ID:SJUwgBZk
>174のオペレータって+を指してんじゃ
178デフォルトの名無しさん
垢版 |
2014/10/25(土) 05:39:41.70ID:OBw5xvhC
馬鹿には無理
2014/10/25(土) 18:11:01.93ID:gl6O+QH9
>>177
その"+"はアセンブラがアセンブル時に演算するものであり、ターゲットのCPUが演算するわけではないのだから、オペレータとはいわないね‥
"1234+5678" 全体で一つのオペランドだ
2014/10/25(土) 18:16:38.82ID:zlhvJX1z
>>179
http://www.sourceware.org/binutils/docs-2.10/as_6.html
> 6.2.2 Operators
> Operators are arithmetic functions, like + or %. Prefix operators are followed by an argument.
2014/10/25(土) 18:27:07.14ID:Q/xi2e+W
恥ずかし///
2014/10/26(日) 13:12:48.49ID:eoLX8RNk
>>180
だからそれはアセンブラ層で扱うオペレータだとなんどいったら‥
2014/10/26(日) 13:19:22.74ID:gMYGq5V7
レジスタも実際はオペコードに含まれてるケースも多いので
EAX がオペランドになってるのは違和感がある
2014/10/26(日) 15:59:27.98ID:hUa4ZeCn
>>182
> 157 デフォルトの名無しさん:2014/04/24(木) 20:23:29.80 ID:6eU9esML
> 日本語アセンブラは、誰も作らないね。

> 173 デフォルトの名無しさん [sage]:2014/10/24(金) 23:21:06.42 ID:60xLGkt4
> >>157
> 名前(オペランド)だけでいい、オペレータまで日本語化する必要はない

という話の流れだからアセンブラの話で合ってるよ。
2014/10/26(日) 16:01:08.50ID:hUa4ZeCn
>>183
> レジスタも実際はオペコードに含まれてるケースも多いので

ちょっと何言ってんのか分からんからネットで確認できる実例挙げてよ。
2014/10/26(日) 16:05:19.65ID:eoLX8RNk
マシン語レベルで言っていると思われ
2014/10/26(日) 16:14:01.73ID:hUa4ZeCn
マシン語の話はスレ違ですね。
2014/10/26(日) 18:05:55.37ID:eAcs35DC
ああ、x86のオペランドがAX固定の命令みたいな奴のことを指してるのかな。
そのへんは命令のネーミングの問題という感じもあって、(仮に名づけるなら)
ADDAXとかMOVAXみたいな名前の別の命令にしちゃったりすることもあるので、
まぁあまり厳密に定義はできないから、議論する意味はあまりないね。
2014/10/27(月) 06:34:42.02ID:Yycbgmpy
例えばMC6800のLDAAとかADDBみたいなののこと?
あれはニモニックの一部にレジスタ名が含まれてるだけでオペランドとは違うよ。
2014/10/27(月) 09:36:01.62ID:wK4QYAC1
ちょっと何言ってんのか分からん
2014/10/27(月) 12:12:42.89ID:VoSGhOqg
x86で、アセンブリ言語では「ADD AX, 1」の「ADD」はオペコード(インストラクション、命令)、
AXと1はオペランド(引数)というように明確に分離できる。

機械語では 0x05 0x0001 となるが、ここでADDを意味する部分とAXを意味する部分は
0x05に一緒に入ってしまっていて分離できない(正確には5のLSBでALとAXのどちらかを
選択しているけど)。

結論としては、オペランド(の1部)がハードコードされた命令という奴があるので、
オペコードとオペランドの区切りはかならずしも明確ではない、ということになる。
2014/10/27(月) 18:03:20.01ID:EJb5dfUa
命令セットのリファレンスにAVX512のことも追加されてたのか
https://software.intel.com/sites/default/files/managed/59/6a/319433-021.pdf
2014/11/29(土) 14:11:28.92ID:m0w/xFX/
>>191
極少数の命令だけだけどオペコードのバイトにregフィールドがある命令があるな
通常はオペランドはr/mバイトにあってオペコードとオペランドは完全に分離できるけど
2014/11/29(土) 15:58:54.98ID:FcCIdxC+
アセンブラとマシン語が混ざって元々意味の無い話がやっぱり意味の無い話で回ってるね

更に遡ってくと元は日本語アセンブラか。。。本当バカ臭い
2015/02/15(日) 17:06:10.18ID:eXfPDQZo
基本情報技術者試験でアセンブラ勉強しはじめた。
午後の選択問題で、アセンブラが簡単だと聞いたが…。
いまのところわけわからん。
2015/02/15(日) 17:24:08.94ID:1vS2ESBG
https://www.jitec.ipa.go.jp/1_13download/shiken_yougo_ver2_2.pdf
>3.プログラム言語
>@ 基本情報技術者試験において,ソフトウェア開発分野に関する試験問題に出題するプログラム
>言語は,C,COBOL,Java,アセンブラ言語(CASLU)の 4 言語とする

CASLなんて役に立たないもの勉強なんてしないで普段使ってるものか将来使いそうなの勉強したほう
いいんじゃない

# FORTRANて今ないんだなー
2015/02/15(日) 18:30:34.63ID:Qwk5nQv8
二つやらないといけないそうだからな‥C と Java か‥
2015/02/15(日) 18:30:56.51ID:bX6frV1s
アセンブラはセンター試験の数IIb並みに簡単
2015/03/07(土) 09:37:26.18ID:G+snOoOp
文法がってだけでアルゴリズムは別だけどな
2015/03/08(日) 09:27:59.15ID:/MgTL3zQ
センター試験とか簡単なことを難しそうに見せて
というか問題(の意図)を判り難くして回り道させて
出題者側が時間稼ぎしてる感じしかしない
2015/03/08(日) 19:21:25.65ID:/s2hhMUc
センターの問題はスレチである
2015/04/21(火) 16:40:55.21ID:3mVW08s5
gccの-Sオプションでアセンブラファイルを作成したら日本語文字列が
.ascii "%d\202\252\223\374\227\315\202\263\202\352\202\334\202\265\202\275\12\0"
みたいになったんですがこれは何でしょうか
ascii 日本語で検索しても出て来ません
2015/04/21(火) 17:06:23.70ID:hJeBiy6y
>>202
「が入力されました」をShift_JISでエンコードして各バイトがASCII範囲外なので8進表記したもの
2015/04/21(火) 17:23:12.27ID:3mVW08s5
>>203
ありがとうございます!
2015/04/22(水) 01:59:38.10ID:ZIHXAufW
>>203
よく分かったな
2015/09/18(金) 17:48:02.84ID:wbP5mHQw
mov eax, cr0
or eax, 1
mov cr0, eax
2015/09/18(金) 19:23:40.98ID:HCQXhwcr
jmp $+2
2016/03/29(火) 18:34:55.24ID:jDRKX2rB
マイコンで初めてアセンブラ書いてるけどスパゲッティおいしい
209デフォルトの名無しさん
垢版 |
2016/07/01(金) 15:31:07.82ID:EjQpOL5h
@
add dword ptr[i], 1

A
mov eax, dword ptr[i]
add eax, 1
mov dword ptr[i], eax

ってどう違いますか?

i++を逆アセするとAになりますが
インアセンブラで@と書いても一見同じようですが
3倍の速度ってわけではないですよね
2016/07/01(金) 15:39:37.74ID:r+VXjd7G
コンパイラが2のようなコードを吐くのは、そっちの方がトータルで速いから

デコーダだの複雑命令だの
並列実行だのoooだの
パイプラインだのマイクロ命令だの
そういうのが理由


端的に言えば、1の命令は複雑すぎるので
分解して複数命令にして実行したり使えるデコーダが限られたり、制限が多い
2は、比較的CPUの内部命令に近いので、他の命令と同時並列に実行したり出来る
2016/07/01(金) 16:33:41.91ID:wNtMwO0s
なんで inc にならないし
2016/07/02(土) 02:29:37.38ID:YYGT6hvg
>>209
多分だけど
レイテンシは同じだが前者はポート掴みっぱなしで他の命令を動かせない
後者は分けるから他の命令を動かしやすい

>>211
多分、Pentium 4時代はaddの方がuOPとスループットが有利だったから
2016/07/02(土) 03:34:14.20ID:m5Sb4+fO
レイテンシがどうのとかそういうレベルの話じゃなくて
単純にVC++のデバッグビルドだからじゃねーの
2016/07/03(日) 22:50:54.17ID:HbQeSe9b
x=x+1
x++
2016/07/09(土) 00:41:22.05ID:2eBD2sS9
CPUをFPGAで実装してみたらわかると思うけど
一つの命令の中でメモリをリードした後ライトする命令をサポートするISAと
そういう命令は持たないで一つの命令の中ではメモリはリードするだけかライトするだけのISAでは実装の複雑度はかなり違うよ
2016/07/09(土) 00:52:38.73ID:2eBD2sS9
もちろん排他制御のためにどんなISAでもtest and set的な命令は持つ必要があるけど
主眼は使用頻度が高い演算とか操作の話だからね
217デフォルトの名無しさん
垢版 |
2016/07/09(土) 12:51:47.63ID:7UqK6Tzf
確かにmemory to memoryのオペレーションはRISCだと命令長が合わないから無理だよね。
無理やりやるならレジスタAのアドレスをロードしてincしてストアするとかになるから命令が複雑すぎるかもな。
2016/07/09(土) 18:48:07.98ID:J471aLuE
memory mapped register を持った RISC もあったような
219デフォルトの名無しさん
垢版 |
2016/07/09(土) 20:01:55.81ID:xdnyrY55
レジスタに書くとメモリに転送されんの?知らんかった。
命令のサイクルとかむちゃくちゃになりそうだな。CPUのコアじゃなくて、SOCとかで勝手に拡張した擬似レジスタなのかな。
2016/07/10(日) 02:43:35.42ID:SHJN9j5A
6502のことじゃないの?
221名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2016/07/10(日) 12:42:16.29ID:BKklAOmg
6502はそういうレジスタないよ。アドレッシングが癖があるけど。
ちょうど今FPGAで6502組んでるとこなんだよね。
222名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2016/07/10(日) 19:39:37.06ID:EY1v+Nkp
6809かな
223デフォルトの名無しさん
垢版 |
2016/07/10(日) 20:11:16.85ID:BKklAOmg
サンクス!
昔のCPU好きなんだよね。調べて見よっと
2016/07/10(日) 21:50:59.66ID:hJGonyaW
いろいろいい加減な型番出てるが
TIのTMS9900調べとけ
225デフォルトの名無しさん
垢版 |
2016/07/10(日) 22:09:22.43ID:BKklAOmg
なんかいっぱい出てきたな。。。
見てみるよ。あざす
2016/08/05(金) 16:24:48.98ID:VZHGn81X
話の流れをぶった切って申し訳ないんだが、
armv8のインラインアセンブラとかの質問をここでしてもいい?
2016/08/05(金) 16:26:36.74ID:VZHGn81X
レスの日付を見てなかった(^^;
上の質問は取り消します、さいならw
2016/08/05(金) 18:54:34.14ID:OgtmDK03
別にいいと思うけどさようなら
2016/08/25(木) 23:40:32.30ID:Eq6gD2XE
新しく出てたプログラム本を何気なく手にとって読んでみたらアセンブリ言語中心の内容だったな
タイトル忘れた
2016/08/26(金) 19:17:48.18ID:MFwM+FIX
>>229
>タイトル忘れた

思い出せよボケ老人
2016/08/26(金) 19:30:01.69ID:c/QRPG4e
64ビット時代のアセンブラの入門書がないかな?
2016/08/26(金) 21:36:42.60ID:NyhYMJrx
命令長が違うだけで32ビットのニーモニックとあんま変わらんよ。
入門書読みたけりゃ32ビットので勉強して、リファレンスマニュアルを探せばいいと思う。
64ビットの固有の命令とかコントロールレジスタの事なんかは入門書では書く必用ないしね。
2016/08/27(土) 05:42:44.15ID:Dx6e3moq
プログラムの不思議を解く―実力派プログラマのための教養としてのアセンブラ入門
234デフォルトの名無しさん
垢版 |
2016/08/27(土) 08:42:35.36ID:SmFG8gRK
      ク    ク || プ  //
      ス  ク ス  | | │ //
       / ス    | | ッ //   ク   ク  ||. プ  //
       /         //   ス ク ス _ | | │ //
         / ̄ ̄\     /  ス   ─ | | ッ //
       /  _ノ  .\     /         //
       |  ( >)(<)       ___
.        |  ⌒(__人__)     ./ ⌒  ⌒\
        |    ` Y⌒l    /  (>) (<)\
.         |    . 人__ ヽ /  ::::::⌒(__人__)⌒ \
        ヽ         }| | |        ` Y⌒ l__   |
         ヽ    ノ、| | \       人_ ヽ /
.         /^l       / /   ,─l       ヽ \
2016/08/28(日) 18:25:25.47ID:TLCNAGVS
はい
2016/09/02(金) 14:49:44.53ID:LW5U/QZl
うんこしてきていい?
2016/09/02(金) 15:37:28.76ID:tIJhbCeG
逝っトイレ
2016/11/12(土) 13:36:24.90ID:5D/kJ823
「ほら吹き男爵の本を5冊調べました(中略)
ブーツの紐を引っ張って湖の底から脱出する
という話は、書かれていません(中略)
ブートストラップ(bootstrap)とは直訳すれば、ブーツのひもである。しかし、
独力でやるという派生した意味を持ち、そこから、
コンピュータが電源投入時に自動的にOSを読み込む方式を指したり、
コンパイラが自分自身を記述したりすることを指したり(中略)
bootstrapを靴紐とした誤訳である。
Bootstrapとはブーツを履くときにブーツを引っ張る上げるためのつまみ革
ブートストラップを引っ張って湖の底から脱出する
というエピソードは書かれていない。しかし類似の話として
馬ごと沼に落ちた Munchausen が手で自分の髪の毛をつかんで自分自身と馬とを引っ張り上げて沼から脱出する
というエピソ−ドが書かれている(挿絵つき)。岩波文庫版」

http://suzuki-tokuhisa.com/ushigome/hinoue.html
2000/12/24(Sun)
2017/03/22(水) 18:34:09.35ID:PmucqYS5
https://www.amazon.co.jp/dp/4839954747/
https://pbs.twimg.com/media/CMHpkNQWwAAfWJq.png

この本買ったんだけど中身は文章とソースコードしかなかった
2017/03/22(水) 20:13:36.84ID:wpBrYFTt
当たり前w
241デフォルトの名無しさん
垢版 |
2017/04/13(木) 18:15:02.80ID:VLmLig3K
test
242デフォルトの名無しさん
垢版 |
2017/06/06(火) 19:25:33.15ID:6Hy4ZEQ3
FreeBSDi386
バックスペースの挙動の再現?方法が知りたいのですが

ioctlにてBSが無効化?している状態においてどのようにすればいいのでしょうか?

現状の挙動は
BSだけだとカーソル左移動のみ
エスケープシーケンスの"[[P"併用では似た挙動はするがコンソール左端を認識しない為 左端以降右を削除してしまう
2017/06/06(火) 20:07:44.00ID:ykMKOrap
左移動、スペース、左移動では?
2017/06/06(火) 20:30:28.44ID:MUdbHmDP
>>239
そんな表紙じゃないと売れないのかねぇ
245デフォルトの名無しさん
垢版 |
2017/06/06(火) 22:48:42.93ID:6Hy4ZEQ3
243
無効化(terminal自体の設定変更 Cでいう?termiosで変更)してるのでそれでは駄目です
246デフォルトの名無しさん
垢版 |
2017/06/06(火) 22:58:03.59ID:6Hy4ZEQ3
因みにその場合の(243の)挙動は
カーソル移動と削除(スペースの入力と表示)のみ行われてカーソル右はそのままとなります

ABCD

A D

のようにカーソル右の文字が左スクロールしません
2017/06/06(火) 23:05:45.52ID:Tfg9c60t
scriptに吐かせて何やってるか見てみれば?
2017/06/06(火) 23:07:42.05ID:Tfg9c60t
ちなみにスレチだからこれ以上はどっか行け
249デフォルトの名無しさん
垢版 |
2017/06/07(水) 20:25:58.07ID:izePe9Zb
247
意味不明
248
意味不明

次の方どうぞ〜
2017/06/08(木) 13:15:13.49ID:oPuedIYN
質問いいですか?
2017/06/08(木) 15:21:18.97ID:NV8Z/enP
どうされました?
252デフォルトの名無しさん
垢版 |
2017/07/19(水) 09:29:19.34ID:4WYjcaP8
>>196
アセンブラでアルゴリズム書くノウハウは身に付くよ。
64bitアセンブラでHello Worldしか書けないんじゃ悲し過ぎる。
レジスタ名やニーモニックが違うだけで方言みたいなものだから応用は効く。

CASLは命令数少ないから、擬似命令含めても覚える文法?は一番少ない。
OS作りたいとかなら必須だしね。
そこまで大掛かりじゃなくても、電子工作ではアセンブラで書いた方がマイコン使いこなしてるぜ!って感覚が好き。
(むしろBIOSすらないから、直接VRAM書き込みとかはこっちのが主流)
253デフォルトの名無しさん
垢版 |
2017/07/19(水) 11:26:20.41ID:+fK80sDM
>>252
CASLってoutputがわかりにくいんだよね
VRAMとか定義されてたっけ
254デフォルトの名無しさん
垢版 |
2017/07/19(水) 14:03:51.87ID:4WYjcaP8
>>253
VRAMは実際のマイコンでも定義されてない。
CPUは書き込んだ先がただのメモリかVRAMか感知しない。
人間が実装し、CPUが認識するメモリのどこからVRAMとして扱うか決める。
OUTPUTが分かりにくいってのは実際にPICマイコンとかで電子工作してプログラム書き込んだことがないからだと思う。
(むしろOUTマクロで文字列表示出来るだけマシだと思う)

だってPCと違ってマイコンチップにはディスプレイとか無い。
CPUはメモリやポートに値や信号を出す出さない。読む書く、読まない書かない。
それしか外部に出来ない。
何をどう表示するか、どう動くかは実装と取り決め次第。

PCは複雑過ぎる(し、ある程度入出力の手段は決まってる)から、OUTマクロみたいなのをBIOSや各OSのシステムコールが提供してるに過ぎない。
2017/07/19(水) 17:23:34.18ID:IRmsE5AJ
オナニースレ
256デフォルトの名無しさん
垢版 |
2017/07/22(土) 13:17:30.20ID:aq/FdZCk
ここかな
部品の印刷
https://www.youtube.com/watch?v=CiJDgzS_TBs#t=760s
12:40 〜
2017/07/28(金) 11:04:06.77ID:L3qNkxNi
>>252
>>254
アセンブラ勉強したい
おすすめはCASL?
ちな仕事ではCとJava
2017/07/28(金) 12:37:51.02ID:WViVOgsq
Cが使えるなら、
普通にPCのx86のコードの中から、
単純なループをアセンブラ化することからはじめれば
2017/07/28(金) 14:39:46.04ID:JFFpAseU
>>257
今、アセンブラやるならx86_64かARM64だな
x86_64ならLinux上でやるとDOSの頃のようなシステムコールを直接アセンブラから呼ぶようなプログラミングができる
C言語のコンパイルでアセンブラ出力をして関数の中身を書き換えてみるとかでもいい
gccなら-Sオプションを付けることでアセンブラ出力ができる
こんな感じでアセンブラ出力して、コンパイルできる
(最適化オプションを指定しないとかなり冗長なコードを出力するので適当に-O1、-O2、-O3などを使った方がいい)
gcc -S -o hogehoge.s hogehoge.c
as -a=hogehoge.lst -o hogehoge.o hogehoge.s
gcc -o hogehoge hogehoge.o
最適化オプションを使う場合
gcc -S -O2 -o hogehoge.s hogehoge.c
as -a=hogehoge.lst -o hogehoge.o hogehoge.s
gcc -o hogehoge hogehoge.o

ARM64ならPINE64買って同じようにLinuxやるか、
AndroidSDK入れてAndroidアプリの作成でJavaからJNIでC/C++を呼び出して
そのC/C++の中でインラインアセンブル組むといい

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

Linux で Arm64 アセンブリプログラミング
http://www.mztn.org/dragon/arm6400idx.html
260デフォルトの名無しさん
垢版 |
2017/07/28(金) 14:55:01.62ID:JFFpAseU
あと、ARM64のアセンブラを遅くてもいいからx86_64のUbuntuでやりたい場合
QEMUをインストールし、ARM64のクロスコンパイラを入れることで
ARM64のクロス開発とエミュレーション環境が構築できる
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

これでARM64のプログラムをx86_64のプログラムと同じように実行できるようになる
(あくまでエミュレーションなので動作は遅い)
コンパイル方法は
aarch64-linux-gnu-gcc -o hogehoge hogehoge.c
アセンブラ出力してコンパイルするなら
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

実行はx86_64のプログラムと同じように実行できる
./hogehoge
明示的にQEMUを呼び出して実行時のCPUを指定して実行したりできる
qemu-aarch64 -cpu cortex-a57 hogehoge
指定できるCPUの種類を調べるには
qemu-aarch64 -cpu help

どのARM64のバイナリかどうかを調べるには
file hogehoge
で確認できる
2017/07/28(金) 15:05:26.32ID:JFFpAseU
Windowsの仮想マシンを使ってUbuntuを入れるのはこんな感じ

Windows 10 でVMware Workstation Player With Ubuntu
http://www.aise.ics.saitama-u.ac.jp/~gotoh/VMWorkstationPlayerIntoWindows10.html
2017/07/28(金) 16:13:44.13ID:WViVOgsq
普通にVisualStudioでやれば
2017/07/28(金) 16:17:43.90ID:WViVOgsq
システムコールの勉強なんて今時いらんでしょ

VisualStudioなら既にインストールされてそうだし、
アセンブラソースをプロジェクトに加えるなので楽
264デフォルトの名無しさん
垢版 |
2017/07/28(金) 18:28:29.67ID:2hIYBPjn
>>257
上のx86_64アセンブラ勧めてるのは慣れてる人だから、自分が慣れて来たら参考にしても良いけど、ネットでもHello worldで終わってるコードばっかりとだけ言っておこう。

そう言う意味じゃ、自分でx86_64アセンブラの命令一覧を参考にコード書くためにも、CASLでアセンブラに慣れてみた方がいい。

PC向けはシステムコールじゃないと文字も出力出来ないので、VRAM直接弄りたいならGBやGBAなどのゲーム機や組み込み、電子工作のアセンブラコードのが面白い。
2017/07/28(金) 19:47:53.52ID:JFFpAseU
CASLじゃ、全然参考にならない
実際に使われてるものを使って勉強した方が良い
本屋でx86またはx86_64関係のアセンブラの本をいろいろ物色してみるのがいいかもね
ARMやARM64関連のアセンブラの本はあまり出てないからね
266デフォルトの名無しさん
垢版 |
2017/07/28(金) 20:03:16.15ID:SfCHZxYK
>>265
64ビットOSでx86アセンブラの16ビットコード動かないじゃん?
仮想PCにFreeDOSでも入れればいいんだろうけど。

それにシステムコールの使い方ばっかで、意外とソートとかそう言うコード無いんよね。
だから最初はCASL勧めてる。
その後はx86なりx86_64なりARMなりお好きにどうぞ。
2017/07/28(金) 20:12:28.96ID:WViVOgsq
x86が目的ならはじめからx86でいいよ
わざわざ回り道しなくても
2017/07/28(金) 20:15:58.51ID:WViVOgsq
ARMが目的ならARMで
MIPSが目的ならMIPSで
PICが目的ならPICで
RXが目的ならRXで

命令自体はMIPSが良いとは思うけど
わざわざ回り道するほどではない
269デフォルトの名無しさん
垢版 |
2017/07/28(金) 20:58:17.26ID:SfCHZxYK
下記URL参照だが、この意見に賛同。
x86は入門向けとは言い難い。
そもそもWinだと結局WinAPIより下の階層触れないからCで書くのとほとんど変わらない。
どうしてもx86_64ならLinuxがまだマシ。
オススメはGBAのARM32ビットCPUのアセンブラ。
ハードの仕様固定だから、直でVRAM弄れて楽しい。
PCはBIOSやOSが有るから、この辺楽しめない。

CASL IIはプログラマ視点で低水準な世界の雰囲気を味わう分には手軽な言語ではないかと思う。
本来は実機と本物のアセンブラを使うべきなんだろうけど、ちょっとしたボードであっても実際に動かすには色々な手順*4が必要で
面倒だし*5、普及しているアーキテクチャが入門向けとも限らない*6。低水準の世界にどっぷり浸かる必要があるならそういった現実ならではの汚い部分に向き合わなくてはならないけど、
そうでないならCASL IIの箱庭ぐらいが丁度良いのではないだろうか?

もっとも極めても直接的に役に立つことはない言語だという点は留意しておくべきだけど。

http://d.hatena.ne.jp/eel3/touch/20120109/1326110720
2017/07/28(金) 21:15:04.59ID:JFFpAseU
アセンブラの勉強のためならマイコンとかゲーム機とかでしなくても
JavaならビットマップにBufferedImage使えば
BufferedImageクラスに画面の内容をgetRGBというint型の配列として読み込むメソッドがあるので
これで読み取った内容をjniでC言語に渡して、
C言語からアセンブラに渡すか、インラインアセンブラでこの画像の処理をする部分を書いて
Javaに返してBufferedImageの画面の内容を書き換えれば(int型の配列を書き戻すのはsetRGB)
AndroidだとbitmapクラスにgetPixelsとsetPixelsがあって同様のことができる
(AndroidだとARMがメインになる)
これでVRAMをいじるのと同じことができる
javaとC言語ができるならJavaからCを呼び出すjniだって出来るんだろうし

アセンブラだからといって低レベルの部分にどっぷり浸かる必要はない
低レベルの部分にどっぷり浸かりたいならマイコンやればいいだけ
工業高校や専門学校ではそういう授業には8bitのPICやAVRなどのマイコンを使ってる
32bitマイコンだとアセンブラというよりもC言語がメインになるな
271デフォルトの名無しさん
垢版 |
2017/07/28(金) 21:19:45.51ID:SfCHZxYK
もうそれ、アセンブラそのものの否定に片足突っ込んでるよね?
ぶっちゃけ高級言語からアセンブラ呼ぶ意義はSIMD命令使う以外は無いと思う。
アセンブラ好きの行き着く先はマイコンよ。
2017/07/28(金) 21:32:28.65ID:JFFpAseU
マイコンでもC言語をメインに使うのは同じ
Cでは書けないもしくは遅くなる部分でアセンブラを使うだけ
2017/07/28(金) 21:46:50.84ID:d5LZ2kks
>>270
Javaを経由する意味が不明
素直にアセンブラと相性が良いCでやれば良い
2017/07/28(金) 21:52:56.42ID:d5LZ2kks
>>271
いろんなアセンブラ好きがいる

SIMDや特殊命令でパフォーマンスを追求する人
アセンブラでのOSやシステム設計をする人
オールアセンブラでマイコンのプログラムを書く人
ハッキングに使う人
コンパクトなコードを極める人

アセンブラを作る人
命令セットを作る人
マイコンを作る人
2017/07/28(金) 22:11:12.31ID:qPbT9hdu
>>203
これ自演じゃなければ凄いよあなた
2017/07/28(金) 22:12:41.88ID:d5LZ2kks
普通の人ならVisualStudioでx86を動かすのが環境的には一番楽

プロジェクトを作成して、
メニューから [プロジェクト] ===> [ビルドのカスタマイズ] ===> masm をチェックして[OK]

あとは、*.cpp と *.asm のファイルを作ってコードを書けばビルド、実行、デバッグが可能

以下が64bitコードの例
---- cpp ----
#include <iostream>
extern "C" int func(int a, int b);
int main(){
std::cout << func(2,3) << "\n";
return 0;
}
---- asm ----
.code
func proc
mov eax, ecx
add eax, edx
ret
func endp
end
----
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況