1211229
Jun's Homepage
[トップに戻る] [留意事項] [ワード検索] [過去ログ] [管理用]
お名前
Eメール
タイトル
メッセージ
参照先
暗証キー (英数字で8文字以内)
投稿キー (投稿時 を入力してください)
文字色

SL-B500のフレームバッファ 投稿者:jun 投稿日:2003/01/26(Sun) 01:37 No.153  
SL-B500のフレームバッファを試してみました。

cat xxxx >/dev/fb0

のように適当なファイル(上記の例ではxxxx)をフレームバッファ
に書き込むと画面左から縦にファイルが表示されます。
画面左下から右上に16bit/pixelになっている模様。

画面を完全に戻すには、左下のメニューから「画面デザイン設定」
を選んで画面デザインを再設定すると戻ります。

Qtを無視して画面操作するプログラムを書いてみようかな。


SL-B700のフレームバッファ ODIN - 2003/01/26(Sun) 23:33 No.154  

こんばんは、ODINです。

700で試してみましたが、やはり左下から右上に向かって縦に
表示されました。当たり前かもしれませんが、コンソールを縦に
切り替えても、フレームバッファの使い方は同じでした。


自己補足です。 ODIN - 2003/01/27(Mon) 03:59 No.157   <Home>

こんばんは、再度ODINです。

ちょっと解りにくい説明を書いてしまったので補足します。
試しに480*200,16bitのお絵かきソフトを作ってみました。

表示させると↓のようになりました。
http://www.geocities.co.jp/CollegeLife-Labo/9890/zaurus/image/fb0.gif

ちなみに、この画像もフレームバッファから頂いたのを適当に表示ソフトを
作って表示させてみたんですが、ちょっと色が変・・・計算ミスですね。


Re: SL-B500のフレームバッファ jun - 2003/01/27(Mon) 22:24 No.158  

4時間で作ってしまったのですか?

C700でも左下からなのですね。画面の向きが違うので
B500では[Q]の左下から塗られるため、メニューアイコン
が潰れてしまいます。


SL-B700のフレームバッファ 2 ODIN - 2003/01/28(Tue) 23:15 No.159   <Home>

こんばんは、ODINです。

C700でもQVGAモードだとフレームバッファの扱いが異なるようでした。
http://www.geocities.co.jp/CollegeLife-Labo/9890/zaurus/image/fb1.gif

画面サイズも240*320になるので、おそらくA300やB500と同じ値を使えるのだと思います。


Re: SL-B500のフレームバッファ jun - 2003/01/29(Wed) 00:27 No.160  

こんばんは、ODINさん。

図で解説ありがとうございます。
/usr/sbin/fbset を実行した場合、C700では各モードでどのような結果になりますか?

B500では、~$ /usr/sbin/fbset

mode "320x240-0"
    geometry 320 240 320 240 16
    timings 0 0 0 0 0 0 0
    accel false
    rgba 5/11,6/5,5/0,0/0
endmode

となります。geometryの行は
xres, yres, xres_virtual, yres_virtual, bits_per_pixel
の順に表示されています。





SL-B700のフレームバッファ 3 ODIN - 2003/01/29(Wed) 01:35 No.161   <Home>

こんばんは、ODINです。以下のような結果になりました。

mode "480x640-813802"
    geometry 480 640 480 640 16
    timings 4 0 0 0 0 0 0
    accel false
    rgba 5/11,6/5,5/0,0/0
endmode

mode "320x240-3255208"
    geometry 320 240 320 240 16
    timings 4 0 0 0 0 0 0
    accel false
    rgba 5/11,6/5,5/0,0/0
endmode


SL-C700のフレームバッファ 4 ODIN - 2003/01/29(Wed) 01:52 No.162   <Home>

こんばんは、再度ODINです。
フレームバッファイメージ作成ソフトを作ってみました(VB製)。
まだ作りかけなんですが、フレームバッファのテスト等に使えるのではと思いまして。

http://www.geocities.co.jp/CollegeLife-Labo/9890/zaurus/tool/orm010.lzh


SL-C700のフレームバッファ 5 ODIN - 2003/01/30(Thu) 00:26 No.164   <Home>

こんばんは。またODINです。
前回のは要ocxだったので不要にしました。VB5の基本dllのみなので
XPなどではそのまま使えると思います。

http://www.geocities.co.jp/CollegeLife-Labo/9890/zaurus/tool/orm011.lzh


Re: SL-C700のフレームバッファ5 jun - 2003/01/30(Thu) 01:35 No.165  

WindowsXP SP1 では、そのまま動作することを確認しました。

bmp, gif, jpg 形式の画像ファイルをLinux Zaurusの
フレームバッファにそのまま書き込める形式に変換する
ツールですね。


Re: Re: SL-C700のフレームバッファ5 ODIN - 2003/02/04(Tue) 07:50 No.167   <Home>

おはようございます、ODINです。
試していただいてありがとうございます。

> bmp, gif, jpg 形式の画像ファイルをLinux Zaurusの
> フレームバッファにそのまま書き込める形式に変換する
> ツールですね。

その通りです。よく考えたら説明が何もなくて・・・すみませんでした。


A Happy New Year! 投稿者:jun 投稿日:2003/01/01(Wed) 00:15 No.137  
皆様、ことしもよろしく。

年末からの風邪からやっと回復、5時間前に Linux Zaurus
SL-B500を買ってきました。 SL-C700 を買わなかった理由は
字が小さすぎるため。
PDA として使うよりターミナルを開いて、ずっと bash を
使っています。いまのところコマンドは cd と ls ばかり。
GNU AS で arm のクロス開発環境でも用意しようかな?


B500続報 jun - 2003/01/01(Wed) 03:18 No.138  

これは楽しい。/etc/inetd.conf を触って telnet を使えるようにした。
B500 のキーボードがちっちゃいので親指が痛くなってきたが、
PC から telnet (セキュリティの話は無視) でログインすることで解決。
PC を使えるときは普通に、使えなくてもそれなりにLinuxを弄る
ことができる。電池の持ちがいいのもGood!

さて、もう寝ます。


Re: A Happy New Year! ODIN - 2003/01/05(Sun) 15:34 No.145  

あけましておめでとうございます。ODINです。

SL-B500ですか。私も某大型量販店にて500と700を触ってみましたが、
かなり欲しくなってしまいました。

正月から物欲いっぱいで困ったものです(^-^;


B500続報 jun - 2003/01/05(Sun) 22:52 No.146  

あけましておめでとうございます。ODINさん。

ずっとB500を触っています。
Linux母艦上にクロスコンパイル環境を作って、
arm用にコンパイルしたbinutilsをB500に持って来ました。

これでB500上でセルフアセンブルできるようになったので、
システムコールの仕組みを調べたところ、
r0レジスタから順に引数を格納してソフトウェアインタラプト

swi #0x900004

(この場合は sys_write)でシステムコールができることが判明。
現在、ターミナル上で文字を表示することに成功しました。
これからARMのアセンブラの勉強です。

Zaurusの使い方、間違ってるような気も?


B500続報 jun - 2003/01/07(Tue) 01:01 No.147  

アマゾンで注文した Arm Architecture Reference Manualが到着。
800ページ強で6000円ほど。国内在庫の最後の1冊でした。
MIPSよりARMの方が好きになるかもしれない予感。

Palm(WorkPad c3)のデータを移行したのでPDAとしても使う予定。


Zaurus ODIN - 2003/01/12(Sun) 18:46 No.150  

こんばんは、ODINです、

結局、我慢できずに買ってしまいました。SL-C700です。
これから色々触ってみたいと思います。


SL-C700 ですか jun - 2003/01/12(Sun) 20:50 No.151  

C700は人気のようですね。
私は充電が面倒なのでB500に決めました。

ずっとアセンブラを使っていて、単にARMのLinux Box
になってしまっています。10進数と16進数の表示が
できるようになりました。ARM(XScale)は面白いCPUです。


どうやら・・ 投稿者:志穂 投稿日:2003/01/07(Tue) 04:58 No.148  
>よくわかりませんが、(5+1)=5+1 と同じように
>単に式のように思います。symbol がすでにsymbolの値を
>アドレスとするメモリ内容を意味しているので、(symbol)
>も同じではありませんか?

junさんの言うとおり、これは式のようです。
で、
(%ebx)のようにレジスタを介すときのみ、
間接アドレッシングとなるみたいです。
少しずつですが、みえてきたようです。
ありがとうございます!



Re: どうやら・・ 志穂 - 2003/01/08(Wed) 13:24 No.149  

http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html
をみると
以下のような記述がありました。


Addressing what a register points to:

AT&T: (%eax)
Intel: [eax]

"what a register points to"
より、
レジスタが指しているものにアドレッシング
する場合に括弧で囲むっていうことなので、
レジスタでなければ単なる式ってことで
いいみたいですね。


ポインタかな? 投稿者:志穂 投稿日:2003/01/03(Fri) 20:34 No.142  
http://paran0ia.virtualave.net/documents/asm1.html
でみつけたんだけど、
文字列
char *var="abcDE"; # C言語
var: .ascii "abcDE" # アセンブラ

だとすると、
varは文字列の先頭アドレスを保持していることになりますね。
すると、これは
movl (var),%eax
文字列の先頭アドレスから、4バイト分を%eaxに転送しなさい
と解釈していいのかな?






Re: ポインタかな? jun - 2003/01/03(Fri) 21:58 No.144  

そのサイトにも連絡先があるので、聞いていただければと...
まあ、そういうことだと思います。


あけましておめでとうございます。 投稿者:志穂 投稿日:2003/01/02(Thu) 03:43 No.139  
お久しぶりです。今年もご指導よろしくおねがいします。
・・で、いきなり質問です。

Intelマシンなんですが、

.data
string: .ascii "abcdef"

movl string,%eax・・・@
movl $string,%ebx・・A
movl (string),%ecx・・・B
movl (string+1),%edx・・・C

@は、変数名になにもついていないので、
アドレス$string、すなわち変数stringの先頭アドレスの
メモリの内容を転送している。
で、
Aは、変数の先頭に$がついているので、これは
変数stringのアドレス値を転送している。

さて、問題はB、Cなんです。

デバッグすると、%ecxには'a'が、%edcには'b'が
転送されていることがわかりました。

これがわからないんです。

(string)のstringはなんですか?
変数名の先頭になにもついてないので、
メモリの内容ということになってしまいます。
()はポインタをあらわすんですよね?
(%ebx)だったら、%ebxがさすメモリの内容を意味するんです
よね。
そうやって考えていくと、stringっていうのは
いったいなに?みたいな。
ここで、もうこんがらがってしまって・・・
で、
今みている教科書には、
共通領域arrayがメモリ上に12バイトとられているとすると
movl $4,array+2

のようなことができるとあるんですが、
arrayはメモリ内容ですよね。
とすると、array+2という表現はおかしいようにおもうんです。
これって、($array+2)と解釈されているんですかね?
つまり、アドレス$array+2のメモリの内容と。
それならつじつまがあうんですが。

新年早々、質問攻めですが、回答よろしくお願いします。



Re: あけましておめでとうございます。 jun - 2003/01/03(Fri) 16:33 No.140  

> デバッグすると、%ecxには'a'が、%edcには'b'が
> 転送されていることがわかりました。

%ecx には "dcba", %edx には "edcb" ではないですか?
%cl と %dl はそれぞれ "a" と "b" になると思いますが。

> (string)のstringはなんですか?
> 変数名の先頭になにもついてないので、
> メモリの内容ということになってしまいます。
> ()はポインタをあらわすんですよね?

シンボルの場合もポインタですか?
$symbol の場合はアドレスというより、即値です。

> * AT&T immediate operands are preceded by `$'; Intel immediate
> operands are undelimited (Intel `push 4' is AT&T `pushl $4').
> AT&T register operands are preceded by `%'; Intel register operands
> are undelimited. AT&T absolute (as opposed to PC relative)
> jump/call operands are prefixed by `*'; they are undelimited in
> Intel syntax.

ということです。

> そうやって考えていくと、stringっていうのは
> いったいなに?みたいな。

この場合の string はシンボルで32bit整数につけた名前です。


Re: あけましておめでとうございます。 志穂 - 2003/01/03(Fri) 20:24 No.141  

レスありがとうございます!

>%ecx には "dcba", %edx には "edcb" ではないですか?
>%cl と %dl はそれぞれ "a" と "b" になると思いますが。

そのとおりです!
デバッグの仕方に問題がありました。
display/c $ecx
とやっていたのです。これだと、一文字しか出力されないん
ですよね。
それにIntelなんで、リトルエンディアンでした!

低位アドレス
| a・・アドレス$string
| b
| c
| d
| e
| f
v
高位アドレス

movl (string),%ecx・・・B
の場合、
l・・4バイト転送なので、
低位から4バイト分(abcd)転送される。

ah|al
--+---
dc|ba



movl (string+1),%edx
の場合、
bcdeの4バイトが転送される。

ah|al
--+--
ed|cb

・・・ちょっとあいまいにしてるところなんですが、
ahは高位レジスタなので、高位のアドレス2バイト分が
格納され、alは低位レジスタなので、低位アドレス2バイト
分が格納される
と考えていいのでしょうか?

で、結局、
(string)はいったいなんなんでしょう?

>シンボルの場合もポインタですか?
いいえ。シンボルってのは識別子のこと?
だとしたら、メモリの内容です。
変数名になにもつけないと、メモリ内容と
いうことになります。

stringは、変数名になにもついてないので
通常はメモリ内容でしょ?
それともこう考えるのでしょうか?
変数名は、CPUが理解できるようなアドレス値に変換される
ので、stringはアドレス値である。
すると、(string)はポインタ?
・・・またあいまいになってきてしまいました。
たとえば、%ebxがアドレスXを保持しているとしたら、
movb (%ebx),var
ならば、アドレス%ebxのメモリの内容を変数varのメモリ内容に転送しろ
ということになりますよね。
(string)のstringはアドレス値だとしても、
stringがそのアドレス値を保持しているわけでは
ない。stringは単なるラベルだ。
・・・頭痛くなってきました。
お助けを。


Re: あけましておめでとうございます。 jun - 2003/01/03(Fri) 21:54 No.143  

よくわかりませんが、(5+1)=5+1 と同じように
単に式のように思います。symbol がすでにsymbolの値を
アドレスとするメモリ内容を意味しているので、(symbol)
も同じではありませんか?

GASのAT&Tのsyntaxがわかりにくいのでnasmに逃げています。

ところで、EAXの下位2バイトはAH と AL に各1バイト保持されます。
EAXの上位2バイトは直接1バイトずつアクセスすることはできません。
16ビット右シフトして、AXに入れてからアクセスします。


junさん、すみません。 投稿者:志穂 投稿日:2002/12/25(Wed) 23:23 No.133  
・・とたんにわかんなくなってきちゃった。
ちょっとまとめてから質問するね。
あー、もう最悪。


Re: junさん、すみません。 jun - 2002/12/27(Fri) 01:35 No.134  

いったい、なんだろー。。。

気になりますよね。>皆様


Re: junさん、すみません。 ODIN - 2002/12/27(Fri) 12:44 No.135  

こんにちは。ROMばっかりのODINです。
「>皆様」と言われたので出てきてしまいました(^-^


Re: junさん、すみません。 jun - 2002/12/27(Fri) 23:23 No.136  

ODINさん、お久しぶりです。
風邪で寝たきりのjunでした。


質問です。教えて下さい。 投稿者:志穂 投稿日:2002/12/25(Wed) 20:00 No.131  
[@//test]cat test2.c
#include<stdio.h>

int a[3];
int main(void){
a[0]=3;
a[1]=5;
a[2]=9;
return 0;
}
[@//test]cat test2.s
.file "test2.c"
.version "01.01"
gcc2_compiled.:
.text
.align 4
.globl main
.type main,@function
main:
pushl %ebp
movl %esp,%ebp
movl $3,a
movl $5,a+4
movl $9,a+8
xorl %eax,%eax
jmp .L2
.p2align 4,,7
.L2:
movl %ebp,%esp
popl %ebp
ret
.Lfe1:
.size main,.Lfe1-main
.comm a,12,4
.ident "GCC: (GNU) 2.95.3 19991030 (prerelease)"
[@//test]


このときですね、

.comm a,12,4

は、

「共通領域に12バイト(=int x 3 = 4バイト x 3)を取る。
 ただし、その領域の先頭アドレスは相対アドレスaとする」

と解釈して問題ないでしょうか?


Re: 質問です。教えて下さい。 jun - 2002/12/25(Wed) 21:34 No.132  

それでいいと思います。


Perlなんだけど・・ 投稿者:志穂 投稿日:2002/12/17(Tue) 03:29 No.113  
junさんは、Perlにも明るいですか?
バイナリファイルを読むところで
苦しんでるんだけど。。
unpackの使い方がよくわかんなくて。


Re: Perlなんだけど・・ jun - 2002/12/17(Tue) 22:59 No.114  

明るくありませんが、本は何冊も持ってます。
Perlに明るい人が少なくとも一人、ここ読んでます(^^)。
具体的に質問すれば、答えてくれるかも?


なんとか解決はしましたが・・ 志穂 - 2002/12/19(Thu) 14:31 No.115  

UNIX由来のFortranコンパイラが出力するバイナリ(unfomatted)
ファイルをperlで読み込むのに苦労してたんです。
こうなってるんですよ。

レコード長 | データ | レコード長
レコード長 | データ | レコード長
レコード長 | データ | レコード長
・・・
だから、データを抽出しようとおもったら、
このレコード長の情報を切り出さないといけないと。

@]cat test2.f
write(1) 'shiho'
stop
end

[@]hexdump -c fort.1
0000000 005 \0 \0 \0 s h i h o 005 \0 \0 \0
000000d

この005 \0 \0 \0 の4バイトがレコード長の情報を
もっていて、

shihoを切り出そうとおもったら、

read(IN,$buf,4) #左のレコード長情報切り出し
read(IN,$buf,5) #データ抽出
read(IN,$buf,4) #左のレコード長情報切り出し


[@]cat test2.f
write(1) 'shiho'
stop
end

[@]cat test2.pl
#!/usr/bin/perl

open(IN,"<fort.1");
read(IN,$buf,4); #左のレコード長情報切り出し
read(IN,$buf,5); #データ抽出
print $buf,"\n";
read(IN,$buf,4); #左のレコード長情報切り出し
close(IN);
[@]./test2.pl
shiho
[@]


で、質問なんですが、
32bitオペレーティングシステムの場合、レコード長は
32bitの場合がほとんど
という説明が書かれてあったんですが、
"32bitオペレーティングシステム"とはいったい
どういうものを指すんですか?
CPUが32bit or レジスタが32ビット?








Re: Perlなんだけど・・ jun - 2002/12/20(Fri) 02:20 No.119  

> read(IN,$buf,5) #データ抽出
データ長を5バイトに決めうちしているような気がするのはいいとして、

> 32bitオペレーティングシステムの場合、レコード長は
> 32bitの場合がほとんど

「レコード長は32bitを単位とする場合がほとんど」という意味でしょう。

> "32bitオペレーティングシステム"とはいったい
> どういうものを指すんですか?
> CPUが32bit or レジスタが32ビット?

文脈に依存するような気がしますが、accumulater (演算用のレジスタ)
が32ビットのCPU用に設計されたOSという感じでしょうか?


Re: Perlなんだけど・・ 志穂 - 2002/12/20(Fri) 15:16 No.120  

> read(IN,$buf,5) #データ抽出
>データ長を5バイトに決めうちしているような気がするのはいいとし
>て、

うん?
0000000 005 \0 \0 \0 s h i h o 005 \0 \0 \0

005っていうのが"データが5バイト長"っていうのを表しているので、
read(IN,$buf,5)としたのです。

     


Re: Perlなんだけど・・ jun - 2002/12/20(Fri) 21:07 No.123  

せっかくデータ長を読み込んでいるので、
それを使うべきかと思います。
複数のファイルをコマンドラインの引数で渡せるバージョン。

#!/usr/bin/perl
if (@ARGV > 0) {
foreach $file (@ARGV) {
open(IN, $file) || die "$file : $!";
while (<IN>) {
read(IN, $len, 4);
read(IN, $buf, $len); # 読み出したデータ長を使う
print $buf,"\n";
read(IN, $len, 4);
}
close(IN);
}
}


あ!!ほんとだ!!(笑) 志穂 - 2002/12/21(Sat) 02:58 No.126  

なるほど!!
せっかくレコード長読んできてるのに
利用してなかった!!(笑)お間抜けー(笑)
junさん、ありがとう!!
プログラムなおします!!


Re: Perlなんだけど・・ 志穂 - 2002/12/22(Sun) 00:28 No.130  

あっ!!まった!!(笑)
読み込んだ情報を
unpack("d",$buf)
としてやらないとだめでした。


閑話休題 投稿者:志穂 投稿日:2002/12/21(Sat) 03:14 No.127  
>アセンブリ言語の欠点として
>わかりにくい.
>大規模なプログラムが作成しにくい.

って、junさんは書かれてますが、

わかりにくいっていうのは、
ソースの可読性という点から、ですか?

大規模なプログラムが作成しにくいってことですが、
アセンブラーなプログラマー達はなんらかの工夫を
おこなってるんですか?
アセンブラのお仕事されてる人たちにすごい興味があります。
ハードの特性にあった、ドライバーを作成するような技術に
はすごい興味がありますね。LINUXでDVDを使うには、この
ドライバーが不可欠じゃないですか?これって、アセンブラ
なんでしょ?それともC言語?

時間の関係で、それほど多く、アセンブラの勉強に
時間を費やせないのですが、やりはじめるとすごく
おもしろくて。junさんのおかげで、順調に勉強
すすんでます。感謝、感謝です。


Re: 閑話休題 jun - 2002/12/21(Sat) 17:59 No.128  

linux のドライバはCで書かれています。

アセンブラは使われていないのか確認したところ、

/usr/src/linux/drivers$ find -name "*.S" -print
./usb/serial/xircom_pgs.S
./usb/serial/keyspan_pda.S
./scsi/oktagon_io.S
./acorn/scsi/acornscsi-io.S
./acorn/block/mfm.S
./acorn/block/fd1772dma.S
./sound/vidc_fill.S

少しは使われていますね(kernel 2.4.20)。ということで、
ドライバの作成に不可欠ではありません(って、作ったことないです)。

linuxではブート時の各種設定やシステムコールの入り口部分
などで使われていますが、i386の場合で210Kバイト、9000行
弱です。拙作のrvtlとあまり変わりません。
linuxは12種類程のCPUアーキテクチャをサポートしていますが、
ほとんどCで書かれているために広範囲のCPUで動作できます。
もしすべてをアセンブラで書いていたら 170MB x 12 = 2GB の
コードが必要です。(計算が単純すぎますが)

アセンブラの最大の問題は「移植が困難」ということだと思います。
抽象度をあげた言語(例えばC)で記述して、各アーキテクチャへの
翻訳はコンパイラに任せることでプログラムの生産性をあげています。
しかし、誰かがアセンブリ言語を知っている必要はあります。
誰かが鉄鉱石を掘っているおかげで料理に包丁が使えるのですから。

ところで、私は仕事でプログラムを書くことはほとんどありません。


Re: 閑話休題 志穂 - 2002/12/22(Sun) 00:27 No.129  

>>私は仕事でプログラムを書くことはほとんどありません。


ええ!!
そうなの?
もったいない。
こんなにコンピュータに精通してるなら
ネットワーク管理でもプログラマーでも
どっちでもできそうにおもうけど。


これがどうやったら777.0D0? 投稿者:志穂 投稿日:2002/12/20(Fri) 18:47 No.122  
@]cat test2.f
write(1) 'shiho'
stop
end

これはフォートランのプログラムで、
バイナリ形式で、ファイルにshihoという文字列
を出力。結果はfort.1というファイルに出力されます。

次に、この出力したファイルはバイナリ形式なので、
開いてみることはできない。
そこでつぎのコマンドhexdumpをつかいます

hexdump は、fileが指定されていればそのファイルを、指定されていなければ標準入力を読み込み、指定されたフォーマットに従ってダンプ表示します。デフォルトでは 2 バイト単位で 16 進数でダンプします。

オプション -c
1 バイト単位で ASCII キャラクタでダンプします。


[@]hexdump -c fort.1
0000000 005 \0 \0 \0 s h i h o 005 \0 \0 \0

ここで、

0000000:行番号
レコード長 : 005 \0 \0 \0 と 005 \0 \0 \0
データ : s h i h o

行番号 | レコード長 | データ | レコード長
という構成になってます。


この005 \0 \0 \0 の4バイトがデータ(shiho)のレコード長の情報"5"を
もっていてます。
つまり、
s h i h oで5文字

では整数でためしてみますね。
[]cat test5.f
integer :: a
a=7
write(1) a <------ 整数7をバイナリ形式で出力
stop
end
[]hexdump -x fort.1
0000000 0004 0000 0007 0000 0004 0000

オプション -x
バイト単位で 16 進数でダンプします。

0000 0007 で4バイト長


今度はdouble型でためします。

double precision :: a
a=777.0D0
write(1) a
stop
end

オプション-b
1 バイト単位で 8 進数でダンプします。

[]hexdump -b fort.1

0000000 010 000 000 000 000 000 000 000 000 110 210 100 010 000 000 000



0000000 行番号
010 000 000 000 レコード長 : 10(-> 8進数表示なので、10->0x08->長さ8)
000 000 000 000 000 110 210 100 データ (長さ8)
010 000 000 000 レコード長


000 000 000 000 000 110 210 100
が777.0D0を表してるようですが、
どういう変形をしたらそうなるんでしょうか?




Re: これがどうやったら777.0D0? jun - 2002/12/20(Fri) 21:57 No.124  

むー。

IEEEの浮動小数点表現について調べてください。
符号 1 ビット、指数 11 ビット、仮数 52 ビットで格納されますが、
指数ビットのバイアス、仮数部の正規化など説明するのは大変です。
nasm で 777.0 の内部表現を調べてみたところ、
00 00 00 00 00 48 88 40 でした(hex)。一致してますね。


Re: これがどうやったら777.0D0? jun - 2002/12/21(Sat) 01:50 No.125  

そういえば、64bit ではありませんが 80bit の場合のプログラムを
http://www.nk.rim.or.jp/~jun/lxasm/asm11.html に書きました。
参考になりませんか?
といっても、2年前なので自分でも忘れてしまっています(^^;

| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |

NO: PASS:

- KENT & MakiMaki -