アセンブラ初心者スレッド

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
初心者OK!質問大歓迎!のアセンブラのスレッドです。
基本情報の勉強中の人、PICやH8を勉強中の学生などなど…

2デフォルトの名無しさん:2011/08/28(日) 13:59:51.60
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
3デフォルトの名無しさん:2011/08/28(日) 14:07:20.38
アセンブラ最高や!
C言語なんか最初からいらんかったんや!
4デフォルトの名無しさん:2011/08/28(日) 14:18:11.54
マシン語最高や!
アセンブラなんて最初からいらんかったんや!
5デフォルトの名無しさん:2011/08/28(日) 14:20:20.98
アセンブラを勉強するのにいい、unix系の本がありますか?
6デフォルトの名無しさん:2011/08/28(日) 15:25:38.65
だいぶ前に落ちたっきり次スレが立たなかったアセンブラスレの
次スレを立てましたので、以後そちらで。
http://hibari.2ch.net/test/read.cgi/tech/1314512680/l50
7デフォルトの名無しさん:2011/08/28(日) 19:26:11.59
>>6
初心者用らしいしここでいいんじゃね
8デフォルトの名無しさん:2011/08/28(日) 19:53:10.57
初心者用なら質問用テンプレが居るな、特にアセとなると
石、アセンブラが何か分からんと答えられんケースあるし

【CPU】 アセンブラではCPU(通称「石」)によって回答が全く違ってくることも多いので必須です。
     まったく分からなくても「Windowsが動くCPUです」など、分かるだけのことを書いてください。
【アセンブラ】 これも分かれば。コマンド名とかでもいいです。

あとは何をテンプレにすべき?
9デフォルトの名無しさん:2011/08/28(日) 21:36:27.48
書籍なんかがあればいいと思うけど
10デフォルトの名無しさん:2011/08/31(水) 12:03:39.49
質問します
『独習アセンブラ』という本を買って来て、文字を出力するプログラム(p.5)をつくってみたのですが、うまく動きません
nasm -f bin dispchar.asm -o dispchar.com
こう入力してから dispchar.com を動作させると、つぎのように表示されました

このバージョンの \dispchar.com は、実行中の Windows のバージョンと互換性がありません。コンピューターのシステム情報を確認して、
プログラムの x86 (32 ビット) のバージョンと x64 (64 ビット) のバージョンのどちらが必要か確認してから、ソフトウェアの発行元に問い合わせてください。

windows 7 64 bit でとりあえず動作させたいのですが、どうすればよいのでしょうか?

【CPU】 intel core i5-2400
【アセンブラ】 NASM version 2.09.10 compiled on Jul 15 2011
1110:2011/08/31(水) 12:05:03.29
dispchar.asm のソースを一応載せておきます

>cat dispchar.asm
; dispchar.asm
mov ah, 02
mov dl, 31h
int 21h

mov ah, 4Ch
mov al, 0
int 21h
12デフォルトの名無しさん:2011/08/31(水) 13:17:22.23
>>10
それに乗ってるのは16bitのコードだから、win7 64bitでは動かないよ
アセンブラも多分16bitだから動かないんじゃないかな?
13デフォルトの名無しさん:2011/08/31(水) 22:09:56.92
>>12
えっ、そうなのですか
残念です
では64bitの環境で学習できるよいサイトはあるでしょうか?
14デフォルトの名無しさん:2011/08/31(水) 22:13:55.85
NASMはWin32版もある
15デフォルトの名無しさん:2011/09/01(木) 02:22:30.05
ピックやれピック
16デフォルトの名無しさん:2011/09/01(木) 21:14:57.42
>>13
32bitアセンブラコードは。。。
ほとんどwin32API呼び出しで、アセンブラの意味はないしねぇ。。。

>>15の言う通り、PICマイコンでアセンブラした方が遊べると思うけど、こっちのアセンブラが64bitOSで動くかも不安が在るな。。。

ためして見た人居る?
17デフォルトの名無しさん:2011/09/01(木) 21:22:48.86
実ハードで動かすことにこだわらず、エミュ使うのも手だと思うが。
18デフォルトの名無しさん:2011/09/01(木) 21:28:50.15
xpモードで開発&実行
19デフォルトの名無しさん:2011/09/01(木) 21:57:17.07
アセンブラで、C言語のcase文のように書きたいのですけどどう書けばいいですか?
また、イフ文のようにも書きたいんですけどどう書けばいいですか?

20デフォルトの名無しさん:2011/09/01(木) 21:58:06.62
あ、開発環境はMPASM
PIC16F84Aです
21デフォルトの名無しさん:2011/09/01(木) 23:27:06.89
基本的には無理。

定番としてはテーブルジャンプだけど、その石でできるかどうかは知らない。
22デフォルトの名無しさん:2011/10/02(日) 00:57:45.07
call adressを機械語にすると
E8 77 77 77 77 みたいになるけど
この77777777実際のアドレスと違うんだよね
どういう規則でこのアドレスは算出されてるの?
23デフォルトの名無しさん:2011/10/02(日) 03:08:10.28
call命令っつっても対応するオペコードは複数あるんだよ。
E8の場合はIPからの相対アドレスへのnear call。
24デフォルトの名無しさん:2011/10/02(日) 05:49:48.47
相対ジャンプの場合は、石によるけど、ジャンプ命令のアドレスからのオフセットか、
その次の命令のアドレスからのオフセット(8086はどっちだっけ)。
2522:2011/10/02(日) 05:56:17.04
8086はWindowsのことだよね?
逆算してみたら、次のコードの開始位置からの相対位置ですね
26デフォルトの名無しさん:2011/10/16(日) 15:03:31.57
BSR ラベル:16 で書くのと JSRではどっちのがメモリ食うのか分からないです。
長いならJSRですかね?
27デフォルトの名無しさん:2011/12/14(水) 04:55:52.34
石の種類によるけど、BSRは3〜4バイト、JSRは4〜6バイト。
BSR ラベル:8 と書ける石もあって、この命令は2バイト。
でも、一般的にBSRのほうがJSRよりもマシンサイクルが多い(=遅い)。
その差まで気にかけるほどシビアな条件にはならないようにハード選定時点で
考えられるはず。 ってもう見てないよな(w
28デフォルトの名無しさん:2011/12/14(水) 18:44:46.56
暇なんでやってみた
win32だとCでやるのと変わらんわ・・・

;ml hello.asm /link /subsystem:console
.386
.model flat, stdcall
GetStdHandle proto :DWORD
WriteConsoleA proto :DWORD,:DWORD,:DWORD,:PTR,:DWORD
ExitProcess proto :DWORD
includelib kernel32.lib
.data
STD_OUTPUT_HANDLE EQU -11
hello DB 'hello, world',0Dh,0Ah,0
.data?
OUTLEN DWORD ?
.code
mainCRTStartup proc
local STDOUT :DWORD
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov STDOUT,eax
invoke WriteConsoleA,STDOUT,offset hello,14,offset OUTLEN,0
invoke ExitProcess,OUTLEN
ret
mainCRTStartup endp
end
29デフォルトの名無しさん:2012/03/21(水) 15:57:39.75
64bitOS上の32bitアプリで関数コールにpushad popadだけ書いてretしたらエラー落ちするのは何が問題なんでしょう?
30営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 17:38:06.65
>>29
    .386
    .model flat
    .code
_start:
    call  testsub
    ret
testsub:
    pushad
    popad
    ret
    end  _start

ml test.asm /link /subsystem:console

Vista 64bit で動かしたけど、なんも問題ないっぽいけど。
たのしそうだなー
>>30
それ64bitOS上の64bitコードじゃね?
33営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 21:31:03.44
バカ発見
キチガイ発見
アフォは自己紹介をする。
>>35
早く自己紹介して
37デフォルトの名無しさん:2012/04/21(土) 13:51:03.49
アセンブリをCのソースに変換するフリーのデコンパイラって存在しますか?
38デフォルトの名無しさん:2012/04/21(土) 13:58:08.54
存在しますよ。
39デフォルトの名無しさん:2012/04/21(土) 14:00:48.85
検索キーワードを教えちくり
40デフォルトの名無しさん:2012/04/21(土) 14:17:23.30
英語で検索すればおk
41デフォルトの名無しさん:2012/04/21(土) 14:18:27.72
なるほど
ありがとう!やってみる
42デフォルトの名無しさん:2012/05/02(水) 19:06:18.83
フローチャート書いてるんですが
スタック操作命令のPOP,PUSHってどうやって書けばいいですか?
PUSHの場合これ出会ってますか?
SP←0+(GR1)
43デフォルトの名無しさん:2012/05/02(水) 19:27:42.00
フローチャートはコーディングじゃないから、箱(処理)の中に「GR1をスタックに保存」「GR1をスタックから復帰」とか、自分で分かりやすい風に書きゃいーよ。
4442:2012/05/02(水) 19:34:10.73
>>43
そうなんですか。
ありがとうございます
45デフォルトの名無しさん:2012/05/03(木) 00:55:55.00
68kの性能のいいディスアセンブラないですか?
例えばデータの直後に命令があったらそれを識別できるくらいのがありがたいのですが
46デフォルトの名無しさん:2012/05/12(土) 20:56:41.58
サブルーチンからメインルーチンヘジャンプ命令ってプログラム的には問題なんでしょうか?

たとえば
EXE START
LOOP IN BUF,LEN
CALL DISP
RET

DISP LD GR1,LEN
LAD GR2,1
CPL GR1,GR2
JZE LOOP
RET
BUF DS 256
LEN DC 1
END
これの場合風呂チャートはどう書けばいいでしょうか?
47デフォルトの名無しさん:2012/05/12(土) 22:13:45.87
何これ、CASL?
4846:2012/05/13(日) 12:11:07.96
>>47
CASL2です
49デフォルトの名無しさん:2012/05/15(火) 15:50:00.32
>>46
まず第一に、そのコード自体がまずい。

コール、リターンというのがどういう動作なのか理解してる?
コールは次の命令のあるアドレスをスタックに積み、ジャンプする。
逆にリターンはスタックから1つ取り出して、そのアドレスにジャンプする。

そのコードだとLOOPへジャンプする度にスタックを食いつぶしていくことになる。
本来ならループされた数だけ戻り先の処理が行なわれてしまい、戻った際の処理もおかしくなるところ。
(そのコードの場合は戻り先がたまたまRET…つまり、何もせずにリターンするために一応動くことには動くのだが)
50デフォルトの名無しさん:2012/05/19(土) 14:27:41.30
inline void __fastcall sincos( const float& angle, float& sin, float& cos)
{
_asm
{
fld angle
fsincos
mov edx, [cos]
mov ecx, [sin]
fstp dword ptr [edx]
fstp dword ptr [ecx]
}
}

これ正しい値を返さないんだけど、何か間違ってますか?(VC++2010EESP1)
51デフォルトの名無しさん:2012/05/19(土) 14:32:51.37
>>50
自分でトレースすりゃすぐに分かりそうなもんだが、何故人に訊く?
52デフォルトの名無しさん:2012/05/19(土) 14:42:32.19
fldの所でdword ptrは付けないの?
そのままだとtbyte ptrがデフォルトになっちゃうと思うんだけど
5350:2012/05/19(土) 14:52:50.88
angle 0.78539819

↓こうなる。何だよDENって。。
cos 1.0000000
sin 1.997e-039#DEN

↓正しくはこう
cos 0.70710677
sin 0.70710677

>>51
さっぱりわからんとです。ハード的なコアな問題じゃないかと思って聞いた。

>>52
fld dword ptr [angle]
こうしたが同じだった。

54デフォルトの名無しさん:2012/05/19(土) 14:54:22.87
>>53
悪い間違った
勝手にfldのサイズをインラインアセンブラが類推してdword ptrにしてくれた
正しくは

_asm {
fld dword ptr angle
fsincos
lea edx, cos
lea ecx, sin
fstp dword ptr [edx]
fstp dword ptr [ecx]
}

だね

movではアドレスではなく中身を取ってきてしまう
55デフォルトの名無しさん:2012/05/19(土) 15:01:10.67
また間違った 今起きたばかりで脳がボケている
&だから参照なんでアドレスが入っているんだね
だから最初のfldもアドレスを先にロードしてそこからさらに読み取ればうまくいった

_asm {
mov eax, angle
fld [eax]
fsincos
mov edx, cos
mov ecx, sin
fstp dword ptr [edx]
fstp dword ptr [ecx]
}
56デフォルトの名無しさん:2012/05/19(土) 15:04:11.36
>>53 DENはおそらくデノーマル数だろうな。
57デフォルトの名無しさん:2012/05/19(土) 15:54:13.22
>>53
>さっぱりわからんとです。ハード的なコアな問題じゃないかと思って聞いた。

ステップ実行すりゃ、一番最初の fld angle で失敗してることくらい一目瞭然だろ。

ひょっとしてデバッガの使い方分からんのか?
5850:2012/05/19(土) 21:08:19.23
>>55
そのコードで直りました!ありがとう!

>>57
うちのVCたんはレジスタ表示出来ないの
お茶目な奴なんだよ
59デフォルトの名無しさん:2012/05/19(土) 21:16:04.76
>>58
>うちのVCたんはレジスタ表示出来ないの

ツール(T)→設定(S)→上級者用の設定

にチェック入れてる?
60デフォルトの名無しさん:2012/05/21(月) 02:07:11.52
x86の浮動小数点演算って変な格好をしてるよなあ
8087というコプロセッサを使うために作られたアーキテクチャとは言えそのまま引きずってるし
SSE2を使うと精度は64bitに落ちるが一応倍精度演算出来るもんな

x64も最初はFPUをコンテキストスイッチで保存しない計画だったんでしょ
全部SSE2に切り替えようとした
でもどっから圧力が掛かったのか社内の意見で反発されたのか、64bitOSはFPUを保存する事にした
61デフォルトの名無しさん:2012/05/21(月) 02:11:57.46
あ、ちなみにSSE2には超越関数はもちろんないが、プログラムで組んでもFPUと互角か
FPUより速い場合が今のCPUでは普通
62デフォルトの名無しさん:2012/05/21(月) 03:09:57.58
>>60-61
日本語でおk
63デフォルトの名無しさん:2012/05/21(月) 04:45:01.70
>>62
意味が分からないなら無理に読まなくてもいいよ
64デフォルトの名無しさん:2012/05/21(月) 05:14:03.65
>>63
> 8087というコプロセッサを使うために作られたアーキテクチャとは言えそのまま引きずってるし

「〜とは言え〜し」の使い方が異常。

> SSE2を使うと精度は64bitに落ちるが一応倍精度演算出来るもんな

IEEE754でいうところのDouble precisionなのに何が「一応」なのか意味分からん。
65デフォルトの名無しさん:2012/05/21(月) 05:54:25.35
難癖付けるのだけはうまいな

Intelは互換性を重視したために今のような汚いアーキテクチャになった
これは意図的に選んだ道だ
いくらでも綺麗に設計しなおすチャンスはあったが敢えてそうしなかった
MSのVCのlong doubleが64bitであるようにFPUを切り捨てる計画は
かなり前からあったようだがIntelに押し切られるような格好でOSの設計
だけは譲られなかったのだろう

それからFPUの内部演算は全て80bitだ
だから64bitで計算するのと結果が異なる場合がある
66デフォルトの名無しさん:2012/05/21(月) 06:11:06.67
>>65
>Intelは互換性を重視したために今のような汚いアーキテクチャになった

8086の頃から汚かったゾ?

>これは意図的に選んだ道だ

「今のような汚いアーキテクチャになった」のは「結果」であって、「選んだ道」ではないが。
67デフォルトの名無しさん:2012/05/21(月) 06:19:38.94
>>65
>いくらでも綺麗に設計しなおすチャンスはあったが敢えてそうしなかった

432とか、80860とか、Itaniumとか、ハイエンド製品についてアーキテクチャを見直すチャレンジは何回かやってるよ。
68デフォルトの名無しさん:2012/05/21(月) 12:43:10.15
どこに言っても言葉尻だけ捉えて重箱の隅をつつくようなアホがいるから対応策は一つ

66 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

67 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
69デフォルトの名無しさん:2012/05/21(月) 14:13:12.69
>>67は言葉尻ではないよな
70デフォルトの名無しさん:2012/05/21(月) 14:47:18.99
69 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
71デフォルトの名無しさん:2012/05/26(土) 23:12:40.96
スレ違だったらすみません

H8マイコンで、ボタンが押されるたびにLCDに表示されてるいる数を減らすのを作りたくて、ER4に MOV.W #D'5みたいに入れてそれをボタンが押されるたびに、一個づつ減らすように書いたのですが、そのER4の内容をLCDに表示させるのはどうすればいいんでしょうか?
72デフォルトの名無しさん:2012/05/27(日) 02:45:41.91
>71 日立…じゃなくて今はルネサスか…に問い合わせればきっと
トレーニングキットなり講習なりの案内はもらえるとは思えますよ。
数十万〜数百万個とか使うのでなければ有償だとは思うけど。
73デフォルトの名無しさん:2012/05/29(火) 04:40:40.39
>>71 「LCDに表示させる」ってとこはLCDのデータブックを理解できると仮定して・・・
・ワークregにER0を使う。(ことにする)
HEX: DC '0123456789ABCDEF'
 ER4をER0に移す
 ER0を0000000FでAND
 MOV.B (HEX,ER0),R1L で、16進の1桁をASCIIに変換できる
 R1LをLCD表示用の変数にセット
 ER4を右に4bitシフト
これを8回くり返せばER4の内容を表示用の文字列に変換できる。

74デフォルトの名無しさん:2012/05/30(水) 01:13:11.99
>>72
>>73
レスありがとうございます。>>73さんのやり方で表示できました。ありがとうございました!
7573:2012/05/30(水) 01:22:20.91
お役に立てて嬉しい
7673:2012/05/30(水) 01:39:47.03
あ、途中で書き込んじゃった・・・レジスタや変数の内容を表示したいのはよくあること
だから、dmp(変数)(長さは4とか16とか固定)、dmp(変数,長さ) とかの使い回し
できる関数にしておくといいよ。レジスタはその変数に代入してからdmp( )を呼ぶ。

cで製品を開発するときこういうのを組み込んでおいてずいぶん役に立った。
表示先はLCDの他に、uartのコマンド/報告で組み込むのをよくやった。
H8だったら最低2CHぐらいはuartが搭載されてるでしょ。
dmp <ff010><ret> と入力したら、そのCHに
FF010 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 <CR><LF>
と表示させる。上のはFF010番地に DC '0123456789ABCDEF' がある所を
ダンプした例ね。
7773:2012/05/30(水) 02:16:37.21
ここがASMスレなのを忘れて書いてしまった。
コンパイラによって違うけど、ルネのだと

dmp(変数)
    MOV.L #変数,ER0
    JSR  dmp
dmp(変数,長さ)
    MOV.L #変数,ER0
    MOV.W #長さ,R1  (16bitで充分、8bitでも可)
    JSR  dmp
となります。
78デフォルトの名無しさん:2012/06/01(金) 10:18:13.79
返信遅くなりすみません
有益な情報ありがとうございます

是非この先使ってみたいと思います!
79デフォルトの名無しさん:2012/06/11(月) 22:37:17.91
すみません,アセンブラ単体でヒープ領域のメモリ確保ってできますか?
アーキテクチャはlinux 2.6 on EM64T(およびPIC30F4012です.)
(おそらく後者は不可能という結論は出ていますが,ついでなので質問です.)
前者は,call malloc等でC関数を呼べば実装できているんですが,
Cランタイム非依存のlinux環境下では,int 0x80のシステムコールのみで
ヒープ領域の確保,解放を行う必要性があると思っています.
(システムコールなく,CPU命令で直接ヒープ領域にメモリ確保できれば十分です)

わかる方いらっしゃるでしょうか
80デフォルトの名無しさん:2012/06/12(火) 00:19:48.97
>>79
>すみません,アセンブラ単体でヒープ領域のメモリ確保ってできますか?

できますよ。

>アーキテクチャはlinux 2.6 on EM64T(およびPIC30F4012です.)

どちらも当たり前にできますよ。
8180:2012/06/12(火) 09:12:21.36
>>80
それぞれのインストラクションコードってわかりますか?
ggり方の問題なんでしょうけど,探しても見つかりません……
82デフォルトの名無しさん:2012/06/13(水) 10:29:17.85
>>80
騙してやるなよ可愛そうだろ.
それとも本気で無知乙か?w

>>79
PICのアーキテクチャ見てみろ.heap……ってか,
レジスタ以外にメモリあるか? 別途メモリとか実装すればそれっぽいことはできるかもな.
そもそもシングルタスクなのにメモリ空間を分ける意味がわからないが.

AMD64はわからんが,linuxならシステムコールのリファレンスとか,
libcの逆アセンブルを見ればいいんじゃないか?あとはggれ
83デフォルトの名無しさん:2012/06/13(水) 11:52:54.05
>>82
無知乙
84デフォルトの名無しさん:2012/06/13(水) 16:32:20.11
ページのフラグ変更すればいいんじゃね?
85デフォルトの名無しさん:2012/06/13(水) 16:57:26.71
>>82
>PICのアーキテクチャ見てみろ.heap……ってか,
>レジスタ以外にメモリあるか? 別途メモリとか実装すればそれっぽいことはできるかもな.

「PIC heap malloc」とかでぐぐってみ?

>そもそもシングルタスクなのにメモリ空間を分ける意味がわからないが.

ハーバードアーキテクチャとタスクがどうこうは関係ない話だが? 本気で無知乙だな。
86デフォルトの名無しさん:2012/06/17(日) 13:28:27.16
初心者スレで、初心者を愚弄する奴は来るな!
87デフォルトの名無しさん:2012/06/17(日) 13:42:22.46
初心者スレってバカが知ったかでアドバイスするスレだったのか?
88デフォルトの名無しさん:2012/06/17(日) 15:25:43.26
>>86
「初心者を愚弄」って、>>82

>それとも本気で無知乙か?w

みたいなこと?
89デフォルトの名無しさん:2012/06/29(金) 16:22:44.16
32ビットのフラットメモリモデルの場合なのですが、アドレスを記述する際にセレクタを
指定しなかった場合、実行時に使われるセレクタはDSで合ってますか?
90デフォルトの名無しさん:2012/06/29(金) 17:26:44.55
普通のアクセスは。

EIPによる命令フェッチはCSなのと、PUSHやPOPでのESPによるアクセスはSSだけど、
他に例外はあったかな。
91デフォルトの名無しさん:2012/06/29(金) 17:32:00.51
ebpはssだろうし
ストリング命令でのdiはesだと思う。
92デフォルトの名無しさん:2012/06/29(金) 18:14:35.79
フラットモデルは
CS==DS==SS==ESというキチガイモデル

LDTでプロセス毎のメモリ空間を確保
まあお陰で楽と言えば楽なんだが
93デフォルトの名無しさん:2012/07/04(水) 01:17:53.26
>>90-92
大変よくわかりました、ありがとうございます
94デフォルトの名無しさん:2012/07/06(金) 01:32:49.84
秋に基本情報を受けようと思ってるのでCASL2の勉強をしようと思うのですが、お勧めの参考書かサイトないでしょうか?
あとまったく知識ゼロの状態でCASL2を勉強して合格しようと思ったら
どれぐらいの期間かかりますか?(CASL以外の時間は含まず)
95デフォルトの名無しさん:2012/07/06(金) 01:40:51.02
>>94
何かひとつ実際のアセンブラが使えればCASLなんて屁でもないので
CASLの勉強なんて無駄なので止めなさい。
今使ってるPCのアセンブラでも勉強したほうがはるかに有意義だから。
96デフォルトの名無しさん:2012/07/06(金) 08:45:26.33
>>94
人による、としか。
CASL2自体を覚えるのはそんなに掛からないよ。
早い人ならそもそも試験会場で問題冊子に書かれた仕様と問題文から覚えちゃう。
苦手な人でも、一年やって仕様自体が頭に入ってない人は稀だろう。

問題となるのはそこからの応用力だから、そればかりは本当にその人次第だねえ。
応用できちゃう人は覚えた瞬間からほぼ全問解けるだろうが
応用の苦手な人は問題集で色んなパターンを覚えるしかない。
9794:2012/07/06(金) 22:01:30.66
レスありがとうございます

>>95
そうなんですか…CASLが勉強時間も短くて、試験にも通りやすいと聞いたので
選択しようと思ってたのですが、今後役に立たない知識ならば別のを選択したほうがいいですかね…

>>96
試験本番で仕様を読んで合格する人ってすごいですね…
98デフォルトの名無しさん:2012/07/06(金) 23:20:43.78
>>97
まあ、合格するまではやってみてもいいんじゃね
99デフォルトの名無しさん:2012/07/09(月) 13:16:53.86
すみません最近勉強しだした、ど素人なんですが

MAIN START
OUT BUF,LEN
RET
BUF DC 'Hello, World!'
LEN DC 13
END

Hello,Worldって表示させるだけなんですが、
BUF DC 'Hello, World!'
LEN DC 13
この二つを
MAIN START と OUT BUF,LEN  の間に記述したら駄目なんでしょうか?
流れ的にはラベルBUFにHello,World、LENに13と宣言してからOUTで出力させるような気がするのですが
C言語とはアルゴリズムが全然違うんでしょうか?

私が買った参考書にも特に説明もありませんでした。
出力の後に宣言があるので、なぜそうなるのかどなたか教えてください。お願いします

ちなみにこのプログラムは以下のサイトから抜粋しました
http://www.officedaytime.com/dcasl2/pguide/chapter1f.html
100デフォルトの名無しさん:2012/07/09(月) 13:51:18.05
アセンブラの場合、データ(BUF DC 'Hello, World!' / LEN DC 13)も、メモリの
その場所に置かれてしまうので、もしMAIN STARTの後に置いたら、
その文字コードを命令とみなして実行してしまうのでめちゃめちゃになる。
101デフォルトの名無しさん:2012/07/09(月) 13:55:58.49
>>99
>BUF DC 'Hello, World!'
>LEN DC 13
>この二つを
>MAIN START と OUT BUF,LEN  の間に記述したら駄目なんでしょうか?

セグメントの記述をキッチリしてればおk
10299:2012/07/09(月) 21:09:18.55
>>100,>>101

なるほど、ありがとうございます
103デフォルトの名無しさん:2012/07/09(月) 21:14:50.18
>>102
なるほど、とか言ってるけど実際分かってないんだろ?
104デフォルトの名無しさん:2012/07/09(月) 21:17:22.99
>>103
うん
105デフォルトの名無しさん:2012/07/09(月) 21:29:09.19
>>103
私の勉強不足と理解力が無いだけなんで、理解できるよう努力します
106デフォルトの名無しさん:2012/07/10(火) 00:15:24.71
流れでアセンブラをプログラムしようとするやつ
107デフォルトの名無しさん:2012/07/10(火) 00:21:33.24
アセンブラ以外の言語はやらないのだろうか?
108_:2012/07/12(木) 22:43:47.48
_
109デフォルトの名無しさん:2012/07/12(木) 22:57:27.69
片山さつき「大津の事件の原因は日教組政権下におけるハングル授業


大津のいじめ自殺について、本当にたくさんのメール、ツイートいただきました。
【中略】
担任の先生の、前任地、滋賀大学付属中学における、ハングルの授業・・?の記事なども入手しました。
英語習得段階もまだまだ中途であるはずの中学校で、なぜハングルを教育する必要があるのか?
子ども達に選択の余地はあったのか?
いかなる方針で、誰のオーソライゼーションによってそのような教育が行われていたのか?
それだけでも、かなり変わっているな、と感じられましたし、
【中略】
教育の自主性とか教育現場不可侵、、などを超えてしまっている現実を、
手をこまねいて見ていた多くの関係者、、。
3年前に「日教組政権?」が成立してしまったことで、
そこに、ますます歯止めがきかない空気が、浸透してしまった、そんな可能性はないのでしょうか?

ソース
http://blogos.com/article/42932/

ハングルの授業の資料
http://blog-imgs-53.fc2.com/h/o/t/hotlog/1341623759_img6946.jpg
110デフォルトの名無しさん:2012/07/12(木) 23:07:03.19
>>109
大蔵省のおばちゃんいらね
111デフォルトの名無しさん:2012/07/13(金) 01:18:34.37
>>110
そんなにおかしいこと言ってないだろ?
大蔵省が気に入らないのか?
112110:2012/07/13(金) 08:27:36.90
>>111
気にいらね、増税、おまえうれしいのか?
113デフォルトの名無しさん:2012/07/13(金) 10:07:42.62
ν速中毒が国会議員になれるなんて胸が熱くなるな。
114デフォルトの名無しさん:2012/07/14(土) 02:45:23.36
増税は反対だが、行き過ぎたチョン教育がおかしいってのは何も間違ってないだろ
115デフォルトの名無しさん:2012/07/14(土) 07:15:16.79
国会議員が行き過ぎたバッシングで人気取りを狙ってるほうが、
1000倍狂ってる。
116デフォルトの名無しさん:2012/07/14(土) 14:37:00.65
しかしあれだな、CASLな人はCASLと書いて欲しいな
117デフォルトの名無しさん:2012/07/15(日) 02:21:18.10
>>115
韓国の方でしたか
それは失礼しました
118デフォルトの名無しさん:2012/07/15(日) 07:28:14.94
バカウヨはν速に帰れ
119デフォルトの名無しさん:2012/07/16(月) 13:07:09.29
ここ何のスレだよ・・・
120デフォルトの名無しさん:2012/07/18(水) 09:06:45.66
【大赤字】 韓国万博にK-POPスターを呼んでも客が来ないため、チケット69円で投売り開始
http://engawa.2ch.net/test/read.cgi/poverty/1342528699/


麗水エキスポ:1000ウォンの深夜入場券発行へ

麗水エキスポの入場者数が目標を大幅に下回っていることを受け、
韓国政府は1000ウォン(約69円)の深夜入場券を発行することを決めた。
http://www.chosunonline.com/site/data/html_dir/2012/07/17/2012071701101.html


121デフォルトの名無しさん:2012/07/19(木) 00:31:33.84
話題を変えてしまってすみません。
戻り値が -1 である時に条件分岐したいのですが、
どうすればいいのでしょうか?
Linux x86_64でsyscallでopenを呼び出し、
ファイルオープンが出来なかったらエラーに飛びたいのです。
開きたいファイルが存在しない状態で実行ファイルを
実行したけれど、エラー処理に飛びませんでした。

# error check
cmp $-1,%rax
je _err

としても、

# error check
cmp $0xFFFFFFFFFFFFFFFF,%rax
je _err

としてもうまく行きませんでした。
122デフォルトの名無しさん:2012/07/20(金) 01:41:07.82
ENOENTは-1じゃねーぞ
123デフォルトの名無しさん:2012/07/20(金) 23:06:25.48
ありがとうございます。
-2 が戻るんですね。
戻り値が負であればエラーと見做せばいいんですね。
124デフォルトの名無しさん:2012/07/21(土) 09:43:17.25
欧州研究所が告白! 太陽光パネルで出力劣化しないのは日本製品とドイツ製品だけ!中韓メーカー発狂か
http://engawa.2ch.net/test/read.cgi/poverty/1342751788/


シャープ製太陽光パネル、「出力低下なし」お墨付き−欧最大の研究機関が評価

シャープは同社製の太陽光パネルに「PID」と呼ばれる産業用太陽電池特有の出力低下現象が起きないと欧州最大の研究機関に認められた。
フラウンホーファー研究機構(本部=独ミュンヘン)が欧州、北米、中国、韓国メーカーなどの太陽電池モジュール13製品を評価した。
欧州ではPID現象による太陽光パネルの出力低下が相次ぎ、品質問題として注目されている。PID現象が発生しなかったのは4製品だけ。
これまでに京セラ、ドイツの最大手Qセルズも現象が起きなかったと公表している。

詳細 2012/7/20
http://www.asahi.com/digital/nikkanko/NKK201207200019.html
125uy:2012/07/23(月) 23:46:45.61
この板は何もないなぁと常々思う

流石にITに夢見る奴も絶滅してしまったせいだろうか
プログラミングというものが、リアルで中学生位でも出来る奴が増えてきてるんだろうな
VBとか、BASICじゃなくてC++、C#関係を
そうやって一般人でも空気を吸うかのごとく扱えるようなジャンルになってくると
プロってものはいらなくなってくる

あとに残された金儲けの手段は
煩雑で、未整理で、情報の収拾が難しい分野の技術
けど、そういったものも、いずれ徐々に俺みたいな奴がその得た情報で金儲けするわけでもなく
無償で情報ばら撒き始めれば市場も崩れる
後に残されるのは、工場勤務などとなんら変わらない
個人能力に左右されないお仕事

機械で自動化できる部分を、あえて人間にやらせるお仕事
それが大多数のプログラマの仕事になるんだろうよ
126uy:2012/07/23(月) 23:53:39.98
こうなってくるとゲームのような、ほとんどが再利用不可能なソースコードで構成されたプログラムを作ることと
なんら変わらない、所詮は再利用するかしないかどころか、
不必要なシステム、不必要なプログラムを、人間の労働力が余っているから仕事を与えさせて動かしているだけであって
それなら、ゲーム系に「無駄」を使ったほうがマシだよ

コピペで済むものを、わざわざ再開発していく
コピペで済まされたら、暇になっちゃうから
遠回りして、仕事してるフリをしろと
本当に悲惨な職業だと思う
127uy:2012/07/24(火) 00:05:23.79
結局、目的のためにプログラミングをしてるってのは不健康なんだと思うよ
手段そのものでストレスを発散できるようになり、
目的度外視で手段を楽しいと思わなければ、その者は不幸だろう
ありえないリソースをサイト上にアップしているにも関わらず、
あまりにもアクセス数の少ない技術系情報サイト
そういうものも、手段を楽しんでいなければ構築できはしない
結局は気づくしかない
人間の素の演算能力が高くなれば、プログラミング言語がどれであろうと構わないって事
結局、世界全体の技術力を高めるには、人間の平均スペックを何世代にも渡って向上させていくしかないんよ
技術力のないバカに気づかせる事よりも、自分のことだけ考えて生きてた方がマシ
128デフォルトの名無しさん:2012/07/24(火) 19:38:45.58
ながすぎる
129デフォルトの名無しさん:2012/07/27(金) 00:17:08.91
うううう
この試験のために参考書いくつか買ってるけど金がかかってしょうがない
専門学校やPCスクールに通うよりは遥かにましだけど、1万以上は軽く飛んだぜ
130デフォルトの名無しさん:2012/07/27(金) 00:17:55.07
基本情報のスレに書いたつもりが間違えてしまった
131デフォルトの名無しさん:2012/08/01(水) 09:09:30.11
俺馬鹿だからZ80のハンドアセンブルくらいが一番勉強になる

図書館で昔の書籍発掘しながら勉強してるよ
132デフォルトの名無しさん:2012/08/03(金) 10:39:06.85
10進数ってどうやって表示してんの?
内部的には2進数で管理してるんでしょ?
133デフォルトの名無しさん:2012/08/03(金) 11:25:31.62
どちらも整数であって、「2進数」とか「10進数」という数があるわけじゃないから。
2進とか10進というのは表記法の違い。

表示する時に、たとえば7セグメントデコーダに 8 を表示するなら、
全てのLEDを点灯させるとか。
134デフォルトの名無しさん:2012/08/03(金) 14:13:28.73
それを言うなら、現実では1進数じゃないか。それをどうやって10進数で表している?
135デフォルトの名無しさん:2012/08/03(金) 19:10:57.51
言いたいことはわかるが、位取り記数法としては1進なんてものはないので、
そう言うのは混乱させる元だと思う。
136デフォルトの名無しさん:2012/08/05(日) 21:30:51.99
独習アセンブラって本をわざわざ買ってちょこっとかじったけど、他の言語と何ら変わらないイメージを持ってしまった

アセンブラって直接CPUいじるイメージだったからなんか違うなー
と思い、マイコンのアセンブラプログラム(ハンドアセンブラしてる時代)の本借りて勉強したら、構造が単純だからスイスイ頭に入ってわかりやすかったし、機械を操作してる感じもあって非常に勉強になった

こういうことをしたくてアセンブラを勉強したかったのに、最近のアセンブラ教本は他の高級プログラム言語の本となんらかわりがいないのがなんかかなしいな

昔の本を読むってのも勉強になると思った
137デフォルトの名無しさん:2012/08/05(日) 21:39:03.59
いまどきのOS上で動作するアプリを作る程度の使い方なら、アセンブラも他の言語も大して変わらんだろう。
138デフォルトの名無しさん:2012/08/05(日) 21:58:43.57
うんそうなんだよね
OS上で動作するんだったら普通の言語でいい

オレはコンピュータが動作する仕組みが知りたいからアセンブラの勉強はじめたんだけど、独習とかの教本はピンとこなかった

そういう意味で昔の本のほうがピンとくるんだ
アセンブラでコンパイラ作る本とかあって、コンパイラがどういう構造でできてるかとか勉強になるから面白いんだ
139デフォルトの名無しさん:2012/08/05(日) 22:10:40.75
CPUの性能が現在の1/10000くらいの時代、少しでも処理速度を早く
したくて、自分のコードを書き換えながら実行するプログラムとか
アセンブラで作ってたなあ、なつかしい(遠い目
140デフォルトの名無しさん:2012/08/06(月) 00:57:17.15
>>139
自己書き換えプログラムか 今のでそれやったら命令キャッシュにうまく読み込まれなくて
ハングするんだったな
141デフォルトの名無しさん:2012/08/06(月) 01:38:19.73
>>136
これわかるわー
今のrichなユーザインタフェースのOSや機能満載の開発環境の上だと,初心者を
プログラミングの世界に導くのが逆に難しくなってきていると思う."hello world"
なんて画面に表示できたところで何がおもしろいの?ってな感じなんだろうな.
それよりも単純に画面をタップしてモンスターをやっつけたりするほうが子供たちには
楽しいんだろうよ.今の子供たちはかわいそうだと思ってしまう俺も年なのか.
142デフォルトの名無しさん:2012/08/06(月) 07:39:54.12
いきなり目に見えるものが作れるのは幸せじゃない
ドラクエやってゲーム作りたいって思って
じゃあ基礎のアセンブラやりましょうとかなったら
完成までの道のりが遠すぎて挫折する

今は仮想化が何重にもなっててCPUを意識したプログラムもわけがわからない。
Mac上にVirtualBoxでWindows入れてその中で動くQEMU用のコードを書いたときに
最終的に動くCPUやメモリ内容が想像しづらい

いまサーバ側で動くCのプログラム書いてるけどそれも動かすのVPSだしなー
テクニックとかは仮想でも生きるんだよね?
143デフォルトの名無しさん:2012/08/06(月) 14:45:28.62
>>141
大先輩ですねー
俺らんときはかろうじてポケコンが有りましたよ
あんまいいじってなかったけどw

本当にコンピュータのことを勉強するんだったらCPUを直接操作して、こうやって画面に出力して、こうやって入力してって基本的なことから学んだほうがいいような気もします
自分は、なんでPCてこんな動きするんだろ?OSってなんで必要なんだ?って疑問から入って、調べていくうちにどんどんわからないことが増えていって、最終的にはアセンブラだなって思ってアセンブラの勉強したけど結局他の言語と同じじゃんとなってしまいました

どちらかというとアセンブラより、ハンドアセンブラをしたほうが、勉強になる気がします
そっからはいって経験を積み上げていくほうが面白いと僕は感じました
144デフォルトの名無しさん:2012/08/06(月) 19:54:32.61
> 自己書き換えプログラムか 今のでそれやったら命令キャッシュにうまく読み込まれなくて
> ハングするんだったな

しないよ。ていうか、キャッシュはコヒーレンシを保たなきゃ困るんだから。
自己書き換えでトラブるのはキャッシュじゃなくて先読みバッファ。
Intelの場合Pentium以降はそのへんチェックしてて、書き換えた結果が即有効になる。
145デフォルトの名無しさん:2012/08/06(月) 20:13:44.82
>>144
先読みバッファって何? パイプラインではなくて?

「IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide」
http://download.intel.com/products/processor/manual/325462.pdf

の「8.1.3 Handling Self- and Cross-Modifying Code」てとこ見ても、ジャンプ命令かシリアライズ命令入れれって説明で、

> Intelの場合Pentium以降はそのへんチェックしてて、書き換えた結果が即有効になる。

て感じではないみたいだが。
146デフォルトの名無しさん:2012/08/06(月) 21:28:15.26
正確にはプリフェッチキュー。

↓の中で Pentium って書いてあるところを検索して、その前後を見ればわかる。
ttp://service1.symantec.com/legal/publishedpatents.nsf/0/D10DB5F5D479457888256DF7005D6C1D/$FILE/United%20States%20Patent%205,765,030.htm
147デフォルトの名無しさん:2012/08/07(火) 03:53:05.21
岩田聡氏はこういう文法を使って任天堂機を
作った訳ですね。
148デフォルトの名無しさん:2012/08/07(火) 04:00:09.59
>>146
情報古杉。お前馬鹿だろ。
149デフォルトの名無しさん:2012/08/07(火) 07:30:37.86
いや、ファミコン時代初期まで遡るなら、アセンブリ言語通り越してマシン語直打ち。
150デフォルトの名無しさん:2012/08/07(火) 07:37:01.51
>>149
TK-80の頃でもクロスアセンブラとか珍しくなかったが。
151デフォルトの名無しさん:2012/08/07(火) 13:28:35.36
どこかに珍しいとか書いてあったか?
症状から当たりを付けてダンプリストながめて直接手直しなんてのはザラだった。
152デフォルトの名無しさん:2012/08/07(火) 14:07:30.05
>>151
そんなの時代関係ないが。
153デフォルトの名無しさん:2012/08/07(火) 17:46:25.83
>>144
ふつーはパイプラインにのってる書き換え前の命令がそのまま実行される
キャッシュもユニファイドでなければinvalidしない限り反映されん

x86は互換性命で無駄に努力しとるが

154デフォルトの名無しさん:2012/08/07(火) 22:33:11.95
アセンブラだけでは高級言語との区別が分かりにくく
ハンドアセンブルまでしてこそ
「プログラムもデータも同じようにメモリに乗る」
のが判るのは確かだな

前にCASL2教えてくれって言われて説明してたらそこが解ってもらえないから
CASL2の仕様引っ張りだしたがニーモニックだけでオペコード載ってないでやんの
それがあったならノイマン型コンピュータの解説にも便利だろうに…

Win32のDEBUGコマンドはそれを分かりやすく示してくれてたのに
64で削られたのは残念だった
155デフォルトの名無しさん:2012/08/07(火) 23:12:25.64
>>154
ほんとそうだよね
ハンドアセンブルしてからようやくアセンブラがどういうものかわかる

nasmとかmasmとか、勉強したとき、ラベルやら変数やらでわかりやすく記述できるのはいいんだけど、それがCPUのなかで順次どういう風に処理されてるかわかりづらかった

Z80で自分でラベルとかつけながらアセンブラでプログラム作って、実際にHEXに変換するって作業をするとCPUとメモリとのやりとりがわかる
この経験をしておけばCのポインタとかすっごい理解しやすいと思うんだが…
156デフォルトの名無しさん:2012/08/08(水) 05:24:04.18
そしてポインタに + 1 すると、ポインタが指す先のデータのサイズ分増えることが
理解できなかったりするわけねw

情報処理技術者試験の出題範囲が提示されてる、実施要綱だかの資料に、
附録で参考資料扱いだけど、オペコード表は載ってる。
157デフォルトの名無しさん:2012/08/08(水) 05:29:40.35
>そしてポインタに + 1 すると、ポインタが指す先のデータのサイズ分増えることが
>理解できなかったりするわけねw

データサイズに応じてアドレスポインタ++ できるアーキテクチャってそんな多くないし、
あんまアセンブラと関係ないな。
158デフォルトの名無しさん:2012/08/08(水) 07:06:28.80
C言語のその動作って処理系定義だっけ?
159デフォルトの名無しさん:2012/08/08(水) 18:10:41.92
void *以外は規格で決まってる
160デフォルトの名無しさん:2012/08/09(木) 08:43:37.95
int型は16bitですか?32bitですか?
ビッグエンディアンですか?リトルエンディアンですか?
処理系定義だべ?
161デフォルトの名無しさん:2012/08/09(木) 10:23:46.58
ポインタに+1した時の動作の話をしてるんじゃないのか?
162デフォルトの名無しさん:2012/08/11(土) 03:28:16.51
>>133-135
メモリ上では2進データだけど
画面表示するときとか十進数で表示するけど
LEDとかで1桁の数字とか表示するとかなら固定パターンの出力でいいかもだけど
十進数で数桁あるのを表現するときってどうやってんの?(十進数の桁ごとに分割する方法?)
メモリ上のたとえば4バイトの符号ありの整数とか少数とか
163デフォルトの名無しさん:2012/08/11(土) 04:44:30.97
10進の表示:10で割った余りに 30h(=ASCIIのゼロ)を足して1文字表示、これを
商がゼロになるまでくり返す。32bitなら最大8回。

16進の表示:0000000FhでANDすると下4bit分の値(0〜F)ができる。その値をオフセット
にして、"0123456789ABCDEF"の表引き(先頭からオフセットbyte先を読みとる)、
その値を1文字表示。元の値を4bit右にシフト。これを32bitなら最大8回くり返す。
164デフォルトの名無しさん:2012/08/11(土) 13:11:08.51
なるほど
ありがdクス
165デフォルトの名無しさん:2012/08/11(土) 14:01:27.72
>>163
いろいろ突っ込みどころがありすぎて困るが、uintをBCD(10進数って何だよw)
に変換するのに普通はそんな間抜けな方法は取りませんw
166デフォルトの名無しさん:2012/08/11(土) 14:04:56.71
>>165
↑具体例も示せない口先だけの屑
167デフォルトの名無しさん:2012/08/11(土) 15:42:56.50
>>165
>>166
の二名がどうやらクズのようです
168166:2012/08/11(土) 15:55:16.18
Cで書くと例えばこんな感じ

void putN(int n)
{
 if (n >= 10) {
  putN(n / 10);
 }
 putchar('0' + n % 10);
}
169デフォルトの名無しさん:2012/08/11(土) 16:49:39.60
>>168
商と剰余でするなら再帰せずに12バイトの配列用意した方がよくないか?
で、165が言ってるのはそもそも商と剰余を使わずにBCDで論理演算だけでやるんだ(キリッ
って事だろ
誰もBCDで扱いたいとは言ってないけども
170デフォルトの名無しさん:2012/08/11(土) 16:55:59.63
>>169
>再帰せずに12バイトの配列用意した方がよくないか?

どういう点でよいと言ってるのか分からんがそう思うならお前がそういう例を示せばいいだけの話。
171デフォルトの名無しさん:2012/08/11(土) 17:01:04.66
>>169
>商と剰余でするなら再帰せずに12バイトの配列用意した方がよくないか?

なぜ12バイト?
172デフォルトの名無しさん:2012/08/11(土) 17:03:02.19
>>169
>で、165が言ってるのはそもそも商と剰余を使わずにBCDで論理演算だけでやるんだ(キリッ
>って事だろ

>>165が言ってるのは 整数→BCD の変換だろう
173デフォルトの名無しさん:2012/08/11(土) 17:17:53.68
>>171
32ビットだと11桁が最大だろ?
ttp://ideone.com/0fAwc
負数も入れて13になっちゃったけど
>>172
165は変換してそれを使うといいたいんだろ?
それがそもそも163とかからはお呼びじゃなさそうだったというのを書きたかったのだが
如何せん日本語が不自由だからな
174デフォルトの名無しさん:2012/08/11(土) 17:20:32.04
つか数え間違いしてるわw
どう見ても最大は10桁だなw
175デフォルトの名無しさん:2012/08/11(土) 17:34:32.46
>>173
ttp://ideone.com/0fAwc

・0 与えたとき puts() が 2回呼ばれるとかロジックが汚すぎる。
・マイナスをサポートしてるのは偉いが、0x80000000 を与えると多分うまく表示されない。

他人に見せるサンプルとしてどうなのという気がする。
176デフォルトの名無しさん:2012/08/11(土) 17:42:30.37
>>173
>165は変換してそれを使うといいたいんだろ?
>それがそもそも163とかからはお呼びじゃなさそうだったというのを書きたかったのだが

中間形式は1文字/バイトで持とうがBCDで持とうが自由じゃね?

10桁くらいならメリットも小さいが桁がもっと多い場合にはメモリ使用量が少ないとか、デバッガでメモリダンプしたときに見易いとか、無理矢理考えれば BCD にも利点がないわけではない。
177デフォルトの名無しさん:2012/08/11(土) 21:40:52.12
10で割るって割り算ってどうやるんだっけか
178デフォルトの名無しさん:2012/08/11(土) 22:56:05.10
割り算のアルゴリズムって小学校低学年で習うだろw

最単純な符号なし整数の場合、まず除数と被除数のMSBが揃うまで除数を左シフトして...
後は分かるよね?
179デフォルトの名無しさん:2012/08/11(土) 23:15:35.71
今どきの小学校低学年の教科書はどうなっているんだ
180デフォルトの名無しさん:2012/08/12(日) 03:42:47.35
ということは10進数を表示するのって結構複雑なアルゴリズムになるわけか
181デフォルトの名無しさん:2012/08/12(日) 05:49:21.37
割り算命令が無いような古代の石だと確かに複雑だよ。8085でLSI-Cが無い頃に
仕方なく除算のコードを書いたことがある。7801にも移植できて、奇跡的にパツイチ。
182デフォルトの名無しさん:2012/08/12(日) 06:27:02.26
10で除算なんて大して複雑でない。
16bitの値を10で割るだけならこんなもん。8085で書いても30行くらいじゃないか?

unsigned div10(unsigned n, unsigned* mod)
{
 unsigned ans = 0;
 unsigned cmp = 10 << 12;
 unsigned i;

 for (i = (1 << 12); i > 0; i >>= 1) {
  if (n >= cmp) {
   n -= cmp;
   ans |= i;
  }
  cmp >>= 1;
 }
 *mod = n;
 return ans;
}
183デフォルトの名無しさん:2012/08/12(日) 06:52:25.96
試しに組んでみたら40行超えた。
    cseg
div10: xra  a
    sta  ans
    sta  ans+1
    lxi  d,10 shl 12
    lxi  b,1 shl 12
loop: mov  a,l
    sub  e
    mov  a,h
    sbb  d
    jcs  skip
    mov  h,a
    mov  a,l
    sub  e
    mov  l,a
    lda  ans
    ora  c
    sta  ans
    lda  ans+1
    ora  b
    sta  ans+1
184デフォルトの名無しさん:2012/08/12(日) 06:54:55.75
続き: デバッグしてないから動かんかも。眠いし。
skip: ora  a
    mov  a,d
    rar
    mov  d,a
    mov  a,e
    rar
    mov  e,a
    mov  a,b
    rar
    mov  b,a
    mov  a,c
    rar
    mov  c,a
    ora  b
    jnz  loop
    xchg
    lhld  ans
    ret
    dseg
ans:  ds   2
185デフォルトの名無しさん:2012/08/12(日) 13:29:06.94
>>180
というか、だから少なくとも除算がネイティブな機能として実装されてないようなCPUなら
10で割るなんて方法は取らない。
186デフォルトの名無しさん:2012/08/12(日) 13:42:08.27
>>185
具体的におねがいします
187デフォルトの名無しさん:2012/08/12(日) 15:16:08.79
次のものはどんなCPUでも比較的実装が簡単

 - BCD同士の加算
 - BCDの2のべき乗倍
 - byte(nibbleでもいいけど) ⇒ BCD変換

だから、

0xAABBCCDDのBCD変換値は0x00AABBCCのBCD変換値と0xDDのBCD変換値から求められる。
0x00AABBCCのBCD変換値は0x0000AABBのBCD変換値と0xCCのBCD変換値から求められる。
...

あとは分かるよね
188デフォルトの名無しさん:2012/08/12(日) 15:20:36.36
>>185
ビデオゲームのスコア表示なんかだったら、数字一桁に1バイトやパックド10進数で数字2桁に
1バイトを複数バイト使って点数計算と表示してたりするけど、そういう特殊な話してんじゃないんだよね?
189デフォルトの名無しさん:2012/08/12(日) 15:23:09.83
>>187
で、例えば16ビットの整数の値を割り算使わないで10進数で表示するのってどうやるの?

C の printf() なんかで当たり前に実装されてる機能だと思うけど。
190デフォルトの名無しさん:2012/08/12(日) 15:24:35.37
>>187
>0xAABBCCDDのBCD変換値は0x00AABBCCのBCD変換値と0xDDのBCD変換値から求められる。
>0x00AABBCCのBCD変換値は0x0000AABBのBCD変換値と0xCCのBCD変換値から求められる。
>...
>
>あとは分かるよね

なんで16進数が出てくるんだかマジ分からん
191デフォルトの名無しさん:2012/08/12(日) 15:25:07.60
>>189
int⇒uint⇒BCD⇒Hex
192デフォルトの名無しさん:2012/08/12(日) 15:25:24.86
>>187
C や擬似コードでもいいんで具体的にご説明願います
193デフォルトの名無しさん:2012/08/12(日) 15:26:20.07
>>191
>uint⇒BCD

↑んとこ具体的にご説明下さい。
194デフォルトの名無しさん:2012/08/12(日) 15:26:38.45
>>190
流石にそこまで初歩から説明させるのは勘弁してw
っていうか、少しはそれを恥ずかしいことだという意識を持とうよ
195デフォルトの名無しさん:2012/08/12(日) 15:27:15.48
>>193
だから>>187に考え方が書いてあるじゃん
196デフォルトの名無しさん:2012/08/12(日) 15:28:45.25
>>194
>流石にそこまで初歩から説明させるのは勘弁してw
>っていうか、少しはそれを恥ずかしいことだという意識を持とうよ

お前、具体的な方法も例示できないバカって思われてるの理解してる?
197デフォルトの名無しさん:2012/08/12(日) 15:30:50.83
>>196
バカにバカと思われても何とも思わない。
馬鹿だろお前。
198デフォルトの名無しさん:2012/08/12(日) 15:31:46.31
さらっとコード書いて説明すりゃ一発な筈なのにな、まあ、できないんじゃ仕方ないが。
199デフォルトの名無しさん:2012/08/12(日) 15:34:03.23
>>197
ああ、確かに何とも思わないね。
200デフォルトの名無しさん:2012/08/12(日) 15:37:13.46
10で割る方法は具体的なコードがいくつも挙がってるのに、「10で割るなんて方法は取らない」と
言ってる側からはひとつのコードも例示されない不思議
201デフォルトの名無しさん:2012/08/12(日) 15:38:28.44
ヒント: 馬鹿
202デフォルトの名無しさん:2012/08/12(日) 15:40:33.16
>>200
これはアセンブラで書かないと意味がないが、特定のCPUのアセンブラで書いても
それを知ってる人間以外には伝わらない。

というか、>>187の説明で理解できない奴がコード見て理解できるとは尚更思えんね。
203デフォルトの名無しさん:2012/08/12(日) 15:41:30.85
っていうか、こんだけ絡んでくる馬鹿が多いってことは、
つまりこの程度の常識を知らない奴が多いってことか....
204デフォルトの名無しさん:2012/08/12(日) 15:42:39.46
>>202
>これはアセンブラで書かないと意味がないが、特定のCPUのアセンブラで書いても
>それを知ってる人間以外には伝わらない。

お前の知ってるアセンブラでいいよ
205デフォルトの名無しさん:2012/08/12(日) 15:50:54.83
>>187
>次のものはどんなCPUでも比較的実装が簡単

> - BCDの2のべき乗倍

実装は簡単かもしれんが整数みたいにシフトすりゃいいもんじゃないし、演算のコスト考えれば
割り算なんかしないと言ってるロジックには採用し辛いんじゃないか?
206デフォルトの名無しさん:2012/08/12(日) 15:55:08.03
>>205
割り算みたいに1ビットずつシフトして比較して減算して....なんてやるわけじゃないから
コストはずっと低い。

例えば256倍はBCD加算を8回繰り返すだけ。
207デフォルトの名無しさん:2012/08/12(日) 16:01:44.27
>>206
>例えば256倍はBCD加算を8回繰り返すだけ。

8ビットの割り算も、引けるかどうか8回繰り返すだけだよ。
208デフォルトの名無しさん:2012/08/12(日) 16:03:59.84
>>187
>次のものはどんなCPUでも比較的実装が簡単

> - byte(nibbleでもいいけど) ⇒ BCD変換

それが 整数→十進数変換 だろうに何言ってんのコイツ?
209デフォルトの名無しさん:2012/08/12(日) 16:11:05.28
馬鹿の頭脳は8ビット、まで読んだ。
210デフォルトの名無しさん:2012/08/12(日) 16:14:06.80
いまだ具体的なコードのひとつも示せない奴がなんか言ってます(ププ
211デフォルトの名無しさん:2012/08/12(日) 16:21:02.34
>>202
>これはアセンブラで書かないと意味がないが、特定のCPUのアセンブラで書いても
>それを知ってる人間以外には伝わらない。

「アセンブラで書かないと意味がない」ってのは理解に苦しむが、もし俺がそういう状況だったら知ってる人が多いであろう x86 か ARM で書くけどなあ?

それか、書けるアセンブラ(8080、Z80、6800、6809、6502、8086、386、x64、PIC、AVR、SH、mips、PowerPC、Alpha)の中から選んでもらってそれで書くわ。

それぐらいの対応お前できねーの?
212デフォルトの名無しさん:2012/08/12(日) 16:22:19.82
あ、68K抜けてた。
213デフォルトの名無しさん:2012/08/12(日) 16:23:02.04
ARMも抜けてた。ボロボロだな。
214デフォルトの名無しさん:2012/08/12(日) 16:32:11.53
__m128 _mm_cvtepi32_decstr(__m128 a)
a最下位のuint要素を10進表現の文字列へ変換して返す。(余った桁には0が入る。)

こんな感じに1〜2クロックで変換できるSIMD演算器の命令、追加されないかな。
需要無いか。
215デフォルトの名無しさん:2012/08/12(日) 16:33:13.83
>>212
死刑。
216デフォルトの名無しさん:2012/08/12(日) 16:34:09.51
128bitの値が素数が否か1クロックで判定する命令追加されないかなー
217デフォルトの名無しさん:2012/08/12(日) 17:12:11.04
>>202
完全に逃げの態勢
218デフォルトの名無しさん:2012/08/12(日) 17:18:45.55
>>211
そこは敢えてCASLでだな…
219デフォルトの名無しさん:2012/08/12(日) 17:19:58.49
>>187
>次のものはどんなCPUでも比較的実装が簡単
>
> - BCD同士の加算
> - BCDの2のべき乗倍
> - byte(nibbleでもいいけど) ⇒ BCD変換

どんなCPUでもBCD演算をサポートしてるとか思ってる?
220デフォルトの名無しさん:2012/08/12(日) 17:21:00.65
>>217
そう思うなら試しに君が書いたら?
まあアルゴリズムが理解できないから無理だよねw

自分の理解力不足を棚に上げてこれだからな。

アセンブラのそれなりに実用的なコードなんて暗号的な上に冗長で、
相当慣れてても読解に苦労するものなのにそのサンプルを書けとか馬鹿の戯言意外に聞こえん。
221デフォルトの名無しさん:2012/08/12(日) 17:25:38.50
>>187
>次のものはどんなCPUでも比較的実装が簡単
>
> - BCD同士の加算
> - BCDの2のべき乗倍
> - byte(nibbleでもいいけど) ⇒ BCD変換
>
>だから、
>
>0xAABBCCDDのBCD変換値は0x00AABBCCのBCD変換値と0xDDのBCD変換値から求められる。
>0x00AABBCCのBCD変換値は0x0000AABBのBCD変換値と0xCCのBCD変換値から求められる。
>...
>
>あとは分かるよね

なんも説明してない典型
222デフォルトの名無しさん:2012/08/12(日) 17:28:07.46
>>220
>アセンブラのそれなりに実用的なコードなんて暗号的な上に冗長で、
>相当慣れてても読解に苦労するものなのにそのサンプルを書けとか馬鹿の戯言意外に聞こえん。

ん?>>183-184とかこのスレにコード投稿してる人もいるのに何言ってんの?
223デフォルトの名無しさん:2012/08/12(日) 17:29:18.93
>>220
>アセンブラのそれなりに実用的なコードなんて暗号的な上に冗長で、
>相当慣れてても読解に苦労するものなのにそのサンプルを書けとか馬鹿の戯言意外に聞こえん。

だから擬似コードでもいいって言われてんのにねー?
224デフォルトの名無しさん:2012/08/12(日) 17:34:09.85
>>202
>これはアセンブラで書かないと意味がないが、

C言語とかにはないBCD加算とかの命令は中身ブラックボックスの関数とかで代替できますよ。

a = bcdadd(b, c);

「アセンブラで書かないと意味がない」ってどゆこと?
225デフォルトの名無しさん:2012/08/12(日) 17:48:35.38
>>224
>>これはアセンブラで書かないと意味がないが、

「演算によるフラグへの影響を再現できない」とか言うのかな?

グローバル変数でCとかZとかのフラグ用意してaddやsubとかの演算は関数用意するとか、
C++で演算子のオーバーロードするとか、方法は幾らも考えられるよね。
226デフォルトの名無しさん:2012/08/12(日) 18:20:29.11
>>225
こんなこと一々説明されないと理解できないことは恥だと思うべきだと俺は思うが、
今問題にしているのは実行効率だから。

なぜ10で割った商と剰余を利用するより>>187の方法の方が効率的かはCで書いても
コードに現れない。
227デフォルトの名無しさん:2012/08/12(日) 18:21:51.19
っていうか、>>187が理解できればコード書けなんて馬鹿は言わないはずで、
だったらこういうの相手にしても時間の無駄だな。
228デフォルトの名無しさん:2012/08/12(日) 18:23:05.68
説明がおかしいという考えに及ばないところが馬鹿丸出し
229デフォルトの名無しさん:2012/08/12(日) 18:24:23.70
>>226
>こんなこと一々説明されないと理解できないことは恥だと思うべきだと俺は思うが、
>今問題にしているのは実行効率だから。
>
>なぜ10で割った商と剰余を利用するより>>187の方法の方が効率的かはCで書いても
>コードに現れない。

説明求められてんのはロジックなのに変な言い訳w
230デフォルトの名無しさん:2012/08/12(日) 18:26:43.37
コード提示すりゃ済む話を長々と引っ張るネw
231デフォルトの名無しさん:2012/08/12(日) 18:27:39.23
>>229
馬鹿って本当鳥頭だよな。
>>226>>225に対する回答だ。
232デフォルトの名無しさん:2012/08/12(日) 18:29:21.92
>>226
>今問題にしているのは実行効率だから。
>
>なぜ10で割った商と剰余を利用するより>>187の方法の方が効率的かはCで書いても
>コードに現れない。

どういう処理を機械語に落としたらどの程度の効率になるかなんてのは、自分で触ってる
プロセッサなら当たり前に想像付くようなモンじゃね?

お前、自分はそういう見積もりが出来ませんと言ってるワケ?
233デフォルトの名無しさん:2012/08/12(日) 18:31:25.73
>>231
求められてるのはロジックだと言ってるよ。お前が実行効率を理由にコードを提示しない理屈は通らんよ。
234デフォルトの名無しさん:2012/08/12(日) 18:34:38.69
まあ、コードの提示がない時点で出来ませんと言ってるも同然なんだが
235デフォルトの名無しさん:2012/08/12(日) 18:38:55.58
>>203
>っていうか、こんだけ絡んでくる馬鹿が多いってことは、
>つまりこの程度の常識を知らない奴が多いってことか....

常識って言うなら、どっかの他人が書いるコードとかロジックの説明のページ、ゴマンとあんじゃね?

お前に具体的なコード書いたりすんのが無理ならそのURL書くだけでもいんじゃね?
236デフォルトの名無しさん:2012/08/12(日) 18:41:40.33
訂正

×どっかの他人が書いる
○どっかの他人が書いてる
237デフォルトの名無しさん:2012/08/12(日) 18:45:14.11
>いろいろ突っ込みどころがありすぎて困るが、uintをBCD(10進数って何だよw)
>に変換するのに普通はそんな間抜けな方法は取りませんw

まあ、BCD(=二進化十進数)の言葉の意味も理解してない馬鹿みたいだし。
238デフォルトの名無しさん:2012/08/12(日) 18:54:43.27
>>165
>いろいろ突っ込みどころがありすぎて困るが、uintをBCD(10進数って何だよw)

Man page of PRINTF
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/printf.3.html
> o, u, x, X
> unsigned int 引き数を、 符号なし8進数 (o), 符号なし10進数 (u), 符号なし16進数 (x と X) に変換する。

「10進数」なんて↑に限らず良く使われる用語では? 何がおかしいのだろう?
239デフォルトの名無しさん:2012/08/12(日) 19:17:06.12
スレタイも読めない奴が上から目線で初心者を叩くスレがあると聞いてきたんですが、もしかしてここですか?
240デフォルトの名無しさん:2012/08/12(日) 19:23:59.34
ここはアセンブラ初心者が上級者ぶって初心者を叩くスレだから
241デフォルトの名無しさん:2012/08/12(日) 19:24:21.05
>>239
違いますね。ここは知識豊富な上級者様(=>>203)に、「この程度の常識を知らない奴」等が教えを請うスレです。
242デフォルトの名無しさん:2012/08/12(日) 19:52:24.06
>>187
ひょっとしてお前こういうこと↓言いたいわけ?

typedef unsigned char bcd_t[5];
void put10(unsigned n)
{
 bcd_t ans;
 bcd_t t;
 int i;

 memset(ans, 0, sizeof(ans));
 for (i = 0; i < 32; i += 8) {
  byte2bcd(&t, n & 0xff);
  bcdMultPowerOf2(&t, i);
  bcdAdd(&ans, &t);
  n >>= 8;
 }
 bcdPut(ans);
}

byte2bcd() の中身、割り算なしでどういう実装になるか教えてくれん? まさかテーブルじゃねぇよな?
243デフォルトの名無しさん:2012/08/12(日) 19:53:06.34
>>238
たいして専門知識もない奴が大昔に訳したまんま所が多いJMを出典にすんなw
「整数値を、8進法 (o), 符号なし10進法 (u), 符号なし16進法で数字(列)に変換する」が正しい。
244デフォルトの名無しさん:2012/08/12(日) 19:53:54.99
つーかこの程度のコードも明示できないんだとしたら終わってるだろ。
245デフォルトの名無しさん:2012/08/12(日) 19:59:20.39
>>243
>たいして専門知識もない奴が大昔に訳したまんま所が多いJMを出典にすんなw

日本人が書いたと思われる Ruby のマニュアルにも「2進数」なんて語が出てくるが、これも間違い?

sprintfフォーマット
http://www.ruby-lang.org/ja/old-man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html
> Ruby の sprintf フォーマットは基本的に C 言語の sprintf(3) のものと同じです。ただし、
> short や long などの C 特有の型に対する修飾子が ないこと、2進数の指示子(%b)が存在すること、
246デフォルトの名無しさん:2012/08/12(日) 20:07:11.64
>>242
byte⇒BCDはuintの上位バイトから実行した方が効率がいい。
byte⇒BCDの部分は除算命令でもテーブル参照でも何でも構わない。
そこで除算を使うななんて言ってない。
247デフォルトの名無しさん:2012/08/12(日) 20:10:25.84
おっ、コードの一つも提示できなかった奴がなんか言ってるw
248デフォルトの名無しさん:2012/08/12(日) 20:11:41.24
>>246
>そこで除算を使うななんて言ってない。

「というか、だから少なくとも除算がネイティブな機能として実装されてないようなCPUなら
10で割るなんて方法は取らない。」
249デフォルトの名無しさん:2012/08/12(日) 20:13:50.08
>>248
ホント馬鹿の頭脳は8ビットだな。
250デフォルトの名無しさん:2012/08/12(日) 20:14:53.62
なーんか、こういう高速化方法もあるよぐらいで済ましときゃよかったのに「常識」とか言っちゃって引っ込みが付かなくなったカンジね
251デフォルトの名無しさん:2012/08/12(日) 20:17:21.46
馬鹿の癖にプライドだけは高い奴の典型
252デフォルトの名無しさん:2012/08/12(日) 20:18:03.42
>>250
恥を知らないって幸せだね。
253デフォルトの名無しさん:2012/08/12(日) 20:21:00.70
>>187
>次のものはどんなCPUでも比較的実装が簡単
>
> - BCD同士の加算
> - BCDの2のべき乗倍
> - byte(nibbleでもいいけど) ⇒ BCD変換

「どんなCPUでも」って、BCD演算サポートしてないCPUにはしんどいんじゃないの?
254デフォルトの名無しさん:2012/08/12(日) 20:23:30.92
結局、馬鹿が自分の思い込みを常識と勘違いしてただけでしたチャンチャン
255デフォルトの名無しさん:2012/08/12(日) 21:28:13.40
PLC(いわゆるシーケンサ)のCPUならBCD演算今でもサポートしてるよ
ニモニックで書けば一応アセンブラか?

もっともPLCのCPUはSHとかのどこにでもあるCPUの上の仮想CPUだけどね
256デフォルトの名無しさん:2012/08/12(日) 21:50:48.10
>>187
>次のものはどんなCPUでも比較的実装が簡単

> - BCDの2のべき乗倍

試しにZ80で2**24倍するコード書いてみたが処理重すぎだろ。

    ld   c,24
loop1:push  hl
    ld   b,5
loop2:ld   a,(hl)
    add  a,(hl)
    daa
    ld   (hl),a
    inc  hl
    djnz  loop2
    pop  hl
    dec  c
    jp   nz,loop1
    ret

これだけでざっと見て5000サイクル位掛かるじゃねーか。10で割ったほう速いだろ。
257デフォルトの名無しさん:2012/08/12(日) 21:53:56.86
>>255
>PLC(いわゆるシーケンサ)のCPUならBCD演算今でもサポートしてるよ

だから何? 8080だって6502だってBCD演算今でもサポートしてるけど?
258デフォルトの名無しさん:2012/08/12(日) 22:13:24.54
BCDで2倍を24回繰り返すのと、BCDで16777216倍すんのと、どっちが速いだろう?
259デフォルトの名無しさん:2012/08/13(月) 04:46:30.85
ここまでスレが伸びるとか10進数表示って奥が深いんだな
260デフォルトの名無しさん:2012/08/13(月) 04:53:24.87
Cでprintf("%d",v);だけのプログラム作って解析すりゃいいんじゃね
261デフォルトの名無しさん:2012/08/13(月) 04:57:06.07
解析は犯罪です
262デフォルトの名無しさん:2012/08/13(月) 05:14:19.27
6502って現役なの?リモコン用?
263デフォルトの名無しさん:2012/08/13(月) 09:44:15.10
gccのコード見た方が早くね?
264デフォルトの名無しさん:2012/08/13(月) 14:16:19.57
CASL2で10進数表示のコードを提示してください
265デフォルトの名無しさん:2012/08/13(月) 14:28:12.28
>>264

CASL II 入門講座 第5章 数値を10進数の文字列に変換する
http://www.officedaytime.com/dcasl2/pguide/chapter5f.html
266デフォルトの名無しさん:2012/08/13(月) 14:33:07.30
>>264

IN命令とOUT命令 - 3. 応用:符号なし10進数を文字列に変換して表示する
http://www-cg.cis.iwate-u.ac.jp/~fujimoto/prog3/printud.html
267デフォルトの名無しさん:2012/08/13(月) 17:39:33.83
このアルゴリズム的に何の意味もないコメントの付け方をみると無性に腹がたつ。
学習用とはいえ、いちいち命令をすべて日本語に読み下すなと。
268デフォルトの名無しさん:2012/08/13(月) 17:53:25.73
>>267
どれのこと言ってんの?
269デフォルトの名無しさん:2012/08/13(月) 17:57:42.24
>>262
割と最近の製品の例
http://www.brielcomputers.com/wordpress/?cat=24

動作しているところ
http://nicoviewer.net/sm4158739
270デフォルトの名無しさん:2012/08/13(月) 18:23:18.16
>>269
どんだけ特殊な製品なんだw
こいうお遊び以外では需要なんてないだろ。
271デフォルトの名無しさん:2012/08/13(月) 18:47:55.08
WDCの製品ラインナップにあるからまだ需要もあるのだろう
http://www.westerndesigncenter.com/wdc/w65c02s-chip.cfm

6年前のトラ技の記事
http://toragi.cqpub.co.jp/Portals/0/backnumber/2006/06/p245-246.pdf
272デフォルトの名無しさん:2012/08/13(月) 18:56:26.10
世の中に出回ってる製品のうち、使ってるマイコンの種類をエンドユーザーが分かるものなんて稀だろう。
俺らの知らんところで6502が使われてても不思議はない。
273デフォルトの名無しさん:2012/08/13(月) 19:10:17.02
ないないw
そもそも8bitなんて組み込み用途しか需要がないんだから組み込み「マイコン」以外の
CPUに需要はない。
274デフォルトの名無しさん:2012/08/13(月) 19:14:50.89
>>273
>そもそも8bitなんて組み込み用途しか需要がないんだから組み込み「マイコン」以外の
>CPUに需要はない。

新規開発に限ればまあだいたい合ってるが世の中それだけではない。
275デフォルトの名無しさん:2012/08/13(月) 19:25:35.33
国内のパチンコやパチスロの当たりを決めてるところの制御はいまだにZ80の派生品で行ってるらしい。
外国から見れば、日本のパチンコやパチスロの事情なんてわけの分からん話だろうし、一般に情報も伝わらないだろう。
どこかの国に「日本のパチンコやパチンコ」に該当するものがあったとして、我々はそれを知りうることができるだろうか?

「組み込み「マイコン」以外のCPUに需要はない」と断言する奴は視野が狭いと思う。
276デフォルトの名無しさん:2012/08/13(月) 19:29:54.80
訂正

×「日本のパチンコやパチンコ」
○「日本のパチンコやパチスロ」
277デフォルトの名無しさん:2012/08/13(月) 19:41:07.16
>>275
パチンコ業界のことは知らんが、恐らく派製品ですらなくIPでしょ。
あれをZ80と呼んでよいかは微妙だね。
そもそも今時本当にZ80相当を使ってるかどうか疑わしい気もする。
都市伝説の類じゃないのか?
278デフォルトの名無しさん:2012/08/13(月) 19:43:34.37
LE-Techも聞いたことない素人さんですか?
279デフォルトの名無しさん:2012/08/13(月) 19:46:42.79
まあなんにしろ、仮に事実パチンコにZ80が使われ続けているとしても、
それは政治/行政上の理由という特殊事情で選択されているに過ぎず、技術的あるいは経済的理由で
選択されているわけではない。
280デフォルトの名無しさん:2012/08/13(月) 19:47:17.91
>>277
>そもそも今時本当にZ80相当を使ってるかどうか疑わしい気もする。
>都市伝説の類じゃないのか?

パチンコ関係じゃ、いまだにZ80の求人あるの知らんの?
http://www.careerjet.jp/search/jobs?s=Z80&l=%E4%B8%AD%E9%83%A8%E5%9C%B0%E6%96%B9
281デフォルトの名無しさん:2012/08/13(月) 19:48:37.06
>>279
そういう事情が日本以外には存在しないと考えるおバカさんですか?
282デフォルトの名無しさん:2012/08/13(月) 19:50:04.35
>>275はもはや持論を正当化するための屁理屈に過ぎんな
283デフォルトの名無しさん:2012/08/13(月) 19:51:42.19
だから知らねえって言ってるだろ。

それに、求人があるからって現行製品かどうか分からんでしょ。
ある種の保守用人員かもしれない。
例えば古い台をゲーセン用に改造するためとか
284デフォルトの名無しさん:2012/08/13(月) 19:54:43.54
知らない奴が何いってんだろ?
285デフォルトの名無しさん:2012/08/13(月) 19:57:00.93
>>283
>それに、求人があるからって現行製品かどうか分からんでしょ。
>ある種の保守用人員かもしれない。
>例えば古い台をゲーセン用に改造するためとか

求人内容見て言ってる? 必死すぎw
286デフォルトの名無しさん:2012/08/13(月) 19:58:51.32
初心者の質問スレじゃなくて
プロが語り合うスレになっちまってるな
287デフォルトの名無しさん:2012/08/13(月) 19:59:12.10
>>283
>だから知らねえって言ってるだろ。

知らないくせに断言とか良くできるなー。感心するわ。
288デフォルトの名無しさん:2012/08/13(月) 20:01:35.65
どう見ても片っぽは素人
289デフォルトの名無しさん:2012/08/13(月) 20:36:32.24
暑苦しいおっさんどもだなぁ
290デフォルトの名無しさん:2012/08/14(火) 14:45:16.63
64bitだとアセンブラ使えないのか・・
どうしよう
291デフォルトの名無しさん:2012/08/14(火) 14:49:25.74
>>290
インラインアセンブラか何かを勘違いしてる?
292デフォルトの名無しさん:2012/08/14(火) 19:13:53.50
何ビットだろうと出来ないことはないだろう
最悪、ハンドアセンブルで!
293デフォルトの名無しさん:2012/08/14(火) 21:08:36.30
C言語の入門書をやり終えたら
パソコンが中で何やってるか知りたくなって、アセンブラに興味が湧いたんだけど
スレの上のほうで64bit環境じゃうまく動かないって報告があったから…

アセンブラで何か作りたいってわけではないのですが、いい参考書あったら教えて下さい

因みにラ・リ・ルって
「アセンブラでアセンブリをアセンブルする」
でいいんですよね?
294デフォルトの名無しさん:2012/08/14(火) 21:16:26.09
>>293
> いい参考書あったら教えて下さい

はじめて読む486―32ビットコンピュータをやさしく語る
http://www.amazon.co.jp/gp/product/4756102131/

インテルのマニュアル水で薄めたような内容だけど、まあやさしく書いてる。
295デフォルトの名無しさん:2012/08/14(火) 23:32:15.67
本読んで終わりって人達ですか?
296デフォルトの名無しさん:2012/08/14(火) 23:56:43.22
>>294
それと、はじめて読むアセンブラ―ソフトウェアツールの原点を探る
を買ってみます

>>295
触って動かしてみたいけど64bit環境しか無いので…
297デフォルトの名無しさん:2012/08/15(水) 02:04:23.84
>>296
パソコンで64bit環境(x86系)なら、32bitなアプリも作れるでしょうに
何を読んで?そう思ったのかしらんけどね

アセンブラっていっても、どのCPU?でやりたいのかな?
298デフォルトの名無しさん:2012/08/15(水) 02:44:39.11
>>293
CPUの中身を知りたいのならオレが今読んで学んでる、Z80マイクロプログラミング実習って本がわかりやすい

いきなりx86系とか学ぶと頭ついていかなかった頭の悪いオレからの助言
299デフォルトの名無しさん:2012/08/15(水) 16:03:00.55
それは違うだろ

Z80も一応調べてみたけど「あれ?乗算除算浮動小数点演算命令ないよ?何それ?」
って感じだった

x86の方が明らかに組みやすい
300デフォルトの名無しさん:2012/08/15(水) 16:03:50.85
書けても動かないとか?
301デフォルトの名無しさん:2012/08/15(水) 16:20:15.82
>>299
>「あれ?乗算除算浮動小数点演算命令ないよ?何それ?」

>x86の方が明らかに組みやすい

そういうレベルで分かった気になってると、自前で乗除算組まなければいけなくなったときに泣きを見るゾw
302デフォルトの名無しさん:2012/08/15(水) 16:27:54.03
>おれ、x86のアセンブラ知ってるんだ
それって、かっこいいの?
303デフォルトの名無しさん:2012/08/15(水) 16:29:52.70
楽したければ
304デフォルトの名無しさん:2012/08/15(水) 16:38:21.04
浮動小数点は上位言語で使えるようになってるからね
アセンブラよりは低レベルな考え方を身につける方がいいんじゃね

今は、CPUに依存した命令が読めればいい方
305デフォルトの名無しさん:2012/08/15(水) 17:00:29.29
>>302
>それって、かっこいいの?

むしろ知らないとCのデバッグにも苦労すると思う。
性能出したいところでコンパイラの出力したコードを参照してソースの書き方変えるとか、当たり前のことだし。
306デフォルトの名無しさん:2012/08/15(水) 17:02:43.52
>>305
レベルの高いことまでやろうとは思ってないんじゃないの?
307デフォルトの名無しさん:2012/08/15(水) 21:43:58.20
IEEE754に準拠した浮動小数点演算命令パッケージは探せばあちこちに落ちてるけど
回転/シフト命令だけで結構楽に組めるんだな

超越関数に至ってはSSE2で書いた方がFPUよりも速いという
308デフォルトの名無しさん:2012/08/15(水) 22:18:00.98
>>297
Intel Core i7 860です

>>10-14
を見て64bitだとうまくいかないのかと思いました
309デフォルトの名無しさん:2012/08/15(水) 22:25:14.65
>>308
>を見て64bitだとうまくいかないのかと思いました

Windowsの64bit版だと16bitのコードが動かないのはその通り。
64bitか32bitのコードを動かすか、エミュレータ上で16bitのコードを動かせばよいだけ。
310デフォルトの名無しさん:2012/08/15(水) 23:46:39.85
>>309
調べてみたら
win7のxpモードで16bitが動くようなので
それでやってみます!
311デフォルトの名無しさん:2012/09/26(水) 23:10:27.88
mov CS:[w_sp],SP

この第一オペランドの:の意味がわからんのです
これはCSとw_sp両方にSPを入れるってことなの?
312デフォルトの名無しさん:2012/09/26(水) 23:13:02.28
>>311
本かインテルのマニュアルかなんか見れ。
313デフォルトの名無しさん:2012/09/26(水) 23:33:38.29
本見たりググったりしたんだけどわかんねーんだよ

記述自体が古いのかな…

なんせPC9801のアセンブラだから…
314デフォルトの名無しさん:2012/09/26(水) 23:43:22.21
>>313
超基本的なことだから、書いてないなら本が悪い。ぐぐってわからんのならお前の頭が悪いわ。
315デフォルトの名無しさん:2012/09/26(水) 23:46:33.52
基本的なことなのか!!
すまん…もうちょっと頑張ってぐぐってみる

ありがとう
316デフォルトの名無しさん:2012/09/26(水) 23:53:13.25
あ!わかった!!!
CSってのはコードレジスタだから、そこを基準に[w_sp]分オフセットがかかってるってことなんだな!!

わかったぞ!
>>313さんありがとう

ちゃんと考えなかったオレが悪い
考えるキッカケを作ってくれてありがとう
317デフォルトの名無しさん:2012/09/26(水) 23:54:19.26
ごめん313じゃなくて314でした
318デフォルトの名無しさん:2012/09/27(木) 09:47:06.61
@
inc dword ptr [count]
というのはアトミックですか?

++cnt;
をVC10でReleaseコンパイルしたら上記のようになったのですが、
デバッグコンパイルしたら下記のように分解されてしまいました。

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

Aは明らかにアトミックではないと思いますが、
コードの途中で、他のスレッドが同じコードを通ったときに
カウントがおかしくなってしまうのは構いません。

2つ以上のスレッドが同時に@かAを通ったときに
動作が異なる可能性があるのかを知りたいです。

(動作が異なるならインラインアセンブラで書くか、
カウントがおかしくなるのが困るようになったときは
クリティカルセクションでも使います)
319デフォルトの名無しさん:2012/09/27(木) 10:04:35.72
InterlockedIncrement
320デフォルトの名無しさん:2012/09/27(木) 10:06:38.40
一応、そのx86での実装は
普通はinc等ではなく、lock+xadd
321318:2012/09/27(木) 11:59:10.28
>>319 >>320
知りたいのは、マルチスレッドで同じコードを同時に通った場合に、
@とAで動作が異なる可能性があるかどうかなのです。

カウントがおかしくならないようにするための方法を
示していただいたということは、@もアトミックではないと
解釈して良いのでしょうか?
322デフォルトの名無しさん:2012/09/27(木) 21:16:39.57
割り込みコントローラ回りのコーディングが、どうしたものかわかんないんだよなぁ
323デフォルトの名無しさん:2012/09/27(木) 23:58:41.44
cmpxchg
324デフォルトの名無しさん:2012/09/28(金) 00:47:19.87
H8なら@に相当するコードはアトミックだったよ。割込とタスク両方からカウントを
変更するときに割禁かまさなくて済むから意識的に使った。
だからx86でも@はアトミックだと類推する。
325デフォルトの名無しさん:2012/09/28(金) 01:14:48.26

add eax,1

mov dword ptr [count],eax

*印のところでスレッド切り替えが起きたらどうなると思う?
326318:2012/09/28(金) 12:23:50.67
回答ありがとうございます。

>>323
クリティカルセクションを実装するのに使える命令なのでしょうか?
排他が必用になったときに、試してみます。

>>324
@がアトミックだとなると、
デバッグ版のAとは違う動作になってしまいます。
あまりに挙動が変わってしまう場合は、
インラインアセンブラで@に書き換えてみます。

>>325
他のスレッドで、カウントが巻き戻ってしまうかも
しれないというのは分かります。
他に致命的な問題があるのなら、
インラインアセンブラで@に書き換えてみます。
327デフォルトの名無しさん:2012/09/29(土) 17:44:46.97
PC/AT互換機での電源の制御ってどう行えばいいんだ?(シャットダウン等)

BIOSファンクションがあるのか、はたまたデバイスとやり取りしてやるのか
出来るなら、どいつが扱ってるのか理解したいから、BIOSファンクションを使わなくてもいいなら、そちらの方法が知りたい
328デフォルトの名無しさん:2012/09/29(土) 18:02:25.95
ACPIを通しているのは確実でしょ。

どうやってACPIを使うかは知らん。
探せば仕様書くらい出てくるかも。
329デフォルトの名無しさん:2012/09/29(土) 22:08:07.87
>>2326
cmpxchgはCAS命令と呼ばれる物だよ

http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%9A%E3%82%A2%E3%83%BB%E3%82%A2%E3%83%B3%E3%83%89%E3%83%BB%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97

Lock-freeとWait-freeアルゴリズムが実装出来る

あとx86に

http://ja.wikipedia.org/wiki/Load-Link/Store-Conditional

これが欲しかった
まあいらんのかも知れんれど
330デフォルトの名無しさん:2012/09/29(土) 22:08:24.52
×>>2326
>>326
331デフォルトの名無しさん:2012/09/29(土) 22:44:36.32
>>327
APMファンクション呼べばよろし

ACPIでもできるけどAMLインタプリタ用意せにゃいかんので
面倒くさい
332デフォルトの名無しさん:2012/09/30(日) 18:55:20.60
>>331
APMという単語で調べて、一応なんとかなった、ありがとう。
調べれば調べるほど、アセンブラでもかなり高級なプログラミングなんだなと思えて、嫌になってくるが。

in、out命令でなんとかならないかのう
333デフォルトの名無しさん:2012/10/01(月) 16:29:22.52
>>332
Embedded Controler叩けばいいはずだが、標準仕様がないしそのへんの情報は
ほとんど公開されとらんので自力で調べんといかん

のでBIOSにお願いするのが一番簡単
334デフォルトの名無しさん:2012/10/02(火) 16:49:46.89
APMって未実装のものも多いよな
ACPI使わないとデバイス割り当て出来なかったりもするし、どこに向かっていくんだか…
335デフォルトの名無しさん:2012/10/06(土) 20:25:08.12
そりゃAPMじゃ手に負えなくなってACPIができたんだから
16bitモードが消え去ってUEFIに移行すりゃなくなるだろう


336デフォルトの名無しさん:2013/03/07(木) 11:26:55.04
computer 計算機(JIS用語らしい)、コンピュータ
compiler コンパイラ、「コンパイルを行う翻訳プログラム」
linker リンカ、「…ロードモジュールを作成するために用いられる計算機プログラム」
assembler アセンブラ、「アセンブルを行う翻訳プログラム」
assemble アセンブルする、「アセンブラ言語で書かれたプログラムを目的プログラムに翻訳する」
assembler language program アセンブラ言語プログラム
assembly language アセンブラ言語(JIS用語らしい)、アセンブリ言語、「機械命令に対応した記号形式を備えたプログラム言語」
source code ソースコード、原始コード

コンピュータ用語辞典第3版(日外アソシエーツ)
337デフォルトの名無しさん:2013/04/24(水) 11:21:55.75
よろしくお願いします。
はじめてプログラミングを勉強するにあたり、
CASL2とZ80だとどちらがお勧めでしょうか?
CASL2は基本情報参考書の付録CD-ROMのエミュ、Z80は講談社ブルーバックス付録CD-ROMのエミュを持っていて、このどちらかで勉強を始めたいと考えているのですが…
どなたかアドバイスをよろしくお願いします。
338デフォルトの名無しさん:2013/04/24(水) 11:25:29.76
プログラミング自体が始めてならいきなりアセンブラというのはあまりお勧めできない。
それでもやるというならどちらでも好きにしなさい。
339デフォルトの名無しさん:2013/04/24(水) 11:35:30.91
>>337
エミュレータを使っての学習はつまらんので続かないと思う。
実機を使うのが良いよ。
340デフォルトの名無しさん:2013/04/24(水) 17:28:28.54
ということで、CASL2は落選。ゼッパチの使える基板が秋月辺りで帰れば面白い。
341デフォルトの名無しさん:2013/04/24(水) 17:29:37.13
ごめん、買えれば ね。
342デフォルトの名無しさん:2013/04/24(水) 17:58:17.10
Z80は既に実用的な用途はだいぶ減ってるし、CASL2はもとから実用的なものではないから、
要するに機種はなんでもいいからアセンブラを始めてみたいということだと思うが、それなら
今ならArduino辺りでいいと思う。LEDチカチカさせるだけでも楽しいよ。
343337:2013/04/24(水) 20:27:47.68
皆さんありがとうございます。
アドバイスをぐぐって調べてみます
コンピュータを理解したくて、勉強をしたいと思ったんです。
344デフォルトの名無しさん:2013/04/24(水) 20:37:11.57
このへんやっても今のPCの理解が深まることはないと思うけどな
345デフォルトの名無しさん:2013/04/24(水) 21:30:29.33
>>344
お前みたいなやつがいるからどんどんレベルが下がってんだよ
346デフォルトの名無しさん:2013/04/25(木) 03:37:35.34
>>344
>今のPCの理解が深まることはないと思うけどな

それがアセンブラ弄る唯一の目的と思ってるならお前バカ丸出しだよw
347デフォルトの名無しさん:2013/04/25(木) 04:13:28.59
いまからASMやって身になるならどのへんかねぇ
キャッシュと分岐予測あたりが必須になりそうな
348デフォルトの名無しさん:2013/04/25(木) 07:11:13.38
>キャッシュ

ない環境も普通にある。

>分岐予測

ない環境も普通にあるし、あってもプログラマとってはさほど負担になるものではない。
349デフォルトの名無しさん:2013/04/25(木) 10:05:32.55
分岐予測が必須とか、15年前からタイムスリップしてきたMIPS信者ですか?とかw
350デフォルトの名無しさん:2013/04/25(木) 10:40:59.84
そりゃないとこ探せばあるんだろうけども
351デフォルトの名無しさん:2013/04/25(木) 11:51:09.09
「必須になりそう」って、キャッシュも分岐予測も解ってない奴が何言ってるんだろ?
352デフォルトの名無しさん:2013/04/30(火) 17:23:17.57
Ollydbgで得られるアセンブラの記法ってインテル記法?AT&T記法?どっちですか?
353デフォルトの名無しさん:2013/04/30(火) 17:29:52.45
ググレカス
354デフォルトの名無しさん:2013/04/30(火) 18:55:26.87
>>352
みたらインテル表記でした

ネトゲ(とりあえずどんなネトゲでも、npro,ゲームガードつきとか)のチートツールを作ってみたいんですがどうすればいいんでしょうか?
Windows7です

串作成、ラッパー、デコードルーチン実装とかなに?
教えてください

串作成っていうの接続のときプロキシを使うってこと?
ラッパーは?デコードルーチン実装って?
よくわかりません アンパックとかはなんとなくわかりますが
どうやって学んでいけばいいのか教えてください
355デフォルトの名無しさん:2013/04/30(火) 18:57:22.94
>>353へのレスですミス
356デフォルトの名無しさん:2013/05/01(水) 18:40:23.85
板違い
357デフォルトの名無しさん:2013/05/21(火) 00:02:08.27
世界一速い整数多倍長計算ライブラリを作ってくれませんか?
358デフォルトの名無しさん:2013/05/21(火) 02:13:58.50
そんなニーズないよな
359デフォルトの名無しさん:2013/05/21(火) 07:28:29.06
なくはないと思う
360デフォルトの名無しさん:2013/05/21(火) 10:34:32.84
昔そういうスレがあった気がする
完成したのか挫折したのか知らんけど
361デフォルトの名無しさん:2013/05/21(火) 10:35:38.08
そりゃ何でも少しでも速いほうがいいのは確かだけど、
新しく作ったらバグが完全に無くなるまでしばらくかかるし。
362デフォルトの名無しさん:2013/05/21(火) 11:31:17.83
>>357
http://gmplib.org/ とかで何か不満でもあるのか?
363デフォルトの名無しさん:2013/05/21(火) 15:07:33.51
並列処理対応、64bit対応じゃないと嫌。パスワードクラックしたいんです。
364デフォルトの名無しさん:2013/05/21(火) 19:43:51.04
パスワードクラックなら最近はGPU(GPGPU)系じゃね?
365デフォルトの名無しさん:2013/05/21(火) 20:46:51.41
>>364
ありがとう 調べてみる
366片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/21(火) 21:39:53.83
x86逆汗を作っています。
インテルの技術文書を読みました。
PE形式の情報がダンプできるようになりました。
何かアドバイスをお願いします。
367デフォルトの名無しさん:2013/05/21(火) 22:59:43.97
>>366
勇士Qに弟子入りする
368デフォルトの名無しさん:2013/05/21(火) 23:16:17.84
アドバイスも何も仕様に従って変換するだけだろ
強いて言うならアドレスを生の数値だけじゃなく
何らかのラベルをつけるといいかもね
369デフォルトの名無しさん:2013/05/22(水) 05:52:53.30
>>366
・Cコードを吐き出すようにする
370デフォルトの名無しさん:2013/05/22(水) 08:41:40.61
1パスディスアセンブラなんて簡単過ぎるから2パスアセンブラを作る
つまりジャンプ先にラベルを付ける

あとある程度コードとデータの分離を可能にし、コードは16進ダンプと
文字列を付ける、など
371片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/29(水) 22:43:35.13
アドレッシングややこしや
関数の呼び出し規約が難しい
372デフォルトの名無しさん:2013/05/29(水) 22:47:35.13
そんなんややこしい内に入らん
373デフォルトの名無しさん:2013/05/29(水) 22:49:01.25
64bitの呼び出し規約はレジスタ渡ししつつスタックは開けておくとか
スタックを16バイト境界に揃えるとか結構ややこしい
374デフォルトの名無しさん:2013/05/30(木) 04:11:04.04
そんなんややこしい内に入らん
375片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/02(日) 21:38:39.39
こいつはどでかいswitchが出来そうだ。
ところでa16って何?
376デフォルトの名無しさん:2013/06/03(月) 00:02:51.99
push %ebp
mov %esp,%ebp
sub $0x28,%esp

これgdbで出た結果なんだけど、どういう風に動いてるのかよくわからなくて、図で説明してくださると助かりますorz
377デフォルトの名無しさん:2013/06/03(月) 00:07:23.82
スタックフレームを作ってローカル変数領域を確保している
378デフォルトの名無しさん:2013/06/03(月) 00:17:28.67
>>377 1行目で4バイト分確保するん? それで2、3行目はなにを?
379デフォルトの名無しさん:2013/06/03(月) 00:21:37.15
もしアセンブラ詳しい人いて教えてくれる人いればスカイプに来てくれると嬉しいです。
スカID satito39
380デフォルトの名無しさん:2013/06/03(月) 00:24:53.96
381デフォルトの名無しさん:2013/06/03(月) 00:28:42.09
>>380 はじめの4バイトと3行目の0x28バイト分はその図でいうとどこに当たるのでしょうか?
382デフォルトの名無しさん:2013/06/03(月) 01:26:18.00
push %ebp 新たなフレームポインタを書き込むためebpをスタックに退避
mov %esp,%ebp フレームポインタを更新
sub $0x28,%esp 28バイト分のローカル変数領域をスタックに確保
383デフォルトの名無しさん:2013/06/03(月) 03:11:30.78
>>382
> sub $0x28,%esp 28バイト分のローカル変数領域をスタックに確保

40バイト
384デフォルトの名無しさん:2013/06/03(月) 07:18:49.71
movl $0xaea4a4af,-0x13(%ebp)
movl $0xb6b2a6ba,-0xf(%ebp)
movw $0xc4,-0xb(%ebp)
movb $0x0,-0x9(%ebp)

続きでこういうものがあればどう動くのですか?
385デフォルトの名無しさん:2013/06/03(月) 07:23:58.95
386デフォルトの名無しさん:2013/06/03(月) 09:35:43.09
push %ebp ;ebpの退避(以前の BP の値)
mov %esp,%ebp ;ローカル変数参照時にBPを使ってる?
sub $0x28,%esp ;ローカル変数領域の確保

何がやりたくて質問してんのやら
387デフォルトの名無しさん:2013/06/03(月) 15:42:11.79
void foo(void)
{
uint32_t a,b;
uint16_t c;
uint8_t d;
a = 0xaea4a4af;
b = 0xb6b2a6ba;
c = 0xc4;
d = 0;
:
:
:
388デフォルトの名無しさん:2013/06/03(月) 16:48:02.81
アラインメント取れていないし文字列でないかい
389デフォルトの名無しさん:2013/06/03(月) 16:54:22.97
こういうものがありどのように動くのかなとおもいまして、できれば動きを順番に解説していただきたいorz
0x0804840c <+0>: push %ebp
0x0804840d <+1>: mov %esp,%ebp
0x0804840f <+3>: sub $0x28,%esp
0x08048412 <+6>: movl $0xaea4a4af,-0x13(%ebp)
0x08048419 <+13>: movl $0xb6b2a6ba,-0xf(%ebp)
0x08048420 <+20>: movw $0xc4,-0xb(%ebp)
0x08048426 <+26>: movb $0x0,-0x9(%ebp)
0x0804842a <+30>: jmp 0x804844b <foo+63>
0x0804842c <+32>: movzbl -0x9(%ebp),%eax
0x08048430 <+36>: movzbl -0x9(%ebp),%edx
0x08048434 <+40>: movzbl -0x13(%ebp,%edx,1),%ecx
0x08048439 <+45>: mov $0xffffffcc,%edx
0x0804843e <+50>: sub -0x9(%ebp),%dl
0x08048441 <+53>: xor %ecx,%edx
0x08048443 <+55>: mov %dl,-0x13(%ebp,%eax,1)
0x08048447 <+59>: addb $0x1,-0x9(%ebp)
0x0804844b <+63>: cmpb $0x9,-0x9(%ebp)
0x0804844f <+67>: jbe 0x804842c <foo+32>
0x08048451 <+69>: lea -0x13(%ebp),%eax
0x08048454 <+72>: mov %eax,(%esp)
0x08048457 <+75>: call 0x80482f0 <puts@plt>
0x0804845c <+80>: leave
0x0804845d <+81>: ret
390デフォルトの名無しさん:2013/06/03(月) 17:04:43.50
自分であたまを使おうという気はゼロ
391デフォルトの名無しさん:2013/06/03(月) 17:26:14.85
>>389
こりゃ荒らしだな
392デフォルトの名無しさん:2013/06/03(月) 21:00:12.43
0xccでxorした文字列(10文字)を戻して表示してるだけ
393デフォルトの名無しさん:2013/06/03(月) 21:20:33.05
おまいらいじわるだな
せめて金額交渉くらいしてやれよ
394デフォルトの名無しさん:2013/06/07(金) 12:03:20.18
アセンブラのディレクティブなどの方言説明がばらばらって困るよな。
同じCPUなのに命令記述が違いそんなレジスタないみたいな。
データの流れが右から左へと左から右へと逆だったり。

酷いのは命令語のニーモニックが特殊な略なのにその説明がどこにもない。
インラインアセンブラとかも個性ありすぎるのにインライン部分の仕様は
解説が一切ないみたいな。
395デフォルトの名無しさん:2013/06/07(金) 12:12:03.69
嫌だったら使うなよ
そのためにC言語とかあるんだから

アセンブラ無しでハンドアセンブルなんて事もしょっちゅうだぞ
396デフォルトの名無しさん:2013/06/08(土) 12:28:44.95
統一仕様を策定してユーザーを増やそう という世界じゃないから
397片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/08(土) 18:53:19.31
ndisasmのバグ発見!
F2 0F D6 ...
が正しくMOVDQ2Qに変換されない。
398片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/12(水) 12:07:16.18
ごめんなさい、バグじゃなかったみたい
399デフォルトの名無しさん:2013/06/17(月) 00:48:25.48
>>397
たんにサポートしていないだけだろ。正式対応まで待て。
400デフォルトの名無しさん:2013/06/22(土) 07:16:16.14
#include <stdio.h>

void main(void)
{
unsigned buf[4];

_asm {
cld
mov esi, offset buf
mov eax, 22222
mov ecx, 4
rep stosd
};
for (int i=0; i<4; i++)
printf("%d\n", buf[i]);
}

このコードを実行すると意図した結果(buf[0]〜buf[3]まで全部22222になる)にならずハングアップするのですが、
どうすればよろしいでしょうか?
401デフォルトの名無しさん:2013/06/22(土) 08:30:41.12
>mov esi, offset buf

これ

lea esi, buf

じゃないの?動かしてないけど
402デフォルトの名無しさん:2013/06/22(土) 08:40:28.48
動かしてみた
あと、esiじゃなくてediな

int main(void)
{
unsigned buf[4];

_asm {
cld
lea edi, buf
mov eax, 22222
mov ecx, 4
rep stosd
};

for (int i = 0; i < 4; i++)
printf("%d\n", buf[i]);
}

22222
22222
22222
22222
403デフォルトの名無しさん:2013/06/22(土) 10:22:52.80
eaxやecxをpushしなくていいの?
404400:2013/06/22(土) 10:47:50.40
>>402
ありがとうございます!
405デフォルトの名無しさん:2013/06/22(土) 13:15:07.29
>>403
環境依存だからなあ・・・気に掛かるならインラインアセンブラで使うレジスタは
全部退避すると安心かもね

でもpushすると例えば lea edi, buf は俺の所では lea edi, [esp] と展開されたので
狂ってくるような気もする
実際やってみないとどうなるか分からないけど
406片山博文MZパンク ◆0lBZNi.Q7evd :2013/08/05(月) NY:AN:NY.AN
今、逆アセンブラ作ってる。巨大なswitch構文ができた。これをデータ表現にしようと考えている。
やるならx86以外のCPUについても、CPUの違いを吸収して統合させたい。
各CPUのアーキテクチャの表現はどのようにすればいいか?
407デフォルトの名無しさん:2013/08/05(月) NY:AN:NY.AN
1ワードで複数の命令含むアーキテクチャなんかもフツーにあるし汎用的な表現なんて無理
408デフォルトの名無しさん:2013/08/05(月) NY:AN:NY.AN
1ビットを一文字とした構文解析と考えればいいのでは?
409デフォルトの名無しさん:2013/08/05(月) NY:AN:NY.AN
余計なことを考えるのはまともに使えるものを一本仕上げてからにしろ
410デフォルトの名無しさん:2013/08/05(月) NY:AN:NY.AN
ただちに影響はありません
411デフォルトの名無しさん:2013/08/21(水) NY:AN:NY.AN
412デフォルトの名無しさん:2013/09/06(金) 15:30:02.86
HxD っていうHEXEDIT使ってるけど、WIN8に変えたら
エラー履くようになりました・・・
どうすればいい?

Cannot creat file "C:¥Program Files¥HxD.ini".アクセスが拒否されました。
413デフォルトの名無しさん:2013/09/06(金) 15:33:52.85
> どうすればいい?

いまどき Program Files の下に ini ファイル作ってるソフトなんか捨てれ
414デフォルトの名無しさん:2013/09/06(金) 16:31:02.81
普通どこに作るんだよ?
415デフォルトの名無しさん:2013/09/06(金) 17:06:30.70
いまどきは
C:\Program Files (x86)\
416デフォルトの名無しさん:2013/09/06(金) 17:20:48.51
>>414
レジストリかね。
もしくはAppDataとか、マイドキュか。
ユーザーディレクトリの直下にドット付のフォルダを作ってそこに入れてるアプリもあるね。

Program Filesはunix系のOSで言ったら、/usr/bin とか/local/usr/binにあたるから
データを保存するのは、ちょっとないね。
417デフォルトの名無しさん:2013/09/06(金) 17:21:55.13
Program Dataだろ。
418デフォルトの名無しさん:2013/09/06(金) 17:34:33.05
ProgramDataは全ユーザー共通じゃん。
419デフォルトの名無しさん:2013/09/06(金) 18:00:55.59
420デフォルトの名無しさん:2013/09/06(金) 18:06:17.02
ていうか、exeファイルをProgramFiles直下に置いているような気がするのだが
421デフォルトの名無しさん:2013/09/06(金) 22:28:35.95
それ以外どこに置くんだ?
422デフォルトの名無しさん:2013/09/07(土) 07:46:35.57
Win8のセキュリティ設定を変えるだけだろ? それすらできないやつがアセンブラ? バイナリエディタ?
百年早えわ
423デフォルトの名無しさん:2013/09/07(土) 08:50:06.65
>>421
そんなところにexeなんて置いたことありませんが
424デフォルトの名無しさん:2013/09/07(土) 10:30:32.07
425デフォルトの名無しさん:2013/09/10(火) 02:28:35.44
>>168

n % 10 が糞遅いだろ
これだから高級言語に被れたあほは
426デフォルトの名無しさん:2013/09/10(火) 04:09:22.32
>n % 10 が糞遅いだろ

適切にコード化されてるなら、前段の /10 で %10 も計算できてるな。まあ、そんなコンパイラ存在しないとは思うが。
427デフォルトの名無しさん:2013/09/10(火) 04:18:51.19
除算を使わない高速な方法を>>425さんが示してくれます
428デフォルトの名無しさん:2013/09/10(火) 09:21:50.21
>>168 が糞遅いことを1年以上も研究し続けた >>425 の努力に敬礼
429デフォルトの名無しさん:2013/09/10(火) 10:06:55.78
一度の計算で余りもレジスタに入るから、実質二度手間になるんだろ?
430デフォルトの名無しさん:2013/09/10(火) 10:08:58.86
>>425 は gcc -O3 -S とかやったことが一回もないドあほ。
実際にやってみろ。自分がどれだけドあほか、わかるから。
431デフォルトの名無しさん:2013/09/10(火) 13:18:25.22
gccが最も効率のいいコードを吐くとでも思ってるのかな? ドあほってレベルじゃないぞ
432デフォルトの名無しさん:2013/09/10(火) 13:51:02.98
煽りを入れるのは見比べてからでも遅くはないのでは?
433デフォルトの名無しさん:2013/09/10(火) 14:06:41.23
>gccが最も効率のいいコードを吐くとでも
早くも問題をすり替えて逃げ態勢に入りました
434デフォルトの名無しさん:2013/09/10(火) 14:12:04.54
cygwin 上の gcc で試した。gcc のバージョンは 4.7.3

_putN:
    subl  $28, %esp
    movl  %ebx, 16(%esp)
    movl  32(%esp), %ebx
    movl  %esi, 20(%esp)
    movl  %edi, 24(%esp)
    cmpl  $9, %ebx
    jg   L7
L2:
    movl  %ebx, %eax
    movl  $1717986919, %edx
    movl  20(%esp), %esi
    imull  %edx
    movl  %ebx, %eax
    movl  24(%esp), %edi
    sarl  $31, %eax
    sarl  $2, %edx
    subl  %eax, %edx
    leal  (%edx,%edx,4), %eax
    addl  %eax, %eax
    subl  %eax, %ebx
    addl  $48, %ebx
    movl  %ebx, 32(%esp)
    movl  16(%esp), %ebx
    addl  $28, %esp
    jmp   _putchar
435434:2013/09/10(火) 14:12:54.83
    .p2align 4,,7
L7:
    movl  %ebx, %eax
    movl  $1717986919, %ecx
    imull  %ecx
    movl  %ebx, %eax
    sarl  $31, %eax
    movl  %edx, %esi
    sarl  $2, %esi
    subl  %eax, %esi
    cmpl  $9, %esi
    jg   L8
L3:
    movl  %esi, %eax
    movl  $1717986919, %edx
    imull  %edx
    movl  %esi, %eax
    sarl  $31, %eax
    sarl  $2, %edx
    subl  %eax, %edx
    leal  (%edx,%edx,4), %eax
    addl  %eax, %eax
    subl  %eax, %esi
    addl  $48, %esi
    movl  %esi, (%esp)
    call  _putchar
    jmp   L2
436434:2013/09/10(火) 14:13:59.16
    .p2align 4,,7
L8:
    movl  %esi, %eax
    imull  %ecx
    movl  %esi, %eax
    sarl  $31, %eax
    movl  %edx, %edi
    sarl  $2, %edi
    subl  %eax, %edi
    cmpl  $9, %edi
    jle   L4
    movl  %edi, %eax
    imull  %ecx
    movl  %edi, %eax
    sarl  $31, %eax
    sarl  $2, %edx
    subl  %eax, %edx
    movl  %edx, (%esp)
    call  _putN
437434:2013/09/10(火) 14:14:44.55
L4:
    movl  %edi, %eax
    movl  $1717986919, %edx
    imull  %edx
    movl  %edi, %eax
    sarl  $31, %eax
    sarl  $2, %edx
    subl  %eax, %edx
    leal  (%edx,%edx,4), %eax
    addl  %eax, %eax
    subl  %eax, %edi
    addl  $48, %edi
    movl  %edi, (%esp)
    call  _putchar
    jmp   L3
438デフォルトの名無しさん:2013/09/10(火) 14:45:39.42
>>168 はこう↓書いた方がなんぼかマシ。

void putN(int n)
{
  if (n >= 10) {
    putN(n / 10);
    n %= 10;
  }
  putchar('0' + n);
}

こう↓書いて gcc -O3 しても div() 呼び出してる部分が展開されなかったのは意外だった。

#include <stdlib.h>
void putN(int n)
{
  if (n >= 10) {
    div_t d = div(n, 10);
    putN(d.quot);
    n = d.rem;
  }
  putchar('0' + n);
}
439デフォルトの名無しさん:2013/09/10(火) 15:33:12.83
div_t とか使ってるの見たことない
誰も使わないから対応しないんじゃなかろうか
440片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/01(火) 09:39:59.60
OFっていつもゼロなの?
__asm__("movl $0xFFFFFFFF,%%eax\nadd $4,%%eax\nseto %0\n" :: "m"(b) : "%eax");
printf("%d\n", b); //0
441デフォルトの名無しさん:2013/10/01(火) 10:30:38.61
ヒント: 符号付き整数
442デフォルトの名無しさん:2013/10/01(火) 11:15:46.41
>>441 有り難う
443片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/14(月) 14:01:30.87
x86で
int a,b;
ADD a,b;
がオーバーフローする条件をC言語で表すとどうなりますか?
444片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/14(月) 14:25:40.35
自己解決しました。
(a<-b) != (a+b<0)
445デフォルトの名無しさん:2013/10/14(月) 16:26:07.41
a と b 共に 0x80000000(-2147483648) だとして、

(a<-b) != (a+b<0)
= (0x80000000<-0x80000000) != (0x80000000+0x80000000<0)
= (0x80000000<0x80000000) != (0<0)
= (0) != (0)
= 0

で全然オーバーフローの検出なんてできてないと思うんだが。
446片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/14(月) 16:44:55.65
>>445
見落としてました。
どうすればよいのでしょうか?
447片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/14(月) 16:55:19.67
むずかしいよぉ〜
448片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/14(月) 17:36:03.61
(a>=0 && b>=0 && a+b<0) || (a<0 && b<0 && a+b>=0)
これより簡単にできないみたい。有り難う。
449デフォルトの名無しさん:2013/10/21(月) 19:44:36.41
450デフォルトの名無しさん:2013/10/21(月) 20:12:25.09
画面に反して本体がmkIIじゃないのが残念
451片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/22(火) 19:22:12.38
(i) x64のprologで認められている命令とは何か?
(ii) x64のepilogで認められている命令とは何か?
452デフォルトの名無しさん:2013/11/10(日) 15:31:19.25
(i) スタックに積む命令とスタック領域を確保する命令
(ii) スタックから積み下ろす命令とスタックポインタを補正する命令

でいいんだっけ?
453デフォルトの名無しさん:2013/11/15(金) 16:30:27.64
初心者スレの割りにレベルが高くてこんなことを聞くのもためらわれまずが
64bitのCPUに32bitのOS入れて解析ってできますか?
CPUも32bitのほうがいろいろ捗りますかね
454デフォルトの名無しさん:2013/11/15(金) 16:47:32.07
分からない奴にOSの解析など不可能
455デフォルトの名無しさん:2013/11/15(金) 21:49:14.28
ねぇここって初心者の質問に答えるスレじゃないの?
あとOSの解析なんて言ってないんで^^;
偉そうにしてるとこ悪いけど日本語読んでね
456デフォルトの名無しさん:2013/11/15(金) 21:53:29.21
何を解析したいのかも書かない奴がなんでか偉そうだね
457デフォルトの名無しさん:2013/11/15(金) 23:07:19.82
川越で解析料理なるものを初めて頂く機会があったが、どうせ薄味でお上品な料理ばかりだろという先入観が打ち砕かれたよ
9000円分の満足感があったかと言われると、まあ貧乏人なので牛丼と比べてNoと言ってしまうのだけど
9000円分の仕事をきっちり味わえたな、という実感はありました
458デフォルトの名無しさん:2013/11/16(土) 03:45:41.63
誤表記詐欺ですねわかります
459デフォルトの名無しさん:2013/11/19(火) 22:00:41.96
○懐石料理
×解析料理
460デフォルトの名無しさん:2013/11/19(火) 23:58:42.94
そう言えばNHKで「会席料理」ってやってて、「あれ?懐石料理じゃないの?」と思ったら
読みは同じでも別の料理だった

チラ裏
461デフォルトの名無しさん:2013/11/20(水) 00:09:28.37
ふうむパーティーフードの訳かしらと英辞郎引いたら、a kaiseki mealだと…
462デフォルトの名無しさん:2013/11/20(水) 17:38:55.81
このスレにふさわしい話題なので
http://www.amazon.co.jp/dp/4844334794

中古(これはひどい)
原価の9割の価格付けて
2013年9月発売の本なのに「経年劣化」とか
「多少のキズ」とか()
http://www.amazon.co.jp/gp/offer-listing/4844334794
裁断済の書籍になります。書籍本体の表紙・背表紙・本の背中が裁断されています
(書籍本体の表紙・背表紙・本の背中はありません)。
その他、カバー・帯を裁断している場合があります。
ページ抜けはチェックした限りではありませんが、見落としがある可能性があります。
経年劣化により多少のキズ・ヨゴレ・ヤブレがあります。
ご了承の上、お買い求め下さい。発送は防水包装の上、メール便またはゆうメールを使用する予定です。
463デフォルトの名無しさん:2013/11/20(水) 17:41:14.68
NHKは勝手に造語造るの好き
464デフォルトの名無しさん:2013/11/20(水) 18:06:14.99
>>462
本屋で見かけたけどどうでもいい内容の本だったわ
465デフォルトの名無しさん:2013/11/20(水) 18:46:31.55
ようやるわと思ったら中国人ぽい名前が並んでるな
いいのかインプレス
466デフォルトの名無しさん:2013/11/20(水) 20:26:04.41
中国人だからどうだというんだ。
だったら差別したいの?
467デフォルトの名無しさん:2013/11/20(水) 20:39:39.28
わろた

詳しい出品者情報
正式名称: パウロ屋
ストア代表者名:
電話番号: 080
住所: 世田谷区野毛
その他・備考: Amazonマーケットプレイスにおける商品の返品と返金条件に準拠します

最近の評価:
1(5が最高):「到着予定を過ぎても何日待っても商品の届く気配すらありません。
キャンセルした所応じてくれましたがクレカ払いにした為返金も遅れるし返金確認するまで不安で仕方ありません。
最低な出品者です。」minos..., 2013年11月11日
1(5が最高):「本じゃ有りません。紙束です。こんなものを本屋のサイトで「中古品・可」で出品していました。
トランプみたいに1枚1枚手にとってよむのですか。解体したゴミを売りつける悪質業者です。金返せ。」
スタティック初老人, 2013年11月10日
1(5が最高):「10日以上たっても商品が届かず,連絡しても返答さえありません。正直詐欺かと疑っています。」
かむい, 2013年11月7日
468デフォルトの名無しさん:2013/12/15(日) 01:33:08.29
マイクロソフトのml.exe(VS2010付属)なのですが、
invokeなどがどんなコードを生成してるのか調べる方法はありますか?
リストに出そうとしているのですが、.XALLなどでも表示されません。
469デフォルトの名無しさん:2013/12/16(月) 08:37:41.69
>>468
デバッガで実行して逆アセンブル表示見れば?
470デフォルトの名無しさん:2013/12/31(火) 19:12:15.66
アセンブラの解説サイトを読んでるんですけどレジスタの説明がいろいろ変わって混乱しています
たとえばAXレジスタっていってるところもあればEAXレジスタっていってるところもああります。同じものと考えていいんでしょうか?
471デフォルトの名無しさん:2013/12/31(火) 19:17:09.98
>>470
AXとEAXとALとAHとRAXの違いなんてぐぐればすぐわかるだろ
472デフォルトの名無しさん:2013/12/31(火) 20:57:53.32
AXもEAXもレジスタというよりアキュムレータな
473デフォルトの名無しさん:2013/12/31(火) 21:02:34.09
AXもEAXもレジスタ
474デフォルトの名無しさん:2013/12/31(火) 23:10:57.04
AXだけが特別扱いになってるのは8086の名残りだけだから、
今となってはわざわざ特別扱いしてアキュームレータとか言う理由はないな。
475デフォルトの名無しさん:2014/01/01(水) 02:11:33.12
bxもベースレジスタって名前なかったっけ
んでcxがカウンタでdxがデータだっけ?
axが特別っつーか、全部に役割持たせてたんだと思う、当初は
476デフォルトの名無しさん:2014/01/02(木) 00:24:45.35
>>474
昔(Z80とか8086)はA系レジスタ向けの演算命令が他のB〜系レジスタよりも
多くてA系はアキュムレータだと説得力があった記憶があるけど、
今はどのレジスタも演算命令数は同じというか、差別されていないの?
477デフォルトの名無しさん:2014/01/02(木) 00:31:24.41
IA-32やX64でも差別されてるよ
478デフォルトの名無しさん:2014/01/02(木) 02:54:44.28
Cの関数の戻り値はEAX(キリっ
479デフォルトの名無しさん:2014/01/02(木) 03:02:14.43
ABIに拠るし構造体をEAXで返すことはないと思う
480デフォルトの名無しさん:2014/01/02(木) 09:59:16.22
アキュムレーターは索引レジスタに使えないというイメージがあったが、
32bitアドレッシングからは[eax+ecx+12]とか使えるしなぁ
481デフォルトの名無しさん:2014/01/03(金) 00:00:03.75
建て増し構造というか奇形というかスッキリしなさがx86系の嫌いなとこだなあ。
MC68000なんか今触っても整然としてて美しいし。
x64で大幅に改善されたというか、やっと68000に追いつけたんだなぁ。
482デフォルトの名無しさん:2014/01/03(金) 00:35:29.00
アドレスレジスタとデータレジスタが別なアーキテクチャは最初から糞
483デフォルトの名無しさん:2014/01/03(金) 01:06:13.22
オフセットや相対ジャンプに16ビットの制限のある68000は糞
484デフォルトの名無しさん:2014/01/03(金) 02:09:13.49
>>482
アキュームレータとベースレジスタが各一つしかないとか、個数の制限があればそうだね。
でも、十分な数が用意されてるから、実際には困るケースなんて皆無なんだ。
C言語との組み合わせを考えたら、データとアドレスがハードウェアレベルで区別されてるのは好ましいことだしね。

>>483
デコボコしたメモリモデルなんてものがあって8bit時代を引きずり続けたx86にはとてもかなわないよ。
485デフォルトの名無しさん:2014/01/03(金) 02:11:58.78
>>484
データレジスタは8つでは足りないしアドレスレジスタは8つ(7つ)も要らん。要はバランスが悪い。
486デフォルトの名無しさん:2014/01/03(金) 02:15:29.84
>>484
>C言語との組み合わせを考えたら、データとアドレスがハードウェアレベルで区別されてるのは好ましいことだしね。

具体的にメリットをご説明下さい。
487デフォルトの名無しさん:2014/01/03(金) 02:18:20.25
>>484
>デコボコしたメモリモデルなんてものがあって8bit時代を引きずり続けたx86にはとてもかなわないよ。

8bit時代からのしがらみなんてなかった筈なのにセグメントでメモリ管理してた68kMacもそう変わらんよ。
488デフォルトの名無しさん:2014/01/03(金) 02:19:39.55
>>484
>アキュームレータとベースレジスタが各一つしかないとか、個数の制限があればそうだね。

6800乙w
489デフォルトの名無しさん:2014/01/03(金) 02:24:52.53
>MC68000なんか今触っても整然としてて美しいし。

当時としてはマシな部類だったが、今こんなこと言ってる奴はアフォ
490デフォルトの名無しさん:2014/01/03(金) 09:05:56.66
RISC原理主義者がきた〜w
491デフォルトの名無しさん:2014/01/03(金) 10:37:25.99
データ=アドレスのレジスタ1個でも気合でどうにかなるだろ
492デフォルトの名無しさん:2014/01/03(金) 11:18:59.86
68000を否定するとRISC原理主義者って意味分からん。
493デフォルトの名無しさん:2014/01/03(金) 15:15:03.31
どんなにアーキテクチャが優れていてもソフト資産がなければ糞
すぐ消える
494デフォルトの名無しさん:2014/01/03(金) 15:54:06.91
組み込みならソフト資産なんて関係無いだろう
495デフォルトの名無しさん:2014/01/03(金) 15:54:47.93
パソコン用なんかではその通りだが、特定用途向けとかなら事情が違う >ソフト資産がなければ糞
496デフォルトの名無しさん:2014/01/03(金) 15:57:57.54
>>494
メーカー提供や他社製品のサンプルプログラムやライブラリ、RTOSとか、組み込み用途でも
あれば便利なソフト資産と呼べるものは存在するよ。
497デフォルトの名無しさん:2014/01/03(金) 18:15:52.10
本来表に公開することのないような出来上がったソフトのことじゃなくて
開発するためのソフトの話か?
そりゃある方が良いのは当たり前なことだが、そんなのわざわざ書くことじゃないだろ。
498デフォルトの名無しさん:2014/01/03(金) 18:26:49.96
>そんなのわざわざ書くことじゃないだろ。

なぜ??
499デフォルトの名無しさん:2014/01/03(金) 18:58:28.29
86系と68系の話の流れの>>493に対してだから、
ここでいうソフト資産とは、そのアーキテクチャ向けに
作られたソフトのことだろ。
開発のためのソフトじゃなく。
500デフォルトの名無しさん:2014/01/03(金) 19:06:21.98
>>499
>ここでいうソフト資産とは、そのアーキテクチャ向けに
>作られたソフトのことだろ。

「メーカー提供や他社製品のサンプルプログラムやライブラリ、RTOSとか」ってのは
それから外れてないだろ。
501デフォルトの名無しさん:2014/01/03(金) 19:11:12.14
>>497
> 開発するためのソフトの話か?

良く分かってないみたいだけどツールかなんかと勘違いしてね?
502デフォルトの名無しさん:2014/01/03(金) 20:19:58.67
>>485
8個で足りないんだ?x86(IA-32)だと汎用レジスタは何個だったかな?
こたえ:0個
アキュームレータ、ベース、カウンタ、データ、スタックポインタ、スタックベース、ソースインデックス、デスティネーションインデックス、
8つの各用途に分かれていて「汎用」レジスタは存在しない。(命令によって割り当てられないレジスタが多く存在する)
x64は便利になったね。AMDはえらい。Intelは救いようのないアホ。

>>486
ポインタの理解が捗る。あれはアドレスレジスタそのものなんだ、ってね。

>>487
Macはクソそのものだよ。68000の特性を理解してないシステム構成だかんね。

>>488
8bit CPUと比較しなけりゃならないx86が恥ずかしいって、わかんないのかな。
503デフォルトの名無しさん:2014/01/03(金) 21:12:09.54
>>502
> 8個で足りないんだ?x86(IA-32)だと汎用レジスタは何個だったかな?

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf
> 3.4.1 General-Purpose Registers
> The 32-bit general-purpose registers EAX, EBX, ECX, EDX, ESI, EDI, EBP, and ESP are provided for holding the
> following items:
> • Operands for logical and arithmetic operations
> • Operands for address calculations
> • Memory pointers

MC68000に、論理/算術演算、アドレス計算、メモリポインタとして使える汎用レジスタはいくつあるの?

こたえ:0個
データレジスタとアドレスレジスタの区別のあるMC68000に汎用レジスタはありませんw
504デフォルトの名無しさん:2014/01/03(金) 21:21:49.84
>>502
>8bit CPUと比較しなけりゃならないx86が恥ずかしいって、わかんないのかな。

汎用レジスタがないのはMC68000もMC6800も同じじゃないの? x86? 汎用レジスタあるけど?
505デフォルトの名無しさん:2014/01/03(金) 22:34:07.51
制限だらけのx86が恥ずかしげもなく汎用レジスタを名乗り(実際は命令によって割り当てられないor割り当てることを強要される事が多々ある)
制限がなく数も十分ありデータとアドレスの区別をしてなお整然とした68000のデータレジスタのありかたを罵倒する

滑稽だねえ
おたくら今からAMDがもたらしてくれた汎用レジスタたっぷりなx86からIntelがいつまでも放置して汚らしかったx86に戻れんの?
506デフォルトの名無しさん:2014/01/03(金) 22:39:20.79
>>504
MC6800は8bit CPUだから別にいいの。8bit CPUは可能な限りシンプルであるべきだから。
x86が汚らしいのは32bitアーキテクチャに不合理なもんを持込みすぎてるからであって
あれが8bitないしその建てましの16bitから出てこないのであれば全然なんも問題ないの
507デフォルトの名無しさん:2014/01/03(金) 22:39:56.02
(なんか語り始めた・・・)
508デフォルトの名無しさん:2014/01/03(金) 23:06:26.22
プログラマとしてはデータ/アドレスどちらでも使える汎用レジスタは嬉しいけど、
アドレス線に専念出来るアドレスレジスタとデータ(計算)に専念出来る
データレジスタを分けるのは回路設計的には理にかなっているんじゃないの?
509デフォルトの名無しさん:2014/01/03(金) 23:43:37.21
>>505
>AMDがもたらしてくれた汎用レジスタたっぷりなx86

AMD64でR8-R15使うときの命令コードってどんなんか知ってる?
510デフォルトの名無しさん:2014/01/04(土) 01:32:44.12
48/ 33 C0 xor rax, rax
48/ 33 D2 xor rdx, rdx
4D/ 33 C0 xor r8, r8
4D/ 33 FF xor r15, r15

33 C0 xor eax, eax
33 D2 xor edx, edx
45/ 33 C0 xor r8d, r8d
45/ 33 FF xor r15d, r15d

66| 33 C0 xor ax, ax
66| 33 D2 xor dx, dx
66| 45/ 33 C0 xor r8w, r8w
66| 45/ 33 FF xor r15w, r15w

32 C0 xor al, al
32 D2 xor dl, dl
45/ 32 C0 xor r8b, r8b
45/ 32 FF xor r15b, r15b
511デフォルトの名無しさん:2014/01/04(土) 03:02:46.89
はい、分かってないこと確定ですw
512デフォルトの名無しさん:2014/01/04(土) 03:27:26.48
これは
513デフォルトの名無しさん:2014/01/04(土) 03:29:29.10
>あれが8bitないしその建てましの16bitから出てこないのであれば全然なんも問題ないの

ふむふむ
514デフォルトの名無しさん:2014/01/07(火) 11:16:45.98
x64でVCではインラインアセンブラが廃止されたからまたこのスレ流行るかと思ったらそうでもないのな

compiler intrinsicsがあるからデバドラでも作らない限りあまり用途はないのか?
515デフォルトの名無しさん:2014/01/07(火) 14:47:47.76
SSE2のMOVSDとAVXのVMOVSDはニモニック以外なんか違いあるの?
516デフォルトの名無しさん:2014/01/08(水) 16:05:02.11
AMDがx64作れるようになったのは文句言って来そうな
MotorolaをIntelが潰してくれたからだろ
517デフォルトの名無しさん:2014/01/09(木) 11:49:16.95
それもあるし、IA-64の失敗で迷走してた事もあるんじゃね
実際鯖はXeonで十分だしソフト資産も多いもんなあ
518デフォルトの名無しさん:2014/01/09(木) 17:57:38.76
>>515
prefixがVEXになっただけで動作は一緒、YMM系の命令体系に合わせた。
F2/ 0F 10 05 00000020 R  movsd  xmm0, data_1
C5 FB 10 05 00000020 R   vmovsd xmm0, data_1
519デフォルトの名無しさん:2014/01/11(土) 09:25:44.97
SSEスレは敷居が高いんでこっちでいいかな

ANDPSやORPSというのは何のためにあるのでしょう?
整数用のPANDやPORはわかるのですが
浮動小数点の論理演算というのがピンとこない
520デフォルトの名無しさん:2014/01/11(土) 09:33:07.89
わからんけど論理回路組んでいったらそういう操作が余ったので命令にしたんじゃないの?
それかfrexp()とかldexp()みたいな関数を作るためとか
521デフォルトの名無しさん:2014/01/11(土) 15:52:02.89
SSE命令がが整数演算に対応したのはSSE2からだよ
そのせいじゃないの?
522デフォルトの名無しさん:2014/01/12(日) 19:53:20.99
比較命令とかでマスク作って2つのレジスタの任意要素を合成とか
符号ビットいじって絶対値や符号反転とか
整数、少数命令の混在はペナルティが入るから、頻度は少なくても無いと困る
523デフォルトの名無しさん:2014/01/13(月) 10:05:08.34
なるほど、ありがとうございます。
確かに符号や比較命令のマスクに使えますね。
整数、浮動小数点の混在にペナルティが入るのは知りませんでした。
524デフォルトの名無しさん:2014/01/14(火) 03:58:16.98
Core i (Nehalem) 以降のIntel CPUにある制約ね >ペナルティ

昔は命令長節約のために整数用にもandpsとかを使うなんてのも往々にして行われていたけれど
今のIntel CPUでは逆に遅くなるという寸法
525デフォルトの名無しさん:2014/01/28(火) 14:52:09.84
VS2010のでコンパイルしてます。
セグメントレジスターを使うとINVOKEが変なコードをはくのですが仕様ですか?
; ml /c xxx.asm
; dumpbin /disasm xxx.obj
    .686
    .model  flat, stdcall
foo  proto  x:word, y:dword, z:byte
    .code
foo  proc uses ebx esi edi, x:word, y:dword, z:byte
    ret
foo  endp
start: invoke  foo, fs, gs, al
    ret
    end
526デフォルトの名無しさん:2014/02/05(水) 02:45:14.99
>>525
おまえ大丈夫か?w
527デフォルトの名無しさん:2014/02/05(水) 13:35:13.40
こりゃひどいな、バグかな
0000000D: 50 push eax
0000000E: 66 6A 00 push 0
00000011: 0F A8 push gs
00000013: 83 EC 02 sub esp,2
00000016: 0F A0 push fs
00000018: E8 E3 FF FF FF call _foo@12
528デフォルトの名無しさん:2014/02/09(日) 20:32:36.55
はじめて読む486を買ってきたけど、
テストプログラムの環境ってWin3.1を想定してるのか?
それともDOS?

実行環境が作れない時点で挫折しそう。。。
529デフォルトの名無しさん:2014/02/09(日) 21:22:13.69
DOS

VMware か何かを使って、FreeDOS が動く....かなぁ。
530デフォルトの名無しさん:2014/02/09(日) 21:22:19.62
DOS
531デフォルトの名無しさん:2014/02/09(日) 21:28:01.20
>>529
>>530

情報ありがとう。
DOSはVMWareでなんとかなりそうだけど、
appendixを読むと
borland c++3.1 & turbo assembler 3.2 か
vc++1.0 & masm6.0
で動作するみたいだけど、そんなの手にはいらんぞ。。。
532デフォルトの名無しさん:2014/02/09(日) 22:00:38.07
タダで配ってる Visual C++ Express版に ml.exe 入ってるしなんとかなるべ
533デフォルトの名無しさん:2014/02/09(日) 22:17:26.76
ならねーよ
534デフォルトの名無しさん:2014/02/09(日) 22:26:41.38
アセンブラはLinkさえ手に入れば最近のml.exeでもいけるよ〜
DOS用にアセンブルする場合は ml /omf を忘れずに

CはOpenWatcomで間に合うな
535デフォルトの名無しさん:2014/02/09(日) 22:32:20.56
>>534
ありがとう。
火曜に試してみるよ
536デフォルトの名無しさん:2014/02/09(日) 22:37:02.43
16bitのコンパイラならTurbo CやLSIC86試食版があるな。
LSIC86試食版はMASMとは書式が違うがアセンブラも入ってるし使い方次第では便利に使えるだろう。
537デフォルトの名無しさん:2014/02/09(日) 23:33:16.06
A86だったかR86ね。

あれは、たとえばORG擬似命令が無くて、RS擬似命令で、(目的アドレス - 現在アドレス) の
サイズのメモリを確保してやることでアドレスを調整するとか、あれこれ、知ってる人に
聞かないとわかんないテクが要るのが大変。

ValLinkとArrowAsmってのが2000年頃の定番だったが、今どうなってることやら。
NASMもNASMでMASMと違うからねぇ。
538デフォルトの名無しさん:2014/02/10(月) 04:57:21.71
539デフォルトの名無しさん:2014/02/24(月) 19:05:52.56
おすすめ書籍とかサイトなど御座いますか?
540デフォルトの名無しさん:2014/02/24(月) 19:07:46.95
ないですね。
541,,・´∀`・,,)っ-○○○:2014/02/26(水) 00:38:53.88
先にCOMET-II/CASL-IIを勉強したらいいんじゃない?
これは情報処理技術者のテキスト読んでるだけでたいていクリアできる
資格もとれて一石二鳥。

x86ならこれ1冊で。あとは個々の命令の仕様はIntelのサイトからPDF落とす。
・はじめて読むPentium マシン語入門編
542デフォルトの名無しさん:2014/02/26(水) 00:46:38.24
PCを機械語で使うのが目的なのか、他の何か特定のデバイスなのか、
対象はなんでもいいのか、で答えが違うな。
543デフォルトの名無しさん:2014/02/27(木) 02:16:08.54
>>539
聖書がおすすめ
544デフォルトの名無しさん:2014/02/27(木) 06:04:53.44
新約旧約どっちがいい?
545デフォルトの名無しさん:2014/02/27(木) 06:10:52.32
コーランが良いアルニダ
546デフォルトの名無しさん:2014/03/12(水) 04:04:41.92 ID:4B5tOSzi
NXビットとかってアセンブラでいじれるの?
547デフォルトの名無しさん:2014/03/12(水) 04:57:51.84 ID:/EKU/g4K
アセンブラでいじれなきゃ他の言語でも無理ダナ
548デフォルトの名無しさん:2014/03/12(水) 17:09:14.41 ID:Rs2gHvws
wrmsrで変更できるね
リング0の特権命令だけど
549デフォルトの名無しさん:2014/05/16(金) 01:20:05.03 ID:YZ6eU1pI
xor eax,eaxはeaxをゼロにする、といったx86アセンブリ技術のことが沢山
書かれたサイトを教えて下さい。
550デフォルトの名無しさん:2014/05/16(金) 01:36:30.34 ID:750USUyV
同値xorがゼロクリアになるのはテクではなくブール演算の初歩知識ではなかろうか
煽りでなく、むしろその手の基礎から始めてググり続けると良いのでは
551デフォルトの名無しさん:2014/05/16(金) 02:06:29.00 ID:6rXJBimE
初心者に問題。
AL に入っている数値を [DI] に16進数2ケタで出力せよ。
※ [DI+00] に上位桁、[DI+01] に下位桁
552デフォルトの名無しさん:2014/05/16(金) 03:00:26.63 ID:ZWSdCtrz
学校の宿題他人に訊くなよ…。
553デフォルトの名無しさん:2014/05/16(金) 08:30:06.10 ID:hJC//Tt9
>>549
まるち
554デフォルトの名無しさん:2014/05/16(金) 08:33:06.36 ID:hJC//Tt9
>>551
mov [DI], al
and [DI], 0x0F
shr al, 4
and al, 0x0F
mov [DI+01], al
555デフォルトの名無しさん:2014/05/16(金) 10:03:09.08 ID:PLhTA3a9
>>551
久しぶりに触ったけど debug.exe って 64bit Windows だと用意されてないんだな
-a 0100
mov ax, cs
mov es, ax
mov di, 0080
mov al, 5a
inc di
mov [di], al
mov cl, 4
shr al, cl
dec di
mov [di], al
mov al, 0f
and [di], al
inc di
and [di], al
556デフォルトの名無しさん:2014/05/20(火) 19:52:17.51 ID:EAxy/lYF
そこで Virtual PC ですよ。
557デフォルトの名無しさん:2014/05/25(日) 20:19:23.16 ID:t1V1lNcr
アセンブラの学習するのにおすすめの参考書あります?
cがちょっとできるレベルなんだけど
558デフォルトの名無しさん:2014/05/25(日) 22:19:07.25 ID:z/SkfJN9
基本情報のアセンブラの対策本でも読めばいいんじゃね
559デフォルトの名無しさん:2014/05/26(月) 08:56:21.98 ID:lvFZnHPn
CASL付きポケコンの説明書とかw
ただポケコンがオワコンを通り越して生産終了w
560デフォルトの名無しさん:2014/05/26(月) 12:04:51.49 ID:ptXAqcmg
「漢字コード」さんはポケコンの時代で時間が止まってる上にそういう自覚がない人でしょ。
だから話が通じない上に一人で逆上してる。
だから放置されてるのに...
561デフォルトの名無しさん:2014/05/26(月) 14:27:02.60 ID:y9c5KjIu
デムパさん?
562デフォルトの名無しさん:2014/05/28(水) 10:59:15.94 ID:4srfku2X
>>551
ビッグエンディアンは好かん。
563デフォルトの名無しさん:2014/06/03(火) 17:53:17.36 ID:xWuYqldz
http://www5c.biglobe.ne.jp/~ecb/assembler/4_3a.html
このページを見ながら分岐命令を勉強しているんですがJL・JLE・JNG・JNGE命令などにあるフラグで
SF<>OFなどの<>は何を意味するんですか?
564デフォルトの名無しさん:2014/06/03(火) 18:08:44.18 ID:pVBw+Lsj
>>563
not equal
565デフォルトの名無しさん:2014/06/03(火) 22:44:28.88 ID:xWuYqldz
>>564
返答ありがとうごじます。危うく詰みそうになりました
566デフォルトの名無しさん:2014/06/05(木) 17:54:50.58 ID:/tv+CkMy
データ転送命令なのですが
MOV AL,BYTE PTR DS:[ECX+EDI]
この意味がよくわかりません
BYTE PTRがバイト宣言?なのはわかりますが、後ろ側のDS:[ECX+EDI]ってのがいまいちぱっとわかりません
567デフォルトの名無しさん:2014/06/05(木) 18:57:10.25 ID:M285qaIr
この状況でds修飾は不要 。c言語風に書くとこんな感じ
al = *(byte *)(ecx+edi);
568デフォルトの名無しさん:2014/06/05(木) 20:58:42.27 ID:55VBH6H6
DSは必要
569デフォルトの名無しさん:2014/06/05(木) 21:37:09.24 ID:o52VmkJp
ストリングス転送命令ではなさそうだけど?
570566:2014/06/05(木) 22:18:58.64 ID:/tv+CkMy
ECXにEDIを足したものをALにコピーって意味でいいんでしょうか?
後ろのDS:[]ってどういう意味があるんでしょうか?
571デフォルトの名無しさん:2014/06/05(木) 22:43:49.27 ID:bOGqmnDA
機械語として見るとセグメントオーバーライドプレフィックスが付いている(ように見える)、
ということだろうけど、普通のメモリアクセスのセグメントはDSなので冗長(必要ない)。

ECX+EDI の結果をアドレスとして、そのアドレスに(バイト単位で)メモリアクセスしてALに
コピー、という意味だけど、そもそも正しい場所を解析しようとしているのか怪しいな。
572デフォルトの名無しさん:2014/06/05(木) 22:49:00.65 ID:dSg5bErh
x64のRIP相対アドレッシングの場合はどうなんのかな
573デフォルトの名無しさん:2014/06/06(金) 06:48:37.37 ID:NiHdmLTJ
mov ax,[rip+4]
初心者の範疇ではないな
574デフォルトの名無しさん:2014/06/07(土) 00:39:40.37 ID:42HLXVNl
>>544
Windows的にはNTからだろ?
575デフォルトの名無しさん:2014/06/07(土) 04:28:15.67 ID:HlN+9CGy
オペランドを1つしか取らないアセンブリってどの種類に分けられる?
初歩的かもしれないけどぐぐるときに困ってるから教えてほしい。
576デフォルトの名無しさん:2014/06/07(土) 04:58:06.00 ID:ftf2LwSc
>>575
>オペランドを1つしか取らないアセンブリってどの種類に分けられる?

プロセッサに拠る
577デフォルトの名無しさん:2014/06/07(土) 04:59:38.74 ID:HlN+9CGy
16ビットマイクロプロセッサです
578デフォルトの名無しさん:2014/06/07(土) 05:08:45.69 ID:ftf2LwSc
579デフォルトの名無しさん:2014/06/07(土) 11:26:24.62 ID:u3dUy4Sv
1アドレス方式とか1オペランド方式、という分類はあるけど、それのこと?
580デフォルトの名無しさん:2014/06/07(土) 15:04:36.72 ID:bare2SL/
>アセンブリ
という用語をどういう意味で使ってるかによるかな。

個々のアセンブリ命令自体には特に分類はない。
そういう命令を主に使うCPUのアーキテクチャといえば、
1オペランド方式とかアキュムレータマシンとかそんな感じか?
581デフォルトの名無しさん:2014/06/07(土) 17:07:24.15 ID:uqMqHKO4
PLCも仲間入り?
582デフォルトの名無しさん:2014/06/07(土) 21:17:21.71 ID:VEYGFS+g
>>572
MASM64はラベルとかはrip相対になってるな
NASMはDEFAULT REL使ってる
583デフォルトの名無しさん:2014/06/08(日) 11:30:26.96 ID:U9hBzx6T
Windowsの64bit EXEに再配置の仕組みは残ってるの?
rip相対と混在できるかってことだけど
584デフォルトの名無しさん:2014/06/08(日) 12:15:57.26 ID:0lLCwyof
>>583
自分はrip相対のモードでしか使ったことないけど、使い勝手は32bitと変わらないよ
そもそもx64はオフセットが32bitに制限されてるから、NASMがrip相対を
デフォルトにしてない理由がよく分からん

NASMはabsとかrelを使えば混在できるみたいだね
ttps://www.tortall.net/projects/yasm/manual/html/nasm-effaddr.html
585,,・´∀`・,,)っ-○○○:2014/06/08(日) 12:25:05.93 ID:qgapksJl
mov命令だけだったっけ?disp64使えたのって

SIBなしのdisp32が相対、SIBありが絶対
586デフォルトの名無しさん:2014/06/08(日) 13:03:19.30 ID:0lLCwyof
>>585
64bitのメモリオフセットはmovでもraxだけだね(0xA1, 0xA3)
即値なら他のレジスタも使えるけど
587デフォルトの名無しさん:2014/06/08(日) 15:18:04.41 ID:gOfGwFVR
いまML64で遊んでるけど、混在できてるかんじですね。

LEA RAX, LABELxx
MOV RAX, OFFSET LABELxx

LEA使うとrup相対で下だと絶対になってるような。
64bitだとLEA使ったほうが良いの?
588,,・´∀`・,,)っ-○○○:2014/06/08(日) 17:38:33.43 ID:qgapksJl
別にRIP相対アドレスなら速くて絶対アドレスは遅いなんてことはない。
Haswellではmovは1サイクルあたり2命令のスループット。
leaは1命令。

Atomとかがターゲットなら割と命令長は気にしたほうがいいけど
(命令フェッチが8byte/clkしかないから)
589デフォルトの名無しさん:2014/06/09(月) 01:56:46.89 ID:r1q53MGM
リロケーションのコストを気にしなきゃいかんのは
よほどでかいDLLを2つ以上作るときくらい
590デフォルトの名無しさん:2014/07/20(日) 04:01:19.48 ID:jA7npZ7N
英文字を入力して大文字なとき小文字に変換するアセンブラコードを教えて下さいm(_ _)m
591デフォルトの名無しさん:2014/07/20(日) 04:59:50.88 ID:glgeKy6r
なんでこのスレはAssembly言語をAssemblerって言うの?
592デフォルトの名無しさん:2014/07/20(日) 05:05:02.94 ID:RQRWxhz5
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AA%E8%A8%80%E8%AA%9E
> アセンブリ言語で書かれたプログラムを機械語プログラムに変換する事をアセンブル (assemble) すると言い、
> それを行うプログラムの事をアセンブラ (assembler) と言う。なお、アセンブリ言語の意味で「アセンブラ」
> または「アセンブラ言語」(Assembler Language)と呼ぶ場合も多い[注 1]。

> 脚注
> 1. IBMはSystem/360から2011年現在まで一貫してアセンブラ言語(Assembler Language)と呼んでいる。
> 例:IBM High Level Assembler
593デフォルトの名無しさん:2014/07/20(日) 05:24:42.88 ID:W4duPEEG
>>590
C言語で
char c = 'H';
if ('A' <= c) {
if (c <= 'Z') {
c += ('a' - 'A');
}
}
をコンパイルして出てくるアセンブリコードを参考にしてみるとか
594デフォルトの名無しさん:2014/07/20(日) 05:48:11.47 ID:RnwVM2ZH
>>592
Assembler languageでググるとAssembly languageが大量に出てくるけど、
このスレはIBMかぶれなの?
てか組立言語(Assembly lavigne)を
組立機(Assembler)って言うの気持ち悪くね。
595デフォルトの名無しさん:2014/07/20(日) 08:34:23.52 ID:1VhfX4Ek
IPAとかもアセンブラ言語って呼んでた気がするからもう気にしないことにしてる
596デフォルトの名無しさん:2014/07/20(日) 09:11:23.94 ID:Hpo7L/hK
>>594
単にアセンブラって言うことはよくある。「アセンブラで書く」とか
コンテキストで、プログラムのアセンブラとは区別が付く

用語のバラバラ感は、英語でも同様みたいだね
http://en.wikipedia.org/wiki/Assembly_language#Related_terminology
597デフォルトの名無しさん:2014/07/22(火) 13:16:19.12 ID:P1jRYX3s
>>590 ; AL <-- 文字コード

(1) 大文字→小文字 、他の文字はそのまま。

cmp al,'A'
jb @f
cmp al,'Z'
ja @f
or al,('A' xor 'a') ; 他の文字が不定でいいならこの行だけでOK。
@@:


(2) 小文字→大文字 、他の文字はそのまま。

cmp al,'a'
jb @f
cmp al,'z'
ja @f
and al,not('A' xor 'a') ; 他の文字が不定でいいならこの行だけでOK。
@@:
598590:2014/07/24(木) 01:43:01.19 ID:hv8nubjy
>>597
ありがとうございます
それは、CASLUの文法ですか?CASLUの文法でお願いしますm(_ _)m

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12132311387
上に2つの問題があるので、日が出る前に誰が教えて下さい・・・
ウェブマネーでもアップルカードでも現金でもどんな形でも1000円分あげます
先着でお願いします。その際にメアド明記を必ずお願いします。
大学の単位掛かってるのでお願いします・・
599デフォルトの名無しさん:2014/07/24(木) 02:40:58.69 ID:weGa5ogB
宿題は自分でやろう

# つか、大学でCASLII? 底辺だな…。
600デフォルトの名無しさん:2014/07/24(木) 02:48:29.48 ID:MYJWPOnC
>>599
いやCASLを題材としてCPUの内部までやるところもあるよ、教科書もあったけれどもどっかにいってしまった‥もう一度手元に呼び戻したいものだ
601デフォルトの名無しさん:2014/07/24(木) 02:57:56.22 ID:weGa5ogB
> いやCASLを題材としてCPUの内部までやるところもあるよ、

CASL題材に内部までやったところで底辺には変わらん
せめてOS動く程度のアーキテクチャでFPGAで実装くらいやってのもんだろw
602デフォルトの名無しさん:2014/07/24(木) 06:16:57.15 ID:MYJWPOnC
そうか、最近なら FPGA っていうのはありだね
603デフォルトの名無しさん:2014/07/24(木) 14:20:58.97 ID:2qFeAMu1
>大学の単位掛かってる
赤点取った後の、お情け課題提出に見える。
604デフォルトの名無しさん:2014/07/25(金) 03:38:44.05 ID:5HeCUYeT
どちらにしても、石もアセンブラも後出しってのはなぁ…
CASLなら初めからCASLと書いて欲しいかな
605,,・´∀`・,,)っ-○○○:2014/07/25(金) 08:54:19.70 ID:8TTeu6gK
入力するのがアルファベットって決まってるなら
c |= 0x20;

だけでいいけどな
606デフォルトの名無しさん:2014/07/25(金) 09:39:55.89 ID:cQJQccdW
丁度良い練習問題は Base64
607デフォルトの名無しさん:2014/07/28(月) 18:45:13.44 ID:klE3KiB9
下のプログラムをvs2013でリリースビルドした結果なんですが、剰余算の式の過程が訳分からないです
リバーシングに興味あってアセンブラいじりだしたんですがわかる人いますか?
; 6 : (i % 3 == 0) ? ((i % 5 == 0) ? printf("%3d hoge\n",i) : printf("%3d hige\n",i)) : printf("%3d hoge\n",i);

mov eax, -1431655765 ; aaaaaaabH
mov ecx, esi
mul esi
push esi
shr edx, 1
lea eax, DWORD PTR [edx+edx*2]
sub ecx, eax
jne SHORT $LN8@main
mov eax, -858993459 ; cccccccdH
mov ecx, esi
mul esi
shr edx, 2
lea eax, DWORD PTR [edx+edx*4]
sub ecx, eax
je SHORT $LN8@main
push OFFSET ??_C@_09FLCGICCH@?$CF3d?5hige?6?$AA@
jmp SHORT $LN14@main
608デフォルトの名無しさん:2014/07/28(月) 19:29:51.50 ID:74FTDS++
>>607
esi に i の値が入ってるとして、

mov eax, -1431655765 ; aaaaaaabH
mul esi
shr edx, 1
lea eax, DWORD PTR [edx+edx*2]
sub esi, eax
jne SHORT $LN8@main

で何やってるか考えてみれ。
609デフォルトの名無しさん:2014/07/28(月) 23:02:52.60 ID:pFFfm4RG
普通に3や5で割るより早いのかのぉ?
610デフォルトの名無しさん:2014/07/29(火) 11:55:06.03 ID:M1sSUXRJ
『ハッカーのたのしみ』の10章かな
611,,・´∀`・,,)っ-○○○:2014/08/07(木) 20:45:20.65 ID:mDZmRo1A
MMX/SSE/AVXの整数演算では除算命令がないから逆数との積はしょっちゅう使うよ
612,,・´∀`・,,)っ-○○○:2014/08/07(木) 22:11:11.87 ID:mDZmRo1A
ちなみに10進数で9の倍数の求め方ってどうやるか知ってる?
全部の桁の数字を、最後の1桁になるまで足して9になればそれが9の倍数。
9にならなければそれが剰余。

3の場合も、整数値を4進数とみなして同じことをやれば
掛け算すら使わずに3の剰余を求めることができる。
ビット演算+シフト+足し算だけ。
収束にやや時間はかかるけどいろいろ応用は利く。

(CASL/COMETって掛け算命令すらなかったよね)
613デフォルトの名無しさん:2014/08/07(木) 22:20:07.93 ID:bcHrnzcz
>>612
>ちなみに10進数で9の倍数の求め方ってどうやるか知ってる?
>全部の桁の数字を、最後の1桁になるまで足して9になればそれが9の倍数。

BCDでもない限りは「10進数で」「全部の桁の数字」って言ってる時点で除算が発生してるってことだから
素直に9で割って余りがあるか判定したほうが良い。
614デフォルトの名無しさん:2014/08/08(金) 05:17:13.57 ID:1UU7vf/D
>>612
小学校で習う
615デフォルトの名無しさん:2014/08/08(金) 10:20:34.18 ID:3pQsoEzr
できれば0は9の倍数の仲間に入れて欲しい
616デフォルトの名無しさん:2014/08/08(金) 10:25:22.80 ID:gW33htdT
ちなみに2進数で1の倍数の求め方ってどうやるか知ってる?
全部の桁の数字を、最後の1桁になるまで足して1になればそれが1の倍数。
1にならなければそれが剰余。
617,,・´∀`・,,)っ-○○○:2014/08/08(金) 23:48:43.27 ID:QdNtltyv
>>613
別に9の倍数を求める必要はないよ。あくまで例として出しただけで。
3と5の剰余を求めたいんでしょ。3なら分割統治法で2ビット値を足し続ければいい。

整数除算はモダンなCPUでも何十サイクルもかかるからビット演算+加減算に
展開したほうが速い場合は多々ある。


> 素直に9で割って余りがあるか判定したほうが良い。

除算・剰余命令が使えないCPUで同じこといえるの?
9の倍数の判定は、7かけてから6ビットに縮約することでできる。
618デフォルトの名無しさん:2014/08/09(土) 00:07:52.61 ID:L0D9xiK5
>>617
>3と5の剰余を求めたいんでしょ。3なら分割統治法で2ビット値を足し続ければいい。
>整数除算はモダンなCPUでも何十サイクルもかかるからビット演算+加減算に
>展開したほうが速い場合は多々ある。

ねぇよ馬鹿か
619,,・´∀`・,,)っ-○○○:2014/08/09(土) 00:20:22.24 ID:nh0jgYrR
あるよ馬鹿か
620,,・´∀`・,,)っ-○○○:2014/08/09(土) 00:21:55.81 ID:nh0jgYrR
ちなみに多倍長整数の因数分解とかでしょっちゅうやる
621デフォルトの名無しさん:2014/08/09(土) 03:51:34.63 ID:pLOg/Mid
>>612
13の倍数、7の倍数をどうぞ
622,,・´∀`・,,)っ-○○○:2014/08/09(土) 09:01:38.99 ID:nh0jgYrR
[ビット縮約を利用したNの倍数判定法]
1. メルセンヌ数2^n - 1を素因数分解してNを約数として持つ任意のnを決める。
2. Nの倍数判定をしたい数に、 (2^n - 1)/Nを掛ける。
3. n(またはその倍数)ビット単位で切り出し、加算する。
 また、最後のnビットに収束するまでこれを繰り返す。
4. nビットに収束時、2^n - 1になっていればその数はNの倍数
(応用例として更に1足して2^n(あるいは1)への収束判定でもおk)

ちなみに5は端折ったけど3倍して4ビットに縮約
7はそのまま3ビット、13の場合は315倍して12ビット

RSAとか自前で実装したことあるなら思いつくだろこんなん
623デフォルトの名無しさん:2014/08/09(土) 10:36:35.37 ID:7qP+m4C1
自分基準で物事を考える人って…
624,,・´∀`・,,)っ-○○○:2014/08/09(土) 11:00:39.66 ID:nh0jgYrR
法と剰余なんて大学では基礎科目の範疇のはずだけどね。まともな学校行ってるの?
http://ja.wikipedia.org/wiki/%E5%89%B0%E4%BD%99%E9%A1%9E%E7%92%B0

コンピュータで2のべき乗-1の倍数判定をやるのは
人間が10進数でやる9の倍数判定なみには簡単であるということ。
自分基準で考えなくていいからコンピュータ基準で考えなよ

固定長整数の範疇なら収束にかかる回数上限がわかるから
条件分岐は最終判定までは不要。
となれば少なくともdiv命令よりは速いだろうね。
https://gmplib.org/~tege/x86-timing.pdf

まあ、コンパイラがやってるみたいに a - [a / b] * b で判定してもいいんだけど
多倍長を扱いたい場合とか、乗算が遅い場合にはシフト+加算やるでしょ。
625デフォルトの名無しさん:2014/08/09(土) 12:09:51.44 ID:mIy/oKca
>>622
>RSAとか自前で実装したことあるなら思いつくだろこんなん
思い付かなかった。
何倍まで判定していた?
626デフォルトの名無しさん:2014/08/09(土) 13:02:24.85 ID:cMAC0zr6
7の倍数が簡単そうなのは判るけど
13とか19とかはどうなのかな
627,,・´∀`・,,)っ-○○○:2014/08/09(土) 13:42:24.91 ID:nh0jgYrR
メルセンヌ数自体の剰余なんてコストはタダみたいなもんだからいくらでも。
ワークメモリ消費量は計算が進むほど減っていくので非常に経済的。
しかしメルセンヌ数じゃない数までこの方法を使うのは必ずしも最適ではないと思う。

複数の方法を複合的に使うのがベストなのでは。
628デフォルトの名無しさん:2014/08/10(日) 04:44:06.43 ID:wq8KfUB9
このスレで具体的なコードを示せてない時点でお察し
629デフォルトの名無しさん:2014/08/11(月) 05:50:32.13 ID:fF79KhY2
ここまで親切丁寧に教えてくれてるのにコードまで要求したら罰あたるよ
つうか、具体性って>622で十分すぎるような……
630デフォルトの名無しさん:2014/08/11(月) 09:30:41.11 ID:k0jUGvDo
スレ違いの投稿繰り返してるのに罰当たりってw
631デフォルトの名無しさん:2014/08/12(火) 22:31:03.64 ID:WypK+3ii
>>617
>除算・剰余命令が使えないCPUで同じこといえるの?

何言ってんのこのバカ
632,,・´∀`・,,)っ-○○○:2014/08/14(木) 09:00:17.90 ID:/1YXqPS/
何度もいうがx86のモダンなCPUでもdivは使えても禁止的に遅いぞ。
クロック数計測してみればいい。
コンパイラの吐いたコードと比べてみ?

別に書いてもいいけどつまらんぞ?

たとえば128bit整数のmod 3を求めるコード

pxor xmm0, xmm0
movdqa xmm1, [src]
psadbw xmm1, xmm0 ;; 11bit * 2
movdqa xmm2, xmm1
psrlq xmm2, xmm1, 8
paddd xmm1, xmm2 ;; 12bit
movd eax, xmm1
mov edx, eax
shr eax, 6
and edx, 63
add eax, edx ;; 7bit
mov eax, [table+eax] ;; 計算済みLUTから引っ張ってくる
633デフォルトの名無しさん:2014/08/14(木) 10:36:27.82 ID:KxZWNeXr
シフトと加算で剰余が求められる理由は理系学部レベルの代数学の知識があれば直感的にはわかるが
アセンブラの構文を齧っただけの人間に説明するのは難しい。
使い方だけなら教えれば中学生でも使いこなせるレベルのテクニックだが。
634デフォルトの名無しさん:2014/08/14(木) 12:01:41.69 ID:jDhN7lgE
剰余系、というか数論初歩(平方剰余の相互法則くらいまで)なんか数学科以外ではやらないと思うよ
教養課程の選択講座、くらいならわかるが
635デフォルトの名無しさん:2014/08/14(木) 12:17:59.46 ID:KxZWNeXr
まともな大学の情報系•通信工学系ならやるよ。

m=16*a+bとおくと
m mod 15 == (a+b) mod 15

難しい数式ほっといても簡単な理屈さえわかれば演算のショートカットは可能。
636デフォルトの名無しさん:2014/08/14(木) 12:18:18.13 ID:p8QfSufV
そうか?工学科でもやるよ。情報学科は知らん
637デフォルトの名無しさん:2014/08/14(木) 14:35:21.60 ID:31aNAkg3
m=16*a+bとおくと
m mod 15 == (a+b) mod 15

中学生でも理解可能
638デフォルトの名無しさん:2014/08/14(木) 15:21:45.62 ID:jDhN7lgE
>>635 >>637
うんうん、それ九去法の16進バージョンだね

m = 16*a + b
=(15 + 1)a + b
=15a + (a + b)

m ≡ a + b (mod. 15)
ふつうこういう表記なんだけれどもね
639,,・´∀`・,,)っ-○○○:2014/08/14(木) 19:42:23.76 ID:YggMfJMP
mod 19のやり方いろいろ考えたけど被除数を32bit→18bitに削るくらいなら
MMX/SSE使えば1命令だけでできるね
640デフォルトの名無しさん:2014/08/30(土) 20:23:40.25 ID:xeSHuuAg
わしがなじんだアッセンブリー言語は
Z80と8086や
LDにmovやで
どや!すごいやろ
nopまであるさかいな
641デフォルトの名無しさん:2014/08/30(土) 20:24:52.35 ID:xeSHuuAg
もうすごすぎてチンポたちっぱなしやで
どや!羨ましいか
よし、おまえ等もチンポ鍛えなや
642デフォルトの名無しさん:2014/08/30(土) 20:39:53.08 ID:2qescp2g
気色悪い
643デフォルトの名無しさん:2014/09/15(月) 15:23:11.41 ID:pkVJB2ul
>>640-642
わらた
644デフォルトの名無しさん:2014/09/15(月) 19:24:50.07 ID:ZrKt/3Ec
mov, in, push, push, push, push, mov, out
645デフォルトの名無しさん:2014/09/29(月) 00:56:30.26 ID:RKEDgsOw
いまどきこんなの出ましたけど

熱血! アセンブラ入門
http://www.shuwasystem.co.jp/products/7980html/4180.html
646デフォルトの名無しさん:2014/09/29(月) 02:16:32.88 ID:NJr46rSn
GCCの吐いたコード見てアセンブラがわかった気になる本みたいだけど、あんま意味はないと思う。
実行環境が身近にないPowerPCとかその他アーキテクチャとか数がたくさんあっても無意味。

いまどきだったら VC++ Express のインラインアセンブラとか使うのがお手軽かつ効果も身近に感じれて
いい気がするが。
647デフォルトの名無しさん:2014/09/29(月) 02:29:34.31 ID:NJr46rSn
648デフォルトの名無しさん:2014/09/29(月) 08:16:03.37 ID:wd4qvqdb
はじめてi486 のかまち氏ご推薦だって
649デフォルトの名無しさん:2014/09/29(月) 08:26:09.14 ID:xSX/Gj/Z
かわいそうに、集団いじめにあってるね
650デフォルトの名無しさん:2014/09/29(月) 08:31:28.14 ID:NJr46rSn
>>648
目次しか見てないで推薦もないと思うが。

https://twitter.com/tkmc/status/516132413710163969
> 『熱血! アセンブラ入門』http://www.shuwasystem.co.jp/products/7980html/4180.html
> この目次を見たら買わないわけにいかない。

https://twitter.com/tkmc/status/516148086553321472
> 3日前に注文して昨日が発売日らしいのにまだ来ないなぁ。と思ったらAmazonは発売日が9/30って
> 書いてある。
651デフォルトの名無しさん:2014/09/29(月) 09:36:48.07 ID:NL6Qfls1
この本の著者は初心者や初学者を対象に微妙にずらしてくる

12ステップで作る組込みOS自作入門
http://www.amazon.co.jp/dp/4877832394/
対象マシンがH8/3069F

開発ツールを使って学ぶ! C言語プログラミング
http://www.amazon.co.jp/dp/4839951497/
初心者の方でも気軽に学習可能なように、必要開発ツールが
インストールされたLinux(CentOS)の仮想マシン(VM:Virtual Machine)
イメージをサポートサイトで無償配布します。「Oracle VM VirtualBox」
や「VMware Player」上に読み込めばすぐ学習をスタートできます。
- amazon紹介より -
652デフォルトの名無しさん:2014/10/01(水) 03:50:57.56 ID:PMHBFBS+
ツイッターで騒いでるヤツラ見てるとほんとニワカが多いなと実感する。
コンパイラの出力見てコードの評価するのなんて業務でコンパイラ言語使ってりゃ日常の行為だろうに。
653デフォルトの名無しさん:2014/10/01(水) 21:40:35.62 ID:RRxwqEFU

2chも同じだということを自分で証明しているw
654デフォルトの名無しさん:2014/10/01(水) 23:25:07.36 ID:XzaO0iHc
大手系の投稿記事よりはましなこと書いてたような
655デフォルトの名無しさん:2014/10/02(木) 08:07:44.77 ID:vok4PHmT
vs2013でyasmのソースコードデバッグできないのはどうしたらいいんだろう?
以前は-g cv8でできた気がしたけど、2012でもだめで、2008だったからかな
656655:2014/10/10(金) 00:03:18.91 ID:EfaI1XmC
vs2008を引っ張り出しきてインストールしたら、yasmのソースコードデバッグも可能で
ちゃんとブレークポイントも設定できた
2013でもローカルシンボルのアドレスは読み込んでるんだけどなぁ
657デフォルトの名無しさん:2014/10/10(金) 12:27:08.25 ID:553xVF6m
VCは64-bitインラインアセンブラできないんでしょ?
658デフォルトの名無しさん:2014/10/10(金) 12:43:13.70 ID:aGA3C1dn
インラインアセンブラにこだわる理由もない
659デフォルトの名無しさん:2014/10/11(土) 00:20:30.24 ID:JSe/b624
デバッグ情報が変わったのか、asmファイルでブレークポイントを設定しても
無効になっちゃうんだよ
これは使いにくい
masmなら大丈夫なんだけどね
660デフォルトの名無しさん:2014/11/04(火) 17:11:16.93 ID:8a1BiHkJ
8086はデータ転送命令はmoveとexchangeしかないと思うのですが、
80486になるとload effective addressという命令が加わっています。
今までmove命令で書けていたものに、load effective address命令を加える必要はあるのでしょうか。
moveとload effective addressは別物でしょうか
661デフォルトの名無しさん:2014/11/04(火) 17:43:18.58 ID:4tbMiHmM
662デフォルトの名無しさん:2014/11/04(火) 17:56:50.54 ID:99dxtSJ/
8086の頃からあるわけだけど、利点としては
・普通のアドレッシング表現から、そのアドレスにアクセスするのでなく
 そのアドレスそのものが得られるので便利
・P5以降とかだと、可能な限りどんな命令でも1クロックで実行できるよう
 頑張ってるので、アドレス計算用にたくさん乗ってる加算器を有用に
 使って、数個の数の足し算と4倍、みたいな計算が高速にできる
とか。
663デフォルトの名無しさん:2014/11/04(火) 17:59:26.43 ID:obX3t5pP
等価じゃないのに
664デフォルトの名無しさん:2014/11/04(火) 18:34:18.92 ID:8a1BiHkJ
ありがとうございます。マニュアルを読むようにします
665デフォルトの名無しさん:2014/11/09(日) 14:24:01.21 ID:bui++2v4
CASLUのRPUSH,RPOPがわからないのですが、メインルーチンでRPUSH、RPOPする理由を教えてください。
サブルーチン呼び出しでレジスタの値を退避し、その処理から抜けるときに復帰するのはわかるのですが、
メインルーチンが呼ばれてプログラムが始まるときにレジスタの値をスタックに退避し、抜けるときに復帰するのはスタートアップルーチンと何か関係があるのでしょうか
666デフォルトの名無しさん:2014/11/09(日) 14:41:08.70 ID:6OcI07Hk
RETで終了するならそのプログラムもサブルーチンてことだから、レジスタを
退避/復帰する理由は他のサブルーチンと同じ。
667デフォルトの名無しさん:2014/11/14(金) 21:44:40.20 ID:Q09MuRKV
オススメのアセンブラ入門サイト教えてくださいお願いします
668デフォルトの名無しさん:2014/11/14(金) 21:45:49.11 ID:Q09MuRKV
あ、x86です
669デフォルトの名無しさん:2014/11/14(金) 21:57:13.86 ID:ssh0hRKq
670デフォルトの名無しさん:2014/11/14(金) 22:31:57.52 ID:Q09MuRKV
>>669
やはり最終的にはintelのサイトに行き着くんですね、ありがとうございます
671デフォルトの名無しさん:2014/11/15(土) 09:37:48.59 ID:nFEuZMwr
<main+0> push rbp
<main+1> mov rbp,rsp
<main+4> mov eax,0x0
<main+9> mov DWORD PTR [rbp-0x4],0x0
<main+16> pop rbp
<main+17> ret
もとのプログラムはint main(){return 0;}をディスアセンブルしたものなのですが、
eaxにはリターン値0がロードされるのはわかるのですが、
mov DWORD PTR[rbp-0x4],0x0が何の処理なのかわかりません
672デフォルトの名無しさん:2014/11/15(土) 14:21:10.02 ID:yIj5KxcO
使ってるコンパイラとコンパイルオプションは?
673デフォルトの名無しさん:2014/11/15(土) 14:52:03.23 ID:nFEuZMwr
clangです
コンパイルオプションは-gのみです
674デフォルトの名無しさん:2014/11/15(土) 15:53:32.81 ID:yIj5KxcO
Cygwin64上のclang version 3.4.2 (tags/RELEASE_34/dot2-final)で

hoge.c:
int main()
{
return 0;
}



$ clang -S hoge.c

したら

main:
    pushq  %rbp
    movq  %rsp, %rbp
    pushq  %rax
    callq  __main
    movl  $0, -4(%rbp)
    xorl  %eax, %eax
    addq  $8, %rsp
    popq  %rbp
    ret

になったから結果が違うな。movl $0,-4(%rbp) はされるが。
675デフォルトの名無しさん:2014/11/15(土) 15:56:22.72 ID:yIj5KxcO
$ clang -O2 -S hoge.c

最適化ありでコンパイルすると

main:
    pushq  %rbp
    movq  %rsp, %rbp
    callq  __main
    xorl  %eax, %eax
    popq  %rbp
    ret


になったから movl $0,-4(%rbp) が意味ないことは確か。
676デフォルトの名無しさん:2014/11/15(土) 16:01:50.53 ID:yIj5KxcO
ちなみにmain()でない関数なら最適化なしでも結果変わらんかった。

int hoge()
{
return 0;
}

$ clang -S hoge.c
hoge:
    pushq  %rbp
    movq  %rsp, %rbp
    xorl  %eax, %eax
    popq  %rbp
    ret

$ clang -O2 -S hoge.c
hoge:
    pushq  %rbp
    movq  %rsp, %rbp
    xorl  %eax, %eax
    popq  %rbp
    ret

$ clang -O2 -fomit-frame-pointer -S hoge.c
hoge:
    xorl  %eax, %eax
    ret
677デフォルトの名無しさん:2014/11/15(土) 19:20:54.59 ID:nFEuZMwr
>>675
ありがとうございます
意味がないということがわかりました
678片山博文MZ ◆T6xkBnTXz7B0 :2014/12/25(木) 22:21:21.82 ID:gEw73of1
IEEE754-2008の浮動小数点数をx86アセンブラで実装出来る人、此処に居ますか?
679デフォルトの名無しさん:2014/12/25(木) 22:33:47.28 ID:gEw73of1
あげ
680デフォルトの名無しさん:2014/12/25(木) 22:35:18.35 ID:P9hgzX+u
そんなの金次第
681デフォルトの名無しさん:2014/12/25(木) 22:37:17.19 ID:P9hgzX+u
682デフォルトの名無しさん:2014/12/27(土) 22:56:25.54 ID:u+dBZrZs
仮に、A1111,B1101 として精度4桁とすると、
和差は、指数部の大きい方へ合わせる
1111
00001101 → 0
指数の差が4桁以上あると、下は0と同じになる

仮に指数を、A50,B20とすると、
積は両指数の和 → 50 + 20 = 70
除は両指数の差 → 50 - 20 = 30
683682:2014/12/28(日) 10:12:28.37 ID:/YZxn3dB
これらをシフト・マスク演算などを使って、
Cで書いて、アセンブラで出力すれば?

でも、ちゃんとステータスレジスタのフラグが立つかな?
684片山博文MZ ◆T6xkBnTXz7B0 :2014/12/28(日) 11:45:17.05 ID:0W4dp9Sf
>>682-683
よく考えたら、x86で作るのは意味なかった。ごめんね。
685 ◆hL51veKlRE :2015/02/01(日) 18:55:41.71 ID:JsXnXzTS
aaa/daaとかの命令は結局どういう用途で存在しているんだ...?
調べてもよくわからん(多分それだけ使われないんだろうが)
686デフォルトの名無しさん:2015/02/01(日) 19:01:49.03 ID:rGGapq8A
>>685
お前がBCD演算を理解してないだけ
687デフォルトの名無しさん:2015/02/01(日) 19:33:48.31 ID:+Sv3xZC2
fpuが外付けな大昔
Z80のフローティングライッブラリをx86に移植して
三角関数もテーブルを使って近似値を求める方法で実装したことあるけど
今の時代、知的好奇心を満たす以外になにか意味ある?
三角関数の精度はFPUの付いたPCで計算した結果と摺り合わせて確認した
688デフォルトの名無しさん:2015/02/01(日) 20:06:24.91 ID:s/hXDQXD
どっちが速かった?
689デフォルトの名無しさん:2015/02/01(日) 20:53:10.36 ID:+Sv3xZC2
なにと比較するのかと言う意味なら比較対象がない
当時のN88BASIC(86)との比較ではインタープリタ対マシン語(アセンブラ)なので
オーバーヘッドが少ない分自分で移植したライブラリの方が早かった(FPU無しの倍精度)
内部は80ビットフローティングの精度に対応する為に化数部を128ビット指数部を16ビットで計算後
80ビットフォーマットに丸めた
x64って天国だよなx86と比較すると
紙に印刷したプログラム探せば出てくると思うw
690デフォルトの名無しさん:2015/02/01(日) 22:17:09.61 ID:e1RPi5xm
>>687
0度〜45度をテーブル実装するの?それとももっと狭くていいの?
691デフォルトの名無しさん:2015/02/02(月) 04:57:44.05 ID:j5MISSAc
>>690
忘れたけどたぶんそれくらい
もしかすると90度分かもしれなけど
テーブルの形式は計算精度が必要だったので
近似値に収束する形だったと思う(もう覚えていない)
三角関数の比率が必要な場面は今はFPUに依存できる
あらかじめ化数128指数16ビットの浮動小数点ライブラリで精度の高めな
近似値導出用テーブルを作ってそれを使ってtan-1(うろ覚え)を求めた後で三角関数を計算してた
利用目的で必要な計算精度も異なるので工夫しようぜ
三角関数の粗い比率だけなら64ビット整数で簡単に導出可能
692デフォルトの名無しさん:2015/03/08(日) 10:52:34.09 ID:/s2hhMUc
とりあえず「仮数部」を単語登録した
693デフォルトの名無しさん:2015/03/10(火) 01:21:00.65 ID:HHYC72Cw
PICでのC言語プログラム(上側)をアセンブラ言語(下側)へと書き直したのですが上手く動いてくれません
http://codepad.org/STGr8jeE
http://codepad.org/p74NS78p
プログラムの内容は8つのLEDのうち一つが光っており、
RB0のスイッチを押すたびに光る場所がひとつずつシフトしていくというものです
そして、このプログラム内でチャタリング対策を行っています。

Cの方は上手く動いてくれましたが、アセンブラの方は56行目でどうしてもスキップが有効になりCount_Loopから抜け出せない状況に陥ってしまいます
ステップオーバーで調べてみたところWregや物理スイッチの反応には問題なさそうだったので
Switch_Countが怪しいと睨んでいます(原因は分かりませんが)
どなたか原因の究明をお願いします
694デフォルトの名無しさん