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

jyunさん,、いつもありがとうございま... 投稿者:志穂 投稿日:2002/11/12(Tue) 18:00 No.74  
void intadd(int a,int b,int *c)
{
*c=a+b;
}
からアセンブリソース吐き出さ
 ると
わからないことが2点ほどあります。

.file "add.s"
gcc2_compiled.:
.text
.align 4
.globl add
.type intadd,@function
add:
pushl %ebp
movl %esp,%ebp
pushl %ebx <-------
movl 16(%ebp),%eax
movl 8(%ebp),%edx
movl 12(%ebp),%ecx
leal (%ecx,%edx),%ebx <--------
movl %ebx,(%eax)
.L2:
movl -4(%ebp),%ebx
movl %ebp,%esp
popl %ebp
ret

2つ目のpushlはなんのために必要なんでしょうか?




Re: jyunさん,、いつもあ・.. 志穂 - 2002/11/12(Tue) 18:02 No.75  

それと、
leal (%ecx,%edx),%ebx <--------
ですが、
これは
%ecx + %edxの結果を%ebxに格納するってことでしょうか?
でも、わからないのは、
(%ecx,%edx)の()です。
これがついてるってことは、アドレスのメモリの
内容ってことですよね?
これは無視して考えるんでしょうか?


Re: jyunさん,、いつもあ・.. jun - 2002/11/12(Tue) 22:31 No.77  

> 2つ目のpushlはなんのために必要なんでしょうか?
ebx の保存です。movl -4(%ebp),%ebxで復帰しています。
なぜ、popl %ebx でないかはコンパイラに聞いてください(^^)。

> でも、わからないのは、
> (%ecx,%edx)の()です。

lea はそういう命令です。R1 = R2 + R3 * 4 + 定数 のように
配列のアドレス計算などが高速にできるように用意された特殊
な命令です。四則演算命令と考えると"( )"は不自然ですが、
理由はインテルのアセンブラ作者に聞いて下さい(^^)。


Re: jyunさん,、いつもあ・.. 志穂 - 2002/11/12(Tue) 22:45 No.79  

親切にどうもありがとうございます。
はぁー、すっきり!!(笑)
もう、わかんないことだらけで。
ほんといつもたすかります!!


原因はわかりましたが・・ 投稿者:志穂 投稿日:2002/11/12(Tue) 20:01 No.76  
%ebxを%eaxに代えたらせぐらずに
実行されました。
どうやら、%ebxに数値を入れようとしたために
せぐってしまったようです。
なぜかがわからないんですが・・




[@///test]./test
Segmentation fault
[@///test]cat test.s
.file "test.s"
.text
.globl main
main:
movl $0x12,%ebx
ret
[@///test]gcc -o test test.s
[@///test]./test
Segmentation fault   <----------せぐっちゃった
[@///test]

[@///test]cat test.s
.file "test.s"
.text
.globl main
main:
movl $0x12,%eax
ret
[@///test]gcc -o test test.s
[@///test]./test
[@///test]
~


Re: 原因はわかりましたが・・ jun - 2002/11/12(Tue) 22:39 No.78  

投稿者:志穂 投稿日:2002/11/12(Tue) 18:00 No.74 の
コンパイル結果を見ると、関数の呼び出しの前後で ebx
の値を保存する必要があるのでしょうね。
少なくとも ebx、ebp、esp の値はCから呼び出す場合には、
変化させてはいけないのでしょう。
この辺はコンパイラに依存しますから、私は詳しくありません。


関数について教えて下さい。 投稿者:志穂 投稿日:2002/11/12(Tue) 14:42 No.71  
.type main,@function <--------
main:
pushl %ebp <---------
movl %esp,%ebp <---------
movw $2,x
movw $3,y
movw x,%ax
movw y,%dx
movl %eax,%ecx
addl %edx,%ecx
movw %cx,z
.L2:
movl %ebp,%esp <-------
popl %ebp <-------
ret

関数のアセンブリソースを吐き出させるときまって矢印でしめした
命令が記述されています。これらはなんの為にあるんでしょうか?
無意味なことをやってるように思えて仕方ないのですが。



Re: 関数について教えて下... 志穂 - 2002/11/12(Tue) 17:07 No.72  

[@/test]cat main.c
int main(void)
{
int a,b,c;
printf("Enter a,b:");
scanf("%d %d",&a,&b);
intadd(a,b,&c);
printf("Ans=%d\n",c);
return 0;
}

[@/test]cat intadd.s
.file "intadd.s"
.text
.align 4
.globl intadd
.type intadd,@function
intadd:
pushl %ebp
movl %esp,%ebp
movl 16(%ebp),%ebx
movl 8(%ebp),%edx
addl 12(%ebp),%edx
movl %edx,(%ebx)
movl %ebp,%esp
popl %ebp
ret
[@/test]gcc -o main main.c intadd.s
[@/test]./main
Enter a,b:2 4
Ans=6
Segmentation fault <--------------------------
[@/test]

上記プログラムを実行すると
Segmentation faultが
出力されます。
この警告文って、
読み込みオンリーなテキスト領域に書き込もうと
した場合出力されますが。。。
~


Re: 関数について教えて下... jun - 2002/11/12(Tue) 17:43 No.73  

まず最初の質問について。

関数に引数を渡したり、局所変数を確保したりしない場合は無意味です。

言語処理系(コンパイラ)の仕様に依存すると思いますが、
関数が呼ばれた直後のスタックには、 関数の引数、戻りアドレス、
が積まれます。このときのスタックポインタの値をEBPに保存すると、
EBPを使ってスタック上に積まれている引数にアクセスできます。

普通はこの直後にESPを進めて(値を減じて)局所変数用のメモリを
スタック上に確保します。こうするとEBPの上下に引数と局所変数が
存在するため、関数内から引数と局所変数をアクセスすることが容易
になります。また関数内で push/pop を使ってESPが変化しても
スタック上の引数と局所変数へのアクセスに影響しません。

o EBPを保存   <-------
o ESPをEBPに保存 <-------

o EBPを使って引数や局所変数にアクセス

o ESPをEBPから復帰 <-------
o EBPを復帰    <-------

という感じになります。

引数や局所変数を使う関数の関数のアセンブリソースを見てください。
文章ではわかり難いと思いますから、「スタックフレーム」で検索する
と図入りの解説がいろいろ見つかると思います。


教えて下さい。 投稿者:志穂 投稿日:2002/10/31(Thu) 15:29 No.67  
はじめまして。
LINUXでGASをやり始めたんですが、
参考になる本、HPに乏しく困り果ててるところです。
お力を貸して下さい。

乗算において、eax,edxが暗黙のオペランドとして
使われるってことはわかったんですが、

最初のステップでedxの中身をみると
1で初期化されてるんですが(3: /x $edx = 0x1)
これは意図的に、自動的に初期化されているんでしょうか?




[@/raid//test]cat cal.s
.file "muldiv.s"
.data
lval: .long 0x56789abc
.text
.globl main
main:
movw $300,%ax
movw $500,%bx
mulw %bx
ret
[@/raid//test]cat comfile
break main
display/i $pc
display/x $eax
display/x $edx
[@/raid//test]gdb -x comfile cal
Breakpoint 1 at 0x80483a0
(gdb) run
Starting program: /raid//test/cal

Breakpoint 1, 0x80483a0 in main ()
3: /x $edx = 0x1
2: /x $eax = 0xbffffa04
1: x/i $eip 0x80483a0 <main>: mov $0x12c,%ax
(gdb) si
0x80483a4 in main ()
3: /x $edx = 0x1
2: /x $eax = 0xbfff012c
1: x/i $eip 0x80483a4 <main+4>: mov $0x1f4,%bx
(gdb) si
0x80483a8 in main ()
3: /x $edx = 0x1
2: /x $eax = 0xbfff012c
1: x/i $eip 0x80483a8 <main+8>: mul %bx,%ax
(gdb) si
0x80483ab in main ()
3: /x $edx = 0x2
2: /x $eax = 0xbfff49f0
1: x/i $eip 0x80483ab <main+11>: ret
(gdb) quit




Re: 教えて下さい。 jun - 2002/10/31(Thu) 23:04 No.68  

乗算では edx は演算結果の上位16ビット、または32ビット
で上書きされます。つまり初期値は何でもOKです。

16ビット同士の演算 300*500=15000=0x000249F0 では
AX に 0x49f0、DX に 0x02 が返ります。

おたずねの内容では、たまたまedxに1が入っていたのでしょう。

i386のGASはよくわからないのですが。


Re: 教えて下さい。 jun - 2002/10/31(Thu) 23:06 No.69  

300*500=150000=0x000249F0 の間違いです。


Re: 教えて下さい。 志穂 - 2002/11/01(Fri) 09:59 No.70  

junさん、ありがとうございました!!


jdu こんなの欲しかった! 投稿者:nohohon 投稿日:2002/10/21(Mon) 15:57 No.65  
jdu 使わせていただいてます。

いろいろこの手のアプリを使ってみましたが、やっと欲しかったのが見つかり、結構満足しています。

あとは、コピ−ペしなくとも印刷できるとありがたいのですが!

from 素人


Re: jdu こんなの欲しかった! jun - 2002/10/21(Mon) 23:12 No.66  

気に入って頂けたようで、うれしく思います。
印刷はコピペでお願いします。 m(__)m


jdu要望です 投稿者:mau 投稿日:2002/09/13(Fri) 10:46 No.44  
jduダウンロードさせて頂きました。

そこで早速要望なのですが、
指定したフォルダ配下のすべてのフォルダの表示をさせる事は可能でしょうか?
例えば、C:\を指定した場合、『Program Files』や『Documents and Settings』だけでなく、
『Program Files』配下の『Common Files』の表示さらにその配下の『System』などまで一気に表示させると言う事です。

よろしくお願いします。


Re: jdu要望です jun - 2002/09/14(Sat) 00:47 No.45  

フォルダ全体の構成を表示させるわけですね。
ドライブ全体のフォルダ数は、かるく1000を超えるので
左側のフォルダリストの部分では狭すぎます。

考えてみます。が、あまり期待しないで待って下さい。


jdu ver.1.11 jun - 2002/09/18(Wed) 00:07 No.46  

フォルダ全体の階層構造を表示する機能を追加しました。
ver 1.11 です。

http://www.nk.rim.or.jp/~jun/jdu.html

フォルダツリーをクリックして、フォルダリストの選択に
反映させる機能はありません。というか、できません 8-(


Re: jdu要望です mau - 2002/09/18(Wed) 10:22 No.47  

>反映させる機能はありません。というか、できません 8-(
と言うのは、フォルダタブの情報としての表示が不可能と言うことでしょうか?
私の説明が不足していたのかも知れませんが、知りたいのがフォルダ毎の使用量なのです。
ユーザ毎にフォルダがあり、その使用量を管理の為に知りたいためです。

よろしくお願いします。


Re: jdu要望です jun - 2002/09/18(Wed) 22:52 No.48  

>>反映させる機能はありません。というか、できません 8-(
>と言うのは、フォルダタブの情報としての表示が不可能と言うことでしょうか?
違います。左側のリストのことですが、気にしないで下さい。

>ユーザ毎にフォルダがあり、その使用量を管理の為に知りたいためです。
この機能は元々あります。使ってみてもらえましたか?


Re: jdu要望です mau - 2002/09/19(Thu) 14:37 No.49  

すみません、また自分の説明不足でした。

『フォルダ』タブを選択して表示した時に、全てのフォルダが見えたら、と思ったんです。
階層が1段ではなくて複数あるので、今の表示方法を変えないとダメだとは思うんですが、難しいでしょうか?

よろしくお願いします。


Re: jdu要望です jun - 2002/09/19(Thu) 23:36 No.50  

新しく追加したフォルダツリーがその形式になる
と思ったのですが。 私の理解力が足らないようです。


Re: jdu要望です mau - 2002/09/24(Tue) 17:35 No.51  

いえ、私の説明の不足してました。
後で考えたら『フォルダタブ』のことは書いてませんでしたから。

で、やっぱり大幅な改造になっちゃいますか?


Re: jdu要望です jun - 2002/09/24(Tue) 22:06 No.52  

> 『フォルダ』タブを選択して表示した時に、全てのフォルダが見えたら、と思ったんです。

http://www.nk.rim.or.jp/~jun/jdu.html の2番目のスクリーンショットと
どのように異なる表示なのでしょうか?


Re: jdu要望です mau - 2002/09/25(Wed) 09:25 No.53  

たびたびすみません。

内容的にはそうなんですが、エクセルなどに書き出して管理したいため、
1番目のスクリーンショットみたいな感じで表示できると楽だなと思いまして。。
そのためにはフォルダ名のところ加工しないと難しいですよね?
なので大幅な改造になってしまうのかな?と思ったんですけど、どうでしょうか?


Re: jdu要望です 通りすがりのファン - 2002/09/25(Wed) 10:23 No.54  

>1番目のスクリーンショットみたいな感じで表示できると楽だなと思いまして。
ツリー表示をコピーしてExcelに貼りつければ、フォルダタブの表示のようになるのでは・・・。



窓の杜 jun - 2002/09/25(Wed) 23:12 No.55  

jdu ver.1.11 が窓の杜(http://www.forest.impress.co.jp/)
の【アップデート情報】その他のソフトに収載されていた。
j3w に続いて2本目。 ちょっとうれしい。


Re: jdu要望です mau - 2002/09/26(Thu) 16:18 No.56  

コピー機能があるのに気付きませんでした。

早速試してみたんですが、ツリー状になってるので仕方ないのかも知れないですが、
項目の位置がズレるので、合わせるのだけでもかなりの作業になります。

作者さん、この位置を合わせるなんて事できるんでしょうか?


Re: jdu要望です jun - 2002/09/26(Thu) 18:04 No.57  

テキストに貼る場合はツリー状の方がいいと思いますから、
jdu 側は今の使用で行きます。

で、エクセル側で次のマクロを走らせてください。

Sub FlatTree()
Dim r As Object
Application.ScreenUpdating = False

Do
Cells(1, 1).Activate
Set r = Cells.Find(What:="|", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)

If Not r Is Nothing Then
r.Select
Selection.Delete Shift:=xlToLeft
End If
Loop Until r Is Nothing
Application.ScreenUpdating = True
End Sub




Re: jdu要望です jun - 2002/09/26(Thu) 18:05 No.58  

インデントが消えていますが、わかりますよね。


さらに補足 jun - 2002/09/27(Fri) 01:36 No.59  

>jdu 側は今の使用で行きます。
は、
jdu 側は今の仕様で行きます。
の間違いです。

エクセルのマクロが面倒ならば、適当なテキストエディタに
貼り付けて、「|<TAB>」を空に置換しておいて、エクセルで
開く方法もあります。


Excel ODIN - 2002/09/27(Fri) 02:51 No.60   <Home>

こんばんは、ODINです。

Excelとの連携ネタが面白かったので書き込みしたくなってしまいました。
私も自分用の見方が欲しかったので↓のような関数を作って見ました。

-------------------------------------------------------------▽- Excelマクロ ---
Sub FlatTree2()

  Dim objRow As Object
  Dim objCol As Object

  Application.ScreenUpdating = False
  
  For Each objRow In Range("A:A")
    If objRow = "" Then Exit For
    For Each objCol In Range(objRow.Row & ":" & objRow.Row)
      If objCol.Row = 1 Then Exit For
      If objCol <> "|" Then
        objRow = objRow & "-" & objCol
        Range(Cells(objRow.Row, 2), objCol).Delete Shift:=xlToLeft
        Exit For
      End If
      objRow = objRow & " " & objCol
    Next objCol
  Next objRow
  
  Application.ScreenUpdating = True

End Sub
-------------------------------------------------------------△- Excelマクロ ---

もしIE5以上が入ってる環境なら、下のようなスクリプトをテキストエディタに貼り付けて
xxx.vbsのように"vbs"の拡張子を付けて保存、JDUでクリップボードにコピーした後に
ダブルクリックすれば、上記のExcelマクロの処理と同じことができるので、それをExcelに
貼りつければ・・・といったこともできますね。

-----------------------------------------------------------------▽- WSH/VBS ---
Option Explicit

Dim objIE
Dim strData
Dim objEReg

Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate "about:blank"
Do While objIE.Busy
  Wscript.Sleep 10
Loop

Set objEReg = New RegExp
objEReg.Global = True
strData = objIE.Document.parentWindow.clipboardData.getData("text")
objEReg.Pattern = "\|\t"
strData = objEReg.Replace(strData, "| ")
objEReg.Pattern = "\| ([^\|])"
strData = objEReg.Replace(strData, "|-$1")
objIE.Document.parentWindow.clipboardData.setData "text", strData
objIE.Quit
Set objEReg = Nothing
Set objIE = Nothing
MsgBox "変換完了!!"
-----------------------------------------------------------------△- WSH/VBS ---


Re: Excel jun - 2002/09/28(Sat) 00:28 No.61  

FlatTree2、いいですね。プログラムにも高級感が漂う...

それと、VBS ってこんなこともできるんですね。
プログラムは、まったく理解できませんが(^^;

よし、それじゃ OpenOffice.org で作ってみるぞ!
と思ったのですが、StarBasic は VBA と結構違いがあるよう
なので、保留。


Re: Excel jun - 2002/09/28(Sat) 00:34 No.62  

それと、VBS のスクリプトでクリップボードを処理してから
Word に貼って、2段組にするとフォルダ数が多くても一覧できる
文書を作ることができますね。感謝です。


Re: jdu要望です mau - 2002/10/03(Thu) 16:25 No.63  

ODINさん作成のVBスクリプト(?)試してみました。
ちょっと同じ環境がないので忘れてしまったのですが、
エラーが出てしまいました。(NT+IE6)
マクロは正常に動作し、重宝しています。

自分はマクロ分からないので、勉強して手を加えていこうと思ってます。
一つ質問なんですが、指定サイズ以上の行に色を付けることって、
マクロで出来るのでしょうか?


Re: jdu要望です jun - 2002/10/08(Tue) 13:15 No.64  

マクロを使わなくても「条件付き書式」で簡単ですが、マクロなら次のような感じです。

Columns("B:B").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="1000"
Selection.FormatConditions(1).Font.ColorIndex = 3


アセンブラ好きな人がいっぱい 投稿者:jm 投稿日:2002/07/29(Mon) 00:40 No.38  
当サイトのアセンブラ関連のページのアクセスを集計したら...
147,784件でした。2年前に書き始めた時は、検索エンジンと
人のアクセスのどちらが多いかと思っていましたが、人間の
圧勝です。


NASMのダウンロード jm - 2002/08/13(Tue) 22:42 No.43  

最近 NASMのダウンロードは次のサイトに変わっています。
http://sourceforge.net/project/showfiles.php?group_id=6208



新作 投稿者:jm 投稿日:2002/07/17(Wed) 01:16 No.28   <Home>
Linux専用の Tiny Basic インタプリタ rvtl を作成しました。

http://www.nk.rim.or.jp/~jun/rvtl/rvtl.html

に置きました。紹介用のWebページはこれから作成します。


rvtl jm - 2002/07/18(Thu) 01:02 No.29   <Home>

ページを置きました。

http://www.nk.rim.or.jp/~jun/rvtl/rvtl.html

サンプルの紹介など、拡張する予定です。 乞う御期待!


Re: 新作 齊藤 - 2002/07/19(Fri) 20:07 No.30  

アセンブリ言語でインタプリタを書くとは…。
気合がはいってますねぇ。


Re: 新作 jm - 2002/07/20(Sat) 00:29 No.31  

http://www.nk.rim.or.jp/~jun/rvtl/vtltabl.html
で書いたように、昔は珍しくなかったのですが。

でも、アセンブラで6000行を超えるソースを書いたのは初めてなので
「気合がはいって」ました。


1FDLinux jm - 2002/07/21(Sun) 01:29 No.32  

rvtl を使って1フロッピー Linux を作ってみました。
http://www.nk.rim.or.jp/~jun/rvtl/rvtl1fd.html
ほとんどの機種で動作すると思います。

動作を確認した機種をお知らせください。

これまでは確認したのは、

EDiCube NC710, Flora250 nu1, 古いIBMのノート(486SX?),
Celeron300A+ABitBH6+RivaTNT などです。

動作しなかったのは、
HP OmniBook530 です。


Re: 新作 ODIN - 2002/07/22(Mon) 04:47 No.34   <Home>

はじめまして!

これ、面白いですね。
なんかBASICでチマチマとプログラムを作ってたのを思い出しました。

1FD起動ができるということで、ゲーム作ったらどこでも遊べるなと
思って試しにちょっと作ってみました。
ショボショボで恥ずかしいんですが、テストということでご容赦ください。

http://www.geocities.co.jp/CollegeLife-Labo/9890/rvtl/tennis01.txt


ありがとうございます jm - 2002/07/23(Tue) 00:18 No.35  

tennis01.txt 結構な時間、遊ばせてもらいました。
ラケットの右端の判定が厳しいですね。
つい、もう一度と思わせるバランスがいいですね。
私もゲームを作ってみようかな?


tennis03.txt jm - 2002/07/31(Wed) 23:44 No.39  

>> ODIN さん

ひっそりバージョンアップされていますね。
本日のハイスコアは tennis03.txt で 33point でした。
128x48の画面モードです。


Re: tennis03.txt ODIN - 2002/08/06(Tue) 00:31 No.41   <Home>

> ひっそりバージョンアップされていますね。

ひっそりとアップしてたんですが、見つかってしまいました。
でも、このファイル名じゃバレバレですね(^-^;

今度、私のHPに「rvtlで遊ぼう」って感じのページを作りたいんですが、
そういうのってマズいでしょうか?


Re: tennis03.txt  jm - 2002/08/06(Tue) 22:30 No.42  

全然まずくありません。ぜひお願いします。

> ひっそりとアップしてたんですが、見つかってしまいました。

index.html から見つけました。って、ここに書いていいのか?


rvtl の修正予告 投稿者:jm 投稿日:2002/07/27(Sat) 01:15 No.36  
バグを見つけたわけではありませんが、この週末にも rvtl を
2.01としてバージョンアップする予定です。

修正点は、init として使用した場合に /etc/init.vtl が
存在すればそれをロードする機能、変数スタックに値を
直接プッシュするコマンド(+=)と変数スタックをポップする
関数(;)の追加の3点です。50バイト程大きくなります。

rvtl が Google に捕捉される前に修正します。
言語仕様を確定して公開したつもりだったのですが、
10日で変更とは......


Re: rvtl の修正予告 jm - 2002/07/27(Sat) 16:16 No.37  

rvtl 2.01 を公開しました。1FDLinux も更新しました。


Google に捕捉 jm - 2002/08/03(Sat) 00:35 No.40  

無事 rvtl 2.01 がGoogleで検索できるようになりました。
クロール後、1日で検索できるんですね。速いもんだ。


無題 投稿者:星奈 投稿日:2002/07/21(Sun) 14:20 No.33  
画像のアップグロードってどうやるんですか??

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

NO: PASS:

- KENT & MakiMaki -