アセンブラ… Part 12
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2007/08/14(火) 17:18:08アセンブラ全般に関するスレッドです。
【前スレ】
アセンブラ… ( ゚д゚)ウッウー
http://pc11.2ch.net/test/read.cgi/tech/1174825173/
0002デフォルトの名無しさん
2007/08/14(火) 17:18:50【過去ログ】
アセンブラ… ( ゚д゚)ウッウー (Part11)
http://pc11.2ch.net/test/read.cgi/tech/1174825173/
アセンブラ… (゜□゜) ↑アッー!↓ (Part10)
http://pc11.2ch.net/test/read.cgi/tech/1148402614/
アセンブラ… (0w0)ウェーイ (Part9)
http://pc8.2ch.net/test/read.cgi/tech/1115188369/
アセンブラ… (´・∀・`)ヘー (Part8)
http://pc8.2ch.net/test/read.cgi/tech/1101390110/
アセンブラ… (°Д°)ハァ? (Part7)
http://pc5.2ch.net/test/read.cgi/tech/1093519463/
アセンブラ… (;´Д`) ハァハァ (Part6)
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
アセンブラ… (*´д`*)アハァ… (Part5)
http://pc5.2ch.net/test/read.cgi/tech/1076157613/
アセンブラ… (゚д゚)ウマー (Part4)
http://pc2.2ch.net/test/read.cgi/tech/1060928704/
アセンブラヽ(`Д´)ノモルァ (Part3)
http://pc2.2ch.net/tech/kako/1040/10402/1040297337.html
アセンブラヽ(`Д´)ノモルァ (Part2)
http://pc3.2ch.net/tech/kako/1016/10169/1016991911.html
アセンブラ… (・∀・)イイ! (Part1)
http://pc.2ch.net/tech/kako/1002/10022/1002267809.html
0003デフォルトの名無しさん
2007/08/15(水) 19:09:110004デフォルトの名無しさん
2007/08/15(水) 19:10:110005デフォルトの名無しさん
2007/08/15(水) 19:12:430006デフォルトの名無しさん
2007/08/15(水) 19:17:250007デフォルトの名無しさん
2007/08/16(木) 15:34:250008デフォルトの名無しさん
2007/08/16(木) 15:37:470009デフォルトの名無しさん
2007/08/16(木) 15:44:250010デフォルトの名無しさん
2007/08/16(木) 15:48:510011デフォルトの名無しさん
2007/08/16(木) 16:00:400012デフォルトの名無しさん
2007/08/16(木) 22:17:340013デフォルトの名無しさん
2007/08/16(木) 22:24:47いいか?
0014デフォルトの名無しさん
2007/08/16(木) 22:41:17ダンゴさんになんてことを!
0015デフォルトの名無しさん
2007/08/16(木) 22:45:110016デフォルトの名無しさん
2007/08/16(木) 22:50:17仕送りを20万円くれるパパに謝りなさいよ。
0017デフォルトの名無しさん
2007/08/16(木) 23:33:34親が経営者であるところをちゃんと示してもらわないと。
0018デフォルトの名無しさん
2007/08/22(水) 21:25:32xchg edx, [eax]
これ
mov ecx, [eax]
mov [eax], edx
mov edx, ecx
どっちが早い
0019デフォルトの名無しさん
2007/08/23(木) 00:37:41前者の方が早い。
速いかどうかはしらね。
0020デフォルトの名無しさん
2007/08/23(木) 08:56:520021デフォルトの名無しさん
2007/08/23(木) 14:46:28後者だと命令が伸びてフェッチ回数が増える可能性があって、
それが効いてくる可能性はあるかもしれん。
0022デフォルトの名無しさん
2007/08/23(木) 22:12:340023デフォルトの名無しさん
2007/08/26(日) 22:43:25下のは一体何をやってるんだ?
0024デフォルトの名無しさん
2007/08/26(日) 23:14:20edx <-> *eax
下が
ecx <- *eax
*eax <- edx
edx <- ecx
でどちらもedxの内容とeaxの指すメモリの内容を交換してる。
下は命令が増えているのとecxを余計に消費している。
上は命令の実行中に他の要因でeaxの先が変化しない事を保証しているのでロックがかかる。
0025デフォルトの名無しさん
2007/08/28(火) 02:59:41アセンブラならまず何を書けばいいの?
0026デフォルトの名無しさん
2007/08/28(火) 03:31:420027デフォルトの名無しさん
2007/08/28(火) 08:40:58mov dx, msg
int 21h
mov ax, 4C00h
int 21h
msg db 'Hello, world!$'
0028デフォルトの名無しさん
2007/08/28(火) 19:40:20002925
2007/08/28(火) 20:00:25ありがと
んで、コンパイルなんだけどインストールされてるアセンブラ?って呼べばいいのかな、調べたら
yasmとnasmってのがあった。OSはLinux使ってますがLinux歴2ヶ月なんでへたれなんです。
アセンブラのコンパイルはどうやるんでしょうか?
Cの初心者向けサイトは多かったけどアセンブラは少なくて。
よろしくです。
0030デフォルトの名無しさん
2007/08/28(火) 20:17:26Linuxなら>>27はだめだな… MS-DOS割り込み使ってるし
0031デフォルトの名無しさん
2007/08/28(火) 20:30:04003225
2007/08/28(火) 20:52:06では、>>27のようなコードをLinux向けに自分で書きたいので
>>27で使ってる命令文の意味などを理解したいです。
ここでダメならどこか誘導してくれるかサイトを教えていただけるとありがたいです。
0033デフォルトの名無しさん
2007/08/28(火) 21:10:23DOS時代のソフトを逆汗するといっぱい出てくる
ahレジスタの数字で呼び出す機能を指定するんだが、
09は文字列を標準出力にアウトプットしてくれる。
このとき文字列のアドレスをdxレジスタに入れておく。
で、文字列は $ で終わっている必要がある。(Cのヌル終端みたいなもんだ)
4Cでint21するとプログラムを終了する
でも俺はint20が好きだ大好きだお前もint20を使え
0034デフォルトの名無しさん
2007/08/28(火) 22:05:360035デフォルトの名無しさん
2007/08/28(火) 22:26:36俺はCOM限定だけど ret だな。
0036デフォルトの名無しさん
2007/08/28(火) 23:34:350037デフォルトの名無しさん
2007/08/29(水) 01:26:53003825
2007/08/29(水) 02:52:06解説ありがとうございます
パッケージ管理で手間取ってしまいまして返事が遅くなりました。
>>27氏と>>33氏の書き込みを参考に理解していこうと思います。
もういちど勉強になりそうな本やサイトを探して>>27を書き換えれるよう取り組んでみます。
では、今日は遅いのでこれにて失礼します。
スレの皆さんありがとうございました。またよろしくです。
0039デフォルトの名無しさん
2007/08/29(水) 06:54:40http://www.google.co.jp/search?q=linux+%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%AB+int80h
0040デフォルトの名無しさん
2007/09/01(土) 00:13:15に似てるけど
>>143↓は何をするものですか?
c:\>debug
-a 100
2732:0100 mov dx,110
2732:0103 mov ah,9
2732:0105 int 21
2732:0107 mov ax,4c00
2732:010A int 21
2732:010C nop
2732:010D
-e 110
2732:0110 46.32 01.63 E8.68 08.21 D9.24
-r ip
IP 0100
:100
-g
0041デフォルトの名無しさん
2007/09/01(土) 00:22:18debug.exeでCOM形式の実行ファイルを作ってるな。
ほんと懐かしい。
0042デフォルトの名無しさん
2007/09/01(土) 00:43:5046.32 01.63 E8.68 08.21 D9.24
は文字ですか?
2732:0100 mov dx,110
2732:0103 mov ah,9
だから、110の内容は文字みたいなのですが、nopが有るのが分かりません。
-r ip
IP 0100
:100
-g
は -g 100とすればいいのにわざわざipの値を確認してgの引数を省略しただけですね。
0043デフォルトの名無しさん
2007/09/01(土) 00:48:17あとこの例だと-eで十六進データを入力しているけど
俺なら文字列を入れるのにはDB擬似命令使うなあ。
0044デフォルトの名無しさん
2007/09/01(土) 00:58:200045デフォルトの名無しさん
2007/09/01(土) 01:01:53ドットは入力の催促で、
古い値.
って表示されるから、数値を入れて、スペースを入れると次のアドレスに移動する。
0046デフォルトの名無しさん
2007/09/01(土) 01:08:49-e 100 46 32 01 63 e8 68 08 21 d9 24
-d 100 209
1034:0100 46 32 01 63 E8 68 08 21-D9 24 F2.c.h.!.$
↑21-D9のハイフンは何でしょうか?熊さんのバグ?
0047デフォルトの名無しさん
2007/09/01(土) 01:17:28LD DE, MSG
CALL 5
RET
MSG: DB 'Hello, world!', 0DH, 0AH, '$'
0048デフォルトの名無しさん
2007/09/01(土) 01:20:280049デフォルトの名無しさん
2007/09/01(土) 01:26:578バイト目の区切り。
0050デフォルトの名無しさん
2007/09/01(土) 01:30:20あっあー!そうだったんですね、ありがとうございます。
$が文字終端ですね。2chの前のFという文字とnopが未解決ですが満足しました。
0051デフォルトの名無しさん
2007/09/01(土) 01:33:24つ HIT-88
0052デフォルトの名無しさん
2007/09/01(土) 01:39:19Fは、入力前のごみデータだろ。って、>45に書かれているじゃん。
nopは作者の癖かなんかじゃないか? コード終端であることを示すために入れたり、
コード領域はnopで埋め尽くしておいたり、色々流儀があったからね。
0053デフォルトの名無しさん
2007/09/01(土) 01:56:24そんな癖があるんですか。それは知りませんでした。
>45が分かりませんでした。今もまだ分かっていません。
0054デフォルトの名無しさん
2007/09/01(土) 02:02:09コマンドラインで「debug」と入力して「-」が表示されたら「e 110」と入力すればわかる。
0055デフォルトの名無しさん
2007/09/01(土) 02:05:35--(1)コマンドプロンプト
-_
--(2)コマンド(e 110)入力
-e 110_
--(3)改行入力→データプロンプト
-e 110
2732:0110 46._
--(4)データ(32)入力→次のデータプロンプト
-e 110
2732:0110 46.32 01._
--(5)以下同様に
-e 110
2732:0110 46.32 01.63 E8._
--
-e 110
2732:0110 46.32 01.63 E8.68 08._
--
-e 110
2732:0110 46.32 01.63 E8.68 08.21 D9._
--($)データ入力完で次のコマンドプロンプトに
-e 110
2732:0110 46.32 01.63 E8.68 08.21 D9.24
-_
--
これで雰囲気をつかんでくれ。
0056デフォルトの名無しさん
2007/09/01(土) 02:29:37やったー!ありがとうございます。古い値.の意味が分かりました。
0057デフォルトの名無しさん
2007/09/01(土) 02:40:52こんな旧時代の遺物を教材に使うのってどうよw
0058デフォルトの名無しさん
2007/09/01(土) 03:26:450059デフォルトの名無しさん
2007/09/01(土) 03:30:090060デフォルトの名無しさん
2007/09/01(土) 03:42:39コミュニケーションのために実際の発音を尋ねるのならまだ分かるが。
0061デフォルトの名無しさん
2007/09/01(土) 12:08:190062デフォルトの名無しさん
2007/09/01(土) 12:34:420063デフォルトの名無しさん
2007/09/01(土) 16:22:15と言う本を買ったのですが内容が16ビットプログラミングでの.comファイル
作製が主なのです。
それで、VS2005のMASMで16ビットリンカを適用さしてコマンドラインから
comファイルを作る方法は解ったのですが、いまいち本の内容を理解しきれてない
と思いデバッガでステップインしていってどう動いているのかを知りたいのですが
VSでどういう風に設定したらasmファイルのみでデバッグ出来るのかが
わからないです。
もし出来る方法があるなら、教えていただきたいです。
VS使うよりも良い開発環境があるなら、そちらも是非教えて頂きたいです。
なにとぞよろしくお願いします。
0064デフォルトの名無しさん
2007/09/01(土) 17:50:42つ Emu8086
http://www.emu8086.com/
0065デフォルトの名無しさん
2007/09/01(土) 18:53:060066デフォルトの名無しさん
2007/09/01(土) 19:01:28C> debug hoge.com
0067デフォルトの名無しさん
2007/09/02(日) 10:43:38「高級言語プログラマのための たしなみアセンブラ」
ぐらいが妥当だろ
0068デフォルトの名無しさん
2007/09/02(日) 11:13:38林晴比古 「高級言語プログラマのためのアセンブラ入門」
ttp://www.sbcr.jp/books/products/detail.asp?sku=4797332816
0069デフォルトの名無しさん
2007/09/02(日) 18:04:170070デフォルトの名無しさん
2007/09/03(月) 00:34:130071デフォルトの名無しさん
2007/09/03(月) 00:39:34MASM えむあすむ
NASM えぬあすむ
TASM ていあすむ
0072デフォルトの名無しさん
2007/09/03(月) 00:58:230073デフォルトの名無しさん
2007/09/03(月) 10:55:560074デフォルトの名無しさん
2007/09/05(水) 00:26:520075デフォルトの名無しさん
2007/09/05(水) 22:11:270076デフォルトの名無しさん
2007/09/05(水) 23:36:09もう使わないか
0077デフォルトの名無しさん
2007/09/08(土) 10:15:05PEはCOFFみたいなものだから
多少自分で前処理する必要があるかもしれないけど
ツールはある
しかし変換しても使えないと思うが
0078デフォルトの名無しさん
2007/09/09(日) 15:59:220079デフォルトの名無しさん
2007/09/12(水) 22:59:29http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4919.txt
上記のソースで
BUFFER db 128 dup(?)
の部分で128byte初期値無しで宣言したBUFFERに間接的に
値を入れていくのはわかるんですが
invoke MessageBoxA, 0, offset BUFFER, offset TITLENAME, 0
の部分でBUFFERの末尾に0が入ってないと思うんですが
なぜ問題なくMessageBoxAが実行されるか解りません。
すいませんが、どなたか教えていただけないでしょうか。
お願いします。
0080デフォルトの名無しさん
2007/09/12(水) 23:45:57masmがBUFFERの全領域を0で初期化しているようだね。
0081デフォルトの名無しさん
2007/09/13(木) 09:12:23OSがdataセクションを初期化してる。
0082デフォルトの名無しさん
2007/09/13(木) 13:56:420083デフォルトの名無しさん
2007/09/13(木) 14:08:48OSが初期化するわけではない
ロードはするけど
0084デフォルトの名無しさん
2007/09/13(木) 14:23:440085デフォルトの名無しさん
2007/09/13(木) 23:25:08>>81
>>81
0086デフォルトの名無しさん
2007/09/14(金) 13:19:500087デフォルトの名無しさん
2007/09/14(金) 18:16:400088デフォルトの名無しさん
2007/09/14(金) 18:20:510089デフォルトの名無しさん
2007/09/14(金) 18:41:40仕様上、
誰かが確実に初期化すると定められたものがあっても、
そういうものに依存するのが嫌なので
自分で必ず初期化するのである。
0090デフォルトの名無しさん
2007/09/14(金) 18:45:020091デフォルトの名無しさん
2007/09/14(金) 18:47:46問題
あるかね
0092デフォルトの名無しさん
2007/09/14(金) 18:57:49「この人は佐藤ですからヒップアタックしてください」と
人からアイデンティファイされたものはダメである。
俺が、この目と足でチェックしてはじめて、
「ぅお前は!佐藤だー!!」(ででででーでででででででで)と、
ヒップアタックする気になるのだ。
0093デフォルトの名無しさん
2007/09/14(金) 20:57:57if(i) i = 0;
これね
0094デフォルトの名無しさん
2007/09/14(金) 21:05:09ちがう
だろう
0095デフォルトの名無しさん
2007/09/14(金) 22:39:18すごい
初期化
0096デフォルトの名無しさん
2007/09/15(土) 02:22:320097デフォルトの名無しさん
2007/09/15(土) 04:00:240098デフォルトの名無しさん
2007/09/15(土) 13:28:190099デフォルトの名無しさん
2007/09/15(土) 17:11:230100デフォルトの名無しさん
2007/09/18(火) 15:25:320101デフォルトの名無しさん
2007/09/19(水) 01:13:41君はわからんのかね
0102デフォルトの名無しさん
2007/09/19(水) 01:41:380103デフォルトの名無しさん
2007/09/19(水) 06:26:180104デフォルトの名無しさん
2007/09/21(金) 22:58:08サブシステム→WinDows
0105デフォルトの名無しさん
2007/10/18(木) 21:25:440106デフォルトの名無しさん
2007/10/26(金) 00:02:09exp(x)=Σ(n=0,∞){1/n!}=1/0!+1/2!+1/3!+…+1/n!
=1+(1+1/2(1+1/3(1+…+1/n)))
の展開した式からネイピア数を求めるアセンブラのプログラムの作り方がさっぱりです。
指定は除算を引き戻し、引き放しで行わず、ループを使わないことらしいです。
ググって見た感じではSRT法を使おうと思っているのですが
これまたアセンブラで表現しようと思うのですがさっぱりです。
どなたかプログラムを教えていただけないでしょうか。
またSRT法以外に簡単な方法ががあるなら是非教えて頂きたいです。
よろしくお願いします。
0107デフォルトの名無しさん
2007/10/27(土) 19:31:28うむ、まずアセンブラとテキストエディタを用意しよう!
0108デフォルトの名無しさん
2007/10/27(土) 19:38:330109デフォルトの名無しさん
2007/10/30(火) 13:23:40long double e,a,p;
e=0;a=1;n=1;
do {
p=e;e+=a;a/=n;n++;
} while (e != p);
こんなのしかかけないヘタレな俺
0110デフォルトの名無しさん
2007/10/30(火) 18:35:110111デフォルトの名無しさん
2007/10/30(火) 23:47:270112デフォルトの名無しさん
2007/11/02(金) 11:10:15あってもあんまよさそうな本が見つからない
なんかお勧めのアセンブラの本教えてください
0113デフォルトの名無しさん
2007/11/02(金) 11:30:45古い本だけど、基本的なことはわかると思うよ
0114デフォルトの名無しさん
2007/11/02(金) 16:53:33AVRマイコン活用ブック―オリジナル電子ゲーム&ロボット製作
→アマゾン:ttp://www.amazon.co.jp/AVRマイコン活用ブック―オリジナル電子ゲーム-ロボット製作-わかるマイコン電子工作-松原-拓也/dp/4885540011/ref=pd_bbs_sr_2/503-7396570-5979118?ie=UTF8&s=books&qid=1193988330&sr=8-2
AVRは(PICも)会社によって嫌われることがあるので、あくまで勉強用として。
0115114
2007/11/02(金) 17:05:00この本のプログラムはgccで書かれています。
>gcc -S ...
のように -S オプションを付けてコンパイルするとアセンブラコードが吐き出されるので、
コードと対比させると勉強になると思います。
0116デフォルトの名無しさん
2007/11/02(金) 18:07:530117デフォルトの名無しさん
2007/11/02(金) 20:51:270118デフォルトの名無しさん
2007/11/03(土) 00:09:16横レスだけどgccで混合できんの?
0120デフォルトの名無しさん
2007/11/03(土) 01:40:090121デフォルトの名無しさん
2007/11/03(土) 03:03:54tasm32のドキュメントってどこかにないでしょうか?
0122デフォルトの名無しさん
2007/11/03(土) 03:18:26ttp://citforum.yspu.yar.ru/programming/tasm3/index.shtml
0123デフォルトの名無しさん
2007/11/03(土) 03:22:32ロシア語読めねえよアホ
0124デフォルトの名無しさん
2007/11/03(土) 03:32:190125デフォルトの名無しさん
2007/11/03(土) 03:50:190126デフォルトの名無しさん
2007/11/03(土) 04:41:200127ヽ・´∀`・,,)っ━━━━━━┓
2007/11/03(土) 11:05:470128デフォルトの名無しさん
2007/11/03(土) 11:06:01相変わらず何かのSDKの中について来るの?
0129ヽ・´∀`・,,)っ━━━━━━┓
2007/11/03(土) 11:09:43http://www.microsoft.com/downloads/details.aspx?FamilyId=7A1C9DA0-0510-44A2-B042-7EF370530C64&displaylang=ja
0130デフォルトの名無しさん
2007/11/04(日) 22:08:08こんなのみつけた
ttp://www.phatcode.net/downloads.php?id=308&action=get&file=pasmug.pdf
ttp://lzasm.hotbox.ru/
によるとTASM5.0のcloneらしい
0131デフォルトの名無しさん
2007/11/04(日) 23:39:04thx
Linkerとかはどうしろって?w
0132ヽ・´∀`・,,)っ━━━━━━┓
2007/11/05(月) 00:11:030133デフォルトの名無しさん
2007/11/05(月) 15:34:12文字列を表示させるにはどのようにしたらよいでしょうか?
PUSH EBP
MOV EBP,ESP
SUB ESP,104
MOV EAX,DWORD PTR SS:[EBP+C]
AND DWORD PTR SS:[EBP-4],0
MOVZX ECX,BYTE PTR DS:[EAX+F]
PUSH ECX ; /<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+E]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+D]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+C]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+B]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+A]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+9]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+8]
PUSH ECX ; |<%02X>
0134デフォルトの名無しさん
2007/11/05(月) 15:35:08PUSH ECX ; |<%04X>
MOVZX ECX,WORD PTR DS:[EAX+4]
PUSH ECX ; |<%04X>
PUSH DWORD PTR DS:[EAX] ; |<%08X>
LEA EAX,DWORD PTR SS:[EBP-104]
PUSH testtest.0044AD6C ; |Format = "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"
PUSH EAX
CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; \wsprintfA
MOV ECX,DWORD PTR SS:[EBP+8]
ADD ESP,34
LEA EAX,DWORD PTR SS:[EBP-104]
PUSH EAX
CALL testtest.0042D903
MOV EAX,DWORD PTR SS:[EBP+8]
LEAVE
RETN 8
0135デフォルトの名無しさん
2007/11/05(月) 15:42:220136デフォルトの名無しさん
2007/11/05(月) 17:12:210137アセンブラ初心者
2007/11/05(月) 21:15:388085で、
[8091h] [8090h] ←[8080h]*2+[8081h] 和を16ビットで求める(分岐命令を使用してもよい)
16ビットで求めるという意味がいまいちわかりません。
どなたか解答お願いします。
0138133,134
2007/11/05(月) 21:54:11レスありがとうございます。
一応Cで書くのも考え試したのですがなにぶんアセンブラは素人なものでして…。
PUSHで変数をスタックして上から開いているんだろうなぁっとまでは
なんとなく理解できたのですがCで書いたらエラー吐きまくりで…
できればどなたかヒントか一部サンプルを書いてもらえないでしょうか?
0139デフォルトの名無しさん
2007/11/05(月) 21:55:23だから16ビットで演算して結果を8090-8091H番地に格納すんだろ。
0140アセンブラ初心者
2007/11/05(月) 22:08:58さっそくのレスありがとうございます。
あ、何となくわかったようなきがしました。
LDA 8080h アキュムレータが8080h になって
ADD A アキュムレータが8080h*2になって
MOV M 8080h*2をHLレジスタにコピー
LDA 8081h アキュムレータに8081hをロードして
STAX D 8081hをDEレジスタに格納して
DAD D 8080h*2+8081hをHLレジスタにいれて
SHLD 8090h [8091h][8090h]に8080h*2+8081hを格納
って感じですかね?
0141アセンブラ初心者
2007/11/05(月) 22:12:24LDA 8080h アキュムレータが8080h になって
ADD A アキュムレータが8080h*2になって
MOV M 8080h*2をHLレジスタにコピー
LDA 8081h アキュムレータに8081hをロードして
STAX D 8081hをDEレジスタに格納して
DAD D 8080h*2+8081hをHLレジスタにいれて
SHLD 8090h [8091h][8090h]に8080h*2+8081hを格納
0142デフォルトの名無しさん
2007/11/05(月) 22:12:38が、まぁだいたいそんな感じだ。
0143アセンブラ初心者
2007/11/05(月) 22:13:410144アセンブラ初心者
2007/11/05(月) 22:16:10今日知人に教えてもらうと、
LDA 8080h
MOV L,A
MVI H.0
DAD H
LDA 8081h
MOV D,A
MVI E,0
DAD D
SHLD 8090h
↑のような感じだったんですがこれでもあっているのですか?
0145アセンブラ初心者
2007/11/05(月) 22:19:090146デフォルトの名無しさん
2007/11/05(月) 22:27:26なら、MOV D,A も MOV E,Aだな。
8085のニモニックよくしランが、
全部16ビットのHL,DEで演算してるようだから多分合ってんじゃね。
蛇足だが、
>>141の方法で、ADD A後、CフラグがONならHに+1すればOK。
多分設問の「分岐命令を使用してもよい」はそれを期待していると思われる。
0147アセンブラ初心者
2007/11/06(火) 00:58:58あなたが神か
アドバイスありがとうございます。
ただ、最後のCフラグがONならHに+1にするほうほうがよくわかりませぬ。
ADD A をADC Aにすればいいのでしょうか?
0148デフォルトの名無しさん
2007/11/06(火) 01:33:06例)
FF+FF→1FE →Aの内容はFEとなって CがONする→
CがONなら上位8ビット(H)に+1(HLで+100)することで補正する必要あり
...ああ、もう書いちゃえw
H=0; //あらかじめクリアしとく
A=A+A; //ADD A (桁あふれがあればC_flagが1になる。なければ0になる)
if(C_flag!=0){ //桁あふれあり?
H++; //演算結果が8ビットで溢れたので上の桁に1を加算(HL全体で+100)
}
L=A; //下位8ビットを格納
Cフラグでの条件分岐命令は調べれ。
0149デフォルトの名無しさん
2007/11/06(火) 04:55:07MOV M,A とか、STAX D とかって、アドレッシングの概念間違えてるよ。
左は[HL]<--A で、右は[DE]<--A のこと。 HLとDEを使う知人さんの手法が一般的だけど、
レジスタが足りないようなときには148さんの手法も有効なのね。ADD Aの後はこうなる。
JNC LBL
INR H
LBL: MOV L,A
SHLD [結果] こちらの手法のほうが一般性に欠けるかわりに 「軽い」 という利点がある
0150アセンブラ初心者
2007/11/07(水) 23:24:110151デフォルトの名無しさん
2007/11/07(水) 23:32:45応用だろ。考えろ。
0152アセンブラ初心者
2007/11/07(水) 23:37:430153アセンブラ初心者
2007/11/08(木) 00:40:560154デフォルトの名無しさん
2007/11/08(木) 00:42:210155デフォルトの名無しさん
2007/11/08(木) 00:47:48�A3倍はその結果を3回足せばいい。
�B[8080h]はメモリからレジスタにロードして、×2は同じものを足せばいい。
�C�Aの結果から�Bの結果を引いて
�D[8081H]に格納
以上。
0156アセンブラ初心者
2007/11/08(木) 01:05:07ADD A
MOV C←A
ADD B
ADD A
ADD A
SUB C
STA [8081h]
HLT
こんな感じですか?
0157デフォルトの名無しさん
2007/11/08(木) 01:18:23ADD B
の時点でAの中身がどうなってるかよく考えろ。
0158アセンブラ初心者
2007/11/08(木) 01:21:060159デフォルトの名無しさん
2007/11/08(木) 02:03:05お前KIT生だろ?
0160アセンブラ初心者
2007/11/08(木) 02:03:430161sage
2007/11/08(木) 02:03:56蜷川先生もここ見てるから、おまえ落第決定だなwwwww
0162age
2007/11/08(木) 02:06:28石塚お兄さんも見ているから覚悟しておけよwwwwwww
0163デフォルトの名無しさん
2007/11/08(木) 02:10:32過去最近、試験はできたのにレポートが書けていなくて(あるいは他人の丸写しで)不合格に
なる例が多く見られた。レポートはじっくり時間をかけて考えられるので、レポートでは全員満
点が取れるものとして試験の評価基準を設定してある。必ず満点が取れるような内容のものを提
出すること。よく考えず簡単に書いたまま本当に合っているか再確認を怠ったり、わからないか
らといって一部の問題を未記入で提出することのないよう注意すること。追跡を行うなどして、
答が正しいかよく確認すること。
って先生も言ってんだろ。
0164デフォルトの名無しさん
2007/11/08(木) 02:25:26つ [紙と鉛筆]
レジスタとメモリの内容がどう変化するのか
1命令毎に自分で書き出してみぃや
0165デフォルトの名無しさん
2007/11/08(木) 07:44:11LHLD [8080h] ; LDAしたらAがなくなっちゃうでしょ
MVI H,0
DAD H ; 8bitの加算じゃ元が80h以上の場合オーバーフローする
MOV E,L
MOV D,H ; [8080h]*2をDEにsave
MOV L,A
MVI H,0 ; Aの値を16bitに
MOV C,B
MVI B,0 ; Bの値を16bitに
DAD B ; (A+B)を計算
DAD H
DAD H ; *3
MOV A,L
SUB E
MOV L,A
MOV A,H
SBB D
MOV H,A ; HL-DE "DAD"はあるが"DSUB"が無いので8bitで計算
SHLD [8081h] ; 結果はぎりぎり8bitに収まる
HLT
0166165
2007/11/08(木) 07:51:04(計算に使えるように常に空けておくべき)
HLは16bitのアキュムレータとして使う。(8085の命令セットがその思想でできている)
BC,DEは一時的な保持のために使ってよい。
165は冗長だが、この原則で書いてあるので一般性がある。156だと頭でAを壊すとか、
元の値が8bitフルレンジだと結果が正しくならないとかの欠陥がある。
0167デフォルトの名無しさん
2007/11/08(木) 08:44:160168デフォルトの名無しさん
2007/11/08(木) 08:58:16まー制限が多い方が HW という偶像につかえる司祭としての PG っつー
立場を痛感できて良いという思想の教授なのかもしれんが。
0169デフォルトの名無しさん
2007/11/08(木) 09:24:120170デフォルトの名無しさん
2007/11/08(木) 11:21:570171デフォルトの名無しさん
2007/11/08(木) 11:47:580172デフォルトの名無しさん
2007/11/08(木) 13:22:13CPUを作るならMIPSが一番いいと思うけど。
0173デフォルトの名無しさん
2007/11/08(木) 13:24:310174デフォルトの名無しさん
2007/11/08(木) 21:51:520175デフォルトの名無しさん
2007/11/08(木) 22:35:04ARMに押されていそうだよね。
0176デフォルトの名無しさん
2007/11/09(金) 10:44:04馬鹿大学生の間では普及率が高いらしい。<MIPS
0178デフォルトの名無しさん
2007/11/09(金) 11:19:47ARMは作ると訴えられてしまうw
0179デフォルトの名無しさん
2007/11/11(日) 19:49:230180デフォルトの名無しさん
2007/11/11(日) 20:33:34ttp://www.microchip.com/stellent/images/mchpsiteimages/BLOCK.jpg
AVR32みたいな独自コアじゃないのか。
まあMIPSのアセンブラを手書きしたいとは思わねーが。
0181デフォルトの名無しさん
2007/11/15(木) 13:23:42ttp://monoist.atmarkit.co.jp/fembedded/articles/miconkiso1/07/miconkiso1_07a.html
0182デフォルトの名無しさん
2007/11/15(木) 23:30:45サンプル見せて欲しい。
0183デフォルトの名無しさん
2007/11/15(木) 23:49:400184デフォルトの名無しさん
2007/11/16(金) 01:40:24どこかいい解説してるとこない?
0185デフォルトの名無しさん
2007/11/16(金) 16:13:080186デフォルトの名無しさん
2007/11/16(金) 21:29:230xc00000008:invalid handle
7C94EB53 mov dword ptr [esp],eax
7C94EB56 mov dword ptr [esp+4],0
7C94EB5E mov dword ptr [esp+8],0
7C94EB66 mov dword ptr [esp+10h],0
7C94EB6E push esp
7C94EB6F call 7C94EBAC
7C94EB74 mov eax,dword ptr [esp]
7C94EB77 mov esp,ebp
7C94EB79 pop ebp
7C94EB7A ret
7C94EB7B nop
7C94EB7C lea esp,[esp]
7C94EB83 lea ecx,[ecx]
どういう意味かわかる方居ませんか。
ドラッグドロップ系の操作をするとこれが出ます。
0187デフォルトの名無しさん
2007/11/16(金) 21:36:350188デフォルトの名無しさん
2007/11/16(金) 23:07:38エラーメッセージ以上の事はわからない。
invalidなhandleを渡してるために例外発生して止まってる。
表示されてるコード自体はスタックにパラメータ積んで関数呼び出ししてる部分だけ。
意味の通じるラベルが表示されてないから、callで呼びだしてる先の動作がどうなってるかは不明。
原因はわからないが、おそらく次にあげる2つのうちどちらか。
・dllを使ってるプログラムにバグがある。
・ntddll.dllが壊れている。
対策としては
・プログラミングしててデバッグ中に出るなら、ソースを良く確かめる。
・何かアプリケーションソフトを使ってて出るのなら、sfc /scannowでWindowsファイルが壊れてないかチェック。
もしくは、そのソフトの使用を諦める。
0189デフォルトの名無しさん
2007/11/17(土) 00:24:420190デフォルトの名無しさん
2007/11/17(土) 01:46:05そうなるときもあるけど、正直それアセンブラがどうとかじゃなくてwindowsプログラミングだから。
デバッガでsymbolちゃんと設定すりゃもうちょいマシな逆アセになるよ
0191デフォルトの名無しさん
2007/11/17(土) 12:46:44簡単にできるのでしょうか?
0192デフォルトの名無しさん
2007/11/17(土) 13:08:54OS依存のAPI使えばできるだろうが
0193デフォルトの名無しさん
2007/11/17(土) 14:02:15どこだったか忘れたがw
0194デフォルトの名無しさん
2007/11/17(土) 16:08:18なんとも脆弱なOSだな、それ
0195ヽ・´∀`・,,)っ━━━━━━┓
2007/11/17(土) 17:04:000196デフォルトの名無しさん
2007/11/17(土) 23:14:18OSによるけど、簡単にはできない。
Win系、PC-UNIX系ならカーネルモードで動作する必要があるだらうから、
ドライバじゃないと無理。
あるいはOS依存のAPIに飛ばせばよいが、引数をちゃんと設定するには
Cとかで作った実行ファイルを逆アセンブルしないとわからん。
古いMS-DOSだと193の言う通り、FFFF0hに飛ぶだけ。
0197デフォルトの名無しさん
2007/11/18(日) 10:09:47バージョン飛んだwww
0198デフォルトの名無しさん
2007/11/19(月) 20:22:460199ヽ・´∀`・,,)っ━━━━━━┓
2007/11/19(月) 23:09:350200デフォルトの名無しさん
2007/11/21(水) 19:55:02プログラムでN==6,のときd=2,c=2,b=2,a=0の次の配列はd=2,c=2,b=1,a=1と
しないといけないのですがd=2,c=2b=2,a=0でプログラムが終了してしまいます
分岐式がおかしいと思うのですがうまくいきません、アセンブラはこうなりました
EOR ACC,ACC
ADD ACC,07h
ST ACC,[0A0h]
EOR ACC,ACC
ST ACC,[0A1h]
LD IX,0B0h
ST IX,[0A2h]
LOOP1: CMP ACC,[0A0h]
BGE END
LD ACC,[0A0h]
SUB ACC,[0A1h]
CMP ACC,01h
BNZ LABEL7
ST ACC,[0A3h]
LD ACC,[0A0h]
CMP ACC,04h
BGT END
0201デフォルトの名無しさん
2007/11/21(水) 19:56:51LABEL7:ST ACC,[0A3h]
LD IX,ACC
LD ACC,[0A0h]
SUB ACC,IX
LD IX,[0A3h]
LOOP2: CMP ACC,IX
BLE LABEL1
SUB ACC,01h
BA LOOP2
LABEL1:ST ACC,[0A6h]
LD IX,[0A3h]
LD ACC,[0A6h]
ADD IX,ACC
ST IX,[0A4h]
0202デフォルトの名無しさん
2007/11/21(水) 19:57:37SUB ACC,IX
LD IX,[0A6h]
LOOP3: CMP ACC,IX
BLE LABEL2
SUB ACC,01h
BA LOOP3
LABEL2:ST ACC,[0A5h]
LD IX,[0A4h]
ADD IX,ACC
LD ACC,[0A0h]
SUB ACC,IX
LD IX,[0A5h]
CMP ACC,IX
BLE LABEL3
LABEL6:LD ACC,[0A1h]
ADD ACC,01h
ST ACC,[0A1h]
BA LOOP1
LABEL3:ST ACC,[0A7h]
LD IX,[0A2h]
LD ACC,[0A3h]
ST ACC,[IX]
ADD IX,01h
LD ACC,[0A6h]
ST ACC,[IX]
ADD IX,01h
0203デフォルトの名無しさん
2007/11/21(水) 19:59:31ST ACC,[IX]
ADD IX,01h
LD ACC,[0A7h]
ST ACC,[IX]
ADD IX,01h
ST IX,[0A2h]
LD ACC,[0A6h]
CMP ACC,02h
BGE LABEL5
LD ACC,[0A5h]
cmp ACC,02h
BZ LABEL8
BA LABEL6
LABEL5: SUB ACC,01h
ST ACC,[0A6h]
LD IX,[0A3h]
ADD IX,ACC
ST IX,[0A4h]
BA LABEL4
LABEL8:SUB ACC,01h
LD IX,[0A4h]
ADD IX,ACC
LD ACC,[0A3h]
SUB ACC,IX
ST ACC,[0A5h]
BA LABEL3
END: HLT
end
ご助言お願いします
0204デフォルトの名無しさん
2007/11/21(水) 20:16:540205デフォルトの名無しさん
2007/11/21(水) 22:10:49だらだらコピペすんな。
0206デフォルトの名無しさん
2007/11/22(木) 07:35:010207デフォルトの名無しさん
2007/11/22(木) 08:52:5698のゲーム(プリペル)を解析してWindowsに移植しようと思っているんだけど…
98エミュレータに手を加えて、CPU上で動くコード部をそのままdumpするつもりです。
そしてdumpされたコードを逆アセンブルして解析していく方法を考えています。
0208デフォルトの名無しさん
2007/11/22(木) 12:18:350209デフォルトの名無しさん
2007/11/22(木) 13:45:27あのプリペルの、歩幅とキー入力の絶妙なシンクロは
ぜひともそのまま再現したいんですよ
0210デフォルトの名無しさん
2007/11/22(木) 13:54:110211デフォルトの名無しさん
2007/11/22(木) 13:54:360212デフォルトの名無しさん
2007/11/22(木) 14:01:3398用のアセンブラはちょっと。
でもMDEとか懐かしいね。
>>211
DOSフォーマットじゃない独自のファイルシステムなので、
ディスアセンブルするのは起動から追わなくてはいけないので
結構面倒なんです。どこがコード部分かもわかりませんしね。
知りたいのはメインルーチンのみなので、
明らかにコードが通過した場所のみをダンプするのが楽そうに思えました。
ただ、万が一ダイナミックにコードが展開されていたらダメですけどね。
0213デフォルトの名無しさん
2007/11/22(木) 14:16:38その用途なら高機能なのより素直な奴の方がよさげだが詳しくないのでなんとも
dispeかおりーでばっぐあたりじゃだめか
0214デフォルトの名無しさん
2007/11/22(木) 14:35:26プロセスでもexeファイルでもなく、
単純にコードの羅列を逆アセンブルするという用途なのですが、
どうもそういう低機能な逆アセンブラはないみたいなんです。
dispeもOllyDbgも、プロセスもしくはファイル単位で
ディスアセンブルをするようです。
0215デフォルトの名無しさん
2007/11/22(木) 15:12:050216デフォルトの名無しさん
2007/11/22(木) 15:19:490217デフォルトの名無しさん
2007/11/22(木) 17:05:06下手に分析されると変なところにラベル作られてしまいそう
そこらへんは手作業でやるしかないかな
0218デフォルトの名無しさん
2007/11/22(木) 17:25:28シンプルなのが欲しいなあ
0219デフォルトの名無しさん
2007/11/22(木) 18:52:01うさみみハリケーンだと、プロセスメモリの指定範囲だけ逆アセンブルできる。
あと、うさみみハリケーンの付属ソフトを使えば、バイナリデータをテキストか
ファイルで指定して、逆アセンブルするのも可。
シンプルな逆アセンブラってことなら、↑でいけるかと。
0220デフォルトの名無しさん
2007/11/22(木) 20:50:25俺はnasmについてくる逆アセンブラを使ってる。
ndisasm test.bin > test.asm
コレでおkだと思う。
0221デフォルトの名無しさん
2007/11/22(木) 20:51:220222デフォルトの名無しさん
2007/11/22(木) 21:48:10ってまだ売ってたっけ・・・?
0223デフォルトの名無しさん
2007/11/22(木) 23:53:250224デフォルトの名無しさん
2007/11/23(金) 00:10:36古のソーサー
0225デフォルトの名無しさん
2007/11/23(金) 17:53:230226デフォルトの名無しさん
2007/11/24(土) 22:31:13NASMの本で良書をご存知の方、教え
0227デフォルトの名無しさん
2007/11/24(土) 23:07:27「教え」?
「てちょんまげ」?
0228デフォルトの名無しさん
2007/11/24(土) 23:53:30て下さい。
です。失礼しました。
0229デフォルトの名無しさん
2007/11/25(日) 16:59:27アセンブラ使いてー
ニモニックで書きてー
スタック使いてー
オールレジストリの高速関数書きてー
あーちくしょー
0230デフォルトの名無しさん
2007/11/25(日) 17:30:380231デフォルトの名無しさん
2007/11/25(日) 18:21:210232デフォルトの名無しさん
2007/11/25(日) 18:22:18変数の格納場所としては面白いかもな
0233デフォルトの名無しさん
2007/11/26(月) 14:43:09ア
ニ
ス
オ
???
0234デフォルトの名無しさん
2007/11/27(火) 02:15:05その中に負の数がいくつあるかをカウントして
結果をcount番地に入れるプログラムを書け
ちなみにARMを使ってます
AREA QET13,CODE
ENTRY
LDR R0, =table
MOV R1,#0
MOV R2,#0
loop
LDR R0,[R0, R1, LSL #4] ;R0 = table[R1]
CMP R0,#0
ADDLT R2,R2,#1
BNE loop
SWI 0x11
table DCD 0xf1560012
DCD 0x1560012f
DCD 0x80330123
DCD 0x7f611c22
DCD 0xa0000242
tableEnd
DCD 0
END
まだ習いはじめでよくわかりませんが正の数1回カウントするとループをぬけてしまいます
どうか御教授お願いします
0235デフォルトの名無しさん
2007/11/27(火) 02:52:31ARM知らないけど、
R0をポインタとして使っているのに中身を代入して破壊してたり、
R1を更新していなかったりしてない?
0236デフォルトの名無しさん
2007/11/27(火) 16:43:470237デフォルトの名無しさん
2007/11/27(火) 17:36:17ADDLT R2,R2,#1
これはなにやってんの?
0238デフォルトの名無しさん
2007/11/27(火) 17:45:39LSL #4は4ビット左シフトだから一度に16バイト進んでいるのが原因だと思う
0239デフォルトの名無しさん
2007/11/27(火) 17:54:46R0 = table;
R1 = 0;
R2 = 0;
loop:
R0 = R0[R1 << 4];
condition = R0 - 0;
if (condtion < 0) R2 = R2 + 1;
if (condtion != 0) goto loop;
SoftwareIntrrupt(0x11);
となると、問題点は
・R0の破壊(from >235)
・R1の更新がない(from >235, >238)
・R1のシフト量がおかしい(from >238)
ってことだね。
0240デフォルトの名無しさん
2007/11/27(火) 23:50:55オフセットは以下のようにすればOKですが、このセグメントはわかりません。
mov ebx, orz
hlt
orz 0
0241デフォルトの名無しさん
2007/11/28(水) 00:25:460242デフォルトの名無しさん
2007/11/30(金) 15:09:30( ゚д゚)ウッウー
0243デフォルトの名無しさん
2007/12/20(木) 16:48:28名古屋駅近辺でお話しましょう
0244デフォルトの名無しさん
2007/12/28(金) 12:49:24どうしても除算が3回から減らせず、なかなか思うような速度が出ません。
Cで書くと
temp_a = ((256 - src_a) * dest_a) >> 8;
new_a = src_a + temp_a;
new_r = (dest_r * temp_a + src_r * src_a) / new_a;
new_g = (dest_g * temp_a + src_g * src_a) / new_a;
new_b = (dest_b * temp_a + src_b * src_a) / new_a;
(ただし 0 < dest_a <= 255, 0 < src_a < 255)
のようになり、積和の部分が目にとまったので、MMXで書けないかと考えました。
案の定RGBの積和部分(dest_x * temp_a + src_x * src_a)は簡単に書けたのですが、
三色素同時にnew_aで割る方法や式変形がどうしても分からず、結局三回divを使ってしまっています。
この除算を減らす、もしくは他の方法で高速化するような方法はないでしょうか。
諸事情によりPen2でそれなりの速度を出さなければならず、四苦八苦しています……。
0245デフォルトの名無しさん
2007/12/28(金) 14:02:160246デフォルトの名無しさん
2007/12/28(金) 14:17:49temp_a / new_a
src_a / new_a
を計算しておいてそれをかけりゃいいんじゃないの?
0247デフォルトの名無しさん
2007/12/28(金) 15:14:17# それはそうと、Pen2はSSEないんだっけ? あれば単精度演算も遅くないんだが……
0248デフォルトの名無しさん
2007/12/28(金) 16:07:39new_a = src_a + temp_a;
new_r = (dest_r * temp_a + src_r * src_a) / new_a;
↓
new_a = src_a + temp_a;
temp_div = 65535/new_a; //実際にはテーブル化して temp_div = table[new_a];
new_r = ((dest_r * temp_a + src_r * src_a) * temp_div) >> 16;
// ( x * temp_div ) >> 16 はPMULHWを使用
0249デフォルトの名無しさん
2007/12/28(金) 17:02:47下位16bitだけのpmullwは符号なしにも使えるんだったな。
>>248にもpmulhwは符号付きだとツッコミ入れようとしたら、
出てくるnew_rの値は明らかに32767以下だから関係なかった。。
0250デフォルトの名無しさん
2007/12/28(金) 17:18:32符号なしのPMULHUWはPen3で追加された命令で
Pen2ではサポートしてないのね。
0251ヽ・´∀`・,,)っ━━━━━━┓
2007/12/29(土) 05:12:560252デフォルトの名無しさん
2007/12/29(土) 16:25:450253244
2007/12/29(土) 21:39:45ありがとうございます。
>>246さんのアイデアを元に少しもじって、
無事除算の回数を一回に減らすことができました。
また、>>248さんのテーブルを使った手法でも、
それとほぼ同程度の速度を出すことに成功しています。
これなら何とか要求されている時間を満たせそうです。
参考までに変形後の式を書いておきます。
temp_a = (256 - src_a) * dest_a >> 8;
new_a = src_a + temp_a;
// temp_a / new_a + src_a / new_a = 255より
dest_temp_a = (temp_a << 8) / new_a;
src_temp_a = 255 - dest_temp_a;
// 以下、pmaddwdを用いて並列計算
new_r = (dest_r * dest_temp_a + src_r * src_temp_a) >> 8;
new_g = (dest_g * dest_temp_a + src_g * src_temp_a) >> 8;
new_b = (dest_b * dest_temp_a + src_b * src_temp_a) >> 8;
>>251
MMXを使うものも含め、アルファブレンドのソースはよく紹介されていますが、
出力先のα値まで保証するものは少し調べた限りでは見当たらなかったので、
今回は自作してみることにしました。
0254デフォルトの名無しさん
2007/12/29(土) 23:06:460255デフォルトの名無しさん
2007/12/31(月) 06:31:12最終的に別の画像にまたアルファブレンドします。
出力先のα値が保証されていると、
複数枚の画像をブレンドした状態でキャッシュできるので、
枚数が跳ね上がったときに重宝しています。
0256デフォルトの名無しさん
2007/12/31(月) 23:16:29まったく見当もつかず途方にくれてます。
ポインターだけでもいいので教えてください。
0257デフォルトの名無しさん
2007/12/31(月) 23:21:350258デフォルトの名無しさん
2007/12/31(月) 23:23:57というか、先ずは環境を明らかにしようぜ。
0259デフォルトの名無しさん
2007/12/31(月) 23:39:11gccです。
>>257
それはアセンブラをじっと眺めろということでしょうか???
0260デフォルトの名無しさん
2007/12/31(月) 23:48:21とりあえず、
・ 最初と最後にはスタックフレームの確保を行うと楽。
ebp とか esp とかいじってる部分がそれ。
・ 退避すべきレジスタがいくつかある。最初と最後で push/pop してるやつがそれ。
・ 引数を渡すときは、基本的には引数をスタックに push する。
後ろの引数から push するか前のから push するかはコンパイラ次第。確認しる。
可変長引数かどうかで変わる事もあるので注意する。
・ 関数を呼んだ後に引数の分だけスタックポインタを戻すには、
呼び出し側から esp に引数のサイズだけ add するか、
関数から戻る時に ret の引数を使うかする。
どっちなのかはコンパイラ次第。確認しる。
可変長引数かどうかで変わる事もあるので注意する。
標準関数を call した後に add する必要があるかどうかも確認しる。
0261デフォルトの名無しさん
2008/01/01(火) 01:08:320262デフォルトの名無しさん
2008/01/01(火) 13:50:30どこかにその法則を説明しているサイトなり書籍はないですか?
というとか誰かアセンブラを習うのに最適な学習書を紹介してください
0263デフォルトの名無しさん
2008/01/01(火) 14:20:46つ http://gcc.gnu.org/
0264デフォルトの名無しさん
2008/01/01(火) 15:19:25asm-cだけわかればいいのか?
結局、石のアーキ知らないと、asm使う意味が薄いよ。
x86とppcじゃ違いすぎ。
0265デフォルトの名無しさん
2008/01/01(火) 16:26:570266デフォルトの名無しさん
2008/01/01(火) 17:39:360267デフォルトの名無しさん
2008/01/07(月) 01:08:010268デフォルトの名無しさん
2008/02/09(土) 21:38:01asでも-marchのサポートとかが入ったから遅れたのかな?
0269デフォルトの名無しさん
2008/02/12(火) 17:32:51IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
にしてる実行時デコード型プログラムの逆アセ面倒くせー!!
はぁ、ちょっちスッキリした。
0270デフォルトの名無しさん
2008/02/12(火) 19:44:45IA-32(x86) GASでよかったら
「プログラミングの力を生み出す本 インテルCPUのGNUユーザーへ」
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-13207-2
なんてどうかな?
NASMにシフトするにしてもGASは知ってて損はないとおもうし
スタックフレームの説明ぐらいなら書いてありますよ
0271デフォルトの名無しさん
2008/02/14(木) 02:54:500272デフォルトの名無しさん
2008/02/14(木) 19:45:38イ�`
0273デフォルトの名無しさん
2008/02/15(金) 19:57:29何もせずに時(クロック)だけが進んでいく,って意味じゃまいか
0274デフォルトの名無しさん
2008/02/15(金) 21:08:24後で起こしてくれ
0275デフォルトの名無しさん
2008/02/16(土) 00:25:460276デフォルトの名無しさん
2008/02/23(土) 11:17:37インラインアセンブラと EXDEB使ってるんだけど、32bit部分対応で微妙に使いにくい。
0277デフォルトの名無しさん
2008/02/23(土) 11:25:01アセンブラが使いにくいのかデバッガが使いにくいのかどっちだ。
0278デフォルトの名無しさん
2008/02/24(日) 02:49:40暖房器具ですか?
つうか"jmp $"でいいんでないかい。
>>277
デバッガじゃないかい。
機械語レベルでまともなデバッガなんて絶滅したと思うが。
0279デフォルトの名無しさん
2008/02/24(日) 15:39:58int __stdcall AsmFunc(int *v1, int *v2);
という関数の中身をMASMで書きたいのですが、下のように書いてもうまく動作しません。
v1に数値3hを代入したいだけなのですが、何も変化がありません。アセンブル、コンパイル、リンクでエラーは出ませんでした。
// asmfunc.asm
_AsmFunc@8 PROC PUBLIC
push ebp
mov ebp, esp
mov eax, 3h
mov dword ptr [ebp + 8], eax
leave
ret 8
_AsmFunc@8 ENDP
// test.c
int v1, v2, ret;
ret = AsmFunc(&v1, &v2);
どう書くのが正しいですか?
0280デフォルトの名無しさん
2008/02/24(日) 15:40:490281デフォルトの名無しさん
2008/02/24(日) 15:51:39mov dword ptr [ecx], eax
こうじゃない?
0282デフォルトの名無しさん
2008/02/24(日) 15:55:59ありがとうございます!その通りでした。
上のソースでは、v1の参照先ではなく、v1そのものに入れてしまっていたんですね。
助かりました。
0283デフォルトの名無しさん
2008/02/24(日) 18:45:07mov dword ptr 8[ebp + 8], eax
MASM特有の記法でもない様子なので、これで行こうと思います。
0284デフォルトの名無しさん
2008/02/24(日) 19:28:17一個の場合と二個の場合の違いを教えてください。
0285デフォルトの名無しさん
2008/02/24(日) 19:32:250286デフォルトの名無しさん
2008/02/24(日) 20:19:030287デフォルトの名無しさん
2008/02/24(日) 22:04:500288デフォルトの名無しさん
2008/02/27(水) 12:57:59_asm は/Zaオプション使用時には未定義になるが
__asm は/Zaオプション使用時でも有効
0289ヽ・´∀`・,,)っ━━━━━━┓
2008/02/27(水) 23:08:56はずされたんだっけ?
0290デフォルトの名無しさん
2008/02/27(水) 23:20:36どういう意味になるかは処理系定義。
0291デフォルトの名無しさん
2008/02/27(水) 23:26:040292ヽ・´∀`・,,)っ━━━━━━┓
2008/02/27(水) 23:28:10スイーツ(笑)
0293デフォルトの名無しさん
2008/02/27(水) 23:33:06An asm declaration has the form
asm-definition:
asm { string-literal } ;
The meaning of an asm declaration is implementation-defined.
[Note: Typically it is used to pass information through the implementation to an assembler. ]
0294ヽ・´∀`・,,)っ━━━━━━┓
2008/02/27(水) 23:46:550295デフォルトの名無しさん
2008/02/27(水) 23:56:26__asm__ なんてどこ探してもないぞ。
0296ヽ・´∀`・,,)っ━━━━━━┓
2008/02/28(木) 00:15:580297デフォルトの名無しさん
2008/02/28(木) 00:25:21何で処理系依存の話してるんだ?
0298ヽ・´∀`・,,)っ━━━━━━┓
2008/02/28(木) 00:28:570299デフォルトの名無しさん
2008/02/28(木) 11:55:320300デフォルトの名無しさん
2008/03/04(火) 12:18:28またあいつ負けてるのか
0301デフォルトの名無しさん
2008/03/04(火) 17:29:58例えばx86用strcpy.asmをGAS用に移すとか。
0302デフォルトの名無しさん
2008/03/04(火) 18:39:560303デフォルトの名無しさん
2008/03/04(火) 22:43:27そりゃダメだろ。
まあ、strcpy() あたりだとどう書いても似たようなものになるとは思うが。
0304デフォルトの名無しさん
2008/03/05(水) 12:01:48MSVCRT.DLLをリンクする程度だったら
それはシステムライブラリ扱いだからモウマンタイ?
ていう話ではない?
0305301
2008/03/05(水) 12:26:41ライセンスを探したがどこにも無くて。
x86でNULLを探すための、アライメントを考えた4バイトを一気に調べるソースが、とても参考になったから使わせてほしかったけど、止めておきます。
0306デフォルトの名無しさん
2008/03/05(水) 12:37:20問題ないな
0307デフォルトの名無しさん
2008/03/05(水) 16:18:57現時点の業界内での常識的判断からは「問題ない」かも知れないが、
訴訟などでイチャモンをつけられる可能性は否定出来ない。
仕事のコードは 判っている範囲ではクリーンにせざる得ない世になっている気がする。
0308デフォルトの名無しさん
2008/03/05(水) 22:08:10.dll のリンクはまた別の話だろ。
それがダメなら、Windows のアプリなんか作れないだろ。
0309デフォルトの名無しさん
2008/03/05(水) 22:46:02for(i=0;i<max;i++){
の行をコピペしただろとか噛み付かれることまで気にすんのは杞憂がすぎるよーな。
つか strcpy ぐらいなら gas に移植しなくても gcc が標準で同等版もってそうな
気がするけど。
0310デフォルトの名無しさん
2008/03/06(木) 13:33:57創造性のあるコードをコピーすることが違法
0311デフォルトの名無しさん
2008/03/06(木) 14:43:520312デフォルトの名無しさん
2008/03/08(土) 07:55:540313デフォルトの名無しさん
2008/03/10(月) 23:18:58参考書を見ながら学習中ですが、1.の環境で2.のファイルを3.のコマンドでビルドした結果4.のアセンブリコードを得ました。コールして欲しいsys_writeがコールされず、実行ファイルは思った動作になりません。
5.のように修正し、6.で実行ファイルを生成すると思った動作になります。
何が問題となって3.のコマンドでsys_writeコールが生成されないのかわかりません。
0314デフォルトの名無しさん
2008/03/10(月) 23:19:37CPU:AMD-K6(tm)
gcc version 4.1.2
GNU ld version 2.17 Debian GNU/Linux
ldconfig (GNU libc) 2.3.6
2.ファイル hello-asm.c
#include<unistd.h>
char message[]="Hello, world!\n";
int sys_write(int fd, const void *buf, int len){
int ret;
asm("int $0x80" : "=a" (ret) : "a" (4), "b" (fd), "c" (buf), "d" (len));
return ret;
}
void sys_exit(int stat){
asm("int $0x80" : : "a" (1), "b" (stat));
}
void main(){
sys_write(1, (void*)message, sizeof(message));
sys_exit(123);
}
3.コマンド
gcc -nostdlib -save-temps -Wl,--entry=main -Wl,-t -o hello-asm -O2 -finhibit-size-directive -fno-ident -fomit-frame-pointer -fcall-used-ebx hello-asm.c
0315デフォルトの名無しさん
2008/03/10(月) 23:21:57main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ecx
subl $4, %esp
movl $123, (%esp)
call sys_exit
popl %eax
popl %ecx
leal -4(%ecx), %esp
ret
5.正常動作アセンブリコード
main:
削除: leal 4(%esp), %ecx
削除: andl $-16, %esp
subl $16, %esp
pushl $15
pushl $message
pushl $1
call sys_write
6.修正後コマンド
as hello-asm.s -o hello-asm.o
/usr/lib/gcc/i486-linux-gnu/4.1.2/collect2 --entry=main -o hello hello-asm.o
0316デフォルトの名無しさん
2008/03/11(火) 00:10:480317313
2008/03/11(火) 00:25:38おおー、直りました!
コンパイラは不要なソースとして認識したんですね。。。
-O2 → -O0 に変更したらvolatile無しでも動作しました。
ありがとうございましたm(_ _)m
0318デフォルトの名無しさん
2008/03/13(木) 12:31:21main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
"andl $-16, %esp"の部分は動作的にはスタックポインタの下位4bit切り捨てはわかるんだけど、
どういう意味なのかがよく分かりません。
ページング方式だからメモリ確保かなあと思ったけど確保される容量みても全然すくないし・・・
0319デフォルトの名無しさん
2008/03/13(木) 12:43:390320デフォルトの名無しさん
2008/03/13(木) 19:19:06>>318の例だと
16バイトアラインで8バイト以上のスタック領域を確保
という意味になる。
机上で考えてごらん。
もちろん>>318の例のエピローグコードは理解できるね?
0321318
2008/03/14(金) 14:02:58いろいろ自分でも調べてましたが、アライメントの調整っぽいですね。
アセンブラは学校で理論的なことは教えてもらったんですが、実践的なことは全然ならってなくて・・・
>>320
エピローグコードって最初の3行のコードですよね?
これって
呼び出し元のベースポインタの退避
呼び出し先のベースポインタの設定
最初のプッシュしたデータ分のスタックポインタの設定
ですよね?
0322デフォルトの名無しさん
2008/03/14(金) 18:24:590323デフォルトの名無しさん
2008/03/16(日) 23:37:200324デフォルトの名無しさん
2008/03/16(日) 23:41:13epi- 後〜
0325デフォルトの名無しさん
2008/03/17(月) 04:01:46呼び出したり(その逆も)するのが簡単になるようなんですけど、16bitと32bitが混在
するようなコードを書く場面ってあるんですか?
0326デフォルトの名無しさん
2008/03/17(月) 10:51:510327デフォルトの名無しさん
2008/03/17(月) 10:54:180328デフォルトの名無しさん
2008/03/17(月) 10:55:110329デフォルトの名無しさん
2008/03/20(木) 00:06:500330デフォルトの名無しさん
2008/03/20(木) 19:44:520331デフォルトの名無しさん
2008/03/20(木) 22:27:270332デフォルトの名無しさん
2008/03/20(木) 22:28:170333ヽ・´∀`・,,)っ━━━━━━┓
2008/03/20(木) 22:31:350334デフォルトの名無しさん
2008/03/21(金) 12:18:210335デフォルトの名無しさん
2008/03/21(金) 13:13:160336デフォルトの名無しさん
2008/03/21(金) 15:47:170337デフォルトの名無しさん
2008/03/21(金) 17:13:58とかいうときに。
0338デフォルトの名無しさん
2008/03/22(土) 12:46:200339デフォルトの名無しさん
2008/04/13(日) 09:51:15次はどこぞのアセンブラを使ってみたいと思う。
少し前だとnasmだと思うけど、最近は何がメインで使われてる?
Win+CygwinかFreeBSDの環境で使う予定。
0340デフォルトの名無しさん
2008/04/13(日) 10:03:050341デフォルトの名無しさん
2008/04/13(日) 10:13:32Windowsのデバドラ開発とかだったら由緒正しいMASM。確かDDKに添付。
PC-Unix界隈だとやはりnasmか、あるいはgas
0342デフォルトの名無しさん
2008/04/13(日) 10:28:090343デフォルトの名無しさん
2008/04/13(日) 10:38:01thx
まだnasmがいいのか。MASMも使えるならやってみるかな
ム板ってアセンブラスレ、ここくらいだっけ?
やっぱり2chにはアセンブラ使い少ないのか。。。
0344デフォルトの名無しさん
2008/04/13(日) 11:38:47激しく面倒になったし C でそれなりの性能が出るようになったから、
BIOS / ブートローダとか、ほんとにカリカリチューニングする奴ぐら
いしか使ってないだろ。
0345デフォルトの名無しさん
2008/04/13(日) 11:46:34まあこんなとこか
0346デフォルトの名無しさん
2008/04/13(日) 11:55:440347デフォルトの名無しさん
2008/04/13(日) 12:01:05R3000とかは、そこら辺のCISCなどよりむしろ楽だったよ、しかも高速だった。
R4000以降は最低だけどね
0348デフォルトの名無しさん
2008/04/13(日) 12:03:010349デフォルトの名無しさん
2008/04/13(日) 14:04:070350デフォルトの名無しさん
2008/04/13(日) 14:55:30アセンブラの書きやすいCPU(基本に忠実な32ビットCPU)
68020、MIPS32、V70
アセンブラの書き難いCPU
SuperH、Alpha、SPARC、ARM、IA64など
0351デフォルトの名無しさん
2008/04/13(日) 15:23:07x86も追加してくれ
0352デフォルトの名無しさん
2008/04/13(日) 15:49:200353デフォルトの名無しさん
2008/04/13(日) 16:40:320354デフォルトの名無しさん
2008/04/13(日) 17:17:440355デフォルトの名無しさん
2008/04/13(日) 19:18:040356ヽ・´∀`・,,)っ━━━━━━┓
2008/04/13(日) 19:54:15みたいな設計思想で作られてるんでアセンブラではそんなに扱いやすくないんでないの?
良くも悪くも高級言語時代の組み込みCPUアーキテクチャって感じ
あとIA64も同意する。
0357デフォルトの名無しさん
2008/04/13(日) 20:33:20そーゆー設計思想だからしゃーないけど。
0358デフォルトの名無しさん
2008/04/13(日) 21:39:520359デフォルトの名無しさん
2008/04/14(月) 04:44:510360デフォルトの名無しさん
2008/04/14(月) 04:47:360361デフォルトの名無しさん
2008/04/14(月) 07:01:20でも68000はもっと書きやすい。って行くとR3000は書きやすかった。
0362デフォルトの名無しさん
2008/04/14(月) 10:31:080363ヽ・´∀`・,,)っ━━━━━━┓
2008/04/14(月) 11:46:570364デフォルトの名無しさん
2008/04/14(月) 11:48:32この時代で一番いいのは6502だろ、マイナーだったことと周辺LSTのそろいが悪いので売れなかったけど。
反面一番売れたZ80は、タイマー・DMA・I/Oインターフェイスと大抵の物がそろっていて、はんだこて握らなくて済むように
ソケットにでもしてしまえば今のPC自作と変わらないレベルだった。
それ以外にもZ80は、メモリーを節約しやすかったので、この点もメモリーの制約の大きな時代では大きなアドバンテージになったと思う。
それで、書きやすかったかといえば・・・・・ちょっと微妙な気がするな。
16ビット計算もなんちゃって計算なのでフラグが使えなかったりと・・・
高速な乗算に使える1を入れての右シフトは公開してほしかった、こんな大事なもの非公開の隠し命令にするなんて何事だと当時思った。
もうひとつついでにDRAMのリフレッシュをする機能であるRレジスタは、CPUリセットで停止してしまう片手落ちをなんとかして使えるものにしてほしかったな。
リセットするごとにメモリーが消えては使い物になりましぇん。
こんな事書いていると年がばれるぅぅぅ
0365デフォルトの名無しさん
2008/04/14(月) 13:06:09わざと誤情報をばら撒いたという事か
悪質だね
0366デフォルトの名無しさん
2008/04/14(月) 22:18:02MIPSは良かったねぇ
>>365
かわいそうな子にさわっちゃいけません
0367デフォルトの名無しさん
2008/04/14(月) 23:22:44今もこれだけの愚痴が出るということは
かなり根に持ってるな?w
アセンブラ、ゴリゴリいじってみたい気もするけど、
今いじる仕事といえばかなり卓越してないと無理だろうな。。。
趣味だけにしとこ
0368デフォルトの名無しさん
2008/04/14(月) 23:40:360369デフォルトの名無しさん
2008/04/15(火) 01:05:090370デフォルトの名無しさん
2008/04/15(火) 06:51:486800は8bitとしては歪んだ(贅沢な)設計だったが6502は潔かったので安くて速かった
AppleIIに採用されたことで有名
ファミコンはそれのカスタム版だったと思う
0371デフォルトの名無しさん
2008/04/15(火) 13:22:15いやぁ、懐かしい思い出だよ
Z80はプログラムを作る方はともかく、ロボットを作ったりしたときなどはそりゃもう一番楽しいチップだったよ。
大手メーカーがこぞってこれを使ったのは、技術的なハードルが低いのとコストの安さだろうね。
逆にいえば、これを使っているメーカーの技術力はしれていたと思ってます。
シャープのテレビ事業部の製品などは、技術とかそんなの関係なしに楽しかったな、ハードはああでなきゃいかんです。
富士通は技術力あったけれど、つまらんマシンだったと思ってるので。
>>370
6502は、無駄を省き必要最小限にシェープアップすると、ここまで変わるのかという例だね。あとR3000も。
不必要な命令セットは、憶える事も余分に増えるし、大して代わり栄えのしないトライアンドエラーによるチューンが増える。
時間が無駄になる割には効果は薄いと思った。
0372デフォルトの名無しさん
2008/04/15(火) 17:25:44全くだ。6502は6802に対応するチップだが本家より先に出したんだから凄い。
多分Moto内部で6800に負けたデザインなんだろ。
0373デフォルトの名無しさん
2008/04/15(火) 21:44:58そういう経験っていいなー。ハード屋目指してみるかな?w
けど、今のハードのレベルだと三十路過ぎから勉強しても無理だよな。。。
趣味でやろうと幾つか買ってるけど全然いじってないしorz
0374デフォルトの名無しさん
2008/04/15(火) 23:26:42それハード屋じゃない。
0375デフォルトの名無しさん
2008/04/16(水) 00:02:56じゃあ何屋になるんだろ?単純に組み込み系かな?
すまん、門外漢で全然分からんw
0376デフォルトの名無しさん
2008/04/16(水) 00:13:07> 6502は6802に対応するチップ
どこが対応してるんだ?
0377デフォルトの名無しさん
2008/04/16(水) 00:21:280378デフォルトの名無しさん
2008/04/16(水) 00:40:43thx
ハード屋=回路設計だっけ?
0379デフォルトの名無しさん
2008/04/16(水) 13:06:170380デフォルトの名無しさん
2008/04/17(木) 03:10:43中味の話じゃなくて位置付け
0381デフォルトの名無しさん
2008/04/17(木) 21:49:11だから、位置付けのどこが対応してるんだ?
# 中身は、言わずもがなだろ。
0382デフォルトの名無しさん
2008/04/17(木) 21:49:290383デフォルトの名無しさん
2008/04/17(木) 21:50:250384デフォルトの名無しさん
2008/04/17(木) 22:13:220385デフォルトの名無しさん
2008/04/18(金) 12:22:59開発者の嫁の顔もわかりません。
0386デフォルトの名無しさん
2008/04/18(金) 13:02:05ttp://journal.mycom.co.jp/column/helloworld/005/index.html
0387デフォルトの名無しさん
2008/04/20(日) 15:08:28アセンブラがわからなくても、ベーシックについているモニタモードなどでアドレス指定して直に書き換えしているうちに憶ちまった人もいるし
今はいちいちOSにお問い合わせしないと何もできないからすぐに結果が出せなくて面白くないね。
言語関係をやっている人以外には興味の湧くところでなくなった。
0388デフォルトの名無しさん
2008/04/20(日) 16:20:14必要なのはアセンブラではなくてメモリのマッピングの情報だったりする。
自身でも書いているけど、ベーシックだろうがCだろうが可能だよね。
ちょっと前に趣味でDSの自作ソフト作ってみたけど、
そこでもARMのアセンブラの知識が有効活用されたと思ったことはあまりなかったな。
本当にもうコンパイラ屋さんしか必要ない情報なのかも
0389デフォルトの名無しさん
2008/04/20(日) 16:21:539801のディスクアクセス割り込みの CD 1B とか懐かしいな。
0390デフォルトの名無しさん
2008/04/20(日) 17:48:26コンパイラのアセンブリ出力見たりしない?
私は最適化をどう行なったのか当たりをつけるために、しばしば見てるんだけどねぇ。
0391デフォルトの名無しさん
2008/04/20(日) 18:08:06> 本当にもうコンパイラ屋さんしか必要ない情報なのかも
ブート部分を書く人にも必須だよ。
まあ、流通量の多い機器ならコンパイラ屋さんがサンプル提供している
ケースも多いけど。
>>390
>>388 は知らんけど、俺は何か問題かある時とかよっぽどきちきちに組み
たい時以外は見なくなった。
0392デフォルトの名無しさん
2008/04/20(日) 18:26:12あとは言わな(ry
0393デフォルトの名無しさん
2008/04/20(日) 18:31:45最近のハードウェアがまたI/Oをメモリーにマップする(x86場合はIO空間か?)より
通信が中心になってパケットをDMAまたは、それに類似する方式で送る形式になっているので、
「すぐにアクセスできる感」は直に触ってもないんだよな。
近年のハイパフォーマンスを実現するにはアドレスとデータのペアなんか送っていたのでは性能が出ないというのも難解にしているような気がする。
すっかり総ネットワークプログラミング状態だよ。
昔ながらのアクセス方法が今に続いているのはメモリーだけになってきている。
0394デフォルトの名無しさん
2008/04/20(日) 18:37:08高くはないけれど、最近のハードウェアの特性が地味チューンを無意味にしている所はある。
メモリーキャッシュに乗せる技術でほぼ全部だし、それ以外はやってもやらなくても殆ど変わらない。
0395デフォルトの名無しさん
2008/04/20(日) 18:46:250396デフォルトの名無しさん
2008/04/20(日) 19:06:550397デフォルトの名無しさん
2008/04/20(日) 20:50:36よく SYMDEB で弄ったな。
>>396
作りかけのCP/Mボードが部屋に転がってるw
まだ64180なんて売ってるのか。
まぁ8085とか6800とかも売ってる所が在るから不思議では無いか。
0398デフォルトの名無しさん
2008/04/20(日) 21:33:000399デフォルトの名無しさん
2008/04/20(日) 23:24:05多分君のところだけ。
普通のところはそんなことする必要がある部分は初めからアセンブラで書くと思う。
0400デフォルトの名無しさん
2008/04/21(月) 11:24:5968kどれを使えばよいのやらgccに道を問ふまで
引用元忘れた
0401デフォルトの名無しさん
2008/04/21(月) 16:31:46そうすると新しいチップができてもそのコンパイラはコンパイラで書くんじゃないの?
0402ヽ・´∀`・,,)っ━━━━━━┓
2008/04/21(月) 16:45:420403デフォルトの名無しさん
2008/04/21(月) 17:42:380404デフォルトの名無しさん
2008/04/21(月) 17:47:04マルチプレクスされたバスなんて、ちょっと回路組んだ気分にひたるには丁度よさそうなんで、
そのまま8255と8251と8KSRAMまで買って帰ってきちゃいましたよ。
あと373とかも。
あとはROMが欲しいので、今日、若松でDIPのFlash買って来ました。
さて、ハンダ付けハンダ付け・・・
>>397
CP/M関連でお勧めのサイトありますか?
あったら教えてください。
0405デフォルトの名無しさん
2008/04/21(月) 17:58:42120円、高っ、いつか10円になっていた時代があったような・・・
0406デフォルトの名無しさん
2008/04/21(月) 19:56:06俺が知っているのはTMP64180だな。
0407デフォルトの名無しさん
2008/04/21(月) 21:52:02コンパイラ本体は C で書くけど、どんなコード生成すればいいかはアセンブラと
言うか機械語の知識が必要でしょ。
あと、コンパイラによってはアセンブラソースを吐く奴もいるし。
0408デフォルトの名無しさん
2008/04/23(水) 15:14:04いいはずですよね。 その後に最適化フェーズが何パスかあるかも。
アセンブラソースを吐かすのはデバックとかそのフェーズ検証のためが第一義で、
コンパイラでアプリを開発する人には、ゼロとは言わんがあんまりメリット無い気がする。
0409デフォルトの名無しさん
2008/04/24(木) 07:22:49いや。コンパイラ使いにも、-S 出力のメリットはある。
同じ処理で、どっちの書き方が効率良さそうかをみる時には活用できる。
もちろんベンチを取るでもいいんだけど。
0410デフォルトの名無しさん
2008/04/24(木) 18:19:15融点が高いという話は聞いていますが今の鉛フリーの半田は取り扱い難くなっているとかあるんですかね?
0411デフォルトの名無しさん
2008/04/24(木) 18:32:06鉛フリーは使った事ないけど、濡れにくいと聞いている。
0412デフォルトの名無しさん
2008/04/24(木) 19:40:41iclもifort単純な演算にハメてやらないとすぐベクトル化諦めやがる。
ま、大抵の場合はそこまで単純化出来ないから結局intrinsics使う事になるんだけどな。
0413デフォルトの名無しさん
2008/04/26(土) 12:41:250414デフォルトの名無しさん
2008/04/28(月) 01:55:570415デフォルトの名無しさん
2008/05/01(木) 22:28:010416デフォルトの名無しさん
2008/05/01(木) 22:49:340417デフォルトの名無しさん
2008/05/02(金) 10:33:42並列演算が無いっていうのは調べて無さすぎだろ
MMX かなり限定的な使用のみ
SSE 大幅に拡張された
SSE2 かなりのところまで使えるようになった
SSE3/SSE4 さらに便利に
http://wlog.flatlib.jp/archive/1/2007-4-21
0418デフォルトの名無しさん
2008/05/02(金) 23:00:140419デフォルトの名無しさん
2008/05/03(土) 01:24:480420ヽ・´∀`・,,)っ━━━━━━┓
2008/05/03(土) 11:49:23それよりSIMDにNEG代替命令が無くて困る。
NANDやNOR入れてくれよ。
0421デフォルトの名無しさん
2008/05/03(土) 11:53:14pcmpeq で all 1 つくって、pxor じゃ駄目なの?
レジスタ節約したいとか、クロック節約したいとか切実に思うけど。
0422ヽ・´∀`・,,)っ━━━━━━┓
2008/05/03(土) 12:07:40vpnand ymm0, ymm1, ymm2
vpnor ymm0, ymm1, ymm2
vporn ymm0, ymm1, ymm2
vpeqv ymm0, ymm1, ymm2
vpcmov ymm0, ymm1, ymm2, ymm3
あと、3〜4入力のAND, OR, XORがあってもいいくらいだな
これなんてDSP?
つーかDWORDの飽和演算なんてARGB128bitとか使わない限り要らんな。
0423デフォルトの名無しさん
2008/05/03(土) 14:51:40これいいな
0424デフォルトの名無しさん
2008/05/03(土) 20:38:30AVXの発表で思ったんだが、まだ1byte空間に空きがある事の方が驚き。
NEGは俺も凄く欲しい。しかしVMXにも無いよな。
マイナス取るって事はその後演算するって事なんだろうから、
可能な限り演算順序を入れ替えて対処しろって事かと。
あとはuOP Fusionみたいのでxor/subの組み合わせを特別に認識している可能性はある。
もしくは入れ替えに対処出来ない状況というのはa*(-b)のような積や商に入っている場合だから、
どっちにしろ積のレイテンシ待ちだしその間にやれば?って発想かも知れん。
>>423
ハードウェアの仕組みを知らんが、入力ポートと出力ポートの数に制限があるんじゃないか?
そうじゃないと配線が大変な希ガス。
0425デフォルトの名無しさん
2008/05/03(土) 22:00:04ハードウェアの勉強してから書けよ。
0426ヽ・´∀`・,,)っ━━━━━━┓
2008/05/03(土) 22:57:45無いのはNOTだな。
AVXでは4引数(3入力1出力)を実現するのにVEXの他にimm8の上位4ビットを使ってるが
下位4ビットも使えば5引数(4入力1出力)も可能だろうし、実際に何かしらやる計画はあるのだろう。
0427デフォルトの名無しさん
2008/05/04(日) 00:34:13スマン。
>>426
命令にエンコード出来るかどうかじゃなくて、実装出来るかどうか。
多分レジスタファイルが何十とあって、
そこから処理する値を取ってきて保管する場所があって、
それを処理して、出力を保管する場所があるんじゃないか?
例えばパラレル配線で繋がっているメモリからの読み出しをクロック当たり1byte増やそうと思ったら
CPUのピン、メモリのピン、基盤の配線が全て8本増えるって事だと思うんだが、
オペランド数を増やすのも似たようなことが起きそうな気がする。
3オペランド化は殆どの命令に恩恵があるからやる価値があったのだろうけど
たった数命令の為に膨大なトランジスタリソースを裂く必要があれば全く目もくれないと思うんだが。
0428デフォルトの名無しさん
2008/05/04(日) 11:58:02> 多分レジスタファイルが何十とあって、
> そこから処理する値を取ってきて保管する場所があって、
> それを処理して、出力を保管する場所があるんじゃないか?
何を言いたいのかさっぱりわからん。
そのあとの文章も同様。
0429デフォルトの名無しさん
2008/05/04(日) 13:31:06お前は分かっているのか。
大雑把に教えてくれるなり指摘してくれ。
CPUにレジスタファイルが何十と入っているのは分かるよな。
処理部分がVHDLで記述されていようと自分で回路書いていようと、結局は回路な訳だ。
例えば1bitのAND回路があった時に、通常入力は2つで出力は1つだろう。
レジスタファイルが100あってもその全てがAND回路に繋がっているはずがない。
入力として必要な2つだけが選択的に一次レジスタのような格好で取り出され、処理が選択されるんじゃないかと。
> そのあとの文章も同様。
妄想だらけな文章でも、そのあとの方が理解しやすいと思うんだがどの辺が分からなかった?
0430デフォルトの名無しさん
2008/05/04(日) 14:56:18「CPUの作り方」みたいな本が沢山出てるから、どれでも一冊読んでみ。
バスとかセレクタとか・・・
0431ヽ・´∀`・,,)っ━━━━━━┓
2008/05/04(日) 19:48:18「デコーダが複雑になるだろ」とか集中砲火浴びたことがあった。
今じゃ、 Opcode ModRM [SIB] [DISP] imm8, imm8
なんて命令すらありますね。AMDだけど。
SSE5では最初のimm8をDREXに置き換えたのかな?
0432デフォルトの名無しさん
2008/05/04(日) 20:14:410433デフォルトの名無しさん
2008/05/04(日) 20:34:10デコーダはあっち置いといて。
4入力ANDを追加するとして、バスから4入力ANDへ引く線と
AND回路と、結果を書き戻す回路が必要になるだけだろう。
ファンアウトでも気にしてるのか?
0434デフォルトの名無しさん
2008/05/04(日) 20:43:56http://focus.ti.com/lit/ds/symlink/sn74s181.pdf
0435ヽ・´∀`・,,)っ━━━━━━┓
2008/05/04(日) 21:22:57[A]─AND─AND-[E]
[B]─┘ │
[C]─AND─┘
[D]─┘
一方、VMXでいうvselbとかAMD SSE5のpcmovは
[A]━━━━AND-OR-[D]
[B]─AND─╂─┘
[C]━┷NOT┛
VMXに関してはvand/vor/vnor/vxorと同じレイテンシで実現できてることを考えれば
3〜4入力はそんなに実装難易度は高くない気がする。
0436デフォルトの名無しさん
2008/05/04(日) 21:45:39レジスタからALUへのパスが複雑化することにあるんだが。
どうせ回路を複雑にするなら特殊な専用命令を追加するより
スーパースカラやベクトル演算器を入れた方が効率がいい。
0437デフォルトの名無しさん
2008/05/04(日) 22:00:32それとも時分割してる?
0438デフォルトの名無しさん
2008/05/05(月) 02:19:03ただのレジスタってか、FFのことを言ってるのか?
0439デフォルトの名無しさん
2008/05/05(月) 08:01:280440デフォルトの名無しさん
2008/05/05(月) 11:15:380441デフォルトの名無しさん
2008/05/05(月) 11:41:00どこかのメーカの用語か?
0442デフォルトの名無しさん
2008/05/05(月) 11:48:390443デフォルトの名無しさん
2008/05/05(月) 12:08:550444デフォルトの名無しさん
2008/05/05(月) 12:45:41CPU作ろう系の本には必ず出てくるよ。
0445デフォルトの名無しさん
2008/05/05(月) 12:56:120446デフォルトの名無しさん
2008/05/05(月) 13:10:05全部ワイアードでも、マイクロプログラムの説明は出てくるように。
ただ、萌え系のあの本にはレジスタファイルの解説は無さそうだ。
0447デフォルトの名無しさん
2008/05/05(月) 13:20:06プロセッサファイルを使っているか、総合的な解説に字数を割いていれば
出てくるとは思うけど。
0448ヽ・´∀`・,,)っ━━━━━━┓
2008/05/05(月) 13:23:53ATOMにすらあるようだな。2スレッドで独立してるらしいが。
0449デフォルトの名無しさん
2008/05/05(月) 15:20:32> プロセッサファイルを
また、俺の知らない単語が出てきたよ...。
0450デフォルトの名無しさん
2008/05/05(月) 15:26:060451447
2008/05/05(月) 15:27:420452デフォルトの名無しさん
2008/05/05(月) 15:47:130453デフォルトの名無しさん
2008/05/05(月) 20:06:440454デフォルトの名無しさん
2008/05/06(火) 11:50:060455デフォルトの名無しさん
2008/05/06(火) 18:41:440456デフォルトの名無しさん
2008/05/16(金) 11:56:11intel の資料で「ペアリング」や「Uパイプライン」で検索してもヒットしないので、どうすればペアリングされるのか分かりません。
0457デフォルトの名無しさん
2008/05/16(金) 12:01:59どういう環境が必要でしょうか
0458デフォルトの名無しさん
2008/05/16(金) 12:05:450459ヽ・´∀`・,,)っ━━━━━━┓
2008/05/16(金) 12:10:11Core 2は4Wayパイプラインでアウトオブオーダ実行だからそんな古い知識は捨ててしまいなさい
ALUのポートとレイテンシさえ知ってればいい。
まあAtomではまた必要になりそうだがな
0460デフォルトの名無しさん
2008/05/16(金) 12:36:46WindowsやLinuxなどのUnixなどたいていのOSは、
CPUの保護モードを利用して、普通の機械語プログラムは
直接CPUにくべて走らせています。
もし、OSの保護下でなく直接機械語を実行させたいなら、
MS-DOSのような保護のないOSを使うか、ブートセクタに
書き込んで実行させるのが手軽です。
0461デフォルトの名無しさん
2008/05/16(金) 16:34:03『30日でできる!OS自作入門』という本が参考になるかもしれない。
読んだことないけど。
0462デフォルトの名無しさん
2008/05/16(金) 17:33:420463デフォルトの名無しさん
2008/05/16(金) 18:12:26U/V パイプラインというものはないということでしょうか?
参考にしていたサイトが古かったようです。
ALUのポートは Core 2 では確か 3 つですよね。ということは、ALU を使う演算は同時に 3 つできるのですね。
レイテンシは Intel の資料の付録にあったので、それを参考にします。
スループットは大事ではないのですか?
0464ヽ・´∀`・,,)っ━━━━━━┓
2008/05/16(金) 18:44:09もちろん大事。
スループットは、殆どの命令で1クロックサイクル。
ALUの3ポートのどれでも実行出来る命令は1/3と表現される。
んで、レイテンシ・スループットサイクル数が多い命令は概して複数のμOpsに分解して実行する命令ですね。
まあ各命令ごとの使用ポートの詳細はagner.orgあたりが詳しいと思う。
掛け算とかシフトとか発行できるポートが決まってるから、その辺さえ抑えておけばOK。
ちなみにPentium Pro以降のx86アーキテクチャは命令の並べ方自体にはそんなに意味はない。
10数命令前後する程度なら、依存関係さえ無ければ平気で並べ替えて実行できます。
0465デフォルトの名無しさん
2008/05/17(土) 02:32:22なるほど、ありがとうございました。
0466デフォルトの名無しさん
2008/05/17(土) 02:40:59>依存関係さえ無ければ
って意外と手で書くには難しいところはあるかもしれないけどね。
0467デフォルトの名無しさん
2008/05/17(土) 19:54:18それは団子に散々指摘してるんだが学習しないんだよな。
ストレステスト(笑)しか作った事無いんじゃないかと。
CPUが割と広い視野を見てくれる事は事実だろうから知識として与えてもいいが、
質問者がわざわざintrinsicsじゃなくてアセンブラでやりたい/出来るだけの知識がある人なんだから
重要なところから目を反らすような発言はいただけない。
0468ヽ・´∀`・,,)っ━━━━━━┓
2008/05/17(土) 19:56:240469デフォルトの名無しさん
2008/05/17(土) 20:11:11あったら無理だろ
0470ヽ・´∀`・,,)っ━━━━━━┓
2008/05/17(土) 20:28:31逆に、OoO・レジスタリネーム機構で断ち切れない依存関係なんて
インオーダ時代のアーキテクチャの知識があってもどうにかなるわけがないだろう。
http://tripper.kousaku.in/20080307.html#p01
↑これだってレジスタ利用数を意図的に絞ってコード組んでるんだけどね。
0471デフォルトの名無しさん
2008/05/17(土) 21:13:29最初からそういう方向性でものを言った方がいいだろって言ってるんだよ。
否定されたものだから否定で返しやがって
ほんっと主語が読めてないな。
0472ヽ・´∀`・,,)っ━━━━━━┓
2008/05/17(土) 21:17:270473デフォルトの名無しさん
2008/05/17(土) 22:01:13>ほんっと主語が読めてないな。
期待したあなたの負け
0474デフォルトの名無しさん
2008/05/17(土) 22:15:400475ヽ・´∀`・,,)っ━━━━━━┓
2008/05/17(土) 22:26:260476ヽ・´∀`・,,)っ━━━━━━┓
2008/05/17(土) 22:27:36自分の了見の狭さを露呈したからといって相手に理解力がないことにするのは詭弁以外のなんでもないよ。
0477デフォルトの名無しさん
2008/05/17(土) 23:25:540478デフォルトの名無しさん
2008/05/18(日) 00:44:31外野の煽りはまだしも理論的に攻められてもスルーするのは昔から。
0479デフォルトの名無しさん
2008/05/18(日) 01:39:070480デフォルトの名無しさん
2008/05/18(日) 01:40:450481デフォルトの名無しさん
2008/05/18(日) 02:17:41使い方によっては便利?
0482デフォルトの名無しさん
2008/05/18(日) 05:59:17登山途中で天気図書くとか、急いでる時に渋滞情報聞こうとかいう用途には不向き。
0483ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 07:34:34>重要なところから目を反らすような発言はいただけない。
これがどこがどう理論的なんだ自画自賛か
「知識がある人」だとみとめつつも、ちょっとマニュアル調べればわかることを理解できないと過小評価してるわけだよね。
俺は「アウトオブオーダ」と「依存関係」というヒントがあればちゃんとたどり着くことは期待してたんだがな。
ついでにいうとx86はレジスタが少ないからこそかえってレジスタリネーミングは実装しやすい。
ISAレベルで数十レジスタあるようなCPUだとかえって複雑になるからね。
0484デフォルトの名無しさん
2008/05/18(日) 07:53:010485ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 08:10:35自分の意見通したいだけで困ってる当事者に何の配慮のレスもしない
ただの荒らしでしかない
0486デフォルトの名無しさん
2008/05/18(日) 08:53:24>>485まで通して読むとあまりに見苦しいよ
0487デフォルトの名無しさん
2008/05/18(日) 09:12:220488ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 09:18:310489デフォルトの名無しさん
2008/05/18(日) 09:22:520490ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 09:57:13値のロードやxor eax, eaxなど第1オペランドで指定するレジスタの元の値に非依存の結果が得られる命令のほとんどがそうだ。
第2オペランド以降が依存関係がないか解決できてるのも条件だけど。
>>466が的外れなのも言うまでもないし、SPARCみたいな古くからあるレジスタ大量に積んだ
RISCがOoOを実装してないのはご周知の通り。
そもそもOoOみたいな複雑な機構自体がRISCと矛盾する。
ところで「重要なところ」って何なのかな。
無知故の発言にしかみえないが。
命令列レベルで並列なんて考えない方が良いんだよ。
x86の少ないレジスタで命令レベル並列なんて根本的に無理だし、
結局ロード・ストアを連発する羽目になりRAWハザードで性能でないのが落ち。
0491ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 10:00:200492デフォルトの名無しさん
2008/05/18(日) 10:23:190493ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 10:44:41ユニット構成が変わったりパイプラインが深くなったりすると総崩れを起こすんだよね。
レジスタが多いが故にOoOで依存関係を解決してやるのも回路が膨大になる。
OoO時代になって、回路規模あたりの効率はレジスタの多いPOWERみたいなアーキよりもx86のほうがむしろ勝ってたりね。
ジョブズがG4/G5よりCoreのほうが性能が良いって掌を返したのも無理もない話なんだよ。
あと様々なプラットフォームに移植されてるJavaVMはスタックマシン。
スタック階層が依存関係のヒントにもなるから動的最適化もしやすいんだよ。
今やx86もVMみたいなもんだからな。JavaVMほどには洗練されてないが、ソフト資産の面で優れてる。
命令セット使い捨てのアーキには優れたアーキなんだけどねRISCみたいなのは。
CellのSPEなんかも使い捨てだろう。
PS2のときもワークステーションを作るだとかふかしてたが結局EE(ベクトルコプロセッサ付きカスタムMIPS)は使い捨てられた。
0494デフォルトの名無しさん
2008/05/18(日) 11:04:59もうちょっとやりあっちゃ駄目?
あーでも納得させる自身は無いなあ。
誰も奴の知識に文句をつけてる訳じゃなくて
知識に自分の思想/宗教を付加してる事が教育的ではないと思うんだが。
> x86の少ないレジスタで命令レベル並列なんて根本的に無理だし、
そんなの思想だ。俺は無理だと思っているが、無理かどうかは分からない。
お前は今まで反対に命令レベルの並列を説いて「少ないレジスタで並列なんて無理だろう」って言われてたよな。
> CellのSPEなんかも使い捨てだろう。
単なるお前の予想だし蛇足だろう。そもそもLarabeeマンセーはどこいきましたか(笑)
0495ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 12:22:181スレッドあたりの性能が重要な用途ではOoOのスーパースケーラが引き続き有効。
バランスが大事だな。
Larrabeeは既存のx86アーキの代替ではない。
置き換わるなんて言ってるのは後藤くらいだ。
0496デフォルトの名無しさん
2008/05/18(日) 13:08:060497デフォルトの名無しさん
2008/05/18(日) 13:47:280498デフォルトの名無しさん
2008/05/18(日) 14:14:060499デフォルトの名無しさん
2008/05/18(日) 14:24:40期待するだけ無駄
スレに住みつかれたら
無視するしかないだろ
0500デフォルトの名無しさん
2008/05/18(日) 15:01:240501デフォルトの名無しさん
2008/05/18(日) 15:20:580502デフォルトの名無しさん
2008/05/18(日) 18:59:140503デフォルトの名無しさん
2008/05/18(日) 20:10:040504デフォルトの名無しさん
2008/05/18(日) 21:21:200505ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 21:41:53「重要なこと」があると言いつつ自分は例示せずに俺に噛みついてれば彼の脳内では「理論的」なんだから
たまったもんじゃないよな。
まあレジスタリネームの存在を前提としないトンデモ仮説なら何言っても否定してやるけどさ。
0506デフォルトの名無しさん
2008/05/18(日) 22:59:520507ヽ・´∀`・,,)っ━━━━━━┓
2008/05/18(日) 23:26:510508デフォルトの名無しさん
2008/05/18(日) 23:55:060509デフォルトの名無しさん
2008/05/18(日) 23:59:190510デフォルトの名無しさん
2008/05/19(月) 00:44:52>まあレジスタリネームの存在を前提としないトンデモ仮説なら何言っても否定してやるけどさ。
ご遠慮ください。
0511デフォルトの名無しさん
2008/05/20(火) 22:50:44org 100H
section .text
start:
mov ax, 0200H
mov bx, HELLO
PRINT:
mov dl, [ds:bx]
cmp dl, 00H
jz PRINTEND
int 21H
inc bx
jmp PRINT
PRINTEND:
mov ah, 4CH
int 21H
section .data
HELLO db 'Hello World!',00H
というプログラムがあるのですが、
文字列のアドレスを入れるのはbxレジスタでなければいけないんでしょうか?
例えば、
mov bx, HELLO
mov dl, [ds:bx]
inc bx
の部分を
mov cx, HELLO
mov dl, [ds:cx]
inc cx
に変更したら動かないのですが、何が問題なのかよくわかりません。
0512デフォルトの名無しさん
2008/05/20(火) 23:04:00というファンクションの仕様。
cなどでいう関数の引数。
0513デフォルトの名無しさん
2008/05/20(火) 23:42:220514デフォルトの名無しさん
2008/05/21(水) 13:54:30org 100H
section .text
start:
mov ah, 3CH
mov dx, filename
xor cx, cx
int 21H
mov ah, 4CH
int 21H
section .data
FILENAME db 'test.txt', 00H
とした時にtest.txtではなくTEST.TXTが作成されてしまうのですが。
test.txtを作成する時はどうすればいいのでしょうか?
0515デフォルトの名無しさん
2008/05/21(水) 14:11:58http://www.vector.co.jp/soft/data/prog/se044198.html
0516デフォルトの名無しさん
2008/05/21(水) 23:49:21大文字、小文字なんか気にするな。
気になるなら set DIRCMD=/L とすれば気にならなくなるよ。
君の使ってる OS で使えるかどうかは知らんが。
0517デフォルトの名無しさん
2008/05/22(木) 00:05:32Windows 2000/XP でも有効ですか?
0518デフォルトの名無しさん
2008/05/22(木) 00:10:540519デフォルトの名無しさん
2008/05/22(木) 07:43:35有効です。
0520デフォルトの名無しさん
2008/05/22(木) 12:01:000521デフォルトの名無しさん
2008/05/22(木) 12:27:59MontaVista Linux のソースなんか大文字、小文字違いで同じ名前のファイルが
あちこちにあるんで、Windows 上に持ってきて作業できない。
おかげで vi がそこそこ使えるようになっちまったよ。(w
0522デフォルトの名無しさん
2008/05/22(木) 20:51:11Windowsでも大文字小文字を区別できなかったっけ?
レジストリの設定にそんなのがあった気がする
0523デフォルトの名無しさん
2008/05/22(木) 21:36:27カーネルやファイルシステムレベルじゃ区別されてるな
0524デフォルトの名無しさん
2008/05/22(木) 21:39:23区別しない前提で作ってるアプリばっかりだから
きっとまともに動かないんじゃないだろうか
0525デフォルトの名無しさん
2008/05/22(木) 21:48:11えーっ
0526ヽ・´∀`・,,)っ━━━━━━┓
2008/05/22(木) 21:55:190527デフォルトの名無しさん
2008/05/22(木) 21:56:18全角アルファベットが酷い扱いだった時代があったことを知らないのかね。
0528デフォルトの名無しさん
2008/05/22(木) 21:57:550529デフォルトの名無しさん
2008/05/22(木) 22:03:400530デフォルトの名無しさん
2008/05/23(金) 07:52:140531デフォルトの名無しさん
2008/05/23(金) 09:21:350532デフォルトの名無しさん
2008/05/23(金) 09:40:54全角Aとaのcaseが区別されない、と言うことを525が言ってるからだろ
0533デフォルトの名無しさん
2008/05/23(金) 11:37:280534デフォルトの名無しさん
2008/05/24(土) 02:48:18予想通り俺の説得スキルが足りないようなのでもうやめる。
続けたければ隔離スレでも立ててくれ。
0535デフォルトの名無しさん
2008/05/24(土) 04:26:55ADD [EAX],AL
XCHG [EAX],EAX
ADD [EAX],AL
あるゲームのHPの格納アドレスの近くにあるのですが
これってどういう意味があるのでしょうか
0536デフォルトの名無しさん
2008/05/24(土) 07:53:070537ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 08:27:58お前が無知なだけだろ。モダンなx86の物理レジスタは100本以上あるんだよ。
0538ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 08:41:39釈迦に説法と言う気はないが、俺に無意味に噛みついて質問者を混乱させてどうするんだ。
「重要なこと」さっさと答えろよ
0539デフォルトの名無しさん
2008/05/24(土) 09:20:27無意味に噛みつていたのはおまえだろ
0540ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 09:24:41俺は「無い」と断言したがな
0541デフォルトの名無しさん
2008/05/24(土) 09:30:04使ってますよね。そういうのに入っているデータもアセンブラがわかれば
吸い出せるんですか。昔のやつが何台もあるので。
0542ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 09:31:440543デフォルトの名無しさん
2008/05/24(土) 09:32:50もう少しヒントを教えてくれるとありがいです。または参考となるURLなど
あれば。お願いいたします。
0544デフォルトの名無しさん
2008/05/24(土) 09:41:390545デフォルトの名無しさん
2008/05/24(土) 09:47:18日本語漢字コードのあれこれを理解できたら
独自解析も夢ではないと思うよ
0546デフォルトの名無しさん
2008/05/24(土) 10:41:110547デフォルトの名無しさん
2008/05/24(土) 11:20:44あんたよく飽きないねぇ
0548ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 11:30:520549デフォルトの名無しさん
2008/05/24(土) 15:19:250550ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 15:34:560551デフォルトの名無しさん
2008/05/24(土) 17:33:19団子さんのカキコでスレが云々
とか書いておけば団子ハブにできるのか。いいな。
0552デフォルトの名無しさん
2008/05/24(土) 18:19:490553デフォルトの名無しさん
2008/05/24(土) 20:35:160554デフォルトの名無しさん
2008/05/25(日) 08:54:41今後もハンドル付きで書き込むようなら
内容にかかわらず荒らし扱いで問題ないよな
0555デフォルトの名無しさん
2008/05/25(日) 11:32:52.text:0040135A cmp [ebp+arg_4], 0
.text:0040135E jz short loc_40137A
.text:00401360 mov ecx, [ebp+var_4]
.text:00401363 mov byte ptr [ecx], 0
.text:00401366 mov edx, [ebp+var_4]
.text:00401369 add edx, 1
.text:0040136C mov [ebp+var_4], edx
.text:0040136F mov eax, [ebp+arg_4]
.text:00401372 sub eax, 1
.text:00401375 mov [ebp+arg_4], eax
.text:00401378 jmp short loc_40135A
.text:0040137A loc_40137A:
ループで文字列の比較をしてるんでしょうか?
インクリメントしてる方の処理が何をしているのか。
0556デフォルトの名無しさん
2008/05/25(日) 11:59:34for (; arg > 0; ++var, --arg) {
* var = 0;
}
// ただの配列のクリアだね。随分と無駄なコードだけれど。
0557デフォルトの名無しさん
2008/05/25(日) 12:09:37ありがとうございます。
0558デフォルトの名無しさん
2008/05/25(日) 15:48:450559デフォルトの名無しさん
2008/05/25(日) 15:57:030560デフォルトの名無しさん
2008/05/25(日) 16:31:160561デフォルトの名無しさん
2008/05/25(日) 17:17:410562ヽ・´∀`・,,)っ━━━━━━┓
2008/05/25(日) 19:18:01lea edx, [str]
pxor xmm0, xmm0
loop1:
movdqu xmm1, [edx]
pcmpeqb xmm1, xmm0
pmovmskb ecx, xmm1
test ecx,ecx
jnz skip1
add edx, 16
jmp loop1
skip1:
bsf eax, ecx
add eax, edx ; eaxに結果格納
SSE4.1対応ならpcmpeqb+ptestでNULLが含まれる16バイトを検出可能。
SSE4.2に対応してればATAを使えばNULL文字の位置まで特定できる。
まあレイテンシ隠蔽とかの最適化は各自でやれ
0563デフォルトの名無しさん
2008/05/25(日) 19:25:54最近わけわかめ
0564デフォルトの名無しさん
2008/05/25(日) 22:33:370565デフォルトの名無しさん
2008/05/25(日) 23:35:560566ヽ・´∀`・,,)っ━━━━━━┓
2008/05/25(日) 23:41:06日本法人は変なFlashゲーム以外仕事しねーな
0567デフォルトの名無しさん
2008/05/26(月) 00:43:04すげー倍以上速くなった。
0568デフォルトの名無しさん
2008/05/26(月) 09:14:22想像で勝手な事言うが、メモリがボトルネックで流石に倍は無いだろう。
そら自力で1byteずつ調べてたらxmm使った場合の16倍の調査が必要になって
メモリアクセスに隠蔽されないくらい遅くなるかも知れないが
strlen使ったら普通4byteずつ調べてくれるから比較とかの時間はメモリアクセスの時間に隠蔽されるはず。
よく話題に上がる高速版memcpyを考えるのと同じで
ハードウェアプリフェッチを邪魔しない程度にプリフェッチの方法を考えた方がスピード上がるはず。
0569デフォルトの名無しさん
2008/05/26(月) 12:09:40ソースプログラムと実行結果をテキストで出力可能なら良いのですが。
0570デフォルトの名無しさん
2008/05/26(月) 12:27:03いくらでもあんじゃない?
ttp://www.vector.co.jp/vpack/filearea/win/prog/casl/
0571ヽ・´∀`・,,)っ━━━━━━┓
2008/05/26(月) 12:30:32dword単位で0が含まれるバイトを検索する命令なんてないと思うんだが。
基本的に巡回操作の場合は明示的な prefetch* 命令は使う必要ない。
文字列が全部キャッシュに載ってるなら尚更だし。
むしろmovdquの方に突っ込み入るかと思ったが(16byte境界からの探索にしてmovdqaしたほうがいいかも)
>>569
ここは良いGoogle検索代行スレですね。
http://www.vector.co.jp/vpack/filearea/win/prog/casl/
0572ヽ・´∀`・,,)っ━━━━━━┓
2008/05/26(月) 12:35:071バイト毎にbranch命令じゃ確かにパイプラインハザードで性能でない罠。
0573ヽ・´∀`・,,)っ━━━━━━┓
2008/05/26(月) 22:35:00とりあえず実験してみましたよ。
http://smallcode.weblogs.us/2006/08/22/fast-strlen-function/
のソース一式を改造して俺仕様stlrenベンチを作成。
NULL文字検出方法自体は>>562をベースに小改良をしたものね。
で、それぞれ一番最後のスコアだけ抽出
strlen - short strings
Microsoft: 1625 ticks, a = 145
Peter: 1093 ticks, a = 145
A.Fog: 1273 ticks, a = 145
DQN(SSE2): 674 ticks, a = 145←ここ
strlen - long string
Microsoft: 1225 ticks, a = 926
Peter: 1225 ticks, a = 926
A.Fog: 874 ticks, a = 926
DQN(SSE2): 437 ticks, a = 926←ここ
とまあ、MSVCRT版strlenの倍以上は余裕で速い。
もっとも、pmovmskbの性能によって前後するみたいだが(Pen4とかAMDのプロセッサなんかだと全力で遅いかも)
ちなみにうちの環境はCore 2 Duo (Wolfdale) 3.17GHz, Windows Vista Ultimate x64 Editionその他諸々ね
改造ソースとバイナリ一式→http://download.kousaku.in/trip/fast_strlen_mod.zip
ちなみにSSE4.1(ptestを使う方法)だとSSE2と比べても伸びなかった。
0574デフォルトの名無しさん
2008/05/26(月) 23:11:38てかMacBook Pro (Merom)でWinXP(32bit) on VirtualPCだとDQNおせぇ。
VMWareにデュアルコア割り当てちゃってるけどバッテリ駆動じゃねえのになあ。
(VMWareは片コアだけにした方が速いと言われている)
strlen - short strings
Microsoft: 6024 ticks, a = 145
Peter: 6708 ticks, a = 145
A.Fog: 6036 ticks, a = 145
DQN(SSE2): 12792 ticks, a = 145
strlen - long string
Microsoft: 6612 ticks, a = 926
Peter: 6792 ticks, a = 926
A.Fog: 4716 ticks, a = 926
DQN(SSE2): 12936 ticks, a = 926
イレギュラーな使い方だが、何故遅くなるのかは興味あるな。
0575ヽ・´∀`・,,)っ━━━━━━┓
2008/05/26(月) 23:22:02【実行結果】
http://www.vipper.org/vip829067.txt.html
pass [1234]
ちなみに答えはわかってる。
Merom/ConroeはShuffle Engineの実装がしょぼくて
pmovmskb reg, xmmがアホみたいに遅い。
MMXでやったほうがかえって速いかも知れない。
0576ヽ・´∀`・,,)っ━━━━━━┓
2008/05/26(月) 23:48:49コンソール出力をリダイレクトすると何故かまともな結果が出るらしい。
そして、Meromでもシャッフルは思ったよりネックじゃない。
原因が別のところにありそう。
MMX(+SSE1 64bit整数SIMD)版追加版
http://download.kousaku.in/trip/fast_strlen_mod2.zip
Merom機で追試
http://www.vipper.org/vip829134.txt.html PASS: [1234]
0577デフォルトの名無しさん
2008/05/27(火) 01:33:24short stringsのDQN(MMX)が a = 145 だった。
あとMMXとSSE2に限り、1/20くらいの割合で平均の3倍以上かかる時があった。
大体649ticksや660ticks前後なのに、突然1738ticksになったり。
でもMMX/SSE2はMSVCRTの倍を超えている。
L2キャッシュがあふれるほど長い文字列なら話は別だろうけど。
0578デフォルトの名無しさん
2008/05/27(火) 01:40:510579デフォルトの名無しさん
2008/05/27(火) 02:07:18パスは1234。Core 2 Duo T5600 Merom
Vista HomePremium SP1 32bit
http://www.dotup.org/uploda/www.dotup.org4863.txt.html
+ VirtualPC XP Pro SP2 32bit
http://www.dotup.org/uploda/www.dotup.org4864.txt.html
0580ヽ・´∀`・,,)っ━━━━━━┓
2008/05/27(火) 02:17:30今上げてるEXEとソースは修正済み。
PenM(Banias)でも計ってみたんだけど僅差でSSE2>MMXになってる。
並列度の低いコードではベクトル長の引き伸ばしはある程度有効ということがわかる。
>>578
あーそれもありそうだな。
Windowsってコンソールへの描画すらなにげに重たいようだ。
(ファイルだと軽いと思われる)
何周か回して平均値で算出したほうがよさそうかも。
0581デフォルトの名無しさん
2008/05/27(火) 07:42:010582デフォルトの名無しさん
2008/05/27(火) 09:53:49ありがとうございます
0583デフォルトの名無しさん
2008/05/27(火) 10:00:07JNI使えばハードの機能もフルアクセスだし。
0584デフォルトの名無しさん
2008/05/27(火) 10:18:410585デフォルトの名無しさん
2008/05/27(火) 11:20:27開発速度のことですね、わかります。
0586デフォルトの名無しさん
2008/05/27(火) 11:41:02http://namidame.2ch.net/test/read.cgi/news/1211740649/l50
0587デフォルトの名無しさん
2008/05/27(火) 20:09:50wwwwwwwwwwwwwwwwwwwwwww
0588ヽ・´∀`・,,)っ━━━━━━┓
2008/05/27(火) 20:31:160589デフォルトの名無しさん
2008/05/28(水) 22:05:50フロントミッション総合 - FRONT MISSION - 105th [家ゲーSRPG]
この会社辞めようと思った腐れ上司の一言0x21 [プログラマー]
0590デフォルトの名無しさん
2008/05/29(木) 16:29:58どうか、手伝ってください。。。
Define a character string named CO_NAME containing "Internet Service" as a content.
コレ分かる方います?
あ〜!わかんね〜!
0591デフォルトの名無しさん
2008/05/29(木) 18:33:020592デフォルトの名無しさん
2008/05/30(金) 22:49:58涙出てきた
0593デフォルトの名無しさん
2008/06/03(火) 00:55:58変数の値の番地のプログラムに飛びたいんですが
0594デフォルトの名無しさん
2008/06/03(火) 03:45:370595デフォルトの名無しさん
2008/06/03(火) 05:16:210596デフォルトの名無しさん
2008/06/03(火) 06:28:13間接アドレシングで出来るから、手元にあるデータシートに記載されてる説明を確認の事。
手元になければ↓からダウンロードして欲しい。
ttp://www.microchip.co.jp/document.htm
0597デフォルトの名無しさん
2008/06/03(火) 13:11:350598デフォルトの名無しさん
2008/06/05(木) 13:41:560599デフォルトの名無しさん
2008/06/05(木) 13:46:02だが断る
0600デフォルトの名無しさん
2008/06/05(木) 15:58:03問題文が糞だから書き直せ屑
0601デフォルトの名無しさん
2008/06/05(木) 18:58:36#define V(X) *(short *)(X)
r = V(N) - V(M), r < 0? V(P) = -1 : r > 0? V(P) = 1 : 0;
0602デフォルトの名無しさん
2008/06/05(木) 23:40:050603デフォルトの名無しさん
2008/06/06(金) 01:20:57特別扱いする必要があったらそういう注意書きがあると思う。
0604デフォルトの名無しさん
2008/06/06(金) 02:52:33CLRX
INCX
LDD M
CPD N
SBEX #0
CPD N
SBEX #0
0605デフォルトの名無しさん
2008/06/06(金) 02:55:520606デフォルトの名無しさん
2008/06/06(金) 07:25:19;うろおぼえ68000
START:
MOVE.W SR, -(SP)
MOVEM.L D0-D1, -(SP)
MOVEQ #1,D1
MOVE.W N(PC),D0
CMP.W M(PC),D0
;SUB.W M(PC),D0
BPL L_PLUS(PC)
NEG.W D1
L_PLUS:
MOVE.W D1,P(PC)
MOVEM.L (SP)+, D0-D1
MOVE.W (SP)+, SR
RTS
N: DC.W $FF00
M: DC.W $00FF
P: DS.W 1
0607デフォルトの名無しさん
2008/06/06(金) 10:50:120608デフォルトの名無しさん
2008/06/06(金) 12:31:03MOVE.W (SP)+, SR
RTS
じゃなくて
RTR
で、いいんだ。
0609デフォルトの名無しさん
2008/06/06(金) 23:17:04> そーゆー問題のときは"0"=正で考えていいんでないかい。
> 特別扱いする必要があったらそういう注意書きがあると思う。
そう言う思い込みはバグの元になるぞ。
0610デフォルトの名無しさん
2008/06/06(金) 23:21:17010になって特権命令になったが。
ところで、PC相対ってオペランドの右に使えたっけ?
なんか制限あったような気がするんだが。
0611デフォルトの名無しさん
2008/06/06(金) 23:52:58> 68000だけは
68008 のこともたまには思い出してください。
> move SRが一般命令だったり。
move from SR の方だけね、move to SR は 68000 でも特権命令。
> ところで、PC相対ってオペランドの右に使えたっけ?
て言うか、CMP 命令は右にしか使えない。
Add/Sub なんかはどっちにでも使える (但し、反対側は Dn のみ)
けど、CMP はその後の条件判定を反対にすればいいので、片方しか
必要ないと判断したんだろうな。
0612デフォルトの名無しさん
2008/06/08(日) 12:25:06START:
MOVE.W SR, -(SP)
MOVEM.L D0-D1/A0, -(SP)
MOVEQ #1,D1
MOVE.W N(PC),D0
CMP.W M(PC),D0
BPL L_PLUS(PC)
NEG.W D1
L_PLUS:
LEA P(PC), A0
MOVE.W D1, (A0)
MOVEM.L (SP)+, D0-D1/A0
RTR
dstにd16(PC)使えるの4命令しかなかた
0613607
2008/06/08(日) 15:33:43MOV.W N,D0
CMP.W M,D0
SMI D0 *(00/FF)
EXT.W D0 *(0000/FFFF)
ORI.W #1,D0 *(0001/FFFF)
MOV.W D0,P
* もっと変則にしてみたがステップ数縮まらず。
MOV.W N,D0
CMP.W M,D0
SPL D0 *(FF/00)
EXT.W D0 *(FFFF/0000)
ASL.W #1,D0 *(FFFE/0000)
NOT.W D0 *(0001/FFFF)
MOV.W D0,P
* Scc を用いない方法。
MOV.W N,D0
SUB.W M,D0
ASR.W #8,D0 (00??/FF??)
ASR.W #8,D0 (0000/FFFF)
ORI.W #1,D0 (0001/FFFF)
MOV.W D0,P
* そして分岐を使っていないことに気が付く。
0614デフォルトの名無しさん
2008/06/08(日) 17:27:200615デフォルトの名無しさん
2008/06/08(日) 17:32:57(PC)を使ったらもっと縮まるんじゃない?
0616デフォルトの名無しさん
2008/06/08(日) 18:55:490617デフォルトの名無しさん
2008/06/08(日) 19:35:350618>>611
2008/06/08(日) 20:52:52> dstにd16(PC)使えるの4命令しかなかた
ほんとだ、俺もすっかり忘れてた。
そもそも、PC 相対はアクセスモードがプログラム参照 (FC=ユーザープログラム
or スーパーバイザプログラム) になるから、可変データを PC 相対でアクセスす
る領域に置くのは推奨されない。
さすがにデータ参照とプログラム参照で違うメモリをアクセスするシステムは見
たことないけど、プログラム参照領域は書込み禁止を設定しているシステムはあ
るのでちょっと注意した方がいいかも知れない。
> MOVE.W SR, -(SP)
move ccr, (-a7) でいいと思うが。
あと、68k は大抵の命令でコンディションコードが変化するから、サブルーチン
の前後でコンディションコードを保存しないと言う流儀の方が多いと思う。
0619デフォルトの名無しさん
2008/06/08(日) 22:23:20技巧のうちにゃ入らんだろ
0620デフォルトの名無しさん
2008/06/09(月) 18:12:54LEAX N
CMPX M
BPL L_PLUS+1
LDB #$FF
L_PLUS
CMPX #$C601
SEX
STD P
0621デフォルトの名無しさん
2008/06/09(月) 20:07:170622デフォルトの名無しさん
2008/06/09(月) 20:11:46だね。6809は専門じゃないからつっこみかねてた。
ときに C6 01 にコメント振ってくれるとありがたい。
つか SEX 書きたかっただけじゃないか?
0623デフォルトの名無しさん
2008/06/09(月) 20:35:48C6 はLDBのつもりだった、反省はしてない。
0624ヽ・´∀`・,,)っ━━━━━━┓
2008/06/09(月) 20:39:000625デフォルトの名無しさん
2008/06/09(月) 21:05:43クロック表が見当たらないぜ。
0626デフォルトの名無しさん
2008/06/09(月) 21:29:080627デフォルトの名無しさん
2008/06/09(月) 21:59:12プロジェクトリーダーはダンゴさんに任せた!
0628デフォルトの名無しさん
2008/06/10(火) 08:46:380629デフォルトの名無しさん
2008/06/11(水) 03:19:050630デフォルトの名無しさん
2008/06/13(金) 18:28:34CPU毎に"命令Aにはnクロックかかるよ"っていうのがリストされた資料があるんですか、それとも実測ですか?
もし実測しかないならその方法を簡単に教えてください
0631デフォルトの名無しさん
2008/06/13(金) 18:33:45amdとintelの最近のプロセッサものはとりあえず見つけました
メーカーがwebで公開してるんですね・・・
0632デフォルトの名無しさん
2008/06/13(金) 19:28:44人の脳みそをあんまり安く考えてると、働くようになってから
苦労するんじゃねーかな
まあ、半可通の糞ほど教えたがりなんだが
0633デフォルトの名無しさん
2008/06/13(金) 19:43:330634デフォルトの名無しさん
2008/06/13(金) 20:05:52そのうち
「ある命令の実行でフラグがどう変わるか知りたいんですが?」
とかの質問も来るのかな。
0635デフォルトの名無しさん
2008/06/13(金) 20:54:57逆に半可通だからこそそういう疑問が出るんじゃないかな?
ビンゴワードを知らないと何回か周辺ワードでググってそれを探さないといけないから意外と難しい。
昔は頭使わなくてもマイコン雑誌の特集とかで載ってて必修みたいなものだったけどさ。
0636ヽ・´∀`・,,)っ━━━━━━┓
2008/06/13(金) 21:14:19アレもわかりにくいところにあるけど
0637デフォルトの名無しさん
2008/06/14(土) 01:40:46> 逆に半可通だからこそそういう疑問が出るんじゃないかな?
半可通の酋長ダんゴ先生をバカにシュルナ!!!!
0638デフォルトの名無しさん
2008/06/14(土) 03:53:120639デフォルトの名無しさん
2008/06/14(土) 09:32:33あんただれ?
0640デフォルトの名無しさん
2008/06/14(土) 12:38:300641デフォルトの名無しさん
2008/06/14(土) 12:43:50が本当に増えている
0642デフォルトの名無しさん
2008/06/14(土) 13:36:40それも実験して調べるのです(Z80の隠し命令かよ・・・)。
0643デフォルトの名無しさん
2008/06/14(土) 18:00:18それ以上にそいつ等をスルーできないやつ等のほうが増えて内科医。
0644デフォルトの名無しさん
2008/06/14(土) 18:11:170645デフォルトの名無しさん
2008/06/14(土) 22:23:130646デフォルトの名無しさん
2008/06/14(土) 23:17:340647デフォルトの名無しさん
2008/06/14(土) 23:22:190648デフォルトの名無しさん
2008/06/15(日) 08:17:07あれ便利してたんだが。
0649デフォルトの名無しさん
2008/06/17(火) 22:28:150650デフォルトの名無しさん
2008/06/17(火) 22:34:130651デフォルトの名無しさん
2008/06/17(火) 22:36:250652デフォルトの名無しさん
2008/06/17(火) 22:40:540653デフォルトの名無しさん
2008/06/17(火) 23:03:580654デフォルトの名無しさん
2008/06/17(火) 23:31:200655デフォルトの名無しさん
2008/06/18(水) 00:10:10なんでC言語にはローテート演算子が無いんだ。
何度欲しいと思ったことか…
0656デフォルトの名無しさん
2008/06/18(水) 00:13:100657デフォルトの名無しさん
2008/06/18(水) 00:45:22何でもかんでもアセンブラで書きたがるのは昔の厨二病
0658デフォルトの名無しさん
2008/06/18(水) 00:47:15うまく並列実行されれば
ローテートより速いんじゃね?
0659デフォルトの名無しさん
2008/06/18(水) 00:48:59それがだな、昔シフト系の命令がクソ遅い Pentium4 とかいう CPU があってだな。
x86 の rol/ror 命令使うよりも mmx シフトと mmxor で書いたほうが速いとかいう
ふざけたこともあったのだよ。フツーの 32bit の SISD でね。
0660デフォルトの名無しさん
2008/06/18(水) 01:00:510661デフォルトの名無しさん
2008/06/18(水) 01:53:52CPU によるけど、ローテート命令が速くない環境はあるよ。
intel の 24896604_j.pdf からの引用だけど、x86 では
add : レイテンシ 0.5clk, スループット 0.5clk
shl/shr: レイテンシ 4clk, スループット 1clk
rol/ror: レイテンシ 4clk, スループット 1clk
でー mmx だと
pslld: レイテンシ 2clk, スループット 1clk
psrld: レイテンシ 2clk, スループット 1clk
por: レイテンシ 2clk, スループット 1ckl
ね。
SISD で rol/ror より速いっつーのは記憶違いで嘘だったけど。
まーこういう糞な石はメインストリームじゃなければ無視できる
のだけど、一時期多数派を占めてたりしたから無視するわけにも
いかんのよ。
0662デフォルトの名無しさん
2008/06/18(水) 03:25:130663デフォルトの名無しさん
2008/06/18(水) 03:31:410664デフォルトの名無しさん
2008/06/18(水) 13:26:140665デフォルトの名無しさん
2008/06/18(水) 13:45:410666デフォルトの名無しさん
2008/06/20(金) 09:47:19呼び出してるけど、アセンブラでは
movl $1, 4(%esp)
movl $0, (%esp)
という風に引数を逆に処理してるのは、どういう意味があるの?ご教示お願いします
0667デフォルトの名無しさん
2008/06/20(金) 09:54:29gas の記法だろ。アセンブラによってオペランドを書く順番が違ってくるのさ
0668デフォルトの名無しさん
2008/06/20(金) 10:02:58C では良くあること.
0669デフォルトの名無しさん
2008/06/20(金) 10:05:04・スタックは数が減る方に向かって伸びる。
・その例でも引数1が %esp+0, 引数2が %esp+4 になってるでしょ?
・引数のポインタを取ったとき、スタック上の引数列が配列になるでしょ?
hoge(int foo, int bar) を例に取ると
int *p = &foo; によって
p[0] == foo
p[1] == bar
となる。
で、このことは、引数不定とか可変長引数を実装するときに
すごく都合がいい。スタックトップが必ず引数1になる。
K&Rの頃は引数不定がまかり通ってたし。
なお、>>666 の例では、%esp はあらかじめ減じられていると思われるため
movl $0, (%esp)
movl $1, 4(%esp)
のように引数順に処理することもできるが、コンパイラの都合上それをやっていない。
0670デフォルトの名無しさん
2008/06/20(金) 11:45:080671デフォルトの名無しさん
2008/06/20(金) 12:04:24Cの引数の評価順は特に決められていないので、コンパイラの都合で好きな順序で処理してよいわけだが、
たまたま逆順の方がコンパイラを作りやすかったとか、特に気にしないで作ったらたまたま逆順になったとか、
そんなとこだろうと思うよ
特に意味はないかと
0672デフォルトの名無しさん
2008/06/20(金) 12:12:48>>669
の述べているような理由などから、私が使っている処理系では引数がたまたま
決まっているということでいいんですか?
0673デフォルトの名無しさん
2008/06/20(金) 12:13:51引数がたまたま逆に処理されている
0674デフォルトの名無しさん
2008/06/20(金) 12:55:25いや単に右から左なだけで,逆順とか正順とか決まってないから
0675デフォルトの名無しさん
2008/06/20(金) 13:34:07フラグ見るだけで処理の終わりがわかる
0676デフォルトの名無しさん
2008/06/20(金) 15:03:55評価をしたいわけだ。
それと、可変長引数のことを考えると、Cの引数は右から左の順で積んだ
ほうが都合が良い、ということ。
0677デフォルトの名無しさん
2008/06/20(金) 18:12:47ってことですね。ありがとうございます。
0678デフォルトの名無しさん
2008/06/20(金) 18:21:36富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね
富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね
富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね
0679デフォルトの名無しさん
2008/06/20(金) 18:45:530680ヽ・´∀`・,,)っ━━━━━━┓
2008/06/20(金) 18:47:450681デフォルトの名無しさん
2008/06/20(金) 20:23:35普通の関数は右から左、
普通のメンバ関数は左から右、
可変長引数を持つメンバ関数は右から左、だな。
0682デフォルトの名無しさん
2008/06/20(金) 20:25:170683ヽ・´∀`・,,)っ━━━━━━┓
2008/06/20(金) 20:28:54まあ、他に無いっちゃないが
0684デフォルトの名無しさん
2008/06/20(金) 20:29:030685デフォルトの名無しさん
2008/06/20(金) 20:57:030686デフォルトの名無しさん
2008/06/20(金) 22:39:15奴がいるな。
0687デフォルトの名無しさん
2008/06/20(金) 22:48:480688デフォルトの名無しさん
2008/06/20(金) 22:49:28ごめん。まちがえてた。
0689デフォルトの名無しさん
2008/06/21(土) 00:59:530690デフォルトの名無しさん
2008/06/21(土) 01:07:38cmpi.w #$1234, D0
や
cmpi.l #$12345678, D0
と同等な事をA0に対しても行いたく思い、
cmpaを使ってみましたが上手くいきません。
なぜでしょうか?
0691デフォルトの名無しさん
2008/06/21(土) 08:33:30左から評価して、右から積んでも規約に違反はしてない。
評価した順にスタックに積んで行くほうが楽。
という「都合」が引数の評価とスタックに積む順序に影響しているってこと。
0692デフォルトの名無しさん
2008/06/21(土) 09:13:13エスパーはいないぞ!
もっと詳しく書け。
0693デフォルトの名無しさん
2008/06/21(土) 16:40:04スタックに積まれた引き数の配置は処理系で決まっている。
順番に詰まれるかどうかは分からない。
評価順序も決まっていない。
>>690
> 上手くいきません。
何をやって、どうなることを期待してて、どうなったかを書け。
0694690
2008/06/21(土) 17:07:42理由もなんとなくわかりました。
ありがとうございました。
0695690
2008/06/21(土) 17:15:55もう二度と来ません。
0697デフォルトの名無しさん
2008/06/21(土) 17:23:010699デフォルトの名無しさん
2008/06/21(土) 18:48:480700デフォルトの名無しさん
2008/06/21(土) 18:57:46構うな
0702690
2008/06/21(土) 20:47:380703デフォルトの名無しさん
2008/06/21(土) 22:33:55なんかかわいそうだな。
0704デフォルトの名無しさん
2008/06/23(月) 20:35:430705デフォルトの名無しさん
2008/06/24(火) 00:44:090707デフォルトの名無しさん
2008/06/25(水) 01:47:330708デフォルトの名無しさん
2008/06/25(水) 10:58:32数学板のking?
0709デフォルトの名無しさん
2008/06/26(木) 21:27:12数学板以外にもたまーに顔出してるよ、奴は
0710デフォルトの名無しさん
2008/06/30(月) 16:29:09VC++ Express 2008じゃだめ?なの?
0711デフォルトの名無しさん
2008/06/30(月) 16:53:44強制解凍してけば長いファイル名のが出てくるからそれを拡張子exeにリネーム
0712ヽ・´∀`・,,)っ━━━━━━┓
2008/06/30(月) 17:07:480713デフォルトの名無しさん
2008/06/30(月) 17:32:54thnx・・・thnx......
冷静に考えて
そうだ、ここは俊足なレスポンスを期待しちゃいけない、
と思い、
無い頭で考えて、
オーソドックスにプロンプトの指示に従い、
アンインストールをしたところで、
>>711発見 orz
あうぅぅぅ
0714デフォルトの名無しさん
2008/06/30(月) 17:35:230715デフォルトの名無しさん
2008/06/30(月) 17:41:44YASMどうよ?
0716デフォルトの名無しさん
2008/06/30(月) 19:20:57JWasm http://www.japheth.de/JWasm.html MASM v6/WASM互換 Open Watcomライセンス
0717デフォルトの名無しさん
2008/07/01(火) 08:54:17Jwasm: コマンドラインの引数など使い勝手がいいとは言い難い。
特にリンカは最悪で、設定ファイルが必要だとか訳が判らん。
結局、リンカだけ alink http://alink.sf.net/download.html と
そこにある win32.lib を使うことでバイナリ作成した。
その後に使った fasm http://flatassembler.net/ なら、
単体で実行バイナリまで生成することが判った。
記法も独特ではあるけども、ヘルパのインクルードが充実していて
あるAPIの挙動を確かめるようなテスト・ルーチンなんかをスクラッチするには
いい感じだと思った。
0718デフォルトの名無しさん
2008/07/01(火) 17:48:04あと、wlinkはなんでもできる強力なリンカだよ。libだけ用意すれば(.aでも.libでも食べてくれる)
jwasm .\samples\windows1
wlink FORM Windows NT runtime CON F windows1 L kernel32.lib
みたいな感じでいける筈。
たしかwatcom本体の方にMSのlink互換の奴(ラッパー?)が入ってる筈だから
それの差し替え用なのかもね?
0719デフォルトの名無しさん
2008/07/01(火) 19:23:34jwasm .\samples\windows3
wlink FORM Windows NT F windows3 L kernel32.lib,user32.lib
でバイナリは出来るんだけと、これって豆腐窓が出れば成功なのかな?
窓プログラムはソース見てもいまいちわからないorz
0720デフォルトの名無しさん
2008/07/02(水) 19:58:28それとも元々こんなもんなの? 共通ソースってどうやったら書けるんだろうこれ?
0721デフォルトの名無しさん
2008/07/02(水) 21:02:440722デフォルトの名無しさん
2008/07/02(水) 21:30:44ローカルラベルとか使わなきゃ出来るんだと思ってた。
0723デフォルトの名無しさん
2008/07/02(水) 22:30:47TASMのMASM5.1互換モードだかなんだかを使っていた記憶がある
0724デフォルトの名無しさん
2008/07/05(土) 04:50:49MOV EDX,exe.00666666
00666666 は XOR AL,31 となっています
近くに1〜31範囲外の定数ビットシフトというコメントが多く使われているのですが
どのような処理をしているのかわかりますでしょうか?
0725デフォルトの名無しさん
2008/07/05(土) 05:19:480726ヽ・´∀`・,,)っ━━━━━━┓
2008/07/05(土) 15:53:04その命令らしきものの後にretなりjmpがある?
0727724
2008/07/06(日) 02:01:1800666666 はrdataセクションでしたorz
MOV EDX,exe.00666666のASCII"41C6tvejeNiWj・・・・"の中身が格納されてるだけでした
>>726
MOV EDX,exe.00666666
SUB EDX,EAX
CMP EDX,ESI
JNB SHORT exe.0050175C
0050175C TEST EDI,EDI
0050175E JNZ SHORT exe.00501764
00501769 MOV EAX,66666667
0050176E IMUL EDX
この↓にもジャンプ命令がたくさんあります。リターンはずっと後にでてきます。
0728デフォルトの名無しさん
2008/07/10(木) 07:03:0700401239 |. B9 64000000 MOV ECX,64
0040123E |. F7E1 MUL ECX
00401240 |. 83F8 00 CMP EAX,0
00401243 |. 75 06 JNZ SHORT xxx.0040124B
00401245 |. B8 01000000 MOV EAX,1
0040124A |. C3 RETN
0040124B |> 33C0 XOR EAX,EAX
0040124D \. C3 RETN
関数の末尾のコピペなんですが、
アドレス0x00401239時点でのEAXが0以外で、この関数が1を返す事はあり得ますか?
ECX(=0x64)を掛けている理由がよく分からないので、そういう可能性があるのかと思いまして。
0729デフォルトの名無しさん
2008/07/10(木) 10:26:350730デフォルトの名無しさん
2008/07/10(木) 16:44:24単なる難読化だろw
0731デフォルトの名無しさん
2008/07/11(金) 04:23:03MOV DWORD PTR DS:[ESI],00400000
例えば、00400000にはアドレスが入っています。この場合、00400000を移動するのか
格納されているアドレスを移動するのか、どちらでしょうか?
0732デフォルトの名無しさん
2008/07/11(金) 19:34:23*ESI = 400000;
0733デフォルトの名無しさん
2008/07/11(金) 23:41:52// ESIはポインタ
TYPE_T *ESI;
ESI = 0x400000;
って書いた方が
0734デフォルトの名無しさん
2008/07/11(金) 23:48:37ポインタって言ってると、わかり辛い。
0735デフォルトの名無しさん
2008/07/12(土) 00:19:54セグメントアドレスがDSの値でオフセットアドレスがESIの値なメモリ領域に十進数の400000を入れているように見える
0736デフォルトの名無しさん
2008/07/12(土) 10:02:54DWORD* ESI;
*ESI = 0x400000;
// でええんでないか?
0737デフォルトの名無しさん
2008/07/12(土) 10:42:06ESIにデータセグメントのアドレス00400000を示しているということですね
ではそのままなら[ESI+8]は00400008でよいのですか?
0738デフォルトの名無しさん
2008/07/12(土) 11:28:25だめ
0739デフォルトの名無しさん
2008/07/12(土) 11:47:500740デフォルトの名無しさん
2008/07/13(日) 07:45:000741デフォルトの名無しさん
2008/07/14(月) 18:39:18コイツも使ってやってね(Z80 表記)。
CP 0AH
CCF
ADC 30H
DAA
0742デフォルトの名無しさん
2008/07/17(木) 13:12:010743デフォルトの名無しさん
2008/07/18(金) 00:00:59質問です。アセンブラの除算は、具体的に どのような処理をしているのでしょうか。
「ビット レベルの計算」のイメージができません。
また、除算は ほかの計算と比較して、クロック数を消費するとインターネットに書いてありました。
それが なぜなのか、理解できていません。
おそらく、どのような計算をしているかを把握できれば、理解できるとおもうのですが。
インターネットで「除算 アセンブラ div 」などで検索しましたが、求めている情報が入手できませんでした。
そのため、質問させていただきます。
また、読むべきサイト、書籍などがあれば、教えていただければ幸いです。
よろしく お願い致します。
0744デフォルトの名無しさん
2008/07/18(金) 00:06:580745デフォルトの名無しさん
2008/07/18(金) 00:10:28つ http://journal.mycom.co.jp/column/architecture/
ここを読んでまるっきり理解できなきゃ筋がないと見なす。
0746デフォルトの名無しさん
2008/07/18(金) 00:40:01論理回路の基礎は知っているので、何とか理解できそうです。
0747デフォルトの名無しさん
2008/07/18(金) 05:25:030748デフォルトの名無しさん
2008/07/18(金) 07:05:380749デフォルトの名無しさん
2008/07/18(金) 09:00:46筆算ってこたーない。。
0750デフォルトの名無しさん
2008/07/18(金) 09:51:37マジなんか面白く上げ足とっただけか知らんが、イメージは筆算だ。
掛け算も同じ。
0751デフォルトの名無しさん
2008/07/18(金) 09:56:380752デフォルトの名無しさん
2008/07/18(金) 10:30:080753デフォルトの名無しさん
2008/07/18(金) 11:23:14筆算にモデルもクソもあるか JC
0754デフォルトの名無しさん
2008/07/18(金) 11:40:040755デフォルトの名無しさん
2008/07/18(金) 16:51:240756デフォルトの名無しさん
2008/07/18(金) 18:43:28っていうか専門スレないの?
0757デフォルトの名無しさん
2008/07/18(金) 18:51:470758デフォルトの名無しさん
2008/07/18(金) 19:26:111バイトは8ビットだろ・・・。
0759デフォルトの名無しさん
2008/07/18(金) 19:32:520760デフォルトの名無しさん
2008/07/18(金) 19:38:38決まってるわけじゃないよ。多いだけ。
0761デフォルトの名無しさん
2008/07/18(金) 22:23:51このスレの住人ならそんなこと百も承知だろう
0762デフォルトの名無しさん
2008/07/18(金) 22:36:070763デフォルトの名無しさん
2008/07/18(金) 22:54:270764デフォルトの名無しさん
2008/07/18(金) 23:21:16とりあえず1ビット右シフトを考えてみて。
0765デフォルトの名無しさん
2008/07/19(土) 02:29:360766デフォルトの名無しさん
2008/07/19(土) 04:10:28自作?
0767デフォルトの名無しさん
2008/07/19(土) 06:11:10マスタリングTCP/IPでは明確にするためにoctetを使う、みたいなのが書いてあった
ちなみに1hydeは156cmで固定
学生の知識だから合ってるか分かんないけど
0768デフォルトの名無しさん
2008/07/19(土) 09:59:510769デフォルトの名無しさん
2008/07/19(土) 12:53:32156cmをどこで習うんだよ!
0770デフォルトの名無しさん
2008/07/19(土) 13:36:1034÷10
=0x22/0x0a
=100010b/1010b
011
────
1010)100010
1010
───
01110
1010
──
0100
=11bあまり100b
=3あまり4
0771デフォルトの名無しさん
2008/07/20(日) 10:47:02http://www.dotup.org/uploda/www.dotup.org2018.txt
これを元にメモリ上に格納された数値の最大値を見つけるサブルーチンMAXを作れ。見つけた最大値はメモリ上のANSの番地へ格納すること。
どなたかボスケテ
0772デフォルトの名無しさん
2008/07/20(日) 10:55:430773デフォルトの名無しさん
2008/07/20(日) 10:58:500774デフォルトの名無しさん
2008/07/20(日) 11:06:58算術系の命令がなくてアドレスの計算命令で代用するのが
ポイントだったのがよみがえった。
0775デフォルトの名無しさん
2008/07/20(日) 12:53:420776デフォルトの名無しさん
2008/07/20(日) 13:29:090777デフォルトの名無しさん
2008/07/20(日) 13:53:14即値の加減算命令がないからLEAでなんとかすれ。
という話ですか。
つうか即値扱えるのってLEAだけしかないんだっけ?
>>776
内部レジスタつうか命令デコーダがものすげーシンプルになる命令セット。
だった気がする。
その割にGRが5個とか半端なのがよくわからん。
0778デフォルトの名無しさん
2008/07/20(日) 15:36:31そなものでレジスタ間の演算がわりとめんどい。
LAD GR1,0,GR0 // MOV R1, R0
LAD GR0,1,GR0 // ADD R0, 1
LD GR1,0,GR0 // MOV R1, [R0]
比較演算は代替手段がないので片方を必ずメモリに落とす必要がある。
0779デフォルトの名無しさん
2008/07/20(日) 16:04:320780デフォルトの名無しさん
2008/07/20(日) 16:36:250781デフォルトの名無しさん
2008/07/20(日) 20:25:290782デフォルトの名無しさん
2008/07/20(日) 20:35:590783デフォルトの名無しさん
2008/07/21(月) 00:20:30しかし遡るなら6809なんて中途半端なんじゃなくて
PDP-8とかHITAC-10とかもっと昔の制御用コンピュータだろ
0784デフォルトの名無しさん
2008/07/21(月) 01:00:460785デフォルトの名無しさん
2008/07/22(火) 01:06:43いま、以下のような命令があるとします。
BRA _main
この命令ではmainの前に_(アンダーバー)が付いています。
この命令と、次の命令
BRA main
では、どのような違いがあるのでしょうか?
0786デフォルトの名無しさん
2008/07/22(火) 01:13:100787デフォルトの名無しさん
2008/07/22(火) 02:26:35「キミの使っているCコンパイラが扱うオブジェクトフォーマットの仕様は
関数名の前にアンダースコア(_)を付ける仕様だった。」
C言語なら必ず付くわけでもなく、アセンブリ言語だから必ず_から始まらなければ
ならないわけでもなく、何か特殊な効果を狙って_を付けた表記にしているわけでも
ない。
0788デフォルトの名無しさん
2008/07/22(火) 12:59:27BRA A
ってコードを吐くと、BRA命令のオペランドにAレジスタは指定出来ないとか、ラベルAは不正な名前、とかのエラーになるかもしれん。
なので、なにかしら法則を決めてアセンブラの予約語とぶつからないようにしてあげる必要が有る。
ということで _ をつける規則を採用したコンパイラがそこにある、ってわけだ。
0789デフォルトの名無しさん
2008/07/23(水) 01:31:36が、ソースを見てもさっぱりです。
命令とかを解説しているサイトや参考書ってありません?
0790デフォルトの名無しさん
2008/07/23(水) 08:46:31z/OSだったらIBMに聞けよ :-)
0791デフォルトの名無しさん
2008/07/25(金) 12:18:080792デフォルトの名無しさん
2008/07/25(金) 21:14:48CDSD-STDで試してみたんだけど、妙なところでエラーが出た。
これなんでだか誰かわかります?
他にMWSAでも試そうかと思ったけど、あれコマンドラインじゃシンボル使えなかったんだな。
0793デフォルトの名無しさん
2008/07/27(日) 17:39:27BYTE PTR [EAX+8]なら分かるのですが。
何故セグメントレジスタが出てくるのか分かりません。
また、MASMの良書も教えていただければ幸いです。
よろしくお願いいたします。
0794デフォルトの名無しさん
2008/07/27(日) 17:42:020795デフォルトの名無しさん
2008/07/27(日) 18:15:30これを本当に理解していれば、DS:も理解出来るはず。
0796デフォルトの名無しさん
2008/07/27(日) 18:47:30リニアアドレスを算出するには
セグメント + オフセット
だけど、どの『セグメント』を使うのかはCPUが暗黙の内に決めてる。
例えば、マシン語命令はCSで示すセグメントからフェッチしてくる・・とか。
でも>>793の上の命令のように、『セグメント:オフセット』と明示的に
セグメントを指定すると、暗黙のセグメント指定をそのセグメントで『上書き』出来る。
「セグメント オーバライド」辺りでググれ。
0797デフォルトの名無しさん
2008/07/27(日) 19:03:2986とレジスタ名前が似ているだけかもしれんぞ。
0798デフォルトの名無しさん
2008/07/27(日) 20:38:450799デフォルトの名無しさん
2008/07/27(日) 21:17:23なんとなく分かった気がします。
根本的なことが分かっていない気がするのではじめからきちんと勉強したいのですが
なにか良いサイト、書籍などありませんでしょうか?
0800デフォルトの名無しさん
2008/07/27(日) 21:45:55Intel限定で良いなら「はじめて読む486」はどうよ?
0801デフォルトの名無しさん
2008/07/27(日) 21:47:48いや、これはプロテクトモード入門でしょうね。リアルモードでの経験+Cの経験があればOKですが。
0802デフォルトの名無しさん
2008/07/27(日) 22:07:58図解コンピュータシリーズの「図解 32ビットマイクロコンピュータ80386の使い方」とかも良いね。
0803デフォルトの名無しさん
2008/07/28(月) 05:47:39皆さんどうもありがとうございました。
0804デフォルトの名無しさん
2008/07/28(月) 13:47:50最悪英語でもいいです。
0805デフォルトの名無しさん
2008/07/28(月) 14:26:59http://www.intel.co.jp/jp/download/index.htm
0806デフォルトの名無しさん
2008/07/28(月) 16:11:58ユーザーモードだけでいいかでアプローチは変わってくる。
ユーザーモードだけなら、cl /FA でコンパイルして、
そのソースを読んだり変更してアセンブルするといいかも。
生っぽい機械語がいいならリアルモードがわかりやすいが今更DOSもないよな。
0807デフォルトの名無しさん
2008/07/29(火) 20:48:31アセンブラ(GAS/NASM/MASMなど)をご教授いただければ幸いです。
・開発も実行もx86環境。
・WindowsとLinux環境、両方を利用しており、WindowsにはCygwinが導入されている。
・出来るだけ両方の環境で学習したく、特定環境に依存するアセンブラ本体・文法は避けたい。
早い話、「これから始めれば無難」というものをお願いします。
ちなみに、手元にはMASMベースで解説してある以下の書籍があります。
『高級言語プログラマのためのアセンブラ入門 林晴比古著 ソフトバンククリエイティブ刊』
0808デフォルトの名無しさん
2008/07/29(火) 21:14:26MASM互換のアセンブラで一体なにするつもりなんだろう?
0809デフォルトの名無しさん
2008/07/29(火) 21:39:33アセンブラってのはどうせバイナリと紙一重なんだから
あまり特定の処理系に依存してどうこう、というのは少ない。
(まぁ技巧的なマクロはそれなりに違うけどね)
むしろ、Linux ならシステムコールとか、gccの関数インタフェースとか
そこらへんがわかる資料をネットで見つけることが大事じゃないかと思う。
Cygwinでいい本は知らない。
GAS は gcc に -S オプションを付けて出力させたものが参考になる。
NASM は付属のドキュメントを読んで参考にできるのなら使える。
0810デフォルトの名無しさん
2008/07/29(火) 22:15:450811デフォルトの名無しさん
2008/07/29(火) 22:28:17このあたりの比較を見ていたら、オペランドの書き方などアセンブラ依存の文法がありそうだったので、
どれから覚えた方がいいかな、という意図の質問でした。
>>809さんのレスを見ると、Cなどの他の上級言語の一部にアセンブリを使い
特定OS上で動作するアプリケーション開発レベルの話だと思いましたが、
IPL開発などのレベルではあまり関係ないような気もしました。
>>807にてWindowsやLinuxと書いたのは、あくまでも開発環境としてのOSということで
理解頂ければ幸いです。分かりづらい質問を失礼しました。
「GAS、NASM、MASM、入門者に勧めるとしたらどれ?」ということでひとつ・・・
0812デフォルトの名無しさん
2008/07/29(火) 22:33:35別にどっちでもいいが、たまにコンパイラの出力読むときによく使うコンパイラが吐くアセンブリソース読めたほうがいい程度の話で。
0813デフォルトの名無しさん
2008/07/29(火) 22:35:36なるほど、専らgcc環境なのでgasを使ってみようと思います。
的確なご指摘、ありがとうございました。
0814デフォルトの名無しさん
2008/07/29(火) 22:43:450815デフォルトの名無しさん
2008/07/29(火) 22:59:420816デフォルトの名無しさん
2008/07/31(木) 19:45:120817デフォルトの名無しさん
2008/07/31(木) 19:49:470818デフォルトの名無しさん
2008/08/02(土) 00:15:080819デフォルトの名無しさん
2008/08/02(土) 00:42:19プリプロセッサ駆使すれば出来るんだろうか?
0820デフォルトの名無しさん
2008/08/02(土) 04:34:23実際にやろうとは思わんが。
0821デフォルトの名無しさん
2008/08/02(土) 08:47:29jmp命令とか出てきたらその都度、jmp先アドレスに飛びながらバイナリ読んでいかなきゃだめ?
試しに某exeを頭から順番に読み込んでみたら、jmp先アドレスが命令の先頭じゃなくて途中をさしちゃってるんだけども・・
別の逆汗でも同じ結果になるんだけど、難読化かなにか?
0822デフォルトの名無しさん
2008/08/02(土) 09:31:32命令の途中にデータ埋め込んでるだけだろ。
jmp main
msg db 'hello world', 0dh, 0ah, '$'
main:
mov dx, offset msg
0823デフォルトの名無しさん
2008/08/02(土) 09:52:43やってみておかしかったら、JMP 先の整合を付けてみる、でよい。たいていは
0824デフォルトの名無しさん
2008/08/02(土) 10:59:490825デフォルトの名無しさん
2008/08/02(土) 20:15:55WIN32N.INCを使ってAPIの時間を取得しようとして
section .text
global start
start:
move eax,my_time
push eax
call GetLocalTimeA
section .data
my_time:
ISTRUC SYSTEMTIME
at SYSTEMTIME.wYear,dw 0
at SYSTEMTIME.wMonth,dw 0
at SYSTEMTIME.wDayOfWeek,dw 0
at SYSTEMTIME.wDay,dw 0
at SYSTEMTIME.wHour,dw 0
at SYSTEMTIME.wMinute,dw 0
at SYSTEMTIME.wSecond,dw 0
at SYSTEMTIME.wMilliseconds,dw 0
IEND
みたいな感じで書いたのですが、
mov eax,my_time
のところが error: parser: instruction expected
となってしまいました。
何が問題で、どうすれば解決できるのでしょうか?
0826デフォルトの名無しさん
2008/08/02(土) 20:23:230827デフォルトの名無しさん
2008/08/02(土) 23:10:10ありがとうございます
私って馬鹿ですね
0828デフォルトの名無しさん
2008/08/02(土) 23:47:58命令の途中?
俺はIDAでしてる
0829デフォルトの名無しさん
2008/09/09(火) 12:04:28それとも、独習アセンブラや>>68の本のほうが良いのでしょうか?
0830デフォルトの名無しさん
2008/09/09(火) 12:20:560831829
2008/09/09(火) 12:33:160832デフォルトの名無しさん
2008/09/09(火) 13:05:58いい教科書も無いと思う。
0833デフォルトの名無しさん
2008/09/09(火) 13:07:07C言語のような決まりがあるわけではない
MASM/NASM/TASM/GASなど色々あるからそれに合う本を探せ
0835デフォルトの名無しさん
2008/09/09(火) 13:42:15見たいって程度ならCASLで十分じゃないか?
資料も豊富だし
0836デフォルトの名無しさん
2008/09/09(火) 14:20:410837デフォルトの名無しさん
2008/09/09(火) 14:29:480838デフォルトの名無しさん
2008/09/09(火) 23:45:31文法って、
> 命令 レジスタ,メモリ;
ぐらいじゃない?
命令のこと?
0839デフォルトの名無しさん
2008/09/10(水) 02:09:47正直セグメント絡みの方言が色々あってわけわからなくね?
0840デフォルトの名無しさん
2008/09/10(水) 08:18:25即値やレジスタ名の記法とか、
いろいろ違うけど?
ソースとデスティネーションの順序が違うというのもあるか。
0841デフォルトの名無しさん
2008/09/10(水) 08:44:360842デフォルトの名無しさん
2008/09/10(水) 09:03:590843デフォルトの名無しさん
2008/09/10(水) 16:31:58全然
0844デフォルトの名無しさん
2008/09/10(水) 17:03:23一体いくつのアセンブラ使えるのさ?
0845デフォルトの名無しさん
2008/09/11(木) 05:55:11セグメントなんてもう10年近く意識したことないが。
もうDOSの.EXEなんて作れねえな。
>>840
違うCPUだと思えば別に問題ない。
0846デフォルトの名無しさん
2008/09/11(木) 09:38:500847デフォルトの名無しさん
2008/09/11(木) 13:44:130848デフォルトの名無しさん
2008/09/17(水) 02:06:26アセンブラて何
0849デフォルトの名無しさん
2008/09/17(水) 05:09:100850デフォルトの名無しさん
2008/09/17(水) 07:44:450851デフォルトの名無しさん
2008/09/17(水) 10:49:100852デフォルトの名無しさん
2008/09/17(水) 13:30:160853デフォルトの名無しさん
2008/09/17(水) 14:03:390854デフォルトの名無しさん
2008/09/17(水) 21:58:550855デフォルトの名無しさん
2008/09/17(水) 22:45:17仕事内容: アセンブラ プログラミング
※コンピュータの命令を並べていくだけの単純なお仕事です。
応募資格:
・経験不問
・学歴不問
・未経験者歓迎
・髪型自由
・フリーター歓迎
みたいな?
でもこれだけ見ると単純にネタ扱いできない現実味がw
0856デフォルトの名無しさん
2008/09/17(水) 23:17:06海外アウトソーシングとか実はそんなもんだったりしないよね?
0857デフォルトの名無しさん
2008/09/18(木) 01:04:33C言語とかをさらに訳の分からん言葉に翻訳する仕事なんでしょ?
0858デフォルトの名無しさん
2008/09/18(木) 01:48:150859デフォルトの名無しさん
2008/09/18(木) 02:20:330860デフォルトの名無しさん
2008/09/18(木) 07:15:130861デフォルトの名無しさん
2008/09/18(木) 07:44:25Cコンパイラのようにはアセンブラが最適化することは通常無い。
但し、実際には使えないインストラクションを他のインストラクションに置き換えたり
相当するより速いインストラクションに置き換えたりするケースはある。
勿論、プログラマが自身で最適化する余地はいくらでもある。
0862デフォルトの名無しさん
2008/09/18(木) 13:28:400863,,・´∀`・,,)っ-○●◎
2008/09/20(土) 02:50:260864デフォルトの名無しさん
2008/09/20(土) 13:55:31命令の近くにデータを置くとか
switchので等間隔に処理を並べて分岐とか今までのCPUだって出来るわけで
ただの命令長削減以外の何物でもないと思う。
0865デフォルトの名無しさん
2008/09/22(月) 19:01:04アブラカタブラアセンブラ
0866デフォルトの名無しさん
2008/09/22(月) 19:01:35j規制かいじょされてるよー
0867デフォルトの名無しさん
2008/09/23(火) 12:08:55DLL再配置の手間が省けるってことはないの?
0868,,・´∀`・,,)っ-○◎●
2008/09/23(火) 12:42:52あれってもともと動的生成じゃん
0869デフォルトの名無しさん
2008/09/26(金) 22:20:16単純に与えられた回数分インクリメントして総和を求めるプログラムで時間をみつもろうとしました
カウンタのインクリメント分と結果となる値のインクリメント分でADDが2回、ジャンプが1回
どれも最小の1クロックで処理できるとすると1ループで4クロック
でこれをathlon64 3000+(2G)のCPUで10^9回まわすとすると
4*10^9 / 2.0*1024^3 = 1.862645149230957と概算を行いました
しかし実際にtimeを使って10^9, 10*10^9の場合を計った結果は1.00と1.42
そこから求めるとかかった時間は0.42/9=0.046..
ディスアセンブルしてもADD*2,CMP,JNEの繰り返しになってました
どう考えても1クロックの間に1以上の命令が実行されてるわけなんですが
こういう動作が前提だとするとどうやって実行時間を見積もればいいんでしょうか?
0870デフォルトの名無しさん
2008/09/26(金) 22:24:330871デフォルトの名無しさん
2008/09/26(金) 22:52:15ADD命令は0.5クロックで、ALUは2器載ってるらしいから、
1クロックでADDを4つ実行できることになるな
0872,,・´∀`・,,)っ-○◎●
2008/09/26(金) 22:53:59ニヤニヤ
0873デフォルトの名無しさん
2008/09/26(金) 23:00:060874デフォルトの名無しさん
2008/09/26(金) 23:07:290875,,・´∀`・,,)っ-○◎●
2008/09/27(土) 02:01:31日本語資料じたいが相当旧いし
0876デフォルトの名無しさん
2008/09/27(土) 03:03:13本書の対象となるIA-32プロセッサの中にcore2duoとかの文字が無い。
やっぱ最新版は英語じゃないとだめなのか。
0877デフォルトの名無しさん
2008/09/27(土) 07:33:50いやあでも、こうやって一つ賢くなれるんだからいいんじゃねーの?
それより見積もりも出来ないで、処理がハードウェアの能力と釣り合っているかを考えない方が大馬鹿者。
現代のCPUで処理に必要なクロック数を机上で計算するのが難しいとしても
プロファイル取ってIPCを見たりはするし、それによって局所的にどの命令が
ボトルネックかを考える事もある。
机上という静的な方から攻めるか、プロファイルという動的な方から攻めるかの違いで、たどり着くところは一緒。
0878,,・´∀`・,,)っ-○◎●
2008/09/27(土) 08:43:460879デフォルトの名無しさん
2008/10/01(水) 16:50:24インラインアセンブラでcmp eax,cx と書いてエラーになったから助かった。
imul ebx,cx はimul ebx,ecx にコンパイルされてエラーになっておらず、
危うくハマるところだった。
0880,,・´∀`・,,)っ-○◎●
2008/10/02(木) 00:41:470881デフォルトの名無しさん
2008/10/22(水) 14:04:06教えてください。
0882デフォルトの名無しさん
2008/10/22(水) 14:42:540883デフォルトの名無しさん
2008/10/23(木) 01:42:120884デフォルトの名無しさん
2008/10/23(木) 11:41:49LD R0,=F'00F0' とか書くと、フルワードの 000000F0h という定数がどこかに作られて
それをアクセスするアドレッシングが命令に組み込まれる。
0885デフォルトの名無しさん
2008/10/24(金) 21:19:28(1) [80A1h] ← (B+C)*2-[80A0h]*3 オーバーフローは考慮不要
(2) [80B3h] [80B2h] ←[80B0h] +[80B1h] *2 和を16ビットで求める(分岐命令を使用してもよい)
(3) A ← B ・C + H ・L (論理演算)
これらを実行するプログラムを教えてください。
よろしくお願いします
0886デフォルトの名無しさん
2008/10/24(金) 23:19:24(3)
170o
241o
107o
174o
245o
260o
0887デフォルトの名無しさん
2008/10/24(金) 23:29:15(1)
041o 0a0h 80h
170o
201o
207o
226o
226o
226o
043o
167o
0888デフォルトの名無しさん
2008/10/24(金) 23:35:13(2)
052o 0b0h 80h
051o
042o 0b2h 80h
0889デフォルトの名無しさん
2008/10/25(土) 00:28:09ありがとうございます。
すごくありがたいのですが、私の知識不足のせいで思っていた結果ではありませんでした。
.8085
ASEG
ORG 8000h
LDA D1
LXI H,D2
のような形で、もう一度教えてもらえませんか?
頼ってばかりで申し訳ないのですが、よろしくお願いします
0890デフォルトの名無しさん
2008/10/25(土) 01:29:310891デフォルトの名無しさん
2008/10/25(土) 04:55:46CSEG
;(1) [80A1h] ← (B+C)*2-[80A0h]*3 オーバーフローは考慮不要
0000 78 MOV A,B
0001 81 ADD C ; (B+C)
0002 87 ADD A ; *2
0003 F5 PUSH PSW ; を退避
0004 21A080 LXI H,80A0h
0007 7E MOV A,M
0008 86 ADD M
0009 86 ADD M ; *3
000A 6F MOV L,A ; をLに
000B F1 POP PSW ; (B+C)*2を復元
000C 95 SUB L ; 引き算
000D 32A180 STA 80A1h ; 結果をストア
0892デフォルトの名無しさん
2008/10/25(土) 04:57:030010 3AB180 LDA 80B1h
0013 6F MOV L,A
0014 2600 MVI H,0
0016 29 DAD H ; [80B1h] *2
0017 11B080 LXI D,80B0h
001A 1A LDAX D
001B 4F MOV C,A
001C 0600 MVI B,0 ; [80B0h]の内容を16bitに
001E 09 DAD B ; HLに16bitで加算
001F 22B280 SHLD 80B2h ; 結果をストア
0893デフォルトの名無しさん
2008/10/25(土) 04:58:520022 78 MOV A,B
0023 A1 ANA C
0024 5F MOV E,A ; B・Cを退避
0025 7C MOV A,H
0026 A5 ANA L ; H・L
0027 B3 ORA E ; H・L+B・C
0028 END
最後の行は ADD E かもしらん。論理演算とのことでORAにしといた。
0894デフォルトの名無しさん
2008/10/25(土) 09:48:110895デフォルトの名無しさん
2008/10/25(土) 15:56:43助かりました
0896デフォルトの名無しさん
2008/10/26(日) 16:07:01(2)のようにHLに結果を保持する手法のほうが一般的です。
最終結果が8bitでいいなら、Lレジスタのほうだけを使えばいいので。
0897デフォルトの名無しさん
2008/10/29(水) 03:16:05KITの学生のお前にひとつ忠告しておくが、
過去ログくらい見ろwwwwwwwww
特に↓
>>137-167
今更忠告してももう遅いかもしれねぇけどな。レポートの提出は明日だっけ?笑
0898デフォルトの名無しさん
2008/10/29(水) 03:40:040899デフォルトの名無しさん
2008/10/29(水) 08:29:19いまからレポートやろうと思ったらちょうど良いものみつけたーーーーーーー
さんきゅーーーーーーーー
0900デフォルトの名無しさん
2008/10/29(水) 11:02:570901デフォルトの名無しさん
2008/10/29(水) 20:17:42さすがFランク
0902デフォルトの名無しさん
2008/10/29(水) 20:22:040903デフォルトの名無しさん
2008/10/29(水) 22:15:47レポート提出はできたのか?
落第しないよう頑張れよwwwwwwwwwwwwwwwww
0905デフォルトの名無しさん
2008/10/30(木) 10:12:17お約束のようにこのスレに質問があるのはどうかと思うが
0906896
2008/10/30(木) 13:29:330907デフォルトの名無しさん
2008/10/30(木) 16:28:53>>簡単な数字や記号を記憶することが苦手だったとされる。ある新聞社のインタビューの中で、光速度の数値を答えられず、記者から揶揄されると「本やノートに書いてあることをどうして憶えておかなければならないのかね?」とやりかえしたという。
KITの学生曰く「ネットで簡単に教えてもらえることをどうして自分で考えなければならないのかね?」ってとこだな。
KITの学生はアインシュタインより進んでるってことだ、多分。
0908デフォルトの名無しさん
2008/10/30(木) 16:38:58ネットで教えてもらうには数分〜数日かかるわけで、
そのタイムロスが許容範囲かどうかってことだ、多分。
0909デフォルトの名無しさん
2008/10/30(木) 16:46:39自力で解こうにも数分〜数日かけても解答を導き出せない、
となるともう誰かに教えを乞うか潔く落第するしかないもんな。
0910デフォルトの名無しさん
2008/10/30(木) 17:20:530911881
2008/10/30(木) 18:07:46そのまま定数を書けばいいのに=をつける理由が分かりませんでした。
0912881
2008/10/30(木) 18:10:41ちなみにこの問題やってます。難しい。
0913デフォルトの名無しさん
2008/10/30(木) 18:18:37CASLの場合、オペランドに整数を書くとそれはアドレスを指示したことになる。
=は即値の印。
0914881
2008/10/30(木) 18:33:430915_
2008/11/02(日) 22:27:39;---------------------
DATA SEGMENT
MYDT1 DB 0
MYDT2 DW 0
MYDT3 DD 0
MYADRS DD MYDT3
DATA ENDS
;---------------------
; 環境は、8086 + MASMです。
上記の場合、MYADRSの値として、
0x00000000 が設定されているのでしょうか?
それともMYDT3のアドレス値が
設定されているのでしょうか?
私は0x00000000だと思っていたのですが、
どうもアドレス値が設定されているようです。
上記の場合に、LDS命令(LDS AX, MYADRS)を実行したところ、
AXには、MYDTのオフセットらしき値(0x0003)が設定されていました。
ご教示の程、宜しくお願いします。
0916デフォルトの名無しさん
2008/11/03(月) 00:16:46むしろなんで0x00000000だと思ったのかが疑問。
多分ラベルの理解が間違ってる。
0917デフォルトの名無しさん
2008/11/03(月) 07:12:040918デフォルトの名無しさん
2008/11/03(月) 19:35:05スイッチデータが80HとなったときLEDのビットが7点滅する
プログラムを作る場合は、どうしたら良いか教えて下さい!
0919デフォルトの名無しさん
2008/11/03(月) 19:36:240920デフォルトの名無しさん
2008/11/03(月) 21:48:41IOの問題のポートからデータ(8ビットですか)をよみこみ、そのまま別の問題のポートに書き込む、って感じかな?
それともメモリマップドかな?ハーバードアーキかな?
ハードの仕様をどこぞにアップしてもらえれば、回答がある、かもしれません。
0921デフォルトの名無しさん
2008/11/03(月) 22:16:50そのレベルのアーキテクチャが直接書くコードに影響与えられたらたまらん
0922デフォルトの名無しさん
2008/11/03(月) 23:19:18というより、そういうハードにベッタリ依存するようなコピペ馬鹿の>>918の質問が不適切
0923デフォルトの名無しさん
2008/11/03(月) 23:27:32ん、それもそですね。
0924デフォルトの名無しさん
2008/11/03(月) 23:45:54質問の仕方からすると本人もまったく理解してないようだけど
0925デフォルトの名無しさん
2008/11/04(火) 00:16:15え?z80 じゃないのですか? 8085 って学習用として定番なんでしょうか?
0926デフォルトの名無しさん
2008/11/04(火) 00:20:19分からないならその前段階を質問しよう
理解してない人が下手に端折ると重要な情報が抜けるから勘でしか答えられん
よほど切羽詰ってるならプリントに書いてあること丸上げしてくれたら課題解いてあげられるかもしれんが
0927デフォルトの名無しさん
2008/11/04(火) 00:20:51いや、単に最近8085の宿題教えて君が発生していたからだと思う。
0928デフォルトの名無しさん
2008/11/04(火) 00:27:43そういうのが好きな人なら10歳くらいでも価値があるお題だと思いますが、とてもみんなにすすめられるものではない、というきが。
0929デフォルトの名無しさん
2008/11/04(火) 02:18:03一般的に定番とは言い難いが、どこぞで課題機材に使ってるせいか
定期的に>>885みたいなのが湧くだけ
0930デフォルトの名無しさん
2008/11/04(火) 03:27:54間違って買いすぎたりしたのかな?
0931デフォルトの名無しさん
2008/11/04(火) 07:22:21代々使い回してるんでは
0932デフォルトの名無しさん
2008/11/04(火) 10:05:160933デフォルトの名無しさん
2008/11/04(火) 11:06:56昔、初歩のラジオでやってた(すでに386がこの世にある時代に)マイコン講座の
連載でも確か8085だった気がする。
0934デフォルトの名無しさん
2008/11/04(火) 11:16:390935デフォルトの名無しさん
2008/11/04(火) 11:34:360936デフォルトの名無しさん
2008/11/04(火) 13:18:190937デフォルトの名無しさん
2008/11/04(火) 13:30:080938デフォルトの名無しさん
2008/11/04(火) 19:36:38初歩のラジオで、8085 の記事はありましたっけ。
私は 1979/4 から購読していましたが、8080 か z80 しか記憶にありません。
0939_
2008/11/05(水) 00:26:20おっしゃるとおりです。
「Cユーザのための実践アセンブラ」という本や、
「x86アセンブラ入門」といった本に、
その辺の説明がありました。
(それまで読んでいた「高級言語プログラマのためのアセンブラ入門」
という本には説明がありませんでした。)
>>917
ありがとうございます。
ちなみに「はじめて読むMASM」という本だと、
MYDT1 DW 1234H
MYDT2 DW OFFSET MYDT1 ; OFFSETをつける。
また、「Cユーザのための実践アセンブラ」
という本に以下の説明がありました。
DWの右側にラベルを指定すると、ラベルのオフセット値(2バイト)が設定される。
DDの右側にラベルを指定すると、ラベルのセグメント値+オフセット値(計4バイト)が設定される。
目からウロコでした。
0940デフォルトの名無しさん
2008/11/05(水) 00:56:04始終荒れまくりの海外サーバ絵チャだ
一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww
0941デフォルトの名無しさん
2008/11/05(水) 16:02:100942デフォルトの名無しさん
2008/11/05(水) 17:22:10環境も分からんのに教えられるか馬鹿
0943デフォルトの名無しさん
2008/11/05(水) 17:54:42X86です
0944デフォルトの名無しさん
2008/11/05(水) 18:05:04GCCな環境ならとりあえず gcc -S してみてはどうか?
0945デフォルトの名無しさん
2008/11/05(水) 18:21:38本やネットでいろいろ調べたのですがイマイチ理解しきれません。
ソースなどあれば参考にさせていただきたいのですが
0946デフォルトの名無しさん
2008/11/05(水) 18:26:39cmp [y],[z]
cmovl eax,[z]
cmp [x],[y]
cmpvl eax,[y]
ret
0947デフォルトの名無しさん
2008/11/05(水) 18:29:320948デフォルトの名無しさん
2008/11/05(水) 18:31:52というか、どういう考えで、アセンブラでたらいを書けば理解できそうだと思えたんだか
激しく疑問なのだが。
0949デフォルトの名無しさん
2008/11/09(日) 18:17:49こんだけインタネッツが発達してんだから、ググレよカス
0950デフォルトの名無しさん
2008/11/13(木) 14:57:13どうやるんですか?
C言語だとこうですが
100%10=0
12%10=2
0951デフォルトの名無しさん
2008/11/13(木) 14:59:240952デフォルトの名無しさん
2008/11/13(木) 15:32:44おまいのCコンパイラには-Sオプションはないのか?
ないのかもしれんが...
0953デフォルトの名無しさん
2008/11/13(木) 17:56:400954デフォルトの名無しさん
2008/11/14(金) 04:36:2000A9 DIVIHD ; HL商,DE余り <--- HL/DE:符号付き除算
00A9 7C mov a,h
00AA B7 ora a
00AB F5 push psw ; HLの符号判定をpush
00AC AA xra d
00AD F5 push psw ; HL/DEの符号判定をpush
00AE CDC400 call 00C4 ABSHL ; DEを符号無しに
00B1 EB xchg
00B2 CDC400 call 00C4 ABSHL ; HLを符号無しに
00B5 EB xchg
00B6 CDCF00 call 00CF DIVNHD ; 符号無し除算を実行
00B9 F1 pop psw
00BA FCC700 cm 00C7 NEGHL ; HL/DEが負なら商を負にする
00BD F1 pop psw
00BE EB xchg
00BF FCC700 cm 00C7 NEGHL ; HLが負なら余りを負にする
00C2 EB xchg ; HL=商、DE=余り
00C3 C9 ret
0955デフォルトの名無しさん
2008/11/14(金) 04:36:5100C4 7C mov a,h
00C5 B7 ora a
00C6 F0 rp
00C7 NEGHL:
00C7 2B dcx h
00C8 7D mov a,l
00C9 2F cma
00CA 6F mov l,a
00CB 7C mov a,h
00CC 2F cma
00CD 67 mov h,a
00CE C9 ret
0956デフォルトの名無しさん
2008/11/14(金) 04:38:0300CF 42 mov b,d
00D0 4B mov c,e ; BC <--- 除数
00D1 EB xchg ; DE <--- 被除数
00D2 210000 lxi h,0000 ; 商 <--- 0
00D5 3E10 mvi a,10h ; for(a=16;(a);a--) {
00D7 F5 push psw ; save ACC
00D8 29 dad h ; 商 <<=1;
00D9 AF xra a ; A,CY = 0;
00DA EB xchg
00DB 29 dad h ; 被除数<<=1;
00DC EB xchg
00DD 8D adc l
00DE 91 sub c
00DF 6F mov l,a
00E0 7C mov a,h
00E1 98 sbb b
00E2 67 mov h,a ; ここまでHLとBC比較
00E3 1C inr e
00E4 D2E900 jnc 00E9
00E7 09 dad b ; キャリーが出たら繰り下がり
00E8 1D dcr e
00E9 F1 pop psw
00EA 3D dcr a
00EB C2D700 jnz 00D7 ; }endfor;
00EE EB xchg
00EF C9 ret
コメントは俺が適当に考えて振ったんで、間違えてるかもしらん
0957デフォルトの名無しさん
2008/11/14(金) 04:52:27まずはどのようなものから学べばよいですか?
0958デフォルトの名無しさん
2008/11/14(金) 11:46:48それを参考書片手に理解するところからってのはどうだろう
0959デフォルトの名無しさん
2008/11/14(金) 13:08:02独立した関数をアセンブラで書くほうから始めるほうがいいと思う。
0960デフォルトの名無しさん
2008/11/14(金) 19:03:280961デフォルトの名無しさん
2008/11/14(金) 19:19:370962デフォルトの名無しさん
2008/11/15(土) 04:32:36char _asm_c(char *);
#define di() _asm_c("\n\tDI\n") /* DI,EI ASMコード発生マクロ */
#define ei() _asm_c("\n\tEI\n")
/* 割込み関数用 PUSH/POP コード発生マクロ */
#define PUSHALL() _asm_c("\n\tPUSH PSW\n\tPUSH H\n\tPUSH D\n\tPUSH B\n")
#define POPALL() _asm_c("\n\tPOP B\n\tPOP D\n\tPOP H\n\tPOP PSW\n")
0963デフォルトの名無しさん
2008/11/15(土) 06:17:32つーか、80かよw
0964デフォルトの名無しさん
2008/11/15(土) 08:31:28初心者ですいませんm(_ _)m
0965デフォルトの名無しさん
2008/11/15(土) 09:52:220966デフォルトの名無しさん
2008/11/17(月) 00:12:00xor使ったほうが早いって言うけど、どうやって調べたのか教えて下さい
0967,,・´∀`・,,)っ-○◎●
2008/11/17(月) 01:18:49アウトオブオーダ機構を備えるCPUにおいて、同じレジスタに対するxorは
レジスタリネーミングのヒントとして特殊な意味を持つようにした。
具体的な効果として、xor eax, eaxを挟んだ前後のeaxを操作する命令間には
依存関係がなく並列実行可能であることが、パイプラインのスケジューラにヒントとして与えられる。
あと、0という値をロードするよりも命令長は短い。
同じ効果の命令なら命令長が短い方が命令キャッシュのヒット率が高くなり
全体のパフォーマンスはよくなる
0968デフォルトの名無しさん
2008/11/17(月) 01:55:320969,,・´∀`・,,)っ-○◎●
2008/11/17(月) 02:01:11普通に、効果が大きい方の順
0970デフォルトの名無しさん
2008/11/17(月) 22:27:25即値ロードも同じように並列実行可能だとおもうんだけど
それはヒントにしないのはなぜ?
ヒューリスティックを無限に増やせないってのは分かるんだが
即値って普通に現れるコードだよね。
0971,,・´∀`・,,)っ-●◎○
2008/11/17(月) 23:02:18xor eax,eaxの場合、たとえば常に値ゼロの特殊レジスタ(俗にゼロレジスタという)
があるマイクロアーキテクチャでは、それをeaxにリネームするだけでいい。
0972デフォルトの名無しさん
2008/11/17(月) 23:05:530973デフォルトの名無しさん
2008/11/17(月) 23:43:330974,,・´∀`・,,)っ-●◎○
2008/11/17(月) 23:54:18まあAMDでもVIAでもいいけどさ。OoO、レジスタリネーム機構を備えるx86はみんなそういうつくり。
0975デフォルトの名無しさん
2008/11/18(火) 00:27:58>>966が何か言うだろ
0976デフォルトの名無しさん
2008/11/18(火) 00:29:45mipsとかalphaとかarmとかsparcとかは?
0977デフォルトの名無しさん
2008/11/18(火) 00:47:27団子が煽る前に書いておくが、「eaxなんて名前のレジスタ」はその辺のCPUにはないと思うぞ。
0978デフォルトの名無しさん
2008/11/18(火) 04:02:26歴史が詰まっているネーミングですね。
0979,,・´∀`・,,)っ-●◎○
2008/11/18(火) 11:29:23Data Register
Counter
Base Register
0980デフォルトの名無しさん
2008/11/18(火) 11:33:1300AE CDC400 call 00C4 ABSHL ; DEを符号無しに
00B1 EB xchg
00B2 CDC400 call 00C4 ABSHL ; HLを符号無しに
00B5 EB xchg
↓
00AE CDC400 call 00C4 ABSHL ; **HL**を符号無しに
00B1 EB xchg
00B2 CDC400 call 00C4 ABSHL ; **DE**を符号無しに
00B5 EB xchg
0981デフォルトの名無しさん
2008/11/18(火) 16:21:310982,,・´∀`・,,)っ-●◎○
2008/11/18(火) 16:58:20もしくはRegisterのR(汎用レジスタのr8〜r15を新設したけど、他のレジスタの64ビット拡張にもRつけちゃえ)
0983デフォルトの名無しさん
2008/11/18(火) 20:15:490984デフォルトの名無しさん
2008/11/19(水) 02:38:204つで充分
0986デフォルトの名無しさん
2008/11/19(水) 18:01:280987デフォルトの名無しさん
2008/11/19(水) 20:09:16レス数が950を超えています。1000を超えると書き込みができなくなります。