アセンブラを勉強しよ ..
[2ch|▼Menu]
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
お邪魔します。基本情報処理試験(午後 アセンブラ)の問題集を解いているのですが
解らない問題で行き詰りました。
こちらで教えて頂ますでしょうか?
スレ違いでしたら申し訳ございません。(CASLU 福嶋宏訓 著)

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って自由に使ってもいいの?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5189日前に更新/148 KB
担当:undef