アセンブラを勉強しようat TECH
アセンブラを勉強しよう - 暇つぶし2ch199:デフォルトの名無しさん
07/12/12 16:43:20
>>198
LAD GR2,GR3
じゃなくて
LD GR2,GR3
じゃないかな?

あと、零の場合は0から引いても0なので
CPA GR3,GR2
JMI MAINA
JPL HUTU
MAINA SUBA GR3,GR2
LD GR2,GR3
HUTU ST GR2,Y,GR1

CPA GR3,GR2
JPL HUTU
SUBA GR3,GR2
LD GR2,GR3
HUTU ST GR2,Y,GR1
でもいいかも
アセンブルとか動作チェックとかして確かめていないが

200:199
07/12/12 16:58:06
見直すと比較が逆っぽい
CPA GR3,GR2
でなく
CPA GR2,GR3
かな

201:デフォルトの名無しさん
07/12/12 17:10:20
TEST START
LAD GR1,0
LOOP LAD GR3,0
LD GR2,X,GR1
CPA GR2,GR3
JPL HUTU
SUBA GR3,GR2
LD GR2,GR3
HUTU ST GR2,Y,GR1
CPA GR1,N
JMI LOOP
RET
N DC 5
Y DS 5
X DC 3
DC -5
DC 8
DC -9
DC 7
END


アセンブルではうまく言ったんだけど
無限ループしてしまった

202:デフォルトの名無しさん
07/12/12 17:17:05
TEST START
LAD GR1,0
LOOP LAD GR3,0
LD GR2,X,GR1
CPA GR2,GR3
JPL HUTU
SUBA GR3,GR2
LD GR2,GR3
HUTU ST GR2,Y,GR1
LAD GR1,1,GR1
CPA GR1,N
JMI LOOP
RET
N DC 5
Y DS 5
X DC 3
DC -5
DC 8
DC -9
DC 7
END

これで提出してみました
合格してるといいなぁ

203:デフォルトの名無しさん
07/12/12 17:19:54
>>201
HUTUの次の行の
LAD GR1,1,GR1
が抜けてる気がする

204:デフォルトの名無しさん
07/12/12 17:27:11
>>202
正負の判断で分岐させたくなければ
LAD GR1,0
LOOP LD GR2,X,GR1
LD GR3,GR2
SRA GR3,BWM1
ADDA GR2,GR3
XOR GR2,GR3
ST GR2,Y,GR1
LAD GR1,1,GR1
CPA GR1,N
JMI LOOP
...
BWM1 DC 15
みたいなのも
CASLIIのGR*って16ビット幅だったよね?

205:デフォルトの名無しさん
07/12/12 17:32:02
やったー、合格できた!
お前らのおかげだ!ありがとう!
>>202
あ、うん直前で気づいていれておいた
>>203
すまないが見たことの無い単語が出てきて解らない
16ビットなのは合ってるよ


さて、最後の課題だ
「メモリのDATA番地以降にN個の符号付整数が格納されている. 指標レジスタを用いて,これらの中の正の整数の合計を求め,結果 をSUM番地に格納するプログラムを作成せよ.データの個数NはN番地 に格納されているものとする.」
もう早速意味の解らない
data番地とか指標レジスタって日本語?

206:デフォルトの名無しさん
07/12/12 17:46:15
「メモリのDATA番地以降にn個の符号付整数が格納されている。
指標レジスタを用いて、これらの中の正の整数の合計を求め、結果 をSUM番地に格納するプログラムを作成せよ。
データの個数nはN番地 に格納されているものとする。」
とすると
こんな感じのメモリマップがあるって事か

SUM番地 [ ... ]
N番地 [ n ]
DATA+0番地 [ ... ]
DATA+1番地 [ ... ]
DATA+2番地 [ ... ]
...
DATA+(n-1)番地 [ ... ]


指標レジスタってのは while ループをレジスタで再現しるってだけジャマイカ?
x86とSHしか知らないから違うかもしれないけど。

207:デフォルトの名無しさん
07/12/12 17:46:42
xの絶対値はxが負なら(x+(-1))と(-1)の排他的論理和をとればいい
xが正なら(x+(0))と(0)の排他的論理和をとる
0と-1はxを右に15ビット算術シフトすれば出てくる

DATA番地も指標レジスタも日本語だw
DATA番地はN個の符号付整数が格納されているブロックの先頭の番地のラベルじゃないかな
指標レジスタはCASLIIの仕様書にちゃんと載ってるぞ

208:デフォルトの名無しさん
07/12/12 17:53:46
え、えーと つまり?
排他的論理和ってのを使えばいいのかな?

209:デフォルトの名無しさん
07/12/12 17:55:10
排他的論理和は先週の講義でやったなぁ
XORだよな?
っというかもうやっぱり問題文の日本語がわからない
なにをさせたいのかさっぱり

210:デフォルトの名無しさん
07/12/12 17:58:31
指標レジスタってのはインデッテクスレジスタのことか!

211:デフォルトの名無しさん
07/12/12 18:01:12
>>208
いや、素直に正か負で分岐して負の場合だけ0から引くとかにしておいた方がいいと思う
自分で書いててアレだが素直で見やすくて何をやっているかすぐに分かるコードの方が好きだ
ちなみに
LD GR3,GR2
SRA GR3,BWM1
で15ビット右にシフトした値をGR3に入れて
ADDA GR2,GR3
で元の値GR2に0か-1を足して
XOR GR2,GR3
で排他的論理和をとってGR2に入れている

212:デフォルトの名無しさん
07/12/12 18:04:31
あ、つまり
「メモリのDATA番地以降にN個の符号付整数が格納されている. 指標レジスタを用いて,これらの中の正の整数の合計を求め,結果 をSUM番地に格納するプログラムを作成せよ.データの個数NはN番地 に格納されているものとする.」
ではなくその前の課題についてだったのか

213:デフォルトの名無しさん
07/12/12 18:12:32
LD GR2,X,GR1
とかで既に指標レジスタとしてのGRレジスタの使い方をしているんじゃないか?
指標レジスタを用いてっていうのは、DATA番地以降にある整数に上のような方法でアクセスするってことじゃないか?
あとは
LDA GR3,0
LOOP GR2にデータを一つ入れる
CPA GR2,GR3 ; GR2と0を比較
JMI MAINA ; 負ならジャンプする
SUM番地にGR2を加算
MAINA ...
...
JMI LOOP
みたく正の場合だけ加算処理をする

>>212
すまん、混乱させてしまった

214:デフォルトの名無しさん
07/12/12 18:12:30
たったいま講義が終わった
最後の問題はクリアしてなくても帰れるみたいだ
今日はお前ら本当にありがとう

215:デフォルトの名無しさん
07/12/12 18:16:11
> SUM番地にGR2を加算
CASLはメモリをディスティネーションにする加算命令はなかったかも
途中の和を入れるためのレジスタを用意してループ中ではそれに加算して
最後にSUMにSTする形をとったほうがいいか

216:デフォルトの名無しさん
07/12/12 22:46:44
ところで、64-bitアセンブラのいい本ありませんか?

217:デフォルトの名無しさん
07/12/12 22:58:04
>>216
何を(どういうことを)勉強したいの?

218:デフォルトの名無しさん
07/12/12 23:34:20
x64のやさしい解説書が欲しいんですが。

219:デフォルトの名無しさん
07/12/12 23:43:07
x86-64 ? ...x64 とも言うのか。
まだなさげ?

220:デフォルトの名無しさん
07/12/13 00:59:12
>>218
ビットサイズだけじゃアセンブラが特定できん。

221:デフォルトの名無しさん
07/12/13 01:04:57
MASM8.0のまともな解説書とかありませんか?

222:デフォルトの名無しさん
07/12/13 01:07:45
>>221
5から大してかわってない。

223:デフォルトの名無しさん
07/12/13 01:31:01
fURLリンク(rtfm.mit.edu)
前何かで参考になった

224:デフォルトの名無しさん
07/12/13 05:36:47
MASM8.0のまともなマクロライブラリとかありませんか?

225:デフォルトの名無しさん
07/12/13 15:03:35
MASM って自分でカスタマイズするための言語だべ?
既存のライブラリでやるなら何もASMでやる必要は無いんじゃね?

226:デフォルトの名無しさん
07/12/13 16:44:57
MASMのマクロキットつったら、
アセンブラMACROSしか知らないなぁ。公開されたものは。
使ったことないけど。

これね。
URLリンク(www.vector.co.jp)

227:デフォルトの名無しさん
07/12/13 23:14:23
>>224
もし、一連の質問の同一人物なら、
質問に答えてもらったら・・・後はわかるな?

228:226
07/12/14 10:43:12

別にいいんじゃないか2チャソだし

ひろゆこ曰
URLリンク(www.asks.jp)

A :20xx/mm/dd hh:mm:ss
HDDの残り容量の調べ方を教えれ

>A B :20xx/mm/dd hh:mm:ss
df

こういう空間を良しと考えていたみたいだし
(個人的にはこのひろゆこのエントリにはいろいろツッコミたい点は覆いが)

229:デフォルトの名無しさん
07/12/19 14:22:19
214だがまた実験が始まった
前にも増して日本語なのか理解できないので助けて欲しい


【問題4-4-1】以下のリストは,シフト演算命令を使った乗算プログラムであり,5×164を求めている.リストの [ ] 部分を埋めて完成せよ.(ヒント)164を2のべき数の和に直す.

ラベル欄 命令コード オペランド欄
PGM7 START
LD GR1,DATA
SLA GR1,2
ST GR1,KOTAE
LD GR1,DATA
[ ] ;(GR1)×32
ADDA GR1,KOTAE
[ ] ;(GR1) -> KOTAE
[ ] ;GR1 <- (DATA)
[ ] ;(GR1)×128
[ ] ;GR1<-(GR1)+(KOTAE)
ST GR1,KOTAE
RET
DATA DC 5
KOTAE DS 1
END


ご助力頼む!

230:デフォルトの名無しさん
07/12/19 15:07:35
PGM7 START
LD GR1,DATA
SLA GR1,2
ST GR1,KOTAE
LD GR1,DATA
SLA GR1,5 ;(GR1)×32
ADDA GR1,KOTAE
ST GR1,KOTAE ;(GR1) -> KOTAE
LD GR1,DATA ;GR1 <- (DATA)
SLA GR1,7 ;(GR1)×128
ADDA GR1,KOTAE ;GR1<-(GR1)+(KOTAE)
ST GR1,KOTAE
RET
DATA DC 5
KOTAE DS 1
END

とりあえず自分でやってみた
どうだろうか

231:デフォルトの名無しさん
07/12/19 15:11:17
よし、合格できた
だが次の課題がもっと意味不明すぎる
誰か助けてくれ


【問題4-4-2】
(a)アドレスDATAの第15ビットから第8ビットまでの8ビットを取出し,残りを0とした情報をアドレスOPに格納し,
同じく第7ビットから第4ビットまでの4ビットを取出し,残りを0とした情報をアドレスGRに格納し,
さらに第3ビットから最後までの4ビットを取出し,残りを0とした情報をアドレスXRに格納するプログラムを以下のリストの [ ]を埋めて完成せよ.

ラベル欄 命令コード欄 オペランド欄
MASK START
LD GR0,DATA
[ ]
ST GR0,OP
L1 LD GR1,DATA
[ ]
ST GR1,GR
LD GR2,DATA
[ ]
ST GR2,XR
RET
DATA DC #3012
MASK1 DC #FF00
MASK2 DC [ ]
MASK3 DC [ ]
OP DS 1
GR DS 1
XR DS 1
END



232:デフォルトの名無しさん
07/12/19 15:21:17
MASK START
LD GR0,DATA
[ ]
ST GR0,OP
L1 LD GR1,DATA
[ ]
ST GR1,GR
LD GR2,DATA
[ ]
ST GR2,XR
RET
DATA DC #3012
MASK1 DC #FF00
MASK2 DC #00F0
MASK3 DC #000F
OP DS 1
GR DS 1
XR DS 1
END

ここまで自分で入れてみた

233:デフォルトの名無しさん
07/12/19 17:19:13
・・・コメント部分に答えが丸ごと書いてあるのにこれ以上どうしろと。

234:デフォルトの名無しさん
07/12/20 00:20:59
Intel Core2の1次、2次キャッシュって、何wayで、キャッシュブロックは何バイトでしょうか?


235:デフォルトの名無しさん
07/12/20 00:34:28
>>234
スレ違い。寧ろ鼬害かも。

236:デフォルトの名無しさん
07/12/20 00:52:16
>>235
日本語でおk

237:デフォルトの名無しさん
07/12/20 01:00:31
ヒト以外の生物は巣にお帰りください。

238:デフォルトの名無しさん
07/12/20 07:35:31
x86命令の所要クロック計測スレPart3
スレリンク(tech板)l50


239:デフォルトの名無しさん
07/12/20 16:38:17
mpeg compass.jp
名古屋駅近辺でお話しましょう

240:デフォルトの名無しさん
07/12/23 15:23:17
MMXで最大値を求めるには、どっちを使った方が良い?
pmaxubかpcmpgtb

後者の使い方がよくわからないorz

241:デフォルトの名無しさん
07/12/23 15:48:23
簡単な使い方としては結果を使ってANDしたりAND NOTしたり

242:デフォルトの名無しさん
07/12/23 22:42:50
初心者の質問です。
32bitレジスタにSSEレジスタの内容を書込む場合は、
どうしたら良いのでしょうか?
movapsを使って転送しようとしたところで落ちます。

movaps xmm0, [esi]
// ~処理~
movaps [ecx], xmm0 <-- ここで落ちる.

243:デフォルトの名無しさん
07/12/23 22:50:12
>> 242
自己レス、ごめんなさいループ条件を間違えていただけでした。

244:デフォルトの名無しさん
07/12/27 00:15:18
スクラッチレジスタってなんですか?

245:デフォルトの名無しさん
07/12/27 00:20:22
答えはWebで
URLリンク(www.google.co.jp)

246:デフォルトの名無しさん
07/12/27 03:29:12
レジスタで何を対決させるんだろう?

247:デフォルトの名無しさん
07/12/27 09:47:32
jumpとbranchはどう違いますか?

248:デフォルトの名無しさん
07/12/27 10:24:20
命令語と動作が違う。
具体的な違いは石に依存するので種類を明記しない質問にはこれ以上答えようがない。

249:デフォルトの名無しさん
07/12/27 13:11:10
条件分岐がbra だったり 相対アドレッシングでの分岐がbra だったり
逆だったり

250:デフォルトの名無しさん
07/12/27 14:28:29
Cで作成した、プログラムを逆アセンブルしてみると
and $0xfffffff0,%esp
って記述が必ずあるんだが、これはなんのためにやってるの?

251:デフォルトの名無しさん
07/12/27 14:42:11
>>250
ローカル変数をメモリ上でアライメントするため、
だと思われる。


252:デフォルトの名無しさん
07/12/29 14:50:54
>>251
アライメント?
wikiでみたら、データを特定のサイズに調節することって書いてあるんだが
意味がわからない
int型だと2バイトcharだと1バイト見たいなのが関係してんの?

253:デフォルトの名無しさん
07/12/29 14:58:10
>>252
URLリンク(www5d.biglobe.ne.jp)

254:デフォルトの名無しさん
07/12/29 22:04:47
>>252
「32ビット整数を格納するときはアドレスが4の倍数でないとすごくアク
セスが遅くなる」とか聞いたことないかい?

いまのx86は最大で128ビットのXMMレジスタまであるので、とりあえず
アドレスを16の倍数にしておけばどんなデータも遅くならない。



255:デフォルトの名無しさん
07/12/29 22:57:54
バスがエラーだ電車を使え

256:デフォルトの名無しさん
07/12/31 01:35:07
4の倍数で数字を格納しないと、2回読み込みしたり、エラーが起きたりするから
and演算でespレジスタに格納されてるアドレスの最下位の値を0にしてるって考えていいの?

257:デフォルトの名無しさん
07/12/31 05:35:56
その理解で合ってます。もっと昔は、「参照番地が4の倍数でない」 というだけで実行時エラー
になったりしたものだが、後にいくらか親切になって、半端なアドレスのときは回路が二度読み
してくれるようになった。その分実行が遅くなるので、高速が要求される場面では参照アドレスが
4の倍数になるようにコードで保証するテクニックです。

258:デフォルトの名無しさん
07/12/31 08:48:16
>>257
>になったりしたものだが、後にいくらか親切になって、半端なアドレスのときは回路が二度読み
真ん中辺が禿げ上がるほど大間違い。

259:デフォルトの名無しさん
07/12/31 10:10:41
ダンゴさんの鋭い解説が期待されるところだ

260:デフォルトの名無しさん
07/12/31 11:40:52
68Kなど、他の16bitCPUにはそういうアライメントのミスで実行時エラーというのは実在したが

x86という書き方をするけど、実は初期のIBM-PC のデータバスは8ビットで 8086ではなく8088だった。
だから、昔はワードデータが奇数番地から始まろうが偶数番地から始まろうが関係なかった。

そんなわけでx86シリーズに限るとアライメントミスで実行時エラーになることはなかった。

261:デフォルトの名無しさん
07/12/31 11:43:37
MIPSやSPARCは無視ですか

262:デフォルトの名無しさん
08/01/01 03:35:14
S/360ではおもいっきり起きたぞ

263:デフォルトの名無しさん
08/01/02 02:30:34
sprintfみたいな可変個引数関数をアセンブラで実装したいんですが、stdcall呼び出し規約は使えないと思ってよいですか?

264:デフォルトの名無しさん
08/01/02 07:39:51
別に最初にpushする引数に個数が判るパラメータを入れるという事にすればいいだけでは?
ただc/delphiなんかから呼び出す時にはそれが最後のパラメータになるってだけで

でも、手続き側でスタックの消去をするから、引数の個数を間違えると悲惨な事になるんで
普通はstdcallは使わないよね。

265:デフォルトの名無しさん
08/01/02 11:55:54
VC++ のメンバ関数は thiscall っていって、
this は ecx レジスタで渡して、引数は stdcall みたいに扱ってるけど、
可変個引数メンバ関数は例外的に引数を cdecl みたいに扱ってる。
普通はこんな感じで可変個引数の時には stdcall は使わないと思う。

ただ、可変個引数だろうと、何らかの形で引数のサイズは分かるような仕様にはするだろうから、
その情報を使ってスタックをクリアすることは可能なはずだけど(リターンアドレスをコピーする必要はある)、
ただ、>>264 にもある通りかなり注意する必要がある。
クリアされない引数が出ると、それが呼び出しもとの関数のリターンアドレスになって・・・とか。

266:デフォルトの名無しさん
08/01/02 12:40:16
int $0x10で画面にAを1文字表示させるプログラムを作ったのですが、Segmentation Faultになってしまいます。
なにがいけないのでしょうか?
--------------ソース----------------------------
.text

.globl main
main:
movb $(0x0e),%ah
movb $(0x14),%al
movb $(0x00),%bh
movb $(0x07),%bl
int $0x10

267:266
08/01/02 12:53:24
書き忘れましたが、環境はubuntuでgccです。


268:デフォルトの名無しさん
08/01/02 13:07:13
>>267
ubuntuはアセンブラ非対応だよ?

269:デフォルトの名無しさん
08/01/02 14:14:25
>>268 ?

>>266 どういう環境で走らすためのコードだそれ?
保護機構のある32ビットOSの下で動かすものにはとても見えないが。

270:デフォルトの名無しさん
08/01/02 14:18:02
>>266
一応、確認するが石は何?

271:デフォルトの名無しさん
08/01/02 14:32:10
>>266
ビデオBIOSコール? 環境を間違えてる。MS-DOSの上でおやりなさい。

272:266
08/01/02 15:09:00
>>268-271
レスをありがとうございます。
CPUはペンティアム3です。
GRUBから何かのプログラムを起動させようとして作ってみました。
GRUBから起動させると、リブートになるので、ubuntu上で動くか確認しています。


273:デフォルトの名無しさん
08/01/02 15:12:08
>>272
VMにつっこんでやれよアホ
一回頃してやろうか?

274:266
08/01/02 15:14:11
GRUBからの起動は別のマシンでやってます

275:デフォルトの名無しさん
08/01/02 21:54:22
>>266
参考にしてるサイトなり書籍なりを教えて。

276:デフォルトの名無しさん
08/01/03 01:28:01
int main(){
int a[4];
}
ってプログラムをコンパイルして逆アセンブルすると
sub 0x10,%esp
ってなってるんだけど
int型は、2バイトだんだから
2*4でsub 0x8,%espで確保してもよさそうなもんなんだが
なんで0x10で確保してるの?

277:デフォルトの名無しさん
08/01/03 01:31:59
4*4 だろ?

278:デフォルトの名無しさん
08/01/03 01:33:52
>>276
環境が不明でなんとも言いようがないが、とりあえず。

>int型は、2バイトだんだから
コンパイラ依存

279:デフォルトの名無しさん
08/01/03 01:40:05
つ-mpreferred-stack-boundary

att記法で%espとか書いてるからi386でgccだろう。あと、espと書いてるからにはintは4バイトな気もするな。

280:266
08/01/03 04:42:41
BIOSを使わないで文字を表示させる方法を考えてみます

281:デフォルトの名無しさん
08/01/03 13:12:39
>>276てか printf("%d\n", sizeof(int)); ってのがおまいが真っ先にやるべきことだ。
「Cは自らハックする者を助く」

282:デフォルトの名無しさん
08/01/03 19:41:50
10バイト確保してるのか
なるほどw

283:デフォルトの名無しさん
08/01/05 16:54:28
>>280
libcをリンクしてprintfを呼び出すといいよ

284:デフォルトの名無しさん
08/01/07 02:57:35
lookasideって、日本語で言うと何ですか?どういう意味ですか?

285:デフォルトの名無しさん
08/01/07 03:43:42
TLBって(ry

286:デフォルトの名無しさん
08/01/14 23:31:18
アセンブラでハン○ームのオセロ多重起動しようと思ったけどわからなかったよー

287:デフォルトの名無しさん
08/01/23 03:06:48
こんにちは
アセンブラをはじめたのですが本に書かれてるソースがwindows用でlinuxで同じように出力させようとしてもできません。
どこが間違っているのか教えてください。

ソース
section .text
global _start

msg db "Hello,assembler",0x0a
msglen equ $-msg

_start:
mov eax,4
mov ebx,1
mov ecx,[msg]
mov edx,1
int 0x80

mov eax,1
mov ebx,0
int 0x80


288:デフォルトの名無しさん
08/01/23 03:14:21
すいません、書き忘れました。
出力させたいのはmsgの先頭の「H」です

289:デフォルトの名無しさん
08/01/23 05:26:20
287はどうみてもLinux用だが・・・?

290:デフォルトの名無しさん
08/01/23 05:45:38
アセンブラがasだったりして。

291:デフォルトの名無しさん
08/01/23 09:33:09
質問者の状況がよく判んないんだけど。
どうせなら
URLリンク(www.nk.rim.or.jp)
辺りは、熟読して置いて欲しいと思った。
このサイトならアセンブル方法なんかの手順から細かく書かれているし。


292:デフォルトの名無しさん
08/01/23 09:46:55
>>291
情報ありがとうございます。
どうやら_startからmov eax,1の間を
mov eax,[msg]
push eax
mov eax,4
mov ebx,1
mov edx,1
mov ecx,esp
int 0x80
pop eax
とすればよかったみたいです。
わかりずらい質問をしてしまってすいませんでした。

293:デフォルトの名無しさん
08/01/26 16:03:53
別の板(電気電子)に書いた質問なんだけど、この考え方で正しいかな?
スレリンク(denki板:682番)

8bitマイコンにおけるシンプルなBCD演算の最適化に関する話題なんですが、
よかったら見てやって下さい。

294:デフォルトの名無しさん
08/01/26 16:43:56
>>293
仮定条件が多過ぎてわけわかめ。CPUを限定していいから実在するニモニックで実際に動くコード貼ってみたら?

295:デフォルトの名無しさん
08/01/26 18:22:14
BCD10進数で XH-YHを求めたいのに

>ACC = (0x99 + CarryBit) - YH;
 ACC += XH;
 DA(ACC);
 XH = ACC;
でいいかという問題だよね?
問題が起きそうなのはYHの下位が0の時
まず、ACC = (0x99 + CarryBit) - YH;  で 0x?A という値になる
これに対して10進補正をかけないでいいのかという事?

通常10進補正命令は、下位4ビットについて
・ ハーフキャリーが立ってるなら下位4ビットに6を足す
・ 9以上なら8bit分6を足す
 という仕様になっているなら大丈夫だろう


296:293
08/01/26 21:29:57
>>295
>・ ハーフキャリーが立ってるなら下位4ビットに6を足す
>・ 9以上なら8bit分6を足す

はい、そういう仕様になってます。
やっぱこれで間違ってないですよね?
理屈上はこれでいいはずだと思ったんですが、何かこう
直感に反するような感覚が消えなくて……

297:デフォルトの名無しさん
08/02/05 20:56:43
遅レスだが、
BCD演算について、値の表現が
0-9= 0x0-0x09というのは縛り?

昔からある手法で、0-9=0x03-0x0cというのもある。(offset-3)

BCD部分に限れば、n+m => (n+3)+(m+3)で、キャリーの有無で次の桁へのcarry-upが計算できる。
減算もほぼ同様。

HW回路に直すと、効率が結構良いのが分かるはず。










298:デフォルトの名無しさん
08/02/06 08:51:36
この人の縛りはBCD演算命令があるCPUでという事だから仕方ないのだろ。

ソフトで計算しなければならないならソレも方法だね。

でもソフトで計算するなら100進数の方が楽だけどね

299:デフォルトの名無しさん
08/02/06 14:18:50
えー

09 + 01 = 10 の代わりに

3C + 34 = 70 -> 43 ってなる訳じゃん?

70 -> 43 ってどこから持ってくるのん?


300:デフォルトの名無しさん
08/02/06 14:24:59
あくまでも加算は4ビット単位にするんじゃないの?

301:デフォルトの名無しさん
08/02/06 14:32:36
9 + 1 = 10

C + 4 = 10 であって 40 ではない罠


302:デフォルトの名無しさん
08/02/06 14:33:13
40じゃない43だったorz


303:デフォルトの名無しさん
08/02/06 19:10:38
最近の CPU の BCD 命令って
十分な速さを与えてもらえてるのか?

304:デフォルトの名無しさん
08/02/06 20:00:05
DAA/DAS命令を持っているならね。
ただ、最近はC言語で書くのが当然のようになってるから、ハブられ易いね

305:デフォルトの名無しさん
08/02/06 20:15:20
IA-32 Intel (R) Architecture Optimization で DAA/DAS 検索したら出てこねえw

306:デフォルトの名無しさん
08/02/06 21:08:12
verilogベースで3-offset-BCDを書くと

module alu8bit( a, b, bcd, x, co ) ;
input [7:0] a ;
input [7:0] b ;
input bcd ; // 0:bin 1:bcd
output [7:0] x ;
output co ;

wire [4:0] t_lsb= {1'b0,a[3:0]}+{1'b0,b[3:0]} ;
wire [4:0] t_msb= {1'b0,a[7:4]}+{1'b0,b[7:4]}+{4'h0,t_lsb[4]} ;
assign co= t_msb[4] ;
wire [3:0] t_lsb0= ,a[3:0]+b[3:0]-4'h3 ;
wire [3:0] t_msb0= a[7:4]+,b[7:4]+{3'h0,t_lsb[4]}-4'h3 ;
assign x[3:0]= ({t_lsb[4],bcd}!=2'b01) ? t_lsb0[3:0] : t_lsb[3:0] ;
assign x[7:4]= ({t_msb[4],bcd}!=2'b01) ? t_msb0[3:0] : t_msb[3:0] ;
endmodule

て雰囲気になる。
多bit-ALUの数とワーストディレイに関する考え方でそれなりに優位はあったが、
最近の力任せgate数には勝てないかな?

asmベースでは、x86界ではDAAが基本になるので工夫がなかなか難しい。
(細かいテクを使えば色々ありそうだが)
* ビール1Lぐらい摂取して、書いているので、バグについては容赦願います。




307:デフォルトの名無しさん
08/02/06 22:06:56
>>303
単なる憶測だけど IBM の Power6 の BCD 演算回路なんか速いんじゃない?


308:デフォルトの名無しさん
08/02/14 17:17:11
すいません、質問なんですが
----------ここから(label.s)----------
.globl main
.code16
main:
xorw %ax,%ax
movw %ax,%dx
movw %ax,%bx
movw $0xFFFA,%ax
call ch_dx
movw $0xFFFB,%bx
ret
ch_dx:
movw $0xFFFD,%dx
ret
----------ここまで----------
以上のように書いてアセンブルしたところ
$gcc -o label label.s
実行時にセグメンテーションフォルトが出てしまいます。
>Segmentation fault: 11 (core dumped)
これはなぜなんでしょうか?gccは
$gcc -v
Using built-in specs.
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 3.4.6 [FreeBSD] 20060305
です。

309:デフォルトの名無しさん
08/02/14 19:07:54
>>308
下から4行目のretの次の命令がないからじゃないかな
システムコールでプログラムの終了すればいいと思う
FreeBSDならこんな感じ
pushl $0 /* return value */
movl $1, %eax /* SYS_exit */
pushl %eax
int $0x80
16ビットだとどうなるかはわからん

310:デフォルトの名無しさん
08/02/14 19:31:07
ちがうだろ。
>>308の環境で16bitコードでmainを書こうなんて考えたのがそもそもの原因。
それ専用のcrt0を用意したわけでもなかろうに。
どこの何見てそんなことやろうと思ったのか知らんが。

311:デフォルトの名無しさん
08/02/14 19:52:52
>>309
どうもです。retの後に(16ビットコードなのでmovw $1,%axみたいな感じ)
4行書いてみたんですが、相変わらずセグメンテーションフォルトでした。
32bitコードだと
----------ここから(label_32.s)----------
.globl main
main:
xorl %eax,%eax
movl %eax,%edx
movl %eax,%ebx
movl $0xFFFFFFFA,%eax
call ch_edx
movl $0xFFFFFFFB,%ebx
ret

ch_edx:
movl $0xFFFFFFFD,%edx
ret
----------ここまで----------
これでコンパイルすると正常に動作しました(gdbでstepiして確認)
>>310
crt0って何でしょう?すいませんよくわかりません。
コードはどこに載っていたというわけではなく
単に16bitコードをBSDで動かしてみたかったので。
URLか、何か適切な本があれば教えてくれませんか?

312:デフォルトの名無しさん
08/02/14 19:59:41
.code16が何か勘違いしている

313:デフォルトの名無しさん
08/02/14 20:08:36
勘違いしてますかね?
URLリンク(sourceware.org)

314:デフォルトの名無しさん
08/02/14 20:17:07
it also supports writing code to run in real mode or in
16-bit protected mode code segments.
To do this, put a `.code16' or `.code16gcc' directive before
the assembly language instructions to be run in 16-bit mode.

315:309
08/02/14 20:57:14
>>311すまん関係なかったか

316:デフォルトの名無しさん
08/02/14 21:09:05
>>314
そこ読んでも何を勘違いしてるのかわかりません…
すいません教えてください。

317:デフォルトの名無しさん
08/02/14 21:17:58
BSDって16ビットコードを実行できたっけ?

318:デフォルトの名無しさん
08/02/14 21:22:22
リアルモードや16ビットプロテクトモード用の機械語を生成するように
アセンブラに指示を出すのが.code16ディレクティブ。

*BSD系は普通32ビットプロテクトモードを使う。
32ビットモードで16ビットモードのコード食わせれば当然暴走することになる。

319:デフォルトの名無しさん
08/02/14 22:06:38
>>315
いえいえ
>>317>>318
了解です。ありがとうございました。

320:デフォルトの名無しさん
08/02/14 22:26:32
x86についての超初心者の質問ですが付き合ってください

mov m,i;
ってのは不可能なんでしょうか?つまり
mov [esi], 0FFFFFFFFH;
なんてのは無理なんでしょうか?


321:デフォルトの名無しさん
08/02/14 23:23:00
>>320
アセンブルできるよ。
念のため「うさみみハリケーン」付属の簡易アセンブラで試してみた。

mov dword ptr [esi], 0FFFFFFFFH
これをアセンブルすると、
C706FFFFFFFF
になった。

322:デフォルトの名無しさん
08/02/15 01:03:38
>>318
当然暴走するって言い方は乱暴だなぁ。
意味はないけど暴走しないように書く事だっでできる。

>>319
gdb使っているなら逆アセしてみれば、なぜ落ちるかわかるはず。


323:デフォルトの名無しさん
08/02/15 03:18:50
>>322
call ch_dxの手前まで進んでSIGSEGVを出して落ちたので
本来$eipが32bitで指し示しているアドレスを、.code16モードでは
その下位16bitしか読まないため、不正なアドレスにアクセスしようとして
エラーが出たんじゃないかと思います。たぶんですが

324:320
08/02/15 05:47:09
>>321
ありがとうございます!
ptr演算子ってのがあるんですね。勉強になりました



325:デフォルトの名無しさん
08/02/15 07:10:22
それはMASM系の構文かな

326:デフォルトの名無しさん
08/02/15 17:09:11
>>323
はずれ。

ヒント
.code16のmovwと.code32のmovlは同じコード

327:デフォルトの名無しさん
08/02/19 23:33:19
>>326
どうもです、ちょっと考えてきます。

328:デフォルトの名無しさん
08/02/25 15:25:47
URLリンク(mixi.jp)

329:デフォルトの名無しさん
08/06/01 12:34:51
スレが伸びない
mov ah,4ch
int 21h

330:デフォルトの名無しさん
08/06/01 13:49:17
halt

331:デフォルトの名無しさん
08/06/02 16:32:39
nop
nop
nop


332:デフォルトの名無しさん
08/06/02 16:34:14
CPUによっては、halt命令は相対ジャンプ命令だし、nop命令はレジスタ間演算命令だったりする罠。

333:デフォルトの名無しさん
08/06/03 21:13:51
9090909090909090

334:デフォルトの名無しさん
08/06/04 00:25:36
jump 1
(もう忘れたよ)

335:デフォルトの名無しさん
08/06/05 13:36:38
【データの交換】 N 番地と M 番地のデータを交換するプログラムを作成しなさい.

336:デフォルトの名無しさん
08/06/05 13:47:28
push [N]
push [M]
pop [N]
pop [M]

337:デフォルトの名無しさん
08/06/05 20:21:30
>>336
それってレジスタNとレジスタMでの交換じぇねえか?
自信ないけど。
>335の問題はN番地とM番地の交換だろ?

338:デフォルトの名無しさん
08/06/06 01:16:09
普通は括弧ついてりゃメモリだろう。



339:デフォルトの名無しさん
08/06/07 13:10:15
レジスタ使わない(スタックポインタは使うけど元に戻る)
push [N]
push [M]
pop [N]
pop [M]

レジスタ1個使う
mov K, [N]
xor K, [M]
xor [M], K
xor K, [M]
mov [N], K

レジスタ1個使う(スタックポインタも使うけど元に戻る)
mov K, [N]
push [M]
pop [N]
mov [M], K

レジスタ2個使う
mov K, [N]
mov L, [M]
mov [N], L
mov [M], K

レジスタ使用数と速度を比較してみると面白いか。

340:デフォルトの名無しさん
08/06/07 13:27:28
xchg [N], eax
xchg [M], eax
xchg [N], eax

341:デフォルトの名無しさん
08/06/07 13:35:28
xchg はつい忘れてしまうから困る

342:デフォルトの名無しさん
08/06/07 13:58:33
プロセッサを指定しないと駄目だろ・・・。

343:デフォルトの名無しさん
08/06/07 14:02:33
xchg eax,eax

344:デフォルトの名無しさん
08/06/07 15:04:11
全プロセッサでやればいいじゃん

345:デフォルトの名無しさん
08/06/09 15:24:58
lea
ってどうやってアドレス計算しとんじゃボケ!

346:デフォルトの名無しさん
08/06/09 15:37:31
アセンブラって、今から勉強しても時代遅れ?

347:デフォルトの名無しさん
08/06/09 15:50:03
IA-64をハンドアセンブルできたら英雄になれる

348:デフォルトの名無しさん
08/06/09 15:55:16
>>347
氏ねと?

349:デフォルトの名無しさん
08/06/10 01:24:36
>>346
何時でもマの必須項目

350:デフォルトの名無しさん
08/06/10 23:26:31
EB08とかあったな。
単純JUMP8バイト。

351:デフォルトの名無しさん
08/06/29 14:09:28
アセンブリ言語を勉強しようと思い書籍を探しているのですが、
はじめて読むアセンブラ

いまどきのアセンブラの教科書
は持っているのですが、どうもわからないので、
とっつきやすい書籍を紹介してほしいです。

352:デフォルトの名無しさん
08/06/29 14:16:30
それはもう、本を読むよりも手を動かした方がいいということだ。

353:デフォルトの名無しさん
08/06/29 15:44:58
いや、さすがに教科書が宜しくない。

PIC か何か、PCではないもので学ぶか、PC で学ぶかという選択肢はあるが、
後者なら「はじめて読むPentiumマシン語入門編」をすすめておく。

354:デフォルトの名無しさん
08/06/29 16:15:05
あ、もしWindowsじゃない環境だったら... と書こうと思ったけど
そのレベルなら自力でなんとかすると思うので続きは (省略されました)

355:デフォルトの名無しさん
08/06/30 09:42:15
とにかく手を動かして見る事にします。
お願いします。
僕に課題を下さい

356:デフォルトの名無しさん
08/06/30 11:53:30
アセンブラだけで全部書こうとか思ってるから厳しいんだと思うよ
Windows上なら Delphiのインラインアセンブラとか手軽に利用出来て便利

多倍長の四則演算あたりを書いてみたらいいと思うな。

357:デフォルトの名無しさん
08/06/30 19:25:06
多倍長か…。 ハードウェアで乗算器の設計しようとして、1024bitの加算器を使おうとしたあふぉがいたなあ。
(某大手企業の中堅クラス以上の社員)

シフト加算で何とかなるとか言っていた。w

358:デフォルトの名無しさん
08/08/18 16:54:10
DOSの時 
OUT命令でFM音源動かしたり
VRAMに直接書き込んだりしていたけど
ウィンドウだと出来るのでしょうか

複雑すぎて自分ではやれないとは思うのですけどね

359:デフォルトの名無しさん
08/08/18 17:20:25
WindowsはOSですから。
そうですよねえ。
直接やりたいですよね。
んで、しつこいですけどもう一度。
WindowsはOSです。
わかりますよね??言ってる事。

360:デフォルトの名無しさん
08/08/18 17:44:39
saveDS dw ?
saveES dw ?
saveSS dw ?

;; void RealToProto(void);
public _RealToProto
_RealToProto proc near
push bp
mov bp,sp
;
mov saveDS, ds
mov saveES, es
mov saveSS, ss
これは、はじめて読む486という本にあるリアルモードのプログラムの一部なんですが、
saveDSをコードセグメント内で定義したら、mov saveDS, dsは
mov CS:saveDS, dsと解釈されアセンブルされるのでしょうか?

361:デフォルトの名無しさん
08/08/19 00:17:36
call GetLocalTime
movzx eax,word[SystemTimewHour]
mov ebx,60
mul ebx
movzx ebx,word[SystemTimewMinute]
add eax,ebx
mov ebx,60
mul ebx
movzx ebx,word[SystemTimewSecond]
add eax,ebx
ret


362:デフォルトの名無しさん
08/08/19 00:25:03
>>358
ウィンドウってX?ms?
どっちでもやろうと思えばできる。
ただ、やらない方がいい。

363:デフォルトの名無しさん
08/08/19 01:37:14
bits 32
extern MessageBoxA

section .data
title: db 'title',0
string: db 'Hello World!',0

section .text
global start
start:

push dword 0
push dword title
push dword string
push dword 0
call MessageBoxA

ret

364:デフォルトの名無しさん
08/08/19 11:30:39
>>360
そんなお節介なアセンブラいらね。

ちう事で自分でオーバーライド。


365:デフォルトの名無しさん
08/08/19 17:13:58
>>362 やれなくはないのですね
>>359 リアルモードとプロテクトモードだと
メモリのアクセス方法とか全然違うんだよねっと
思っただけです



366:デフォルトの名無しさん
08/08/19 18:10:50
MS-DOSで動くのMASMのプログラムの中に
flush_q2:
db 0eah
dw offset set_cs_desc3
dw seg set_cs_desc3
set_cs_desc3:
って書いてあります。DOSから割り当てられるセグメントは
決まってないと思うのですが、dw seg set_cs_desc3
はどうしてアセンブルできるのでしょうか?

367:デフォルトの名無しさん
08/08/19 18:20:36
exeヘッダにリロケート情報が入っててメモリにロードしたときパッチが当たるんじゃなかったかな

368:デフォルトの名無しさん
08/08/20 13:40:07
>>358
何がどう複雑かって言うと、マルチタスクなので複数のプログラムが同時にIOしようとする
可能性を考慮しないといけないところ。だから、普通だとIOはデバイスドライバの仕事。
ドライバは複数のプログラムの要求を調停しながらIOを行う。

これが一般のアプリケーションには抽象化されたOSのAPIという形になる。
変わったところでは、16bitのと9xのWindowsがAPIだけでなくDOSシステムコールなども
そのままデバイスドライバへの要求に使えるというのがあった。DOS窓でDOSアプリケーションを
動かすための仕組みだが、副作用としてWindowsアプリケーションでもINとOUTなどができてしまう。
もちろん、そのIN/OUTはドライバが捕まえて、ドライバが代わりにやり直すんだけどな。

もう1つ、近頃はWindows用のドライバさえ用意すればよいという風潮で、
直接叩く方法が分からないハードウェアが多いというのも問題。

369:デフォルトの名無しさん
08/08/20 15:26:40
>>368
何か複雑ですね
out文をいろいろやったりするのが好きだったものです

370:デフォルトの名無しさん
08/08/22 02:22:51
アセンブラまったくの未経験者の私に非常に困難な課題がかせられました。
それがこれです。

以下の2つのプログラムについて、各行の命令文を言葉化し、 (例えば、movw num, %cx なら"numの内容をCXレジスタに代入"とか)
それぞれの行における、メモリ、aレジスタ、bレジスタ、cレジスタ、dレジスタの内容を示しなさい。
なお、ファイルはエクセルで作成すること。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

どなたか助けてくれませんか?お願いします…
エクセルで作成せよとのことですが、内容がわかればメモ帳でもなんでも構いませんので。

371:デフォルトの名無しさん
08/08/22 04:22:00
こういうのは困難とは言わん。命令表みながらやれば小学生でもできる。
難読化もされてなけりゃ意地悪い箇所もない親切で読みやすいプログラムじゃないか。
面倒でも1命令づつ読んでいけ。この程度を読むのが嫌なら何もするな。

372:デフォルトの名無しさん
08/08/22 10:12:58
>>370
折角の課題なのに「勉強しよう」スレで勉強する気ゼロな依頼をするとはこれ如何。

373:デフォルトの名無しさん
08/08/22 21:54:19
Excelか・・
せんせいはきっと、
「分かり易く図や表を使ってね」
と暗に言ってるんだろう。そこを押さえればバッチグーだな m9(^Д^)

374:デフォルトの名無しさん
08/08/23 01:32:59
普通にエクセルの表にするだけだろ
図が要るとは思えないが

375:デフォルトの名無しさん
08/08/23 23:21:34
質問です。
x86のeaxなど汎用レジスタの上位16ビットと下位16ビットを
入れ替える命令ってありませんでしたっけ?

376:デフォルトの名無しさん
08/08/23 23:26:51
rol eax, 16

377:デフォルトの名無しさん
08/08/23 23:33:41
>>376
やっぱローテートでやるんですね。どうもありがとうございます

378:デフォルトの名無しさん
08/08/27 15:57:58
ローテートは遅い

379:デフォルトの名無しさん
08/08/27 16:12:11
バレルシフタが載って以降は普通にできるんじゃない?

380:デフォルトの名無しさん
08/08/27 16:20:16
xchg ah, al

381:デフォルトの名無しさん
08/08/27 16:21:40
それ16ビットレジスタの上位8ビットと下位8ビットだから

382:デフォルトの名無しさん
08/08/30 09:36:05
強引にxchgでやってみる。

xchg ah,al
bswap eax
xchg ah,al

普通に回した方が早いよなあ。


383:デフォルトの名無しさん
08/08/30 11:15:19
手元の資料じゃローテートはシフトと同じレイテンシ/スループットになってる。
ネットバーストでの記述だからレイテンシ4サイクルだけどPenM以降なら1に戻ってるだろうな。

384:デフォルトの名無しさん
08/09/03 08:23:12

004B4ADA . 81B8 98020000 >CMP DWORD PTR DS:[EAX+298],4349726F
004B4AE4 . 74 12 JE SHORT kuma.004B4AF8

EAXに入っている値+298のアドレスに入っている値とアドレス4349726Fの比較ですか?

385:デフォルトの名無しさん
08/09/03 11:40:58
違う

386:デフォルトの名無しさん
08/09/04 07:33:28
TEST BYTE PTR SS:[ESP+8],1
MOV DWORD PTR DS:[ESI+4],0
MOV DWORD PTR DS:[ESI+8],0
MOV DWORD PTR DS:[ESI+C],0
JE SHORT


ESP+8のアドレスの中身と1の論理積を取る
定数0を入れる
ZF = 1 ならジャンプ

これであってますでしょうか?



387:デフォルトの名無しさん
08/09/04 08:34:50
何の石かちゃんと書いてくれ。
書いてないものは68K/Coldfireとみなすからな。

388:デフォルトの名無しさん
08/09/04 10:15:55
68KにDS:なんてないだろ。

389:デフォルトの名無しさん
08/09/05 09:07:27
ないな。で?

390:デフォルトの名無しさん
08/09/05 10:15:40
>>386 プロテクトモードか?

そのmovでフラグは変化しないからあってる。
と思う。

391:デフォルトの名無しさん
08/09/16 23:53:32
バイトでアセンブラやるんだけど、アセンブラて何

392:デフォルトの名無しさん
08/09/17 12:08:16
機械語とほぼ1対1に対応するプログラミング言語の処理系

393:デフォルトの名無しさん
08/09/17 12:56:50
>>391
つーか、マルチすんな。

394:デフォルトの名無しさん
08/09/17 15:31:22
メインの組立ラインの横で部品を組み立てる仕事かもしれん

395:デフォルトの名無しさん
08/09/17 16:18:27
まさしくハンドアセンブラ?

396:デフォルトの名無しさん
08/09/22 09:48:21
837C24 04 E0 : CMP DWORD PTR SS:[ESP+4],-20

この場合10進数で-20、-52、-32のどれでしょうか?
あと、-20という定数はここだけでしか使われていなかったのですが
こういう定数は主にどのようなケースで使われるのでしょうか?


397:デフォルトの名無しさん
08/09/22 12:49:54
>>396
何の石の何のアセンブラかを書かないとわからない。

398:デフォルトの名無しさん
08/09/22 22:15:51
>>396
224だか-32だか。少なくとも、-52なんてことは有り得ない。

399:デフォルトの名無しさん
08/09/23 12:34:44
コードがE0になってるからここでは-32が正解
一般的には16進の定数は 20h 0x20 $20 などの表記をすることが多い。

400:396
08/09/24 07:59:05
>>397
すいません。何のアセンブラか自分でもよくわからないです。
>>398-399
ありがとうです。

401:デフォルトの名無しさん
08/09/24 09:05:39
>>400
チート、割れ物は鼬害。

402:デフォルトの名無しさん
08/11/03 19:30:27
8個のスイッチからデータを入力し、そのデータが55Hとなった時に
LEDすべて点滅するプログラムを作るにはどうしたら良いか?
解き方がわかりません!どなたか解き方を教えて下さい!


また、上と同様に、スイッチのデータが10Hより大きい時
LEDのビット7が点滅し、スイッチのデータがOFHより
小さい時はLEDのビット0が点滅するプログラムを作る
には、どうしたら良いか? こちらもお願いします!


403:デフォルトの名無しさん
08/11/03 19:38:19
コピペ君って馬鹿だな、まで読んだ。

404:デフォルトの名無しさん
08/11/04 02:48:39
排他的論理和とゼロフラグだな。
下は教える気にもならんほど初級

405:デフォルトの名無しさん
08/11/04 03:22:39
>>402 書いてやってもよいが、せめて石と言語くらい書いてくれ。

406:デフォルトの名無しさん
08/11/04 18:51:09
>>405
ぜひ、助けて下さい。 ↓ のような感じで、プログラムお願いします。
10   ORG   0100H
20PA  EQU   20H     ちなみに、アセンブラ言語・8255です。
30CR  EQU   23H
40   LD    A,98H      
 



407:デフォルトの名無しさん
08/11/04 18:57:37
8255はパラレルインターフェースなのだが。

だいたい、どうやってスイッチを読むのか、どうやってLEDの制御をするのかを
指定してくれなければ何もガイドできないぞ。

408:デフォルトの名無しさん
08/11/04 19:03:10
初心者だからわかりません!そのくらいさっしてください!

409:デフォルトの名無しさん
08/11/04 19:22:09
>>406 左端の二桁の数字は行番号?


410:デフォルトの名無しさん
08/11/04 19:37:30
昔、BASICのエディタを利用して入力するアセンブラ(行番号を無視する)とか
あったけど、そういうのかなぁ?

411:デフォルトの名無しさん
08/11/04 19:39:26
>>409
その通りです。行番号です。

412:デフォルトの名無しさん
08/11/04 22:30:20
まあ、順調にレポート落としてくれや
誰かが手助けできる程度の情報を提供できるようになってからまた来なさい

413:デフォルトの名無しさん
08/11/05 04:35:57
  ORG 0000
  LXI SP,0A000H ; RAMの末尾番地
  JMP MAIN
SW EQU 0E000H  ; SWのMAPされる番地
LED EQU 0F000H ; LEDのMAPされる番地

  ORG 0100h  ; 飛ばした場所には割り込みベクタが置かれる
朝飯だから続きは後で

414:デフォルトの名無しさん
08/11/06 16:04:33
MAIN: LDA SW
   CMA  ; 8bitパラレル入力は8255にDIPSW入力を仮定。負論理のことが多いのでここで反転
   CPI  055H
   JZ  ALLBLINK
   CPI  010H
   JC  UNDER  ; 10Hを引いてキャリー=0F以下。>>402では10より大、0Fより小と言って
;       いるが、10/0Fと等しいときの処理が読みとれないので10以上と未満と解釈する。
  
LOOP1:   ; ここが10H以上のとき。
   MVI  A,0FFH
   STA  LED   ; LEDにFF(All Off)をライト
   CALL DELAY ; 後で作る。たぶん1秒ぐらい
   MVI  A,000H
   STA  LED   ; LEDに00(All On)をライト
   CALL DELAY
   JMP  LOOP1

415:デフォルトの名無しさん
08/11/06 16:08:59
ごめん、上のはALLBLINKの処理だ。
LOOP1:   ; ここが10H以上のとき。
   MVI  A,80H
   STA  LED   ; LEDに80H(bit7off)をライト
   CALL DELAY ; 後で作る。たぶん1秒ぐらい
   MVI  A,000H
   STA  LED   ; LEDに00(bit7 On)をライト
   CALL DELAY
   JMP  LOOP1
ALLBLINK:   ; ここが55Hと一致したとき。
   MVI  A,0FFH
   STA  LED   ; LEDにFF(All Off)をライト
   CALL DELAY ; 後で作る。たぶん1秒ぐらい
   MVI  A,000H
   STA  LED   ; LEDに00(All On)をライト
   CALL DELAY
   JMP  ALLBLINK

416:デフォルトの名無しさん
08/11/06 16:28:52
UNDER:   ; ここが0FH以下(=10H未満)のとき
   MVI  A,01H
   STA  LED   ; LEDに01(bit0 off)をライト
   CALL DELAY ; 後で作る。たぶん1秒ぐらい
   MVI  A,0FEH
   STA  LED   ; LEDにFE(bit0 ON)をライト
   CALL DELAY
   JMP  UNDER
DELAY:    ; clockが書かれてないので、とりあえず俺のやってる3.072MHzで
   LXI   B,8
DELAY0:
   LXI   H,0
DELAY1:
   DCX  H
   MOV  A,L
   ORA  H
   JNZ  DELAY1 ; 内側のloopが6clock*65536回回る。
   DCX  B
   MOV  A,C
   ORA  B
   JNZ  DELAY0 ; 外側のloop8回で1秒ぐらい。
   RET

417:デフォルトの名無しさん
08/11/06 16:37:10
>>415の、LOOP1の所、bit7 offのパターンは LDA 0FFH (他のbitはoff)
bit7 ONのパターンは LDA 07FH (他のbitはoff) の間違いでした。

本当は8253とかの外付けタイマをRST7.5に割り込み入れてソフトタイマを減算したほうが
スマートなのだけど、402はそういう余計な情報を消化できないと思って、loopでディレイを
作りました。割り込みを使う方法も知りたければその旨書いてね。

418:デフォルトの名無しさん
08/11/06 17:16:49
ザイログニモニックでないとピンとこない・・・

419:デフォルトの名無しさん
08/11/08 04:05:19
なんという・・・書いてやってもいいけど、自分で翻訳できるでしょ。MOVがLD、ORAはOR A, とか
もうすぐ朝飯だから、気が向いたら午後にでも書きにくるかも。

420:デフォルトの名無しさん
08/11/08 08:12:45
宿題の人がザイログニモニックという単語を知ってるとは思えないが

421:デフォルトの名無しさん
08/11/08 17:53:40
宿題の人のためじゃないけど、暇なので書いてみた。
  ORG 0000
  LD  SP,0A000H ; RAMの末尾番地
  JP  MAIN
SW EQU 0E000H  ; SWのMAPされる番地
LED EQU 0F000H ; LEDのMAPされる番地

  ORG 0100h  ; 飛ばした場所には割り込みベクタが置かれる
16進4桁のportアドレスだと、たしかIN/OUTは A,(BC)とかを使うんだよね。
この先書いてる間に誰かフォローお願い。

422:デフォルトの名無しさん
08/11/08 18:02:45
MAIN: LD  BC,SW
   IN   A,(BC)
   XXX  ; Aregの反転。負論理のことが多いのでここで反転
   CP   055H
   JP  Z,ALLBLINK
   CP   010H
   JP  C,UNDER  ; 10Hを引いてキャリー=0F以下。>>402では10より大、0Fより小と言って
;       いるが、10/0Fと等しいときの処理が読みとれないので10以上と未満と解釈する。
  
LOOP1:   ; ここが10H以上のとき。
   LD   A,0FFH
   LD   BC,LED
   OUT  (BC),A   ; LEDにFF(All Off)をライト
   CALL DELAY ; 後で作る。たぶん1秒ぐらい
   LD   A,0
   LD   BC,LED
   OUT  (BC),A   ; LEDに00(All On)をライト
   CALL DELAY
   JP   LOOP1
コンプリメントのニーモニックが判らなくてゴメン。読む人はザイログ慣れてるでしょうから補って。

423:デフォルトの名無しさん
08/11/08 18:07:18
ごめん、上のはALLBLINKの処理だ。
LOOP1:   ; ここが10H以上のとき。
   LD   A,0FFH
   LD   BC,LED
   OUT  (BC),A   ; LEDにFF(bit7 Off)をライト
   CALL DELAY ; 後で作る。たぶん1秒ぐらい
   MVI  A,07FH
   LD   BC,LED
   OUT  (BC),A   ; LEDに7F(bit7 On)をライト
   CALL DELAY
   JMP  LOOP1
ALLBLINK:   ; ここが55Hと一致したとき。
   LD   A,0FFH
   LD   BC,LED
   OUT  (BC),A   ; LEDにFF(All Off)をライト
   CALL DELAY ; 後で作る。たぶん1秒ぐらい
   LD   A,000H
   LD   BC,LED
   OUT  (BC),A   ; LEDに00(All On)をライト
   CALL DELAY
   JP   ALLBLINK

424:デフォルトの名無しさん
08/11/09 03:56:53
UNDER:   ; ここが0FH以下(=10H未満)のとき
   LD   A,255
   LD   BC,LED
   OUT  (BC),A   ; LEDにFF(bit0 Off)をライト
   CALL DELAY ; 後で作る。たぶん1秒ぐらい
   LD   A,0FEH
   LD   BC,LED
   OUT  (BC),A   ; LEDにFE(bit0 On)をライト
   CALL DELAY
   JMP  UNDER
DELAY:    ; clockが書かれてないので、とりあえず俺のやってる3.072MHzで
   LD    BC,8
DELAY0:
   LD    HL,0
DELAY1:
   DEC  HL
   LD   A,L
   OR   A,H
   JP   NZ,DELAY1 ; 内側のloopが6clock*65536回回る。
   DEC  BC
   LD   A,C
   OR   A,B
   JP   NZ,DELAY0 ; 外側のloop8回で1秒ぐらい。
   RET

425:デフォルトの名無しさん
08/11/09 04:01:45
こんなのでよかったかな。今からアセンブルしてみる(先にやってから書けよw)
Z80も今では作られてないだろうから、実際に動かすならZ80180か川崎の180かな。
バンクとか、幾つかの内蔵I/Oレジスタの初期化が要るはずだが、デフォが16bitリニアな
アドレス空間になっていると思うので、デフォのままで動くのでしょう。

426:デフォルトの名無しさん
08/11/09 04:32:44
いっぱい書きミスがありました(w アセンブルリスト貼ると、' 'が詰まるんだろうな。
CSEG
ORG 0000
0000 3100A0 LD SP,0A000H ; RAMの末尾番地
0003 C30001 JP MAIN
E000= SW EQU 0E000H ; SWのMAPされる番地
F000= LED EQU 0F000H ; LEDのMAPされる番地

ORG 0100h ; 飛ばした場所には割り込みベクタが置かれる
0100 0100E0 MAIN: LD BC,SW
0103 ED78 IN A,(C)
0105 1EFF LD E,255
0107 AB XOR E ; Aregの反転。負論理のことが多いのでここで反転
0108 FE55 CP 055H
010A CA2901 JP Z,ALLBLINK
010D FE10 CP 010H
010F DA4001 JP C,UNDER ; 10Hを引いてキャリー=0F以下。>>402では10より大、0Fより小と言って
; いるが、10/0Fと等しいときの処理が読みとれないので10以上と未満と解釈する。

427:デフォルトの名無しさん
08/11/09 04:33:44
0112 LOOP1: ; ここが10H以上のとき。
0112 3EFF LD A,0FFH
0114 0100F0 LD BC,LED
0117 ED79 OUT (C),A ; LEDにFF(bit7 Off)をライト
0119 CD5701 CALL DELAY ; 後で作る。たぶん1秒ぐらい
011C 3E7F LD A,07FH
011E 0100F0 LD BC,LED
0121 ED79 OUT (C),A ; LEDに7F(bit7 On)をライト
0123 CD5701 CALL DELAY
0126 C31201 JP LOOP1

0129 ALLBLINK: ; ここが55Hと一致したとき。
0129 3EFF LD A,0FFH
012B 0100F0 LD BC,LED
012E ED79 OUT (C),A ; LEDにFF(All Off)をライト
0130 CD5701 CALL DELAY ; 後で作る。たぶん1秒ぐらい
0133 3E00 LD A,000H
0135 0100F0 LD BC,LED
0138 ED79 OUT (C),A ; LEDに00(All On)をライト
013A CD5701 CALL DELAY
013D C32901 JP ALLBLINK

428:デフォルトの名無しさん
08/11/09 04:35:13
0140 UNDER: ; ここが0FH以下(=10H未満)のとき
0140 3EFF LD A,255
0142 0100F0 LD BC,LED
0145 ED79 OUT (C),A ; LEDにFF(bit0 Off)をライト
0147 CD5701 CALL DELAY ; 後で作る。たぶん1秒ぐらい
014A 3EFE LD A,0FEH
014C 0100F0 LD BC,LED
014F ED79 OUT (C),A ; LEDにFE(bit0 On)をライト
0151 CD5701 CALL DELAY
0154 C34001 JP UNDER

0157 DELAY: ; clockが書かれてないので、とりあえず俺のやってる3.072MHzで
0157 010800 LD BC,8
015A DELAY0:
015A 210000 LD HL,0
015D DELAY1:
015D 2B DEC HL
015E 7D LD A,L
015F B4 OR H
0160 C25D01 JP NZ,DELAY1 ; 内側のloopが6clock*65536回回る。
0163 0B DEC BC
0164 79 LD A,C
0165 B0 OR B
0166 C25A01 JP NZ,DELAY0 ; 外側のloop8回で1秒ぐらい。
0169 C9 RET
016A END
ここからcopyしてスペースの所をタブに変えれば読めるリストに戻ります。

429:デフォルトの名無しさん
08/11/09 17:35:51
Z80の可能なニーモニックを片っ端から書いてRZ80してみてるんですが、EX AF,AF' って書いて
*** missing quote syntax error ってエラーが出るんですよ。これどう書けばいいんだろ・・・

430:デフォルトの名無しさん
08/11/09 18:11:32
ハンドアセンブルしてDBで書く

431:デフォルトの名無しさん
08/11/09 18:29:54
take it easy
>126 名前: デフォルトの名無しさん [sage] 投稿日: 2008/09/22(月) 15:54:58 
>今日のわたしはモード2なのよ 
URLリンク(www.youtube.com) 


432:429
08/11/10 04:56:57
EX AF,AF でエラー消えました。メッセージの意味が反対ですよね。

IN r,(C) とか、OUT (C),r って、A以外の諸レジスタもrに(文法上は)書けるのですが、
BやCを使うことはないし、D~Lだってまず使わないですよね。なんでこんなこと許してるのかな。

433:デフォルトの名無しさん
08/11/10 05:45:58
inrやoutrのため。それと、(c)と言いつつ実はアドレスバスにはbcが乗るので、
I/Oポートアドレス空間を64KiBフルにデコードすることも可能といえば可能。
それを利用したのがSonyのHitBitじゃなかったかな。

434:デフォルトの名無しさん
08/11/11 02:05:41
>>432
’~で後ろの"'"が無いことになってるんだから別に間違ってなかろう。
EX AF,AF'だけ特別扱いするのはめんどいし。

rでA以外も受け付けるのは、その方が簡単だから。


435:429
08/11/11 05:01:14
>>433 INIRやOTIRのことですね? 連続したポートアドレスから幾つも読み書きするって
実機でそういう構成の奴はやったことないんですよね。どなたかありますか?

>>434 missing~って、quoteがありませんよ、という文句だと思ってました。あるのに・・・

Z80のほぼ全ての命令を書いてASMリストを取り、コードの頭でsortして>z80.dicに出して、
同様に作った8085.dicと見比べると、面白いですね。8080の命令は実行できるように作られた
そうですが、けっこう違う所がありました。
        8085    Z80
コード0F,1F RRC,RAR 無い RRC a、RR a で同機能の拡張命令がある
コード2F   CMA    無い
コード30   SIM     JR NC,xx
コード3F   CMC    無い
コードC0  RNZ     無い
コードC4  CNZ     無い
コードC8  RZ      無い
コードCC  CZ     無い
コードCB  無い    bit操作命令の開始バイト
コードCF  RST 1   無い
コードD0  RNC    無い
コードD4  CNC    無い
コードD8  RC     無い
コードDC  CC     無い
コードDD  無い    IXレジスタ操作命令の1バイト目
コードDF  RST 3   無い
コードE0  RPO    無い
コードE2  JPO    無い
コードE4  CPO    無い
コードE7  RST 4   無い

436:デフォルトの名無しさん
08/11/11 08:49:52
8085にあってz80にないのは二つだけ。RRCはz80拡張命令とではフラグの動きが違う。

437:デフォルトの名無しさん
08/11/11 09:13:56
>>435
普通は「'hoge'」と書かなきゃいかんのに「AF'」て書いたんで、
「'」が閉じてないがなといわれてるんですな。

IN[ID]R/OT[ID]RはCの値変わんないので、同じ所をどかどか読み書きするんですな。
で、OTIRはZ80DMAとかZ80SIOの初期化に使ってた記憶が。
あのへんは無駄に初期設定大変だったからなあ…

なんて事を書いていたらZ80ファミリハンドブック読みたくなってきた。
どこにしまったかのう。


438:デフォルトの名無しさん
08/11/11 10:55:23
私の机の上にあるよ。

439:429
08/11/11 11:03:31
>>436 435で書いた諸々の無い命令は、どんな書式になりますか?
RST 1~7はoperand errorになりました。return on condition とか call on condition とかも
書式が判りません。 今はコード照合しながら書いてない命令が無いかチェックしてます。

440:デフォルトの名無しさん
08/11/11 11:29:55
z80の命令表なんてぐぐればいくらでも出てくるのに
例えばこことか
URLリンク(tomocyan.net)

441:429
08/11/11 12:54:43
あ~、これはいいものをありがとうございます。メモメモ・・・
RSTは番号じゃなくてマスクを書くんですね。

442:429
08/11/12 03:23:04
全部の命令コードをアセンブルできました。>>436の2つってどれのことですか?

443:デフォルトの名無しさん
08/11/12 03:31:56
>>442
rim, sim。それらのコードはz80では全く違うインストラクションに割り当てられている。
8085では8080にこのインストラクションを追加した仕様になっている。
面白いところでは、8085にもz80にもドキュメントされていない隠しニモニックが多数ある。
その辺りは、ますます8085とz80の互換性がなくなる結果になっている。

444:429
08/11/12 04:38:39
あ、ホントだ。JRとJR NC ですね。NR80ではrimとsimはDBで書いてました。
割り込みマスクのread/writeなんてごく一部のコードしか使わないから、
アプリ層だったら85のコードをZ80で実行するのはありですね。
でも実際には周辺ICも違うから、なかなかそういう場面はなさそう。

445:デフォルトの名無しさん
08/11/12 21:10:45
現在8085の課題をやっているのですが
他の課題に負われ8085の方の内容がまったくつかめないままここまで来てしまいました
八方塞の状態でまったく出来ません(独自でやっていたのですがとてもでは無いですができそうではないです)
とりあえず形になっていればいいのですが、提出が明日の午前11時が期限になっています
もしよければ協力してくれる方いらっしゃいませんか(当方、かなり必死です…)

課題の内容

8085でデジタル目覚まし時計の作成をせよ
・タイマ割り込みは必須
・設定した時間で音がなる
・複数のスイッチを入力する事で音が止まるようにする

以上の条件を満たす、フローチャートを作成し、プログラムを作成せよ

446:デフォルトの名無しさん
08/11/12 22:02:56
>>445
> 8085でデジタル目覚まし時計の作成をせよ
> ・タイマ割り込みは必須
> ・設定した時間で音がなる
> ・複数のスイッチを入力する事で音が止まるようにする
回路図とかあるんかい?


447:デフォルトの名無しさん
08/11/12 22:04:36
>>446
無いです

フローチャートを作成して
それに乗っ取ったプログラミングをすることが課題となっています

448:デフォルトの名無しさん
08/11/12 22:12:02
>>446
うんじゃ、以下の質問に答えれ
o タイマり込みって何をどう叩いて割り込ませるの?
o 音って何をどう叩いて出てくるの?
o スイッチってどこを読めば ON/OFF 判定できるの?


449:445
08/11/12 22:20:05
>>448
ちょっと待っていてください
全部答えられるかわかりませんが
参考になるだろうプログラムがあるのでちょっとアップしてみます

450:445
08/11/12 22:43:22
>>448
パスはsageです
URLリンク(www.uploda.org)
中に説明も書いておきましたのでよろしくお願いします


中にも書いていますが今夜は徹夜でいる予定ですので何時でも質問してくださって大丈夫です

451:デフォルトの名無しさん
08/11/13 02:42:33
さっき起きたが、もう流れてる。とりあえず、手持ちのASMから使えそうなとこ拾ってあげる。
ファイルabs.asm=cのmainに飛ばすための初期化コードから:
  CSEG
  ORG  0000h
  LXI   SP,0A000h ; RAMの末尾番地
  JMP  MAIN    ; cのmainに飛ばすにはc_main_
  ORG  003Ch   ; RST7.5の割り込みベクタの番地
  JMP  TIMER   ; 8253という石をつなぎ、ここに割り込みを入れるよう設定する

452:デフォルトの名無しさん
08/11/13 02:51:00
P53_0 EQU 0F000h ; 8253がMAPされるアドレス空間
P53_1 EQU 0F001h
P53_2 EQU 0F002h
P53_3 EQU 0F003h
MAIN:     ; main loopの開始
/* 8253初期化 */
  P53_3 = 0x36; /* カウンタ0 Bin, mode3, ライトLSB,MSB */
  P53_3 = 0x76; /* カウンタ1 Bin, mode3, ライトLSB,MSB */
  P53_3 = 0xB6; /* カウンタ2 Bin, mode3, ライトLSB,MSB */
/* mode3だと方形波が出るだけなので、カウンタ2はmode0にして割込み
を使う方が正論だが、カウンタ2出力先の8085のRST7.5がエッジトリガ-
なのでmode3(方形波)でうまく行く。CPUによってはmode0を
使わなければならないが、その時は割込み処理でカウンタ2をリロード
しなければならない。 */
  P53_2 = 30720 & 0xFF; /* カウンタ 2 LSB */
  P53_2 = 30720 >> 8; /* カウンタ 2 MSB */
/* 3.072MHz/30720 = 100Hz ( 10mS毎 ) */
RST7.5割り込みを使う理由はコメントを読んでね。このcコードと同じ意味のASMは書ける?

453:455
08/11/13 02:52:13
>>451
ありです



とりあえず再うpしました
URLリンク(www.vipper.org)

454:デフォルトの名無しさん
08/11/13 02:54:42
メインループの概要:
  >>452のように8253を初期化
  時刻メモリを00:00:00に設定
loop:
  SWを読む
  SWの時刻とメモリが一致したら音を鳴らす/または止める
  loopへJMP

455:455
08/11/13 02:58:44
>>452
>このcコードと同じ意味のASMは書ける?
ちょっと辛いと思います・・・orz

456:455
08/11/13 03:00:27
>>454
ああ、非常にわかりやすいです
ありがとうございます

457:デフォルトの名無しさん
08/11/13 03:04:23
ざっと読んだ。ORGのアドレスとかは>>453の環境のように直せるよね?
CSEGは、リンカで再配置するための命令で、ASEGはASMが吐いたオブジェクトをそのまま
実行アドレスにするためなのは理解してる?
今回は音は単なる断続音でいいと思うから、MUSICのテーブルMUSIC:の所を、
音・休符のくり返しにしておけばいい。

458:デフォルトの名無しさん
08/11/13 03:10:21
>>455 しょ~がねーなあ・・・
  P53_3 = 0x36; /* カウンタ0 Bin, mode3, ライトLSB,MSB */
  MVI A,036h
  STA P53_3
  P53_3 = 0x76; /* カウンタ1 Bin, mode3, ライトLSB,MSB */
  MVI A,076h
  STA P53_3
  P53_3 = 0xB6; /* カウンタ2 Bin, mode3, ライトLSB,MSB */
  MVI A,0B6h
  STA P53_3
  P53_2 = 30720 & 0xFF; /* カウンタ 2 LSB */
  MVI A,0FFh
  STA P53_2
  P53_2 = 30720 >> 8; /* カウンタ 2 MSB */
  MVI A,30720/256
  STA P53_2

459:デフォルトの名無しさん
08/11/13 03:17:02
>>457
>ORGのアドレスとかは>>453の環境のように直せるよね?
試行錯誤してみますが即時にはちょっと辛いかもしれません



>>458
あまりの優しさに。・゚・(ノД`)・゚・。

460:デフォルトの名無しさん
08/11/13 03:18:35
cのコメントを; にしてASMに振ってね。 なかなか本題に入れないな(w
TIMER:  ; 8253をつないで上のように初期化すると、10mSごとに割り込みが発生し、ここにジャンプしてくる
; 8253は___|~~~|___|~~~|___|~~~・・・という信号を出し、これの立ち下がりエッジを8085は割り込みと認識する訳。
  PUSH  H
  PUSH  D
  PUSH  B
  PUSH  PSW
(割り込み処理本体)
  POP  PSW
  POP  B
  POP  D
  POP  H  ; メインで使っているレジスタをこういうpush/popで保護する。順序は判るよね?
  EI      ; 割り込んだときいったんDI状態になるのでそれを回復(また割り込み可能に)
  RET    ; 割り込んだ次の番地(メインのどこか)に復帰
こういうのが割り込み処理プログラミングの基本的なお作法です。

461:445
08/11/13 03:22:32
>>460
了解しました

462:デフォルトの名無しさん
08/11/13 03:23:48
俺の環境は、プログラムのコード(実行命令部)はROMの0番地から、RAMは0A000番地~
数㌔バイト、という物なのでORG 0000hになってるわけ。>>455の環境はASMの吐いたコードを
RAMにロードして実行させる環境なのではないかと思う。ORG 8000hとか書かれてるから。

463:445
08/11/13 03:28:02
>>462
>RAMにロードして実行させる環境なのではないかと思う
はい、その通りです

464:デフォルトの名無しさん
08/11/13 03:32:33
割り込み処理本体:
TIMER1: DS 1  ; soft couter 1 100回をカウントし、1秒を作る
SEC:   DS 1 ; 秒カウンタ
MIN:   DS 1 ; 分カウンタ
HOUR:  DS ; 時カウンタ
変数としては最低限、この位は必要だね。

CSEGは上でも書いたけどROMにロードさせるためのアセンブラ命令なので、
>>455はASEGで書き始めればいい。

465:445
08/11/13 03:42:01
>>464
了解です

466:デフォルトの名無しさん
08/11/13 03:51:44
割り込み処理本体の実行部:
  TIMER1を減算、0になったらまた100を入れる。(MAINの初期化時に100にしておくべき)
  0になったときが「1秒ごと」だから、その時に
   秒を加算、59を越えたら、0に戻し、
    分を加算、59を越えたら、0に戻し、
     時を加算、23を越えたら、0に戻す(日付までやるとえらいことになるぞ。)
   時分秒を(表示器があれば)表示器に表示。
    (これは割り込み中にやらずに、メインループに対しフラグで通知して、メインループで
     表示してもらう手法が一般的だ。こういう情報(割り込みからメインループに伝える情報)
     が「イベント」という概念で教えられているものだ。
     時刻そのものではなく、「表示が必要だよ」という情報ね。
     割り込み処理では時刻を変更する、メインではそれを読みとるのみで変更はしない。)
   音が鳴っている状態であれば、音用のポートのON/OFFを切り換える
    (これで、警報音の断続が制御できる)

段付け毎にcのif文=ASMならCPI 、JCかJZかJNZで分岐が必要なのは判るよね。
時分秒は00:00:00~23:59:59だから、SW入力は8bitのDIPSWか何かが3器つながる必要がある。
その辺は455の環境に合わせてI/Oの番地を書いてね。
プログラムの基本構成はこれで伝わったとおもう。全部書いてあげるのじゃカンニングみたいだし、
そろそろ朝飯食って出勤なので、ここまでにしたい。

467:デフォルトの名無しさん
08/11/13 03:55:49
思い出した。毎年今頃に8085の質問投げてくるkitの学生か?

468:445
08/11/13 03:56:42
>>466
お疲れ様でした
大変、助かりました

これを元に頑張ってみます

本当にありがとうございました

469:445
08/11/13 03:58:14
>>467
kitは大当たりですw
前例いたんですねw

470:デフォルトの名無しさん
08/11/13 12:19:35
工芸繊維大!?

471:デフォルトの名無しさん
08/11/15 02:56:22
どこだ?九州工業大学か?

472:467
08/11/15 04:20:18
上の方で誰かがkitって書いてたんだが、俺もkitが何なのか知りたいな。

473:467
08/11/15 04:34:12
あ(*o*) Kyuusyuu Institute of Technology か

474:デフォルトの名無しさん
08/11/15 09:45:04
金馬鹿工業大学

475:デフォルトの名無しさん
08/11/15 11:30:34
Knight Industries Two Thousand

476:デフォルトの名無しさん
08/11/18 18:55:09
お邪魔します。基本情報処理試験(午後 アセンブラ)の問題集を解いているのですが
解らない問題で行き詰りました。
こちらで教えて頂ますでしょうか?
スレ違いでしたら申し訳ございません。(CASLⅡ 福嶋宏訓 著)

477:467
08/11/19 17:54:40
スレチじゃないけど、俺は85得意だがCASL音痴なんでお役に立てない(m_ _m)

478:デフォルトの名無しさん
08/11/23 06:50:58
教えてください。
MASMを使用したいのですが、現在PCにインストールされている
Visual C++ 2008 Expressには、付属していないようですので
URLリンク(www.microsoft.com)
このMASMをDLしてインストールしようとしました。
しかし、インストールしようとすると「Visual C++ 2005 Express Edition required」
というメッセージが出てインストールできません。
どうすればMASMを使えるようになるのでしょうか。

479:デフォルトの名無しさん
08/11/23 07:18:25
ダウンロードしたzipを強制解凍してくと~~ml_exe~~というファイルが出てくる。
これがml.exe本体だから適宜リネーム。

480:478
08/11/23 07:23:50
ありがとうございます。
しかし、なぜこんな面倒なことせにゃならんのでしょうかね。
MSはアホなのでしょうか。

481:デフォルトの名無しさん
08/11/23 08:18:26
つーか、VC++2008EEならそんな面倒なコトしなくてもSP1あてれば ml ver9が勝手に入んないか?

482:478
08/11/23 08:51:08
with SP1なるものが出ていたんですね。今から入れ直します。どうもです。

483:デフォルトの名無しさん
08/11/23 18:04:37
c言語のscanfと同じようなことをアセンブラで実行したいんですけど
どういうプログラムを書いたらいいか分かりません
どなたかヒントください

484:デフォルトの名無しさん
08/11/23 18:49:42
Cのscanfをアセンブラから呼べばいい。

485:デフォルトの名無しさん
08/11/23 18:50:15
>>483
地道に解析するしかない。

486:デフォルトの名無しさん
08/11/23 23:04:55
アセンブラって、書くのは労力いりそうですが、習得するのは簡単
ですよね?C言語とかよりも。

487:デフォルトの名無しさん
08/11/23 23:07:18
プロセッサによる。IA64のアセンブラは死ぬるぞよ。

488:デフォルトの名無しさん
08/11/23 23:07:51
x86は?

489:デフォルトの名無しさん
08/11/24 04:54:02
>>483 「可変個の引数リスト」 を扱うってとこがミソかな。
引数リストの場所を覚えておくポインタを設ければいい。cではそのような書き方をしてるはず。

490:デフォルトの名無しさん
08/11/24 10:17:20
インラインアセンブラを使う場合に
_asm{}と__asm{}と2種類を見かけたのですが、どう違うのでしょうか。

491:デフォルトの名無しさん
08/11/24 13:47:53
>>488
IA64よりは簡単。VLIWのアセンブラは人間が書くものじゃねえ。
まあ32bitでRing3だけなら簡単な方じゃないかと思う。

>>490
書き方。


492:デフォルトの名無しさん
08/11/24 20:41:41
IA-64はバンドルに無理やり詰め込まなければ難しくない。

493:デフォルトの名無しさん
08/11/24 21:51:34
IA-64というかItaniumって、けっきょく商業的には失敗作なんでしょ?
消えゆく運命か?

494:デフォルトの名無しさん
08/11/25 00:09:38
HPC用途でもうしばらくは・・・

まあ、そもそもアセンブラでガリガリ書くようなプロセッサじゃないし

495:デフォルトの名無しさん
08/11/25 08:32:10
とりあえず漠然とアセンブリを学習する場合は、16ビットプログラミングが
初心者にはいいの?
32ビットでも変わらない?

496:デフォルトの名無しさん
08/11/25 09:30:17
実行環境を確保できるものにしとけ。


497:デフォルトの名無しさん
08/11/25 22:24:25
MS-DOS はアセンブリ言語勉強するのにいい環境だったな・・・。
割り込みとか簡単にできたし。

498:デフォルトの名無しさん
08/11/26 17:36:49
16ビットっていうと今では無用なセグメント方式とか思い出すな

499:デフォルトの名無しさん
08/11/26 18:26:22
Linuxとかだとアドレッシングにセグメント機能通してるし、方式自体は生きてるけどなあ・・
でもいつまで残るんだろね。
Intelがそれを望む限り続くんだろうけどさ。


500:デフォルトの名無しさん
08/11/26 19:17:20
Linuxってどこでセグメントレジスタ活用しているの?
4GBフラットアドレスに設定しているだけだと思うのだが。

501:デフォルトの名無しさん
08/11/26 19:19:41
>>500
>4GBフラットアドレスに設定しているだけだと思うのだが。

え?そこで使ってるじゃんセグメントレジスタ。

502:デフォルトの名無しさん
08/11/26 19:20:30
だったらWindowsもそだね

503:デフォルトの名無しさん
08/11/26 19:22:09
Win2Kまで使えたOS/2 1.x 互換モードが何気に変態ぽくて好きだったな。

504:デフォルトの名無しさん
08/11/26 19:25:05
フラットに使うだけだと「活用」してるとは言えないな。
32ビットCPUでメモリ空間を拡張するカーネルオプションとか
あったような気もするけど...

505:デフォルトの名無しさん
08/11/26 19:35:37
>>501
それいったら、どうやってセグメントレジスタ抜きでx86を使うの。
64ビットモードならセグメントレジスタ無視が基本だから、使っていないと言えるだろうけど。

そういえば、x86-64はAMD発だから、
Intelはセグメントレジスタ潰したいのだろうと言う根拠に使うのは苦しいな。

506:デフォルトの名無しさん
08/11/26 19:56:47
x86版のWindowsは構造化例外処理にセグメントを思いっきり使っているが

507:デフォルトの名無しさん
08/11/26 20:00:52
いつの間にか追加され忘れ去られてしまったFSとGSのこと、時々でいいから思い出してください。

508:デフォルトの名無しさん
08/11/26 20:32:34
FSは例外で使われてるね

509:デフォルトの名無しさん
08/11/26 22:02:34
FSとGSはほんとに気が付いたらあった感じだね
386以降だっけか

510:デフォルトの名無しさん
08/11/26 22:18:21
Windowsのカーネルで使用するKPCR構造体はx86ではFS、x64ではGSを使ってアクセスしているよ。


511:デフォルトの名無しさん
08/11/26 23:02:29
GSって自由に使ってもいいの?

512:デフォルトの名無しさん
08/11/26 23:15:13
何をしたいのか環境によるっしょ

513:デフォルトの名無しさん
08/11/27 01:51:03
486から後のセグメントの意味と、386から前のセグメントの意味を混同している奴は恥ずかしいぞ。

514:デフォルトの名無しさん
08/11/27 02:11:51
すまん386と486の間のセグメントの違いはわからん。
リアルモードとプロテクトモードの違いのことじゃないよね?

515:デフォルトの名無しさん
08/11/27 02:34:49
それって、386以降のプロテクトモードでのメモリー空間マッピング機能とか領域保護機能のためのレジスタになったってやつ?

516:デフォルトの名無しさん
08/11/27 05:48:17
513は恥ずかしい奴。

517:デフォルトの名無しさん
08/11/27 11:02:24
513は386と286と言いたかったのだと思われ。

リアルモードとプロテクトモードと言い換えてもいいか。

518:デフォルトの名無しさん
08/11/27 11:15:39
286にも16bitプロテクトモードなんていうものがあって、186と286の間ではないかと。


519:デフォルトの名無しさん
08/11/27 11:24:28
GS, FSセグメントレジスタの使用、アドレッシングを目的を除く32Bitレジスタの使用は、
386以降ならリアルモードでも仮想86でも可能。
もちろんこのモードでのセグメントレジスタは伝統的な4ビットシフト型となる。


520:デフォルトの名無しさん
08/11/27 12:01:43
リアルモードに戻った直後のセグメントレジスタ更新前なら
プロテクトモード時に設定されたアドレスにアクセス可能

521:デフォルトの名無しさん
08/11/27 12:51:31
4Gリアルモードとか呼ばれてる奴ですな

522:デフォルトの名無しさん
08/11/27 14:18:52
いい加減、モード大杉

523:デフォルトの名無しさん
08/11/27 15:54:15
今でもSSとCSを別にしているOSがあると聞いたことがある。セキュリティ上の理由で。
詳細は知らんが。



524:デフォルトの名無しさん
08/11/27 21:10:15
Windowsがアプリケーションのメモリ空間の拡張にAWEなんてやっていたけど、
そんなことするくらいならセレクタ復活させたらいいのにと思っていた。

525:デフォルトの名無しさん
08/11/27 21:52:51
>>523
Windowsのカーネルモード時のセグメントセレクタの基本値
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000

CS!=SSですね。

>>524
それじゃAWEのかわりにならんだろ。

526:デフォルトの名無しさん
08/11/27 22:03:31
>>525
セレクタが違ってもディスクプリタが同じ領域をポイントしてる可能性もあるのでは。

527:デフォルトの名無しさん
08/11/27 22:41:20
>>523
Linuxとかそこらへん向けにそういう実装があったな、名前忘れたが。
4G全域でなく、必要な部分だけにきっちりセグメント範囲を限定することで
想定外のアクセスでフォルト起こすようにするんだったか。

528:デフォルトの名無しさん
08/11/28 01:36:24
>>522
だって互換性が・・・。

529:デフォルトの名無しさん
08/11/28 03:06:03
互換を言うならx64のロングモードに仮想86を復活汁

530: ◆0uxK91AxII
08/11/28 05:02:04
>>525
>>526
手元にあるW2kのkernelModeだと、同じ場所を示していた。

CS:0008 SS:0010 DS:0023 ES:0023 FS:0030 GS:0000
GDT base:80036000 limit:03ff
0: 00 00 00 00 00 00 00 00
1: 00 cf 9b 00 00 00 ff ff
2: 00 cf 93 00 00 00 ff ff
3: 00 cf fb 00 00 00 ff ff
4: 00 cf f3 00 00 00 ff ff
5: 80 00 8b 2c 10 00 20 ab
6: ff c0 93 df f0 00 00 01

どうでも良い事だけどね。

531:デフォルトの名無しさん
08/11/28 09:50:53
アセンブリの入門書を2冊持っているのですが、どちらも実数定数に
ついては、簡略・割愛しているのですが、実数定数は初心者には
複雑なのでしょうか?
実数の計算できないとお話にならない気もしますが…

532:デフォルトの名無しさん
08/11/28 10:01:44
複雑です
浮動小数点が必要な場面でアセンブラを使うような人なら
そのあたりの情報はだいたい見つけられます

533:デフォルトの名無しさん
08/11/28 10:50:32
>>531
何のアセンブラかにも拠るからねぇ。定数ロードのインストラクションを持つチップもあることだし、大した話じゃないけどね。

>>532
それは、フォーマットが複雑だといっているのか?

534:デフォルトの名無しさん
08/11/28 11:15:53
>>533
入門書を読んでる人にとっちゃ、いろんな意味で複雑でしょ
一通り分かった人ならともかく

535:デフォルトの名無しさん
08/11/28 12:36:20
アセンブラ使いが実数?
何を頓珍漢な事言ってるんだ??

実数演算が必要な所では計算式も煩雑だろうに
素直に高級言語使ってろって話だと思うがな。

536:デフォルトの名無しさん
08/11/28 12:40:33
例えばこんなコードなら複雑でもなんでもないじゃん。
# 実在するかは兎も角
invPi: ld rf0, #1.0
 ldpi rf1
 div rf0, rf1
 ret

>>535
そうは言うがな大佐、読める能力はあるに越したことはないと思うぞ。

537: ◆0uxK91AxII
08/11/28 13:55:39
例えば、100.0を掛ける場合、この値をどう書くかとか、そういう辺りだろうね。

538:デフォルトの名無しさん
08/11/28 14:52:44
アセンブラが実数をサポートしていないなら諦める。

539:デフォルトの名無しさん
08/11/28 14:54:24
CPUやアセンブラを限定しないと答えようが無いうえ、定数が何を指してるかもあいまいかな。
1.実数計算機能が無いCPU
2.実数計算機能があり、直値のロードができないCPU
3.実数計算機能があり、直値のロードが可能なCPU
と分けるとx86系は2になるので、x86で定数は静的なデータとして定義する必要がある。
 .DATA
hoge  REAL8  10.12345
 .CODE
  FLD  hoge
  FLDPI ; 円周率の定数ロードは専用命令があったりする。

540:デフォルトの名無しさん
08/11/28 19:44:11
x86 の実数計算は、浮動小数点レジスタの扱いがすげー面倒なので覚えてないわ・・・。
SSEx 使った方が楽なんじゃないか。

541:デフォルトの名無しさん
08/11/28 23:39:33
>>539
ボクの486SXマシンじゃ実行出来ません ><

542:デフォルトの名無しさん
08/11/29 00:34:00
>>541
Win9xやNTのWin32アプリならx87のエミュレーションやってくれる。

>>540
XMMをスカラで使うと何か損した気分になる。

543:デフォルトの名無しさん
08/11/29 11:03:27
MS-DOSでアセンブラするには16ビット版リンカってのが必ずいるの?

544:デフォルトの名無しさん
08/11/29 11:17:51
いるよ~。
アセンブラはVS2008についてくるWin32用のでいけるけどね。

545:デフォルトの名無しさん
08/11/29 11:50:46
どうもです。
lnk563.exeなるものを調達してきて、その中からlink.exeを取り出しました。
試しに実行ファイルを作ってみようと、ml ver9とそのlink.exeをasmファイルの
あるディレクトリにぶちこんで
ml /omf ???.asm
と打ち込んだら、アセンブルは完了したのにリンカが自動呼び出しさせません。
なぜでしょうか。

546:デフォルトの名無しさん
08/11/29 12:24:51
>>545
>リンカが自動呼び出しさせません
って、実行のことか?

547:デフォルトの名無しさん
08/11/29 12:40:35
32bit用と16bit用でLinkの引数の書式が違うから、呼び出す前に互換があるか確認してるのかも。

548:デフォルトの名無しさん
08/11/29 13:03:56
/omf オプション自体が /cと同じでlinkerの呼び出しを行わなくする作用がある。

549:545
08/11/29 13:10:02
確かに、32ビットリンカだと、mlコマンド打てば自動で呼び出されますね。
ただし、OMF形式でなくて、COFF形式でオブジェクトファイルを作成する
必要がありますが…。
16ビットの場合はOMF形式じゃないとだめらしいのですが、それで作っても
リンカは呼び出されません。自前で全部引数入れなきゃだめですかね。


550:デフォルトの名無しさん
08/11/29 18:37:46
ダメです。ちゃんとmakefileを作るか諦めてバッチでどうぞ。

551:545
08/11/30 00:52:02
そうですか、どうもです。

552:デフォルトの名無しさん
08/12/02 12:10:42
突然ですが、レガシーなDMAコントローラを使う場合、
CPUのキャッシュとDMAによる物理メモリへの書き込みとを同期させる
には、far jmp 命令を実行すれば良かったんでしょうか?

553:デフォルトの名無しさん
08/12/02 14:56:45
x86でのDMA転送は、I/O Agent が勝手にsnoopして、物理メモリとキャッシュ
と同期する、という噂がありますが、正式な資料がどこかにありませんかね。

IA-32 Intel Architecture Software Developer's Manualの
Volume 3「System Programming Guide」 の 9.3.2節の以下の
部分に何となく書かれていますが、「できる(can performe)」ことと
「実際にそうなっている」事とは別ですから。

9.3.2. Choosing a Memory Type
The simplest system memory model does not use memory-mapped I/O with read or write side
effects, does not include a frame buffer, and uses the write-back memory type for all memory.
An I/O agent can perform direct memory access (DMA) to write-back memory and the cache
protocol maintains cache coherency.

554:a
08/12/02 15:06:54
age

555:デフォルトの名無しさん
08/12/03 00:04:07
>>553
ハードの実装次第

556:デフォルトの名無しさん
08/12/03 00:59:39
>>552
far jmpはパイプラインが捨てられるだけだ。
キャッシュきれいにしたけりゃwbinvdあたり使わねば。




557:デフォルトの名無しさん
08/12/03 01:47:07
>>556
自己書き換えコードの直後に jmp するというのはキャッシュ・クリア
ではなくパイプライン・クリアでしたっけ?

言われてみれば、データ用のキャッシュは、CPU自身の書き換えでは
整合するに決まってますね。

558:デフォルトの名無しさん
08/12/03 01:53:55
>>555
PCIは、あるデバイスがマスターになって、メモリに転送する機能が
定められている。Legacy DMAは、ISAバスに繋がっているが、ISAバスは
ISA-PCIブリッジによってPCIバスに繋がっている。

Legacy DMA転送は、PCIのこの転送機能を利用しているのだろうか?

559:デフォルトの名無しさん
08/12/04 02:16:42
>>558
そりゃブリッジがバスマスタになってごにょごにょしなけりゃ、
DMAにならんだろう。


560:デフォルトの名無しさん
08/12/04 07:53:34
>>559
PCIバスマスタ転送は、自動的にチップセットによってsnoopされ、
CPU内部のキャッシュと同期が取られるはずなので、
Legacy DMA 転送も、CPUの内部キャッシュと勝手に同期される
ということで正しいのだろうか。

561:デフォルトの名無しさん
08/12/04 09:34:17
されなきゃ8237直に叩くような行儀の悪いコードが
動かなくなってしまうのではないかと。

ISAのバスマスタなんてとんでもないモノは無理だと思うが。


562:デフォルトの名無しさん
08/12/04 10:03:45
>>561
てっきり、仮想8086モードでjmp far ptrを行うと、キャッシュや
パイプラインなどが実メモリと同期される性質(未確認)を使っているの
かと思ってますた。

チップセット内蔵の8237同等パーツは、今でも実メモリに直に繋がっている
ようにエミュレートされているのかと思ってましたが、そうではないの
かも知れませんね。

今は、絶対に、PCIのバスマスタ転送を利用していて、勝手にsnoopされて
いるんだという明確な証拠が欲しいですが。

563:デフォルトの名無しさん
08/12/04 22:02:23
少なくとも論理的にはPCIデバイスの先につながっているようになっている。
ちなみにキャッシュは気にする必要がない。そうでなければ既存のOSが動かなくなる。

564:デフォルトの名無しさん
08/12/09 06:21:42
>>563
便乗質問ですが、この場合CPUからの書き込みも何も気にする必要がないんでしょうか?
それともドライバーで何かの処理(DMAの領域はキャッシュ不可(ライトスルー)にする
等)が必要でしょうか?

ちなみにむかーし自分がm68kの乗ったマシンのドライバを書いた時はその手の処理を
したように記憶しています。今どき(?)のx86 & PCIのドライバに関してこの辺の知識を
得たいと思ったら何かお勧めの書籍等ありますかね?

565:デフォルトの名無しさん
08/12/10 14:18:11
ちょっと質問しまつ

使うアセンブラはyasm

汎用32ビットレジスタは eax,ebx,ecx,edx とかあるけど
汎用64ビットレジスタって rax,rbx,rcx.. .とか先頭にrを付けるのでいいのかな

566:デフォルトの名無しさん
08/12/10 14:43:38
ドキュメント読まないYUTORIか

567:デフォルトの名無しさん
08/12/10 20:59:37
>>566
読まないんじゃなくて読めない
ゆとりです

568:565・567
08/12/10 21:48:48
自己解決しますた
nasmのドキュメソトにレジスタ名載ってますた

>>566


569:デフォルトの名無しさん
08/12/11 03:34:33
ARMなんですが,実行ファイル(ELF)を無理矢理で良いので
アセンブラの段階まで書き下してくれるようなソフトってすでにあったりしませんか?

FF DE FF E7 FF DE ・・・・・・

bx lr

なんていうかこんな感じで

570:デフォルトの名無しさん
08/12/11 03:50:02
>>569
あったな、あった。
昔はそんなの沢山あったな。

まあ、難しいもんでもないから自分で作ってみたら?

データとプログラムの区別とか、ジャンプテーブルの解釈がミソだぜ。

571:デフォルトの名無しさん
08/12/11 03:50:36
objdump -D

572:デフォルトの名無しさん
08/12/19 16:44:55
win32+VC++で、逆アセした関数をC++に組み込むのに安全で手っ取り早い方法を教えてケロ

573:デフォルトの名無しさん
08/12/19 17:02:33
MASMで書いてリンクじゃ駄目なの?

574:デフォルトの名無しさん
08/12/19 19:32:32
>>572
違法行為やめろ

575: ◆0uxK91AxII
08/12/19 19:48:25
途中でdisassembleしている辺りが、被効率的杉で、ハナシにならない。

576:デフォルトの名無しさん
08/12/19 20:28:38
>>574
なにがどう違法行為なんだかw

もうすぐ合法になって、契約による縛りも無意味になるご時世だというのに。

577: ◆0uxK91AxII
08/12/19 20:40:06
被 -> 非

VirtualAllocで確保して、書き込んで、呼べばokな気がするする。

578:デフォルトの名無しさん
08/12/20 01:18:10
それだと使いたい所が空いてなかったら困らんかい?

適当にもらってから頑張って再配置とか。


579:デフォルトの名無しさん
08/12/20 10:52:50
>>577
それじゃ命令内のアドレスが無茶苦茶だろ。

580: ◆0uxK91AxII
08/12/20 10:58:24
(゚Д゚)ハァ?
バカは死ね。

581:デフォルトの名無しさん
08/12/20 11:00:48
絶対ジャンプや静的変数の扱いをどうすんの。

582: ◆0uxK91AxII
08/12/20 11:04:14
関数に、そんなモノは無い。

583:デフォルトの名無しさん
08/12/20 11:05:50
゚o゚

584: ◆0uxK91AxII
08/12/20 11:14:57
572が想定している関数に、そんなモノは無い。
...と書くべきだったか。

585:デフォルトの名無しさん
08/12/20 11:22:07
もちろん無いなら問題ないんだが、
どうして何の情報も出してない572の想定が分かるのだろうか。

586: ◆0uxK91AxII
08/12/20 11:25:37
『手っ取り早い』という条件があるからね。
とにかく、バカは死ね。

587:デフォルトの名無しさん
08/12/20 13:22:16
・・・これはひどい。

588:デフォルトの名無しさん
08/12/21 11:56:49
取り敢えず、>572が諦めれば済むな。

589:デフォルトの名無しさん
08/12/21 20:09:21
アセンブラを安全に使うなんて、無理だろ。つうか使う意味が無い。
危険だけど好きな事が出来るのがアセンブラの醍醐味なんだからな。

590:デフォルトの名無しさん
08/12/22 08:24:12
危険つっても攻殻機動隊の世界みたく脳が焼かれるわけじゃなし

591:デフォルトの名無しさん
08/12/22 14:03:18
無茶すりゃOSに怒られるしなあ…


592:デフォルトの名無しさん
08/12/22 15:45:23
MS-DOS の時代に比べれば、みんな安全なプログラムだよなぁ。

593:デフォルトの名無しさん
08/12/23 10:31:13
そうだねえ。
ハード叩きまくりだったからなあ。

再起不能になって修理するハメになったり…


594:デフォルトの名無しさん
08/12/28 00:52:29
32ビットは対象外かな?

595:デフォルトの名無しさん
08/12/28 01:00:40
いくらでもOK

596:デフォルトの名無しさん
08/12/28 08:44:52
アセンブラ勉強ならmasm使うべき

597:デフォルトの名無しさん
08/12/29 01:21:28
x86が基本ってことはないと思うが・・。

598:デフォルトの名無しさん
08/12/29 07:11:30
目の前にあるじゃない

599:デフォルトの名無しさん
08/12/29 09:01:18
基本中の基本ということなら68000かな。

600:,,・´∀`・,,)っ-●◎○
08/12/29 09:11:44
そこはMMIXwareだろう



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch