[HOME]  [リストへもどる]
一括表示

  異セグの&Sn(), Str_len - 文太 07/01/03-13:28 No.1972
  ┣ Re: 異セグの&Sn(), Str_len - 文太 07/01/03-15:57 No.1974
  ┃┗ Re^2: 異セグの&Sn(), Str_len - 文太 07/01/03-17:18 No.1975
  ┣ Re: 異セグの&Sn(), Str_len - Konno 07/01/03-17:43 No.1976
  ┃┗ Re^2: 異セグの&Sn(), Str_len - 文太 07/01/03-21:25 No.1978
  ┣ Re: 異セグの&Sn(), Str_len - としき 07/01/03-19:02 No.1977
  ┃┗ Re^2: 異セグの&Sn(), Str_len - 文太 07/01/03-21:48 No.1979
  ┃ ┗ Re^3: 異セグの&Sn(), Str_len - Konno 07/01/04-01:32 No.1983
  ┃  ┗ Re^4: 異セグの&Sn(), Str_len - 文太 07/01/04-16:07 No.1985
  ┃   ┗ Re^5: 異セグの&Sn(), Str_len - としき@宿直 07/01/04-18:43 No.1987
  ┗ Re: 異セグの&Sn(), Str_len - YASAT 07/01/04-00:38 No.1981
   ┗ Re^2: 異セグの&Sn(), Str_len - 文太 07/01/04-01:14 No.1982
    ┗ Re^3: 異セグの&Sn(), Str_len - YASAT 07/01/04-22:17 No.1989
     ┗ Re^4: 異セグの&Sn(), Str_len - 文太 07/01/04-23:42 No.1990
      ┗ カレンダーはcalendar - 文太 07/01/05-02:07 No.1991
       ┗ Re: カレンダーはcalendar - Konno 07/01/05-14:30 No.1993
        ┗ Re^2: カレンダーはcalendar - 文太 07/01/05-20:58 No.1994
         ┣ Re^3: カレンダーはcalendar - 文太 07/01/05-22:17 No.1995
         ┗ Re^3: カレンダーはcalendar - としき 07/01/05-23:30 No.1996
          ┣ Re^4: カレンダーはcalendar - Konno 07/01/06-00:17 No.1997
          ┗ Re^4: カレンダーはcalendar - 文太 07/01/06-11:43 No.1998
           ┗ 添削希望です(2 nuls find) - 文太 07/01/06-21:08 No.1999
            ┗ Re: 添削希望です(2 nuls find) - Konno 07/01/06-22:59 No.2000
             ┗ Re^2: 添削希望です(2 nuls find) - 文太 07/01/07-00:40 No.2001
              ┗ Re^3: 添削希望です(2 nuls find) - 文太 07/01/07-02:56 No.2002
               ┗ Re^4: 勘違いしてました。 - Konno 07/01/07-04:14 No.2003
                ┗ リハビリ - Konno 07/01/07-04:58 No.2004
                 ┗ Re: リハビリ - 文太 07/01/07-12:25 No.2005
                  ┗ 質問です。m(__)m ゼロフラグ? - 文太 07/01/07-13:42 No.2006
                   ┗ Re: 質問です。m(__)m ゼロフラグ? - Konno 07/01/07-14:21 No.2007
                    ┗ Re^2: 質問です。m(__)m ゼロフラグ? - 文太 07/01/07-16:13 No.2008
                     ┗ 最短?11バイト - Konno 07/01/08-22:22 No.2009
                      ┣ Re: 最短?11バイト - 文太 07/01/09-00:41 No.2010
                      ┃┣ Re^2: 最短?11バイト - 文太 07/01/09-01:09 No.2011
                      ┃┣ Re^2: 最短?11バイト - Konno 07/01/09-01:23 No.2012
                      ┃┃┗ Re^3: 最短?11バイト - 文太 07/01/09-01:52 No.2013
                      ┃┃ ┗ 麗しのサブリナ - Konno 07/01/09-23:16 No.2023
                      ┃┃  ┗ Re: 麗しのサブリナ - 文太 07/01/10-00:24 No.2026
                      ┃┣ Re^2: 最短?11バイト - としき@会社 07/01/09-09:53 No.2014
                      ┃┃┗ 複雑な(?)ポインタ演算を、、、 - 文太 07/01/09-12:45 No.2015
                      ┃┃ ┗ Re: 複雑な(?)ポインタ演算を、、、 - としき@会社 07/01/09-13:43 No.2016
                      ┃┃  ┗ Re^2: 複雑な(?)ポインタ演算を、、、 - 文太 07/01/09-14:26 No.2017
                      ┃┗ Re^2: 最短?11バイト - としき@会社 07/01/09-15:34 No.2018
                      ┃ ┣ ポインタ演算こっちへ - 文太 07/01/09-17:49 No.2019
                      ┃ ┃┣ Re: ポインタ演算こっちへ - としき 07/01/09-21:10 No.2020
                      ┃ ┃┃┗ Re^2: ポインタ演算こっちへ - 文太 07/01/09-22:13 No.2022
                      ┃ ┃┗ Re: ポインタ演算こっちへ - Konno 07/01/09-23:47 No.2024
                      ┃ ┃ ┗ Re^2: ポインタ演算こっちへ - 文太 07/01/10-17:01 No.2027
                      ┃ ┃  ┗ Re^3: ポインタ演算こっちへ - Konno 07/01/10-22:35 No.2028
                      ┃ ┃   ┗ Re^4: ポインタ演算こっちへ - 文太 07/01/11-01:29 No.2032
                      ┃ ┃    ┣ Re^5: ポインタ演算こっちへ - としき@宿直 07/01/11-03:41 No.2034
                      ┃ ┃    ┃┗ Re^6: ポインタ演算こっちへ - 文太 07/01/12-12:15 No.2040
                      ┃ ┃    ┃ ┗ Re^7: ポインタ演算こっちへ - としき 07/01/12-19:49 No.2041
                      ┃ ┃    ┃  ┗ Re^8: ポインタ演算こっちへ - 文太 07/01/12-23:03 No.2043
                      ┃ ┃    ┃   ┗ Re^9: ポインタ演算こっちへ - としき 07/01/12-23:28 No.2045
                      ┃ ┃    ┃    ┗ パリティフラグ - 文太 07/01/14-13:43 No.2059
                      ┃ ┃    ┗ Re^5: ポインタ演算 or al,al - Konno 07/01/12-00:32 No.2038
                      ┃ ┗ Re^3: 最短?11バイト - としき 07/01/12-20:58 No.2042
                      ┃  ┗ Re^4: 最短?11バイト - 文太 07/01/12-23:06 No.2044
                      ┃   ┣ Re^5: 最短?11バイト - としき 07/01/12-23:37 No.2047
                      ┃   ┃┗ 姑息な変数作成法 - 文太 07/01/14-13:52 No.2060
                      ┃   ┃ ┗ Re: 姑息な変数作成法 - としき 07/01/14-18:49 No.2062
                      ┃   ┃  ┗ Re^2: 姑息な変数作成法 - 文太 07/01/14-23:04 No.2064
                      ┃   ┃   ┗ Re^3: 姑息な変数作成法 - としき@会社 07/01/15-11:53 No.2066
                      ┃   ┃    ┗ Re^4: 姑息な変数作成法 - 文太 07/01/16-08:48 No.2070
                      ┃   ┣ 構想以前 - 文太 07/01/13-01:07 No.2050
                      ┃   ┃┗ Re: 構想以前 - YASAT 07/01/14-00:17 No.2054
                      ┃   ┃ ┗ リトル・エンディアンについて - 文太 07/01/14-00:56 No.2056
                      ┃   ┗ やば、これ動きません - 文太 07/01/13-20:45 No.2053
                      ┃    ┗ Re: やば、これ動きません - 文太 07/01/14-00:51 No.2055
                      ┗ Re: 最短?11バイト - YASAT 07/01/09-22:02 No.2021
                       ┣ これが最短!! 8バイト!! - Konno 07/01/10-00:03 No.2025
                       ┃┗ Re: これが最短!! 8バイト!! - YASAT 07/01/11-01:11 No.2030
                       ┃ ┗ Re^2: これが最短!! 8バイト!! - Konno 07/01/12-00:23 No.2037
                       ┃  ┣ Re^3: 姑息な7バイト (^^; - Konno 07/01/12-01:15 No.2039
                       ┃  ┗ Re^3: これが最短!! 8バイト!! - YASAT 07/01/12-23:51 No.2048
                       ┗ Re^2: 最短?11バイト - 文太 07/01/11-00:36 No.2029
                        ┗ Re^3: 最短?11バイト - YASAT 07/01/11-01:19 No.2031
                         ┗ Re^4: 最短?11バイト - 文太 07/01/11-01:32 No.2033
                          ┗ Re^5: 最短?11バイト - YASAT 07/01/11-22:34 No.2035
                           ┗ Re^6: 最短?11バイト - 文太 07/01/12-00:15 No.2036
                            ┗ Re^7: 最短?11バイト - YASAT 07/01/12-23:59 No.2049
                             ┗ Re^8: 最短?11バイト - 文太 07/01/13-01:18 No.2051

(1972) 1972異セグの&Sn(), Str_len  投稿者:文太   2007/01/03(水) 13:28
   コメント数 4

 金野さん、お教えいただけませんでしょうか。

 題のとおりです。僕が唯一改変(追加)している★の行で「オペランド不正」
というエラーメッセージが出ます。>ml test.asm時。

 通じると思いますが、念のため仕様・意図などを簡単に説明します。
 ★の行が示す場所にダミーバッファを確保できました(delmem.com による)。
もちろんVzの外です。そこへの読み書きはできるようになったのですが、
書き込んだときに長さを保存しておかないと読み出しができません。ただ文
字列の長さなんて「動かないバッファ」(マクロバッファではいけない)に
保存しておくべき情報ではなく(管理が大変)、マシン語を使えるならその
つど測ったほうが楽な種類のものです。ps  程度の長さの使い方しか想定し
ていないので。それで、題の「異セグ String Length」のルーチンが欲しく
なったわけです。この基本ハードルが飛べれば、文字列の長さを管理するこ
となく(その都度測って)2つめ、3つ目の asciiz 文字列を楽に取り出せ
ると考えているわけです。

 どうか宜しくお願いいたします。m(__)m


--- test.asm ---; this doesn't work!!
CODE    SEGMENT ;original, ikuboh, 94/6/4, <nifty:FGALPK/MES/13/1604>
        ASSUME  CS:CODE,DS:CODE,SS:CODE
        ORG 100H
start:  mov     ds,9FC0H    ;dummy buffer segment address★
        mov     si,0        ;offset address, si-,
        mov     cx,0        ;counter, cx-,
abc:    mov     ah,[si]     ;ah=ds.0,
        cmp     ah,0        ;(ah==0)
        je      xyz         ;? >z
        inc     si          ;si++,
        inc     cx          ;cx++,
        jmp     abc         ;? >loop(abc)
xyz:    ret                 ;:z
CODE    ENDS
        END     START
----------------

 Str_len  のルーチンとしては、xor を使う方法が一般的なようで、Vz ソース
でもそれを見たのですが、それはおいておいて、こっちの上様のほうが分かりや
すいので、  これでいけるなら、 こちらでお願いできますでしょうか。 m(__)m
−−どっちでもできるのだろうと想像しておりますが。

      - No.1972 -    このTreeへ           [リストへもどる] pre

(1972) 1974Re: 異セグの&Sn(), Str_len  投稿者:文太   2007/01/03(水) 15:57
    1972 番 文太 さんへのコメント    コメント数 1

 うーん、じつにさらさら書けてしまった。(数カ所書き換えただけだし)
 それでも、マシン語、やりたいなぁ。

=== Macro Tmp by Bunta ===;
original: READ_ENV.DEF by Emmett in 「勉強会」
* Macro
50 ^\ "mactest"

        p=$9FCF, i-,
:a      dz[=p, r=0.i, dz],
        (r)? {i++, >a}
        (i)? {&m("length==%d",i)} ? {&m("空だよ")}

*

      - No.1974 -    このTreeへ    コメント元:1972 へ [リストへもどる] pre

(1972) 1975Re^2: 異セグの&Sn(), Str_len  投稿者:文太   2007/01/03(水) 17:18
    1974 番 文太 さんへのコメント

 あああ、分かった。 つまり僕がこの Str_len をマシン語でやらなければいけ
ない、とそもそも思っていたのは、この異セグ自前バッファをヒストリーバッフ
ァにしたいという野望があったからだったのでした。入れるたび、出すたびに、
全部ズル、ズルと動かすわけで、これはマシン語だろう、と。サイズ情報は、マ
クロの中に入ってていいと思うけど。
 元の黙阿弥。これは遠いですねぇ。金野さん、お願い。いつかでいいので。
 うーん、上様かくらとさんが、それっぽいルーチンをどっかでつくってたはず
だなぁ(同セグ版ですが)。

 夢を語ってみただけです。それでも不可能ではないだろうな、というのが恐い
ですね、考えてみれば。神をも恐れぬ…。発想が豚的かもしれないけど、そんな
ことは山彦SW4の関知することではないのであります。実現すればね。
 考えてみれば(これは考えてなかったけど)、EMSだって同じことができる
はずだなぁ。何に使うの? というのはおいておいて。
 僕は、最初、128 bytesの動かない・汚されない・消えないバッファが欲しかっ
ただけなんですが、ごうつくばりなもので…。

      - No.1975 -    このTreeへ    コメント元:1974 へ [リストへもどる] pre

(1972) 1976Re: 異セグの&Sn(), Str_len  投稿者: Konno   2007/01/03(水) 17:43
    1972 番 文太 さんへのコメント    コメント数 1

> start:  mov     ds,9FC0H    ;dummy buffer segment address★

えーと、私もわかってないのですが、ds はセグメントレジスタなので、アドレスか
レジスタとしかやり取りできないのじゃないかなぁ。で、この数字は、単なる数字と
解釈されてエラーになったと推測しました。

とりあえず、アドレスにみせるために、cs: を付けてみました。
start:  mov     ds,cs:9FC0H    ;dummy buffer segment address★

これで、ML はエラーが無くなったのですが、LINK で、/z2 のオプションエラー
が出るなぁ。set で見るとなぜか環境変数に LINK=/z2 が出ていて、そんな文字列は
 VWX でしか使っていないので、USBに常駐している副作用かと思ったり。

MASM5.1用の AL バッチ(エイリアス?)では、com まで出来ました。


      - No.1976 -    このTreeへ    コメント元:1972 へ [リストへもどる] pre

(1972) 1978Re^2: 異セグの&Sn(), Str_len  投稿者:文太   2007/01/03(水) 21:25
    1976 番 Konno さんへのコメント

金野さん

> えーと、私もわかってないのですが、ds はセグメントレジスタなので、アドレスか
> レジスタとしかやり取りできないのじゃないかなぁ。で、この数字は、単なる数字と
> 解釈されてエラーになったと推測しました。

 早速、ありがとうございました。なるほど、これが有力みたいでした。
 セグメント・オーバーライドですね。

> とりあえず、アドレスにみせるために、cs: を付けてみました。
> start:  mov     ds,cs:9FC0H    ;dummy buffer segment address★

 これ、通りました。
 でも、上の指摘でオーバーライドを知らないまま「そうなのか」と
start:  mov     bx,9FC0H
	mov     ds,bx
 とやっても通りました。としきさんのpush,popのほうが格好よいですが。
 (変数依存症)
 どうもありがとうございます。m(__)m

      - No.1978 -    このTreeへ    コメント元:1976 へ [リストへもどる] pre

(1972) 1977Re: 異セグの&Sn(), Str_len  投稿者:としき   2007/01/03(水) 19:02
参照先:http://www.hinocatv.ne.jp/~toshiki/
    1972 番 文太 さんへのコメント    コメント数 1

>  題のとおりです。僕が唯一改変(追加)している★の行で「オペランド不正」
> というエラーメッセージが出ます。>ml test.asm時。

私も、アセンブラはほとんどわからないので、konnoさんの書かれているのが多分
正解だと思いますが。

>         ASSUME  CS:CODE,DS:CODE,SS:CODE

この行があるのに

> start:  mov     ds,9FC0H    ;dummy buffer segment address★

こういうコードを書いているからいけないという可能性もあると思います。
なので、

        ASSUME  CS:CODE,SS:CODE

こう書いてみるとどうでしょうか。
あるいは、ASSUMEの行には手をつけず、

start:  mov     ax,9FC0H
        push    ax
        pop     ds

とか。

> 書き込んだときに長さを保存しておかないと読み出しができません。ただ文
> 字列の長さなんて「動かないバッファ」(マクロバッファではいけない)に
> 保存しておくべき情報ではなく(管理が大変)、マシン語を使えるならその
> つど測ったほうが楽な種類のものです。ps  程度の長さの使い方しか想定し

この辺は、どうなんでしょう。
Vzとの親和性を考えるとそうなのかな。
確かに、C言語では文字列はasciizですね。
でも、pascalとかN88-BASICでは、文字列変数というと、長さという情報とともに
保存されているのですよ。

      - No.1977 -    このTreeへ    コメント元:1972 へ [リストへもどる] pre

(1972) 1979Re^2: 異セグの&Sn(), Str_len  投稿者:文太   2007/01/03(水) 21:48
    1977 番 としき さんへのコメント    コメント数 1

としきさん

 素早く、多謝。

> >         ASSUME  CS:CODE,DS:CODE,SS:CODE
> この行があるのに
> > start:  mov     ds,9FC0H    ;dummy buffer segment address★
> こういうコードを書いているからいけないという可能性もあると思います。
> なので、

 ここは疑いました。 ただ、「comモデルでは気にしないでいいです」としか某
書が説明してくれず…。データが外にあるんだものね…?

>         ASSUME  CS:CODE,SS:CODE
> こう書いてみるとどうでしょうか。

 ただ、これだけでは、やはりdsには即値を入れられないようでした。


> あるいは、ASSUMEの行には手をつけず、
> start:  mov     ax,9FC0H
>         push    ax
>         pop     ds

 そうそう。こういう書き方をしないとすぐ大変なことになるんですよね。限ら
れた変数しかないので。

 というわけで、じゃーん、

=== Macro Tmp by Bunta ===;
String Length異セグ版(対象は決めうち=9FC0H)
* Macro
50 ^^ "mactest"

        &> &i(r)
        &m("%d",cx)

0:	(3+$)."$
	$(BB,CF,9F,8E,DB,BE,00,00,B9,00,00,8A,24,80,FC,00)$
	$(74,04,46,41,EB,F5,C3)"

*

 ちゃんと長さを測ってくれます! 通なXOR版にすぐチャレンジします。
 そして、ズル、ズル、と動かすヒストリーバッファをめざす!
 (動かせるかなぁ?)

> でも、pascalとかN88-BASICでは、文字列変数というと、長さという情報とともに
> 保存されているのですよ。

 うん、もう設計次第、サイズだってオプション次第ですからね。お好みで。
 で、僕もサイズ情報を埋め込むかどっかに保存するかすると楽だな、とも思っ
たのです。そんな言語があるとは知らずに。ただサンプルをVzしか知らないの
で、またどうやらできそうな気がするので(ここまででちょっと進化)、このラ
インで行ってみます。
 マクロなら泥臭くしつこくがんばればやれる。でもアセンブラだともっと根気
が要るからなぁ。いいサンプルよ、出てこい!

 とにかく情報、ありがとうございました。

      - No.1979 -    このTreeへ    コメント元:1977 へ [リストへもどる] pre

(1972) 1983Re^3: 異セグの&Sn(), Str_len  投稿者: Konno   2007/01/04(木) 01:32
    1979 番 文太 さんへのコメント    コメント数 1

文太さん

> > あるいは、ASSUMEの行には手をつけず、
> > start:  mov     ax,9FC0H
> >         push    ax
> >         pop     ds

どうやらこれが正解のようですね。ds に対して cs:???? のような指定だとVZ.COMの
中を指してしまうんでしょうね。

で、この 9FC0h は、del_mem.com が常駐して作った領域なんですよね。ということは
このアドレスは変る可能性があると考えなければいけないと思います。
また、常駐しているかのチェックも必要でしょう。

だから、VWX とか、VZとデータをやり取りするプログラムでは、INT2Fh で必要な
情報をやり取りしているんだと思います。
あるいはDOS領域のMCBとかメモリを調べてそのアドレスを探すとかかなぁ。

もしかしたら思いっきり勘違いしているかもしれないですが。

      - No.1983 -    このTreeへ    コメント元:1979 へ [リストへもどる] pre

(1972) 1985Re^4: 異セグの&Sn(), Str_len  投稿者:文太   2007/01/04(木) 16:07
    1983 番 Konno さんへのコメント    コメント数 1

 はい、色々あるなぁ。全部自前で処理するとなると…。

> で、この 9FC0h は、del_mem.com が常駐して作った領域なんですよね。ということは
> このアドレスは変る可能性があると考えなければいけないと思います。

 ですね。せめて、マクロの中からマシン語に渡す作りにしてやらないと。

> また、常駐しているかのチェックも必要でしょう。

 これなんですよね。これは最初から必要と感じていて…。PSPかMCBが読
み切れない…。あとで再挑戦します。なんかヒントがあるはず。

> だから、VWX とか、VZとデータをやり取りするプログラムでは、INT2Fh で必要な
> 情報をやり取りしているんだと思います。

 そう、VWXはお行儀良く2Fhです。でもこれは信号送られる側がそもそも
そういうつくりになっていて、 ah を、あるいは番号が分かってなければだめで
すよね。

--- f_call.shdより ---
@int2Fh 					★追加
F_その他の割込
 int2Fh 多重割込み
  常駐するプログラムが拡張機能を提供するために使用。
  設定値 AH = プログラム番号
               ex.01h PRINT.EXE
                  06h ASSIGN.COM
                  10h SHARE.EXE
                  12h MSDOS.SYS
                  1Ah ANSI.SYS
                  4Ah HMA
                  AEh APPEND.EXE  etc.
          AL = サブファンクション
  返り値 AX の設定値により異なる
----------------------

> あるいはDOS領域のMCBとかメモリを調べてそのアドレスを探すとかかなぁ。

 これは大変すぎでしょう。
 完全個人管理。m(__)m なんかいい方法ないですかねぇ。

      - No.1985 -    このTreeへ    コメント元:1983 へ [リストへもどる] pre

(1972) 1987Re^5: 異セグの&Sn(), Str_len  投稿者:としき@宿直   2007/01/04(木) 18:43
参照先:http://www.hinocatv.ne.jp/~toshiki/
    1985 番 文太 さんへのコメント

> > で、この 9FC0h は、del_mem.com が常駐して作った領域なんですよね。ということは
> > このアドレスは変る可能性があると考えなければいけないと思います。
>  ですね。せめて、マクロの中からマシン語に渡す作りにしてやらないと。

> > また、常駐しているかのチェックも必要でしょう。
>  これなんですよね。これは最初から必要と感じていて…。PSPかMCBが読
> み切れない…。あとで再挑戦します。なんかヒントがあるはず。

> > あるいはDOS領域のMCBとかメモリを調べてそのアドレスを探すとかかなぁ。
>  これは大変すぎでしょう。
>  完全個人管理。m(__)m なんかいい方法ないですかねぇ。

美しく作るとなると、VWXのように、ファンクションコールというかAPIを実装し
て、アドレス問い合わせに対して応答を返すようにするのが一番いいのですが。
通常の常駐ソフトであれば、常駐解除時に、どのメモリブロックが自分のものか
わかるように、MCBに印をつけます。なので、外部からその印を読み取るようにす
る、というのも不可能ではありません。が、工数が多くなるという理由で、一番
お勧めではない方法だったりします。
汚いけれど現実的かつ楽な方法が、コンベンショナルメモリの最上位1KBとか
にメモリを確保して、マクロからはそのアドレスを決め打ちにする、というもの
です。コンベンショナルメモリの最上位アドレスというのは、マシンを起動して
すぐというか、メモリ確保を行う時点では、大抵、マシンごとに一意に定まりま
す。ということはつまり、1KBのバッファの開始アドレスも、当然、一意に定
まるわけです。
この方法のデメリットは、確保したいバッファサイズが変化した場合、例えば、
1KBから2KBに増やしました、なんて場合には、当然、マクロのほうも書き
換えなければならないわけです。そして、私の過去の経験的には、バッファを増
やしたくなることって結構あるのですよ。ラインバッファは8KBもあるし。
delmemを使うのであれば、メモリ確保量は引数で容易に指定できるので、すぐに
変更できます。逆に、メモリ確保量1KB決め打ちのツールを作るなんてことも
できますが、メモリ確保量を増やしたくなった場合、そのたびにまた新しいツー
ルを作るのですか、という大いなる疑問が沸きあがってきたりします。

>  int2Fh 多重割込み
>   常駐するプログラムが拡張機能を提供するために使用。

本題とは関係ありませんが。
このファンクションを使っているソフトって、どんなものがあるのかな。
InteruptListだっけ、帰宅したら調べてみよう。
 
      - No.1987 -    このTreeへ    コメント元:1985 へ [リストへもどる] pre

(1972) 1981Re: 異セグの&Sn(), Str_len  投稿者:YASAT   2007/01/04(木) 00:38
    1972 番 文太 さんへのコメント    コメント数 1

もう解決しているようですね。
オペランドは『はじめて読む8086』の命令表を見るとわかります。
      - No.1981 -    このTreeへ    コメント元:1972 へ [リストへもどる] pre

(1972) 1982Re^2: 異セグの&Sn(), Str_len  投稿者:文太   2007/01/04(木) 01:14
    1981 番 YASAT さんへのコメント    コメント数 1

 YASATさん、ウルウルしてしまう。ありがと〜。そう、その辞書が見つからなくて、
うーん、していたのです。

> もう解決しているようですね。
> オペランドは『はじめて読む8086』の命令表を見るとわかります。

 p.277ですね。記念に写しておこう。

mov  汎用レジスタ            ,汎用レジスタ
mov  メモリ                  ,汎用レジスタ
mov  汎用レジスタ            ,メモリ
mov  メモリ                  ,即値  ★コレと
mov  汎用レジスタ            ,即値 ★コレ 
mov  セグメントレジスタ      ,16ビット汎用レジスタ ☆即値は入らない
mov  セグメントレジスタ      ,メモリ                 ☆同
mov  16ビット汎用レジスタ  ,セグメントレジスタ
mov  メモリ                  ,セグメントレジスタ

 そうそう、変数には相性があるんでしたよね。

 YASATさん、マシン語マクロ師になってたんですね。calender.defとかですか?

 ありがとうございました。m(__)m
      - No.1982 -    このTreeへ    コメント元:1981 へ [リストへもどる] pre

(1972) 1989Re^3: 異セグの&Sn(), Str_len  投稿者:YASAT   2007/01/04(木) 22:17
    1982 番 文太 さんへのコメント    コメント数 1

>  YASATさん、マシン語マクロ師になってたんですね。calender.defとかですか?

おいちゃん悲しくて涙が出てくらあ(;_;)
      - No.1989 -    このTreeへ    コメント元:1982 へ [リストへもどる] pre

(1972) 1990Re^4: 異セグの&Sn(), Str_len  投稿者:文太   2007/01/04(木) 23:42
    1989 番 YASAT さんへのコメント    コメント数 1

YASATさん

> おいちゃん悲しくて涙が出てくらあ(;_;)

 あうあう、別に失礼なつもりもなかったのですが。怒らすより泣かすほうがや
ばいよねぇ。

 あうあう。別にマシン語使えれば偉いってものでもないけど、えとえと、あの
その。YASAT さんてさあ、図書館行ってさあ、祝日とか完璧に調べちゃって、そ
のデータ、マクロの中に全部入れちゃうような地道に激しい人ってイメージでさ
あ、あと、正月からローマ数字の桁上がりみたいのをパズルみたいに楽しんだり
してさあ、 えと、それから、mview みたいな、ある意味 syo さん的なマクロを
びしっと構造化して、こつこつこつこつ書いていって、すげーよな、な人だと思
ってただけなんですよ。あ、そういえばVzで配列みたいなポイポイのだぁ〜と
並んだのとかもあって、これがまたすげえのよ。
 泣いたの損だったって分かった?

 blog を完成させてくれた人。これは泣いても笑っても怒ってもほんと。

 ふと思いついて、m.gann さんの history.def を眺めました。やっぱマシン語
使ってないよ。ヒストリーの途中抜くのってポインタだけでやれるんですね。あ
れだけのコードで。頭の中どうなってるんだろう。
 とにかくメニュー出て、del するのって気持ちいいですよね。脈絡は?

 繰り返しですが、辞書の在処、教えてくれてありがとうございました。

      - No.1990 -    このTreeへ    コメント元:1989 へ [リストへもどる] pre

(1972) 1991カレンダーはcalendar  投稿者:文太   2007/01/05(金) 02:07
    1990 番 文太 さんへのコメント    コメント数 1

 ああ、calender.def,  calendar.def です。誰がなんといってもカレンダーは
calendar。
 は、恥ずかしい。

      - No.1991 -    このTreeへ    コメント元:1990 へ [リストへもどる] pre

(1972) 1993Re: カレンダーはcalendar  投稿者: Konno   2007/01/05(金) 14:30
    1991 番 文太 さんへのコメント    コメント数 1

>  ああ、calender.def,  calendar.def です。誰がなんといってもカレンダーは
> calendar。
>  は、恥ずかしい。

calender でぐぐってみたところ(なんて嫌な奴)、最初と最後に、
もしかして:calendar
と表示されました。日本語のページ 約 1,770,000 件ですが、どうも、calendar も
引っかかってるような気がします。

念のため、「calender」 で翻訳してみると、「光沢機」と出ました。
どういう機械なんでしょうね。

 er でなく、ar である理由も専門家なら知っているんでしょうか。

#英語のだめな奴

      - No.1993 -    このTreeへ    コメント元:1991 へ [リストへもどる] pre

(1972) 1994Re^2: カレンダーはcalendar  投稿者:文太   2007/01/05(金) 20:58
    1993 番 Konno さんへのコメント    コメント数 2

>  er でなく、ar である理由も専門家なら知っているんでしょうか。

 いえいえ、僕はその方面の専門家ではありませんから。まったく普通の人レベ
ルの調べかたしかしてなくて申し訳ないですが、「ラテン語の語尾から」だそう
です。ラテン語とカレンダーの関係の専門家はYASATさんです。
 僕は中2のときのテストでこのスペルを間違え、うん十年してもまだ、これを
繰り返してるんですよね。やれやれ。
 因みに、中三のときに、teacher と visitor はどういう規則(パターン)で、
er  になったり or になったりするのだろう、と疑問に持ちました。いまだに調
べておりません。えばるこっちゃないなぁ。誰か教えて。

 全然関係なく。xor al,al って0になりますよねぇ。なんで?or ax,ax も0?
 あと、連続するヌル2つを探したいのですが、どう書けばいいんでしょう? 
ず、ずるい。

 ネットワークはgive & take (c)「ようこう」さん。
  takeの活用はtake,took,taken,taking. (c) SW4

      - No.1994 -    このTreeへ    コメント元:1993 へ [リストへもどる] pre

(1972) 1995Re^3: カレンダーはcalendar  投稿者:文太   2007/01/05(金) 22:17
    1994 番 文太 さんへのコメント

>   なに,排他的論理和ですか。 どちらか一方だけが 0 のときのみ 1(真)を返
>   す。あまのじゃくな演算子ですねえ。(^^;)
 宮田さんでした。了解っす。(書かなきゃよかった。そういう辞書がないのよん)

  インスタント窓で5^^5, 7^^7, 9^^9(何か顔っぽい)ですね。使ったことないよ、
そんなあまのじゃくな奴。

      - No.1995 -    このTreeへ    コメント元:1994 へ [リストへもどる] pre

(1972) 1996Re^3: カレンダーはcalendar  投稿者:としき   2007/01/05(金) 23:30
参照先:http://www.hinocatv.ne.jp/~toshiki/
    1994 番 文太 さんへのコメント    コメント数 2

>  僕は中2のときのテストでこのスペルを間違え、うん十年してもまだ、これを
> 繰り返してるんですよね。やれやれ。

高校の時の現国の先生。東大卒、もしかしたら修士も出ていたのかな。
教職は第2志望だったそうです。
第1志望は金融機関、某信託銀行を受けたそうですが、見事に落ちたとか。
で、その先生曰くの落とされた理由、どこまでが本当かはわかりませんが。
信託銀行の託の字の旁に、ウ冠をつけてしまったからではないか、とのこと。
それって「宅」だよねぇ。
ま、世の中、そんなもんかも。

>  全然関係なく。xor al,al って0になりますよねぇ。なんで?or ax,ax も0?

xor al,alってのは、もともとのalの値に関係なく、結果のalは0になります。
or ax,axってのは、axの値を変化させません。ですが、もともとのaxが0の時の
み、0フラグが立ちます。つまり、axが0か否かのチェックに使えます。

>  あと、連続するヌル2つを探したいのですが、どう書けばいいんでしょう? 

:a
(p>a)?>z
(p.1==0)?{
  (p.0==0)?>y?{p++, >a}
}?{
  p=p+2, >a
}
:y
ヌル2つ
.
:z
最後まで来たけど見つからなかった
.

なんか違う?
ごめん、よくわからないのに知ったかぶりしています。

>   takeの活用はtake,took,taken,taking. (c) SW4

「竹」の活用といったら水筒とか花器とか。竹炭にするのもいいな。
あとは、電球のフィラメント。(PAT)Edison
#ひぇ〜、宿直明けで脳みそが腐っているぅ
      - No.1996 -    このTreeへ    コメント元:1994 へ [リストへもどる] pre

(1972) 1997Re^4: カレンダーはcalendar  投稿者: Konno   2007/01/06(土) 00:17
    1996 番 としき さんへのコメント

としきさん

> なんか違う?

いやぁ、マクロで書ければあとは置き換えるだけですし。

> 「竹」の活用といったら水筒とか花器とか。竹炭にするのもいいな。

ぶふ〜っ (>。<)  ・・・思わず吹いてしまった。

> #ひぇ〜、宿直明けで脳みそが腐っているぅ

今日は一休さんの如く冴えてますねぇ。(^^;

      - No.1997 -    このTreeへ    コメント元:1996 へ [リストへもどる] pre

(1972) 1998Re^4: カレンダーはcalendar  投稿者:文太   2007/01/06(土) 11:43
    1996 番 としき さんへのコメント    コメント数 1

としきさん

> or ax,axってのは、axの値を変化させません。ですが、もともとのaxが0の時の
> み、0フラグが立ちます。つまり、axが0か否かのチェックに使えます。

 多謝。フラグが立つか。φ(.. )メモメモ なるほど。「0か否かを
チェック」してるはず、まで読めたのだけど。フラグね。でもまだ前後は…。

>  あと、連続するヌル2つを探したいのですが、どう書けばいいんでしょう? 
> なんか違う?

 なるほど、先読みするんだ。うーん、マクロが書けても…。
 いずれにせよ、多謝です。m(__)m

 あ、因みにgiveの活用は、give, gave, given, giving. 岐阜の活用は?

      - No.1998 -    このTreeへ    コメント元:1996 へ [リストへもどる] pre

(1972) 1999添削希望です(2 nuls find)  投稿者:文太   2007/01/06(土) 21:08
    1998 番 文太 さんへのコメント    コメント数 1


 おおおおおおおおおおーーーーーーーーーー!!!
 できました。多謝、多謝でありまする>としきさん、金野さん

 先読みロジック、多謝。「翻訳すればいいんだから」の、(破られた後の)世
界記録からの呪縛解放メタメッセージ、多謝。

 今日は、喜びが大きいのです。ゼロからマクロ語から翻訳しました。
 生まれて初めてのマシン語マクロ without pakuri!
 お腹のそこから笑いがこみ上げる。うひひひひ。世界征服も不可能ではない!
 ってな気分。すぐ答をくれなかったことにも感謝。これ、たまんないですよね
ぇ。くふふふふ。


 ニーモニックを見ていただければ幸いです。「こういうときはこう書くほうが
いいよ」などとコメント頂けたら嬉しいです。


 (神をも恐れぬ的でちょっと恐いのだけど告白)つ、ついにサブリナしちゃっ
た! う、動いた。 それだけで感動した。動き出して2分でバグを発見(ax 使
うのに、al を初期化していた)。 動き出すまで15分。まだデバッグしたこと
ないの…。
 ここでも多謝です> YASAT 様。.doc ついてましたから。いやあ、サブっちゃ
ったのよ。あの一言で。m(__)m  サブ文太。ブンタ茶舞。


 ソース・コードの英語は気にしないで。どんな英語を使うのか知らないので、
個人語です。あのほうが僕にとって分かりやすいだけですから、くれぐれも参考
になさらないように。


=== Macro Tmp by Bunta ===;
Find 2 consecutive nuls, ie, the end of history buffer
* Macro
50 ^^ "mactest"

                        ;まずセグは考えない。
        &00 a=r,        ;
        di=a,           ;先頭アドレス
        ax=di+20,       ;終端アドレス(実際にはバッファサイズ)
        &01 &m("%d",di-a)

00:     (3+$)."12345$(0)abcde$(0)$(0)98765",    ;20
                             ;ココ

01:     &i(3+$)."$
        $(32,DB,8B,F7,3B,F0,77,11,38,5C,01,74,05,83,C6,02)$
        $(EB,F2,38,1C,74,03,46,EB,EB,8B,FE,C3)"

*

;=== test.asm by Bunta ===
; Find the end of history buffer, ie, consecutive 2 nuls!
CODE    SEGMENT
        ASSUME  DS:CODE,CS:CODE,ES:CODE,SS:CODE
        .186
        ORG     100h

START:
        xor bl,bl       ;bl=0, for comparison
        mov si,di       ;
MAIN:
        cmp si,ax       ;si == pointer, ax == buffer size(limit)
        ja FIN          ;FIN = END

        cmp [si+1],bl   ;compare pointed chr+1 and 0
        je NEXT         ;found so next routine
        add si,2        ;not found, so add 2 to pointer
        jmp MAIN        ;try again
NEXT:                   ;2nd nul WAS found, so find the 1st
        cmp [si],bl     ;compare with 0
        je FIN          ;FOUND!! goto END
        inc si          ;not found (T-T), so increment pointer by one
        jmp MAIN        ;sorry, try again

FIN:
        mov di,si       ;copy the found ptr onto conducive DI (same as input)
        ret

CODE    ENDS
        END     START

      - No.1999 -    このTreeへ    コメント元:1998 へ [リストへもどる] pre

(1972) 2000Re: 添削希望です(2 nuls find)  投稿者: Konno   2007/01/06(土) 22:59
    1999 番 文太 さんへのコメント    コメント数 1

文太さん、凄い!!

>  ニーモニックを見ていただければ幸いです。「こういうときはこう書くほうが
> いいよ」などとコメント頂けたら嬉しいです。

添削ではないですが、サンプルが出たので、私なりに短くしてみました。
ちゃんと動くかはわかりませんが。(^^;
 *1 と *2 はバイト数はかわらないですね。

;=== test.asm by Bunta ===
; Find the end of history buffer, ie, consecutive 2 nuls!
CODE    SEGMENT
        ASSUME  DS:CODE,CS:CODE,ES:CODE,SS:CODE
        .186
        ORG     100h

START:
	xor bx,bx	;bx=0000h, for comparison
	mov si,di	;
	mov cx,ax	; *1
;	push ax		; *2
;	pop cx		; *2
MAIN:
NEXT:			;2nd nul WAS found, so find the 1st
	cmp word ptr [si],bx	 ;compare with 0
	jcxz FIN		;FOUND!!(Zflg=0) or cx=0 goto END
	inc si			;not found (T-T), so increment pointer by one
	dec cx
	jmp short NEXT		;sorry, try again

FIN:
        mov di,si       ;copy the found ptr onto conducive DI (same as input)
        ret

CODE    ENDS
        END     START


      - No.2000 -    このTreeへ    コメント元:1999 へ [リストへもどる] pre

(1972) 2001Re^2: 添削希望です(2 nuls find)  投稿者:文太   2007/01/07(日) 00:40
    2000 番 Konno さんへのコメント    コメント数 1

金野さん、m(__)m

=== Macro Tmp by Bunta ===;
Find 2 consecutive nuls, ie, the end of history buffer
* Macro
50 ^^ "mactest"

                        ;まずセグは考えない。
        &00 a=r,        ;
        di=a,           ;先頭アドレス
        ax=di+20,       ;終端アドレス(実際にはバッファサイズ)
        &01 &m("%d",di-a)

00:     (3+$)."12345$(0)abcde$(0)$(0)98765",    ;20
                             ;ココ

01:     (3+$)."$
        $(33,DB,8B,F7,8B,C8,39,1C,E3,04,46,49,EB,F8,8B,FE)$
        $(C3)"

*

;------------------------------------------------

START:
        xor bx,bx               ;*
        mov si,di               ;
        mov cx,ax               ;*
NEXT:                           ;
        cmp word ptr [si],bx    ;*
        jcxz FIN                ;*
        inc si                  ;*
        dec cx                  ;*
        jmp short NEXT          ;*

FIN:
        mov di,si       ;copy the found ptr onto conducive DI (same as input)
        ret

 jcxz,  short, あ、ワードでだって比べられる、など思ったのですが、ちゃん
と解析できてはいません。short なんかはとりわけ。
 なんですが、動かないのです。0 とか返してくる。僕はどこかでぽかやってお
りますでしょうか。m(__)m

      - No.2001 -    このTreeへ    コメント元:2000 へ [リストへもどる] pre

(1972) 2002Re^3: 添削希望です(2 nuls find)  投稿者:文太   2007/01/07(日) 02:56
    2001 番 文太 さんへのコメント    コメント数 1

01:     (3+$)."$
↓
01:     &i(3+$)."$

 の間違いがありました。それでも何か変。サブリナすれば分かるかもと思った
ら、cx のデクリメントを永遠やってる。(>_<)  これで本当に速いんですね。
マシン語、こわい。
 もしかしてアセンブルの時点でしくじってますか?


      - No.2002 -    このTreeへ    コメント元:2001 へ [リストへもどる] pre

(1972) 2003Re^4: 勘違いしてました。  投稿者:Konno   2007/01/07(日) 04:14
    2002 番 文太 さんへのコメント    コメント数 1

> ら、cx のデクリメントを永遠やってる。(>_<)  これで本当に速いんですね。
> マシン語、こわい。
>  もしかしてアセンブルの時点でしくじってますか?

ああっ、すみません、慣れない JCXZ なんて使ったら思いっきり間違えていました。
この JCXZ は、cx がゼロの時だけジャンプするんですね。勘違いしていました。

今度はどうでしょう。バイト数は変わらないです。ちなみに、jmp short はMASM5.1
で128バイト以内のショートジャンプを明示することで最適化するんですが、MASM6
では必要ないのかな。


START:
        xor bx,bx               ;*
        mov si,di               ;
        mov cx,ax               ;*
NEXT:                           ;
        cmp word ptr [si],bx    ;*
        je  FIN                 ;  *
        inc si                  ;*
        dec cx                  ;*
        jnz NEXT                ;* *

FIN:
        mov di,si       ;copy the found ptr onto conducive DI (same as input)
        ret


#う〜ん、リハビリが必要だなぁ。

      - No.2003 -    このTreeへ    コメント元:2002 へ [リストへもどる] pre

(1972) 2004リハビリ  投稿者:Konno   2007/01/07(日) 04:58
    2003 番 Konno さんへのコメント    コメント数 1

バイト数を減らすなら、mov cx,ax もいらないですね。

START:
        xor bx,bx               ;*
        mov si,di               ;
NEXT:                           ;
        cmp word ptr [si],bx    ;*
        je  FIN                 ;  *
        inc si                  ;*
        dec ax                  ;* ***
        jnz NEXT                ;* *
FIN:
        mov di,si       ;copy the found ptr onto conducive DI (same as input)
        ret


これで2バイト減ったけど、相変わらず確認してないという。(^^;

      - No.2004 -    このTreeへ    コメント元:2003 へ [リストへもどる] pre

(1972) 2005Re: リハビリ  投稿者:文太   2007/01/07(日) 12:25
    2004 番 Konno さんへのコメント    コメント数 1

金野さん、

 それぞれ以下の形になり、成功です! めでたく「11」と解答してくる!
2つ目の短さ!
 解読は今晩。やっぱ、すごい! 多謝 m(__)m

01:	&i(3+$)."$
	$(33,DB,8B,F7,8B,C8,39,1C,74,04,46,49,75,F8,8B,FE)$
	$(C3)"

01:	&i(3+$)."$
	$(33,DB,8B,F7,39,1C,74,04,46,48,75,F8,8B,FE,C3)"

      - No.2005 -    このTreeへ    コメント元:2004 へ [リストへもどる] pre

(1972) 2006質問です。m(__)m ゼロフラグ?  投稿者:文太   2007/01/07(日) 13:42
    2005 番 文太 さんへのコメント    コメント数 1

金野さん

(第1ヴァージョン)
----------------------------------------
        mov cx,ax               ;*

        dec cx                  ;*
        jnz NEXT                ;* *
----------------------------------------

(第2ヴァージョン)
----------------------------------------
        dec ax                  ;なんでだ?
        jnz NEXT                ;
----------------------------------------

 すいません。僕の頭の中に何かが致命的に抜けている箇所があるようで、訊い
てしまったほうが早そうです。お教え下さい。

 上は今回動いた金野版のそれぞれのヴァージョンです。
 僕の元の奴では、ax が終端アドレスを示していました。 その ax と動いてい
くポインタの  si が比較され、文字列終端まで探したことを確認するために ax
が使われていました。この場合、si は進んでいきますが ax は固定です。

 ですが、金野さんは ax を直接減らしてる。si  と ax が同時に増え・減りし
ているのだから、僕が考えるところでは、文字列の真ん中より右側に2つのヌル
があったら見つけられないのでは?と思ったら、ちゃんと見つけてくれました。
なぜでしょう? (この考え方が間違っているとは思っています。だってその2つ
の比較がそもそもなされてませんからね。(~_~;)

 というわけでゼロフラグ【も】 関係しているのだろう、 と思うのですが、ax
が減らせる理由ないし、そうすることが必要(?)な理由が分かりません。

 ヒントを頂けませんでしょうか。


 因みに、「とにかく文字列の最後はヌル2つに決まってるんだから」(とは限
らないけど)と決めうちにするロジックなら、と「dec ax」を削って、つまり、
どこが終わりか明示されない形で「頭からとにかくどこまでも探せ」とやったら、
いちおう通りました。そりゃ、あることが分かっている状況ですから、当たり前。

 因み2: 0000 をワードで比較、ただしポインタは1バイトずつ進める、の全
体的なロジックは読めているつもりです。


 お手数をお掛けして申し訳ありませんが、どうぞ宜しくご教示ください。


 テストマクロが作れるように、やっぱりsymdebでレジスタとフラグの変化をすぐ
調べられるようにならないと駄目ですね。何を勉強しなくちゃいけないのかは分か
っているのですが…。

      - No.2006 -    このTreeへ    コメント元:2005 へ [リストへもどる] pre

(1972) 2007Re: 質問です。m(__)m ゼロフラグ?  投稿者:Konno   2007/01/07(日) 14:21
    2006 番 文太 さんへのコメント    コメント数 1

文太さん、私が勘違いしてました。

>        di=a,           ;先頭アドレス
>        ax=di+20,       ;終端アドレス(実際にはバッファサイズ)

ここを見て、ax がバッファサイズだと思い込んでいたので、ax をカウンタ代わりに
考えてしまったんです。だから、もし見つからなかったら相当先まで探し続けていた
はずです。(^^;

だから、私のを使うなら、マクロで、ax=20, とすれば問題ないでしょう。
後は文太さんならわかると思います。要は ax の数だけ比較を繰り返して
いるんです。

      - No.2007 -    このTreeへ    コメント元:2006 へ [リストへもどる] pre

(1972) 2008Re^2: 質問です。m(__)m ゼロフラグ?  投稿者:文太   2007/01/07(日) 16:13
    2007 番 Konno さんへのコメント    コメント数 1

金野さん、ありがとうございます。

> ax をカウンタ代わりに考えてしまったんです。
> 要は ax の数だけ比較を繰り返しているんです。

 分かりました! なるほど。文字列中央より右にあるヌル2つが見つかった理
由も氷解しました。アドレスからディクリメントしてるんだから、あの程度の文
字列なら全部なめますね。
 それでも、ちょっとした誤解が読めないのは、まーーーーだ、まーーーーだと
いうことです。ありがとうございました。

      - No.2008 -    このTreeへ    コメント元:2007 へ [リストへもどる] pre

(1972) 2009最短?11バイト  投稿者: Konno   2007/01/08(月) 22:22
    2008 番 文太 さんへのコメント    コメント数 2

文太さん、私も si と di の使い方などよくわかってないですが、マクロで di を
受け渡しに使っているので、si へのコピーを省いてみました。


; ax = バッファサイズ
; di = データアドレス入出力

START:
        xor bx,bx               ;
NEXT:                           ;
        cmp word ptr [di],bx    ;*
        je  FIN                 ; 
        inc di                  ;*
        dec ax                  ;
        jnc NEXT                ;
FIN:
        ret

これで 11 バイトになった。(^^; 一応動いているようです。
他の方からコメントが付かないですが、これ以上短く出来るとか、もっと
違うやり方があるよとか出てくるといいですね。

マクロの方ですが、起動キーが ^^ になってましたが、'^' の刻印のキーでは
起動しなくてあせりました。・・・次のテーマは vkeyc.com かな。(^^;

ところで、サブリナってどこにありましたっけ。軟体にも見当たらないんですが。

# com_&i.def 便利ですね。今までシフト起動しかしてなかった。(^^;
      - No.2009 -    このTreeへ    コメント元:2008 へ [リストへもどる] pre

(1972) 2010Re: 最短?11バイト  投稿者:文太   2007/01/09(火) 00:41
    2009 番 Konno さんへのコメント    コメント数 4

金野さん

 ちょっと忙しくなってまいりますので、遅レスになると思います。
 それでもプロジェクトは続いておりますので、ぽつりぽつりとお願いに上がる
予定です。m(__)m

> マクロの方ですが、起動キーが ^^ になってましたが、'^' の刻印のキーでは
> 起動しなくてあせりました。・・・次のテーマは vkeyc.com かな。(^^;

 ああ、そういう繋がりですか? やっと分かった。使われてないんですか?
 何と何が入れ変わっているのか忘れてしまってますが、実に自然ですよ。旧8組
なものですから、とりわけ。
 『レジデントプログラム入門』、今日届きましたけど、おお、それそれ。眺めた
だけですが。

> ところで、サブリナってどこにありましたっけ。軟体にも見当たらないんですが。

 はい、僕も先日気づきました。ish 16階のみのようです。>めざらさん、忘
れ物のようですよ。送りましょうか?

> # com_&i.def 便利ですね。今までシフト起動しかしてなかった。(^^;

 まだ使ってませーん。今日はまだけっこう遊んでしまったのですが、うーん。
壁です。(>_<)   si,di はいちおう source, destination なんですね。レジス
タがスバゲって、先ほど整理しました。
 レジスタが足りませんよぉ。(ToT) pushしてもまだ足りないのですが。えい、
書いちゃえ。

	cx=bx-1,
	di.(cx+ax)=di.cx,	;翻訳用。cx=bx-1
	bx--,			;ここだ! レジスタ足りない!
	>a			;元は、di.(bx-1+ax)=di.(bx-1)

 こんなの、どうすればいいんでしょう? 文脈抜きの質問では無謀でしょうか?
 コメントは、自分に向けて数時間前に書いて怒っていたときのものです。
 何か知恵があれば。m(__)m


 超短11バイトは明日、明後日。m(__)m

      - No.2010 -    このTreeへ    コメント元:2009 へ [リストへもどる] pre

(1972) 2011Re^2: 最短?11バイト  投稿者:文太   2007/01/09(火) 01:09
    2010 番 文太 さんへのコメント

> 「mov ax,'A'」 というふうに書くとどうなるでしょうか?
> 「mov ax,41h」と同じことなので、AH=00、AL=41hが入ります。
                 『アセンブラ入門』より

 あ、マシン語に入ってからばらせば使えるのか…。だって受け渡しに変数4つ
も使ったら、あと2つしかないじゃないか! そもそも2バイトも要らないデー
タなのに! と怒っていたのです。
 質問を発すると、何か見つかる。(^^;
 とはいえ、(ずうずうしくて自己中的ですが)何かアドバイスなどあれば。
m(__)m
 やっていることはヒストコピーです。str_len も nul2find も一連のプロジェ
クトです。
 (やれるか分かりませんが)最後に合体させて、1kbuf バッファをヒストリー
バッファにします。悲願。そして、メニューに出す(来年のお正月までに…)。

      - No.2011 -    このTreeへ    コメント元:2010 へ [リストへもどる] pre

(1972) 2012Re^2: 最短?11バイト  投稿者: Konno   2007/01/09(火) 01:23
    2010 番 文太 さんへのコメント    コメント数 1

>  ああ、そういう繋がりですか? やっと分かった。使われてないんですか?
>  何と何が入れ変わっているのか忘れてしまってますが、実に自然ですよ。旧8組
> なものですから、とりわけ。

高橋さんの vkeyc.com は
 CTRL+^  -->  CTRL+6
  CTRL+@  -->  CTRL+2
 へ変換するようです。このソースがあればなぁ。

>  はい、僕も先日気づきました。ish 16階のみのようです。>めざらさん、忘
> れ物のようですよ。送りましょうか?

私はログを随分無くしているので、見当たらなかったんですよね。今は軟体に
頼りっぱなしで。(^^;

> 	bx--,			;ここだ! レジスタ足りない!

これは、dec bx ですよね。文脈を全然読めてないですが。

>  超短11バイトは明日、明後日。m(__)m

ゆっくりやりましょう。というか、マシン語をUPしたほうがよかったかな。

	$(33,DB,39,1D,74,04,47,48,73,F8,C3)"

 com_&i なら、test.com から一発です。(^_^)

      - No.2012 -    このTreeへ    コメント元:2010 へ [リストへもどる] pre

(1972) 2013Re^3: 最短?11バイト  投稿者:文太   2007/01/09(火) 01:52
    2012 番 Konno さんへのコメント    コメント数 1

 布団からがばっと飛び起き。 あの〜、ファンクションコールで、ah とかにそ
のまま渡してますよねぇ。  そもそも分けて使えるんじゃないですかぁ。 (>_<)
やれやれ。
 書くと思いつくのです。m(__)m

------------------------------------------------------------

 う、もうレス来てた…。

> これは、dec bx ですよね。文脈を全然読めてないですが。

 そこ、レジスタを余計に使わないのですが…。読めないですよねぇ。
ポインタの代入のところですがぁ…。

> >  超短11バイトは明日、明後日。m(__)m
> ゆっくりやりましょう。というか、マシン語をUPしたほうがよかったかな。
> 	$(33,DB,39,1D,74,04,47,48,73,F8,C3)"

 いえいえ、ゆっくり読みたいのです。過去からの変遷とも比べたかったし。
 頭の中、いろんなことで一杯だし。しばし時間を。
 上、手で削っただけ? ハンド?

>  com_&i なら、test.com から一発です。(^_^)

 うーんと、  なぜ  com  ファイル経由なんでしょう?  僕は自分のマクロで
testasm.asm から &i 形式まで一発にしましたよ? ???

 大して使ってし、うわああああと作ったので、まだどっかにバグがあるかも
しれませんが。
 何か外してますか?

=== Mll.def by Bunta ===;
* Macro
50 ^^ "MLL"

	?. ss2,

; --- check already opened or not
	mx[+, #O "dumpkek.txt" #m
	(s==4)? {"N" #[ >c}	;not opened
	(r>0)? {#C "N"}		;opened
:c 	mx],

#E
#if 98 MG
"TASM testasm.asm" #m		;no question, please ....
"TLINK testasm.obj" #m

#elseif DOSV
"Ml testasm.asm" #m			;asemble
"Lld testasm.obj" #m			;link
#endif

"Exe2com testasm.exe" #m		;2com
"Dump testasm.com > dumpkek.txt" #m

	#[
	#O "dumpkek.txt" #m

; --- how many lines?
	#_ n=ln-1, #^ #<

; --- cut big columm block right & left by replace command
#56 "\x ^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]  " #m
    #m "AY"
#56 "\x |.+$$" #m 
    #m 
    "AY"
#56 "- " #m
    #m
    "AY"
#56 "\x \s+$$" #m
    #m
    "AY"

; --- change ' ' & '-' to ','
#56 "\x [-\s]" #m
    "," #m
    "AY"

; --- add left $(" & rihgt ")
#56 "\x ^" #m 
     "	$$(" #m
     "AY"
#56 "\x $$" #m 
     ")$"" #m
     "AY"

; --- manual labor!!
	(n==1)? >a
	#^ #> i=1,
:b	(n-i)? {#h "$$" #d i++, >b}

; --- add top subroutine mark
:a
	#^ #< #n
	"0:	&i(3+$$).$"$$"

	&d &m("finished!") .
*

 あ、それでは、明日、サブリナ、送ります。

      - No.2013 -    このTreeへ    コメント元:2012 へ [リストへもどる] pre

(1972) 2023麗しのサブリナ  投稿者: Konno   2007/01/09(火) 23:16
    2013 番 文太 さんへのコメント    コメント数 1

>  布団からがばっと飛び起き。 あの〜、ファンクションコールで、ah とかにそ
> のまま渡してますよねぇ。  そもそも分けて使えるんじゃないですかぁ。 (>_<)

もしかして、Vzマクロで ah=xx, al=xx, なんて考えているのでは。これは以前
はまってましたよね。当然出来ないですが。

>  上、手で削っただけ? ハンド?

だからぁ、
> >  com_&i なら、test.com から一発です。(^_^)
これです。(^^; ねぼけてますね。

>  うーんと、  なぜ  com  ファイル経由なんでしょう?  僕は自分のマクロで
> testasm.asm から &i 形式まで一発にしましたよ? ???

全自動ですか。確かに一度で綺麗に仕上がるなら手間要らずで楽チンですが、
私は一発でうまく出来ないので何度もやり直します。そういう時は二槽式の方が
センタクの融通が利くので。(なにか違う?)

>  あ、それでは、明日、サブリナ、送ります。

頂きました。ありがとうございます。m(__)m
これは凄いですねぇ。使いこなせるかなぁ。

      - No.2023 -    このTreeへ    コメント元:2013 へ [リストへもどる] pre

(1972) 2026Re: 麗しのサブリナ  投稿者:文太   2007/01/10(水) 00:24
    2023 番 Konno さんへのコメント

金野さん

> もしかして、Vzマクロで ah=xx, al=xx, なんて考えているのでは。これは以前
> はまってましたよね。当然出来ないですが。

 覚えてるんですか? 僕もそんな気が一瞬しました、つまり、おい、前にも同
じ間違いしたんじゃない? なわけないよな。(間)
 バーカ! 分けられるわけないだろう! と気づいても、まだ思い出しません
でした。

 DC閉鎖ちょっと前のファンクションコールのときですね。思い出しました。
これで、たぶん、一生忘れません。ありがとうございました。


 あ、全自動ですが、僕は、アセンブルできるか、>ml testasm.asm と試してか
らあのマクロを使ってます。実行ファイルが意味なすのは遠いでしょうから。金
野さんとは違いますよ。マクロのためのマシン語ルーチン。それが基本、僕には。

      - No.2026 -    このTreeへ    コメント元:2023 へ [リストへもどる] pre

(1972) 2014Re^2: 最短?11バイト  投稿者:としき@会社   2007/01/09(火) 09:53
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2010 番 文太 さんへのコメント    コメント数 1

>  こんなの、どうすればいいんでしょう? 文脈抜きの質問では無謀でしょうか?

無謀じゃないでしょうが。
どうしたらいいのか、というのが理解できません。
このままのコードじゃだめなんですか?
実現したいコードがどういうものか、というのが不明なのですよ。
レジスタを抜きにして、普通の変数で実現したいロジックを書いていただいて、
それをアセンブラにするにはどうしたらいいのか、という形式で質問していただ
けるとありがたいです。
      - No.2014 -    このTreeへ    コメント元:2010 へ [リストへもどる] pre

(1972) 2015複雑な(?)ポインタ演算を、、、  投稿者:文太   2007/01/09(火) 12:45
    2014 番 としき@会社 さんへのコメント    コメント数 1

としきさん、

 (昨晩遅くの書き込み、色々ひどくてごめんなさい>all、とりわけ金野さん)

 それではお言葉に甘えさせていただきます。m(__)m

 Vzマクロ言語で書くと、このようなコードです。
 di.(bx-1+ax)=di.(bx-1),

 レジスタ変数を使わなければ、
 p.(a-1+b)=p.(a-1),
  (3)(1)(2)(4)

 これは、(とりあえずpush,popなしで考える)ニーモニックでは、(レジスタ
の組み合わせをまだ十分考えられていませんが)

  c=a-1,		;(1)
  d=c+b,		;(2)
  e=[p+d]		;(3)混ぜますm(__)m
  mov e,[p+c]		;(4)同

 となると思います。

 このロジックしか今のところ思いついていません。ここで新たに3つ変数が必
要になっています。dec,inc を繰り返せば変数の数は減らせますが(c がなくな
る)、恐ろしく見渡しの悪いことになります。またこのルーチンを出るときには
a,bは元の値にもどっていなければなりません。

 昨晩の発見(ax を al,ah に分けてそもそも受け渡し変数にする)、+ push&
pop で、なんとかやりくりつくのかもしれませんが、ここですでに根本的に間違
っていたら、やはり悲しいので、お知恵を拝借できればありがたいです。m(__)m

      - No.2015 -    このTreeへ    コメント元:2014 へ [リストへもどる] pre

(1972) 2016Re: 複雑な(?)ポインタ演算を、、、  投稿者:としき@会社   2007/01/09(火) 13:43
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2015 番 文太 さんへのコメント    コメント数 1

>  Vzマクロ言語で書くと、このようなコードです。
>  di.(bx-1+ax)=di.(bx-1),

なんとなく理解できた気がする。データを移動させたいのですよね。
1バイトだけならあまり面白くありませんが、もし、これを繰り返し行うような
ことがあるのであれば、ストリング命令というのを使うことを検討してみてはい
かがでしょうか。

      - No.2016 -    このTreeへ    コメント元:2015 へ [リストへもどる] pre

(1972) 2017Re^2: 複雑な(?)ポインタ演算を、、、  投稿者:文太   2007/01/09(火) 14:26
    2016 番 としき@会社 さんへのコメント

> ストリング命令というのを使うことを検討してみてはい
> かがでしょうか。

 了解。そっちですか。ありがとうございました。

      - No.2017 -    このTreeへ    コメント元:2016 へ [リストへもどる] pre

(1972) 2018Re^2: 最短?11バイト  投稿者:としき@会社   2007/01/09(火) 15:34
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2010 番 文太 さんへのコメント    コメント数 2

引用の都合、こっちにレスします。

> 壁です。(>_<)   si,di はいちおう source, destination なんですね。レジス

si,di の i はindexを意味します。
インデックスレジスタの使い方としては、

p.(a-1+b)=p.(a-1)

を表すような場合、常套的というのかな、多くの場合は

mov di,b
mov ax,p
mov bx,a
dec bx
add bx,ax
mov ax,[bx]
mov [bx+di],ax

みたいな感じになるのかな。
バイト型とワード型が混在しているような気もするけど、その辺は汲み取ってね。
あと、レジスタは全く保存していません。
必要ならpush popをつかう、ということで。


ただ、よくわかっていないのですが、マクロだけではだめなのですか?
マクロで遅い部分(ループだけ)をマシン語化する、でもいいように思うのですが。
      - No.2018 -    このTreeへ    コメント元:2010 へ [リストへもどる] pre

(1972) 2019ポインタ演算こっちへ  投稿者:文太   2007/01/09(火) 17:49
    2018 番 としき@会社 さんへのコメント    コメント数 2

としきさん

 何度もありがとうございます。

> ただ、よくわかっていないのですが、マクロだけではだめなのですか?
> マクロで遅い部分(ループだけ)をマシン語化する、でもいいように思うのですが。

 ここですが、マシン語化するしかありません。&Sh() を、あるいは #F(など)
をエミュレートしようと企んでいます。1000  bytes 近くが動くのです。もちろ
ん実現すれば、ですけれど。ポインタでも1秒2秒のことだろうけど。
 いつかできますよ、きっと。
 途中でいっぱい勉強できます、きっと。目的・目標ないとねぇ…。


p.(a-1+b)=p.(a-1)

を表すような場合、常套的というのかな、多くの場合は

mov di,b	;
mov ax,p	;
mov bx,a	;
dec bx		;a-1
add bx,ax	;★ di? a-1+b
mov ax,[bx]	;?
mov [bx+di],ax	;?

 上、間違いないですよね。★で途方にくれていますが、「間違いなし」とのこ
となら、またゆっくり考えてみよう、と思っております。
 たぶん、諦めて、「説明をお願いします」ということになりそうな気がしてし
まっていますが。


> バイト型とワード型が混在しているような気もするけど、その辺は汲み取ってね。

 これは分かっています。

 「rep movsb」だな、と思っておりますが。

      - No.2019 -    このTreeへ    コメント元:2018 へ [リストへもどる] pre

(1972) 2020Re: ポインタ演算こっちへ  投稿者:としき   2007/01/09(火) 21:10
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2019 番 文太 さんへのコメント    コメント数 1

>  上、間違いないですよね。★で途方にくれていますが、「間違いなし」とのこ
> となら、またゆっくり考えてみよう、と思っております。

間違いだらけかもしれません。
Vzマクロで、pに7000h、aに5が入っていた場合、p.aって7005hでよかったよう
な気がしたんですが。だから、pから1引いてaを足したのとpにaから1を足したも
のが同じだと考えて、結果、あのようになりました。

あと、8086系だと、もっと楽な表記もあって。
ラベルの示すアドレスと、そのアドレスの持っている値というのをもうちょっと
区別して書くと、こんな感じ?

mov bx,a
mov di,b
mov ax,[p]
add bx,ax
mov ax,[bx-1]
mov [bx+di-1],ax

まだ間違いがありそうな気もします。
とりあえず、上記、文法的にはOKなはず。ロジック的にどうかは知りませんが。

      - No.2020 -    このTreeへ    コメント元:2019 へ [リストへもどる] pre

(1972) 2022Re^2: ポインタ演算こっちへ  投稿者:文太   2007/01/09(火) 22:13
    2020 番 としき さんへのコメント

としきさん

> 間違いだらけかもしれません。

 ごめんなさい。(T-T)

> Vzマクロで、pに7000h、aに5が入っていた場合、p.aって7005hでよかったよう
> な気がしたんですが。だから、pから1引いてaを足したのとpにaから1を足したも
> のが同じだと考えて、結果、あのようになりました。

 なるほど。大変に分かりやすい説明です。ありがごうございます。

 Vzマクロでaxがal,ahに分解できると信じてどつぼにはまるわ、失礼な暴言は
はくわ、動いてたマクロが動かなくなるわで、最低。心が彷徨ってる。
 失礼しました。

      - No.2022 -    このTreeへ    コメント元:2020 へ [リストへもどる] pre

(1972) 2024Re: ポインタ演算こっちへ  投稿者: Konno   2007/01/09(火) 23:47
    2019 番 文太 さんへのコメント    コメント数 1

文太さん、どうも変数の受け渡しで悩んでいるようですが、そういう時は発想を
変えてみたほうがいいかもしれません。
受け渡しは、si,di,cx,ax, ぐらいで出来そうに思うんですがねぇ。

と思ってたら、SABRINA.DOC の 80ページに良い例がありました。

=Test.def
*m
80 ^\   ""
        si"SABRINA",
        di=pr,
        &i("$(AC,AA,0A,C0,75,FA,4F,C3)")
        &m("copy しました")

;strcpy:
;_repeat
;       lodsb
;       stosb
;       tst     al
;_until z
;       dec     di
;       ret

*

これは、STD.INC を同じフォルダにコピーして、インクルードするようですね。
 si"SABRINA", から di=pr, へのコピーで、受け渡しは si, di, だけですね。

;strcpy:
 include	std.inc

_repeat
       lodsb       ; si --> al 
       stosb       ; al --> di
       tst     al  ; al は 0 か
_until z           ; al<>0 なら _repeat へ繰り返し
       dec     di  ; di--,
       ret

こんな感じですか。マクロが判りにくければ、STD.INC を読んで、展開してやれば
いいでしょう。

      - No.2024 -    このTreeへ    コメント元:2019 へ [リストへもどる] pre

(1972) 2027Re^2: ポインタ演算こっちへ  投稿者:文太   2007/01/10(水) 17:01
    2024 番 Konno さんへのコメント    コメント数 1

金野さん

> 文太さん、どうも変数の受け渡しで悩んでいるようですが、そういう時は発想を
> 変えてみたほうがいいかもしれません。
> 受け渡しは、si,di,cx,ax, ぐらいで出来そうに思うんですがねぇ。

 はい、出来そうに僕も思うんですが…。どうもおつむが腐ってるようで…。

 それより翻訳前のマクロを壊してしまってそれすら直せなくて、うんざりして
ました。まだ直らない。なぜだ?! ちょっと疲れが溜まっていたり、集中力を
欠いている感じです。m(__)m

> と思ってたら、SABRINA.DOC の 80ページに良い例がありました。

 いいサンプル! うまい! strcpyとしてもサブリナ使用例としても。m(__)m

 ただ、 ここでも前に戻ってしまうのですが、 逆アセマクロでsymdebを使うと
(with  SW4)、何かを壊しているような感じで、sabrinaが常駐解除できなくな
ってしまい、メッセージラインの変化を読むところにたどり着くのに、かなり苦
労しました。最初、メッセージラインが動かず、???しました。

 やっぱ、SW3でsymdebのときは、常駐解除かな〜。

 そう、これがやりたいことなのです。それを2回やればヒストコピーなので。
 目で見えるのって、す、すごい。

 アセンブラのマクロとか、std.inc とか、色々とゆっくりと研究し、試させて
いただきます。m(__)m   ありがとうございました。_repeat, _until っていう
のがマクロなんですね。前から、何これ? って思っていたのです。とってもわ
かりやすいけど。

 2nulsfind から色々とレスをもらい(金野さん)、かっちょいいサンプルもも
らい(YASAT さん)、さらに「あなたはこう考えたらいいでしょう」といったご
指導までもらっているのに(としきさん、多謝)、まだ読めていません。ゆっく
りやりますね。すいません。週末、かな? テストいっぱい。作るのとやるのと
採点するのと…。ぎょへ。


------- 以下のようなのにヘッダつけたら、おお、できた。
;strcpy:
 include	std.inc

START:
_repeat
       lodsb       ; si --> al 
------ コメントなど、多謝。ああこれがマクロ。高橋さんの発言にいっぱいあり
ました。std.incも覗いたら、ワケワカだけど、ああ、そういう仕組み、と。m(__)m

      - No.2027 -    このTreeへ    コメント元:2024 へ [リストへもどる] pre

(1972) 2028Re^3: ポインタ演算こっちへ  投稿者: Konno   2007/01/10(水) 22:35
    2027 番 文太 さんへのコメント    コメント数 1

>  ただ、 ここでも前に戻ってしまうのですが、 逆アセマクロでsymdebを使うと
> (with  SW4)、何かを壊しているような感じで、sabrinaが常駐解除できなくな
> ってしまい、メッセージラインの変化を読むところにたどり着くのに、かなり苦
> 労しました。最初、メッセージラインが動かず、???しました。

う〜む、なんなんでしょね。私もぼちぼちやってみます。

>  やっぱ、SW3でsymdebのときは、常駐解除かな〜。

専用アイコンを作って別窓でやったらどうでしょう。そのまま閉じても結果が
ファイルならうまく連携できそうな気がします。

> ------ コメントなど、多謝。ああこれがマクロ。高橋さんの発言にいっぱいあり
> ました。std.incも覗いたら、ワケワカだけど、ああ、そういう仕組み、と。m(__)m

std.inc のマクロ、覗いてみたら、げげぇ! 複雑怪奇!! 全く読めん。(;_;)
しかたがないので、自分なりに置き換えてみました。

START:
;strcpy:
 include	std.inc

repeat:
       lodsb         ; si --> al 
       stosb         ; al --> di
;      test   al,0   ; al は 0 か    *1
       or    al,al   ; al は 0 か    *2
       jnz   repeat  ; al<>0 なら _repeat へ繰り返し
       dec   di      ; di--,
       ret

最初、*1 でやったんですが、ゼロが入ってしまい、マクロがエラーに。
 &i("$(AC,AA,A8,00,75,FA,4F,C3)")
             ^^^^^
しかたがないので、逆汗してリストを見たら、*2 でやってたんですね。
う〜ん、or al,al で、al がゼロか判るのか。知らなかった。しかもゼロが
入らない?

#文太さん、私もついでに勉強がてら色々書き込みますが、気にしないで下さい。(^^;

      - No.2028 -    このTreeへ    コメント元:2027 へ [リストへもどる] pre

(1972) 2032Re^4: ポインタ演算こっちへ  投稿者:文太   2007/01/11(木) 01:29
    2028 番 Konno さんへのコメント    コメント数 2

 長くてすいません。あ、どんどんやってください。勉強になります。
 僕は、Symdebのお勉強です。できた! と思う。(Vz非常駐にすること。)

Symdeb
Microsoft Symbolic Debug Utility
Version 3.01
(C)Copyright Microsoft Corp 1984, 1985
Processor is [80286]
-a
41DA:0100 mov al,5		;★
41DA:0102 
-g=0100 0102
AX=0005  BX=0000  CX=0000  DX=0000  SP=BD15  BP=0000  SI=0000  DI=0000  
^^^^^^^
DS=41DA  ES=41DA  SS=41DA  CS=41DA  IP=0102   NV UP EI PL NZ NA PO NC 
41DA:0102 B582           MOV    CH,82                              
-a
41DA:0102 or al,al		;★たしか慣用句
41DA:0104 
-g=0102 0104
AX=0005  BX=0000  CX=0000  DX=0000  SP=BD15  BP=0000  SI=0000  DI=0000  
^^^^^^^
DS=41DA  ES=41DA  SS=41DA  CS=41DA  IP=0104   NV UP EI PL NZ NA PE NC 
               パリティフラグ? ゼロでない、といってるのかな?^^
41DA:0104 C482A282       LES    AX,[BP+SI+82A2]                    SS:82A2=287D
-q

 どっかでとしきさんが書いていたはずですが(ログが残らないのが掲示板の辛
いところ)、or al,al は al を変化させないようです。


 常駐だと、上をやっただけで落ちました。非常駐でもファイルが1枚開けてあ
れば、コンソール取れるのですね。勉強、勉強。φ (__ ) メモメモ

 別窓、素晴らしいアイディアです! ファイル経由ならうまくいくはず…。

      - No.2032 -    このTreeへ    コメント元:2028 へ [リストへもどる] pre

(1972) 2034Re^5: ポインタ演算こっちへ  投稿者:としき@宿直   2007/01/11(木) 03:41
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2032 番 文太 さんへのコメント    コメント数 1

うぅ、なんか板塀が倒れているんだけど、会社なので復旧措置ができない。
おまけに、今日は会社が引けてもまっすぐ帰れない。
書店めぐりの予定。大学入試レベルの物理の公式集が欲しくて。
実は再来週くらいにとある国家試験を受けるのですが、私の見たところ、それの
出題レベルは大学入試くらいかな、と。去年の夏にも一度受けているのですが、
見事に落ちたので、今度はまじめに勉強しようかと。
昔、私が大学受験のときに使った公式集は弟にくれてやったのですが、取り返そ
うと思ったところが、見事になくされたようで。でも、当時、約20年前の大学
入試と現在の大学入試はレベルが変わっていたりするかな。そうすると、現在の
入試参考書は役に立たない可能性もあるかも。


さて、本題。

> DS=41DA  ES=41DA  SS=41DA  CS=41DA  IP=0104   NV UP EI PL NZ NA PE NC 
>                パリティフラグ? ゼロでない、といってるのかな?^^

PEは、パリティイーブン、ですね。
逆は、パリティオッド、かな。POとなるはずです。
ゼロではない、というのは、NZですね。ノンゼロ。
では、ゼロの場合はどうなるのでしょうか。
movコマンドで、alに5だけではなく、4とか0とかを入れてみれば、orをかまし
たときのフラグの変化が見れて面白いでしょう。

>  どっかでとしきさんが書いていたはずですが(ログが残らないのが掲示板の辛
> いところ)、or al,al は al を変化させないようです。

そういう時は検索。
ここの#1996に書いてあるようです。

      - No.2034 -    このTreeへ    コメント元:2032 へ [リストへもどる] pre

(1972) 2040Re^6: ポインタ演算こっちへ  投稿者:文太   2007/01/12(金) 12:15
    2034 番 としき@宿直 さんへのコメント    コメント数 1

以下、symdeb です。 なるほどゼロフラグのほうですね。パリティフラグのほう
の odd(奇数), even(偶数)は解析できませんでしたが。
 ゼロフラグの違いに気がつかず、どうやって判定してるんだよ、としばし。
 でも、国語の先生@信託(宅)のところにも、ちゃんと「0フラグ」と書いて
あった。何を読んでいるのやら。(^o^;m(__)m
 cmp が引き算というのを、この流れで知った。ああ、いっぱいある、ある。
 やっぱり、どうしてこういうのばっかりやっているのか、金野さんに訊きたい。
どうしてやり始めたのか。当時は一番メジャーな言語だった?

-a
3DEC:0100 mov al,0
3DEC:0102 or al,al
3DEC:0104 
-g=0100 0104
AX=0000  BX=0000  CX=0000  DX=0000  SP=C103  BP=0000  SI=0000  DI=0000  
DS=3DEC  ES=3DEC  SS=3DEC  CS=3DEC  IP=0104   NV UP EI PL ZR NA PE NC 
3DEC:0104 084C04         OR     [SI+04],CL                         DS:0004=00
-a
3DEC:0104 mov al,1
3DEC:0106 or al,al
3DEC:0108 
-g=0104 0108
AX=0001  BX=0000  CX=0000  DX=0000  SP=C103  BP=0000  SI=0000  DI=0000  
DS=3DEC  ES=3DEC  SS=3DEC  CS=3DEC  IP=0108   NV UP EI PL NZ NA PO NC 
3DEC:0108 084D04         OR     [DI+04],CL                         DS:0004=00
-q


 落ち着いた心で、あっちの「常套句」も読んだり眺めたりしていますが(ポイ
ンタ演算のこと)、あれができなきゃマシン語はやれない、というのなら逃げた
ほうがいいよなぁ、と思い始めてます。ああいう直訳でなく、別の方法がいくら
でもありそうだな、と思っているかれでもありますが。
 ああいう場合、bx というのがとっても大事なんですね。 でも、先を読んでそ
れに合わせてたら、あそこ以外がボロボロになりそうなんです。しかしあそこの
ポインタでずらすところがルーチンのキモで、ループが最大 1000 回回るので、
なんとかします。

 一つだけ質問。あれ、「常套句」とはいえ、けっこう難易度高くないですか?
 あれが基本、最初に飛ぶべきハードル、ということなら暗記しますが。


 物理のことは僕に訊かないで(訊いてないよ)。とはいえ、たぶんそれほど変
わってはいないでしょう。入試問題は変わりましたが(予備校のチェックや採点
が入るようになった)、ゆとり教育の時代にもかかわらず、レベルに変化がなか
ったのが、問題なのか功績なのか、だそうですので。

      - No.2040 -    このTreeへ    コメント元:2034 へ [リストへもどる] pre

(1972) 2041Re^7: ポインタ演算こっちへ  投稿者:としき   2007/01/12(金) 19:49
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2040 番 文太 さんへのコメント    コメント数 1

> 以下、symdeb です。 なるほどゼロフラグのほうですね。パリティフラグのほう
> の odd(奇数), even(偶数)は解析できませんでしたが。

私自身は、パリティフラグを使うようなコーディングはほとんどしませんね。
ゼロフラグとキャリーフラグだけで、ほとんどの分岐は可能でしょう。
でも、ゼロフラグやキャリーフラグではウダウダと冗長なコードになるところが、
パリティフラグを使うとシンプルなロジックにできる可能性があるので、存在は
忘れてはいけないでしょう。私は忘れていたけど。

> DS=3DEC  ES=3DEC  SS=3DEC  CS=3DEC  IP=0104   NV UP EI PL ZR NA PE NC 
> DS=3DEC  ES=3DEC  SS=3DEC  CS=3DEC  IP=0108   NV UP EI PL NZ NA PO NC 

そうか、ZRというのとNZっていう標記になるのね。
PEとPOは当たっていたようで。
あとは、キャリーか。
NCはノーキャリーだから、キャリーが立った場合はCRかCAあたりでしょうね。
mov al,0
dec al
でキャリーが立つはず。未確認だけど、さすがにこれは間違いないと思う。


>  物理のことは僕に訊かないで(訊いてないよ)。とはいえ、たぶんそれほど変
> わってはいないでしょう。入試問題は変わりましたが(予備校のチェックや採点
> が入るようになった)、ゆとり教育の時代にもかかわらず、レベルに変化がなか
> ったのが、問題なのか功績なのか、だそうですので。

本屋巡りをしてわかったことをちょっと報告。
今って物理1・2とかって分かれているんですね。
おまけに、1A・1Bっていうようにも分かれているようで。
物理に限らないようですが。
私らの時代は、物理は物理で1つだけだったんですよ。他の教科も同様。
あの頃は物理は花形というか、参考書類の出版点数というか品揃えでは、物理・
化学・生物・地学の順だったんですね。でも現在は、化学・生物・物理・地学の
順番。難しいというか点が取りにくくて嫌われているのかな。計算問題が難しい
イメージがあるのかも。私は、物理は理屈を覚えられなくても少数の公式だけ覚
えれば点がとれるというイメージがあって。化学は、反応式は無限にあるし、周
期律表を覚えるだけでもひぃひぃ言っていたので、あまりいいイメージがありま
せん。って、当時から記憶力は大したことはなかったという事か。

結局、欲しかった種類の本は売っていなかったので何も買いませんでした。
何軒も本屋をまわったのですがね。
新宿だけで、南口の紀伊国屋・代々木の代ゼミの本屋・東口の紀伊国屋と徒歩で
まわったので、いい運動にはなりましたが。

      - No.2041 -    このTreeへ    コメント元:2040 へ [リストへもどる] pre

(1972) 2043Re^8: ポインタ演算こっちへ  投稿者:文太   2007/01/12(金) 23:03
    2041 番 としき さんへのコメント    コメント数 1

 すいません、揚げ足をとるようで。パリティフラグについて。

-a
23B2:0100 mov al,1★
23B2:0102 or al,al
DS=23B2  ES=23B2  SS=23B2  CS=23B2  IP=0104   NV UP EI PL NZ NA PO NC 
-a                               ^^
23B2:0104 mov al,2★
23B2:0106 or al,al
DS=23B2  ES=23B2  SS=23B2  CS=23B2  IP=0108   NV UP EI PL NZ NA PO NC 
-a                                                              ^^
23B2:0108 mov al,3★
23B2:010A or al,al
DS=23B2  ES=23B2  SS=23B2  CS=23B2  IP=010C   NV UP EI PL NZ NA PE NC 
                                                                ^^

 偶数と奇数が組み合わないのですよ。al  の値が偶数・奇数と言っているので
はない、とだけ確認したのですが。これで「解析できず」と書きました。
 僕が参考書で調べた限りでも、確かに「パリティフラグを使うことはまずない」
とかなんとか、でした。
 忘れましょう。ただ間違ったことを(そうであるなら)記憶してしまうのはよ
くないので、いちおう僕の(間違っているかもしれない)理解を伝えておきます。


 追伸:代ゼミの本屋は僕も2年くらい前に行きました。山川の日本史の教科書
を買いに。他で売ってないもので。「今時の日本史の教科書はどうなってるんだ?」
と。
 しかし、いっぱい歩きましたねぇ。それに本屋も通じゃん。健康、健康。いい
ですよ。しょっちゅう眠いかもしれませんが、不眠に悩まないでしょ。それがち
ゃんと生きてる証。僕のようになったらおしまい(な、情けない台詞)。でも、
でも、禁煙続いてるもんね。マシン語が上手くいかなくても(お陰様で)深く悩
まなくていいので(多謝)。とにかく、人生、やりなおしだぁ!

      - No.2043 -    このTreeへ    コメント元:2041 へ [リストへもどる] pre

(1972) 2045Re^9: ポインタ演算こっちへ  投稿者:としき   2007/01/12(金) 23:28
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2043 番 文太 さんへのコメント    コメント数 1

>  すいません、揚げ足をとるようで。パリティフラグについて。

>  偶数と奇数が組み合わないのですよ。al  の値が偶数・奇数と言っているので
> はない、とだけ確認したのですが。これで「解析できず」と書きました。

うげげ、申し訳ない。
数値そのものではなく、2進数であらわした場合のビットの立っている数が偶数
か奇数か、ということだったはずです。
なので、
4ならPO
5  PE
6  PE
となるはずです。
ま、動き方がわかったからといって、使用頻度があがるとはとても思えませんが。

      - No.2045 -    このTreeへ    コメント元:2043 へ [リストへもどる] pre

(1972) 2059パリティフラグ  投稿者:文太   2007/01/14(日) 13:43
    2045 番 としき さんへのコメント

としきさん(ようやく戻りました)

> 数値そのものではなく、2進数であらわした場合のビットの立っている数が偶数
> か奇数か、ということだったはずです。

 はい、結論として、これが正しいようです。だから、何? という感じが、も
のすごくしてしまいますが、それでもどっかで使い道があるんでしょうね。

> 4ならPO
> 5  PE
> 6  PE

 か、確認しました。間違いありません。

> ま、動き方がわかったからといって、使用頻度があがるとはとても思えませんが。

 実に、まったく。

(追加実験)
7 00000111 3 O  PO
8 00001000 1 O  PO
9 00001001 2 E  PE
     予想:実験結果  ビンゴ!

 ビットが立ってる数…。確かにそう振る舞うけど…。

 マシン語とつき合ってると、Windows みたいなところまで来るのには、うん万
人の努力の集積が必要だったんだろうな、と思ってしまう。
 Vzマクロは高級言語だと思ってしまう。そして「ローテクはハイテク」の意
味も実感されています。&Sh() のありがたいこと、ありがたいこと。
 rep movsb もありがたい(あの直訳ポインタ演算からすればこっちが超楽)

      - No.2059 -    このTreeへ    コメント元:2045 へ [リストへもどる] pre

(1972) 2038Re^5: ポインタ演算 or al,al  投稿者: Konno   2007/01/12(金) 00:32
    2032 番 文太 さんへのコメント

>  どっかでとしきさんが書いていたはずですが(ログが残らないのが掲示板の辛
> いところ)、or al,al は al を変化させないようです。

あ、ほんとだ。(^^; 読んだ覚えはあるのに、この部分は全く記憶に残ってない。(^^;
これで覚えられそうです。m(__)m きっと、たぶん、おそらく、・・・・

      - No.2038 -    このTreeへ    コメント元:2032 へ [リストへもどる] pre

(1972) 2042Re^3: 最短?11バイト  投稿者:としき   2007/01/12(金) 20:58
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2018 番 としき@会社 さんへのコメント    コメント数 1

> p.(a-1+b)=p.(a-1)
> 
> を表すような場合、常套的というのかな、多くの場合は
> 
> mov di,b
> mov ax,p
> mov bx,a
> dec bx
> add bx,ax
> mov ax,[bx]
> mov [bx+di],ax
> 
> みたいな感じになるのかな。

ちょっと誤解を招きそうなので自己レス。
って言うか、私が間違えている部分もあるし。

常套的、というのはレジスタの使い方の話。
インデックスレジスタって、その名の通り、インデックス操作に使います。
他のレジスタと足しあわせたアドレスを持ってきて、そのメモリの中身を操作す
る、ということです。2つのレジスタの値を足すのだけど、片方のレジスタは固
定値というか値を動かさず、インデックスレジスタだけインクリメント・デクリ
メントで値を動かします。この部分が私の間違いね。
それと、siがソース側、diがデスティネーション側、というのはいいですよね。

ま、やっぱり、メモリの転送にはストリング命令を使うのが、ロジックの分かり
やすさから言って一番でしょう。万が一、それで遅いというのであれば書き直せ
ばいいことであって、まずは動くものを書くことから始めてみませんか。

      - No.2042 -    このTreeへ    コメント元:2018 へ [リストへもどる] pre

(1972) 2044Re^4: 最短?11バイト  投稿者:文太   2007/01/12(金) 23:06
    2042 番 としき さんへのコメント    コメント数 3

としきさん、色々と多謝。

> それと、siがソース側、diがデスティネーション側、というのはいいですよね。

 いちおう、以下のように。ただヒストコピーだとdi内で一度動かすのです。
 問題のループ部分だけをマシン語に入れて、そこは完成しました。
 「マクロでやれる部分があるんじゃない?」「ストリング命令だよ」。じつに
まったく、その通りで。m(__)m

> ま、やっぱり、メモリの転送にはストリング命令を使うのが、ロジックの分かり
> やすさから言って一番でしょう。

 です、です。救いの手。多謝。m(__)m

> 万が一、それで遅いというのであれば書き直せばいいことであって、

 マシン語で遅いなどということはあり得ない、と信じています。ポインタ演算
でもワークファイルを開いても、 コマンドラインで awk しても、実は僕は「遅
い」とは感じたことがないのです。結果を出してくれればいいので。向上心のな
い奴…。
 日曜ぐらいまでにスレッドを立て直します。気分を新たにというわけでもあり
ませんが、スレッドが読みづらくなってしまったので。m(__)m

> まずは動くものを書くことから始めてみませんか。

 賛成!


 問題だったポインタ演算の部分は、以下のように、実にあっけなく解決しました。
 問題は&Shに向けての全体構想なんです。どうもうまくいかなくて…。

 害はないはずなので、せっかく動いたので、試してね。

=== Macro Tmp by Bunta ===;
;同セグでのヒストコピー原形。ただしバッファ・チェックなし(キモ!)。
;異セグ対応も全く難しくない。diからesに入れるだけ。
* Macro
50 ^^ "mactest"

	&00 &01				;offset  p(source),q(destination)
	&Sn(p) a=r+1, &Sn(q) b=r+1,	;length  a,        b (with null)

	si=q, di=q+a, cx=b,		;move kizon forward
	&02
	si=p, di=q, cx=a,		;paste new onto kizon
	&02
	&m("新:%s",q)
	&w(120)
	&m("旧:%s",q+a)

00:	p=3+$,."abcdefghij"
01:	q=3+$,."0123456789$[20]"

02:	; --- 同セグで cx bytes, si->di copy
	&i("$(8C,D8,8E,C0,FC,F3,A4,C3)").

*

;----------------
mov ax,ds
mov es,ax
rep movsb
ret			;これを忘れて泣いた、泣いた
;----------------

;----------------
;変数が足りないならこういうずるい手もあるにはあるよ、と思ってます。
;自前変数(バッファ)ってありなんですね。(^^; マシン語が0だらけになりは
;しますが。
	mov ax,1
	mov bx,2
	mov cx,3
	mov VR1,ax
	mov VR2,bx
	add cx,VR2
	ret

VR1	DW	0
VR2	DW	0
;----------------

      - No.2044 -    このTreeへ    コメント元:2042 へ [リストへもどる] pre

(1972) 2047Re^5: 最短?11バイト  投稿者:としき   2007/01/12(金) 23:37
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2044 番 文太 さんへのコメント    コメント数 1

> ;変数が足りないならこういうずるい手もあるにはあるよ、と思ってます。
> ;自前変数(バッファ)ってありなんですね。(^^; マシン語が0だらけになりは

やはりここは、push popを使うべきでしょう。
あと、dw 8888h とか dw dup(10)っていうのも使えるかもしれません。

      - No.2047 -    このTreeへ    コメント元:2044 へ [リストへもどる] pre

(1972) 2060姑息な変数作成法  投稿者:文太   2007/01/14(日) 13:52
    2047 番 としき さんへのコメント    コメント数 1

 push,pop が正当なのは分かってますが、とりあえずすぐ必要ではないけれど、
変数依存症の僕が逃げる道を確保したかっただけです。push,pop  って見渡し悪
いんだもの。 「なるべく単純なロジックを考える訓練を日頃から」とは Emmett
語録ですが。

> あと、dw 8888h とか dw dup(10)っていうのも使えるかもしれません。

 これは、何? 8888hって何? 10って?
 『Ver.5.1  MASM 初級プログラム入門』(技術評論社)の巻末にいい辞書があ
りました。(^^)v でも、こりは分かんない。

      - No.2060 -    このTreeへ    コメント元:2047 へ [リストへもどる] pre

(1972) 2062Re: 姑息な変数作成法  投稿者:としき   2007/01/14(日) 18:49
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2060 番 文太 さんへのコメント    コメント数 1

新年会という名目で、八王子の山奥に一泊してきました。
10年振りぐらいで麻雀というものをやったのですが、どうもやっぱり、ワザに
キレがありませんでしたね。
#ちなみに、私の必殺技は「振り込み」と言います

さて。

> > あと、dw 8888h とか dw dup(10)っていうのも使えるかもしれません。
>  これは、何? 8888hって何? 10って?

ぅぉ、ここも間違えている。
dw 10 dup (?)
ですね。バッファの確保のことですよ。#2044> ;自前変数(バッファ)ってありなんですね。(^^; マシン語が0だらけになりは
> ;しますが。

と書いていたので、マシン語に0を含まないようにバッファを確保できればいい
のかなと思い、そのための方法として提案させていただきました。
もしかして、文太さんが書かれたのはそういう意味ではないのですか?

>  push,pop が正当なのは分かってますが、とりあえずすぐ必要ではないけれど、
> 変数依存症の僕が逃げる道を確保したかっただけです。push,pop  って見渡し悪
> いんだもの。 「なるべく単純なロジックを考える訓練を日頃から」とは Emmett
> 語録ですが。

私は、スタックを使うと見通しが悪くなるとはこれっぽっちも思っていないんで
すよ。HPの電卓を使って小学生の算数のドリルの問題を100問も解けばスタ
ックに慣れる、なんて話を聞いたこともありますが、それはさておき。
昔、Z80のアセンブラで極限までチューンしていたころは、スタックは使いま
くりでしたね。バイト数は少なくて済むし、マシンサイクルも短くて済むし。そ
れでスタックに対して文太さんよりは拒否感がないのでしょう。
最近のプロセッサならパイプライン処理で走っているからマシンサイクルは気に
しなくて済むけど、バイト数に関しては、やはりスタックを使った方が短くでき
るような気がします。
例えば、2つのレジスタの値を入れかえる、という場合。

mov [buf],bx
mov bx,cx
mov cx,[buf]

と

push bx
push cx
pop  bx
pop  cx

あまり変わらんか。

      - No.2062 -    このTreeへ    コメント元:2060 へ [リストへもどる] pre

(1972) 2064Re^2: 姑息な変数作成法  投稿者:文太   2007/01/14(日) 23:04
    2062 番 としき さんへのコメント    コメント数 1

としきさん

> dw 10 dup (?)
> ですね。バッファの確保のことですよ。#2044で

 いえ、そうかなぁとも思ったのですが、きっと ^P でバッファを埋めるといい
ことがあるのかと思って…。

> > ;自前変数(バッファ)ってありなんですね。(^^; マシン語が0だらけになりは
> > ;しますが。
> と書いていたので、マシン語に0を含まないようにバッファを確保できればいい
> のかなと思い、そのための方法として提案させていただきました。
> もしかして、文太さんが書かれたのはそういう意味ではないのですか?

 基本的はそういう意味です。「ゼロだらけ」のほうは、格好悪いというだけで、
ローカルマクロにすれば実害はないのですが。88h は未定義文字?
 いえ、それでもありがたい技です。ローカルに出すと見通しが悪いこともある…。

> 私は、スタックを使うと見通しが悪くなるとはこれっぽっちも思っていないんで
> すよ。HPの電卓を使って小学生の算数のドリルの問題を100問も解けばスタ
> ックに慣れる、なんて話を聞いたこともありますが、それはさておき。
> 昔、Z80のアセンブラで極限までチューンしていたころは、スタックは使いま
> くりでしたね。バイト数は少なくて済むし、マシンサイクルも短くて済むし。そ

 だって見えなくなるし順番にしか取り出せないし…。いけない、いけない。向上
しろ!
 Z80時代からなのね。ヤフオクで参考書はよく見る。それって、パソコン、
あるいは旧8以前の「マイコン」?のCPUですか? でも、アセンブラでスピ
ードが違ったわけですか?
 簡単に言い切れませんが、僕は、やっぱりマクロもニーモニックも、短いより
分かりやすいがいいなぁ。もちろん、この「分かりやすさ」は読む方の読解力み
たいなのが大きいわけですが。  先日の  YASAT  さんの  [,  natoka  kantoka
nantoka  &m("%d",ax+0]) なのも、ニーモニック技(少なくとも起源は)なのは
知識として分かっていても、また意味が読解できても、自分では書けないなぁ…。
 HPの電卓の刑にするしかないか。やだやだ。何だか知らないけれど。イメー
ジは分かる。つまり使う人の短期記憶に頼った電卓ね。そんなの機械じゃねーぞ。

 キレのない振り込みって、冴えなさそうだ、とは思いました。キレて、どうする?!
 xchg bx,cx		;分かりやすくて大変よろしい。キレてます。

      - No.2064 -    このTreeへ    コメント元:2062 へ [リストへもどる] pre

(1972) 2066Re^3: 姑息な変数作成法  投稿者:としき@会社   2007/01/15(月) 11:53
参照先:http://www.hinocatv.ne.jp/~toshiki/
    2064 番 文太 さんへのコメント    コメント数 1

>  だって見えなくなるし順番にしか取り出せないし…。いけない、いけない。向上

お気持ちはわかりました。よっぽどまどろっこしいとか冗長なことをやるのでな
ければ、作った人のわかりやすいようにコードを書けばいいと思います。あとは、
こうすればもっとよくなる、みたいなご指摘を各方面から受ける可能性があると
いうのはマクロでもなんでも同じでしょうし。

>  Z80時代からなのね。ヤフオクで参考書はよく見る。それって、パソコン、
> あるいは旧8以前の「マイコン」?のCPUですか? でも、アセンブラでスピ
> ードが違ったわけですか?

一応、パソコンですね。PC-8801ですから。
実数演算のルーチンを書いていたんですよ。
カリカリにチューンしていましたからね。
「アセンブラでスピードが違う」って、マシンサイクルまで見ると結構差が出る
のですよ。バイト数が大きくなるコードの方がマシンサイクルで見ると早いとか
あったりして、ほんと、パズルのようでした。

>  HPの電卓の刑にするしかないか。やだやだ。何だか知らないけれど。イメー
> ジは分かる。つまり使う人の短期記憶に頼った電卓ね。そんなの機械じゃねーぞ。

これは、一部の人から強烈なクレームがつきそう。
200LXとかでも逆ポ電卓機能ってあったはずだし。
Forthとか日本語MINDなんてプログラム言語でスタックを一切使わずにプログ
ラムを組むことは実質的に不可能でしょうし。

>  キレのない振り込みって、冴えなさそうだ、とは思いました。キレて、どうする?!

昔なら半荘1回で4〜5回は振込みを決められたのですがね。
今回は、半荘2回やって振り込み2回しか決められなかったのですよ。
ちなみに、自分が和了った回数は半荘1回につき1回くらいなので、その辺は変
わらなかったなぁ。
      - No.2066 -    このTreeへ    コメント元:2064 へ [リストへもどる] pre

(1972) 2070Re^4: 姑息な変数作成法  投稿者:文太   2007/01/16(火) 08:48
    2066 番 としき@会社 さんへのコメント

としきさん

> あとは、
> こうすればもっとよくなる、みたいなご指摘を各方面から受ける可能性があると
> いうのはマクロでもなんでも同じでしょうし。

 どうか、どうか宜しくお願いいたします。

> >  Z80時代からなのね。
> 一応、パソコンですね。PC-8801ですから。
> 「アセンブラでスピードが違う」って、マシンサイクルまで見ると結構差が出る
> のですよ。バイト数が大きくなるコードの方がマシンサイクルで見ると早いとか
> あったりして、ほんと、パズルのようでした。

 そうか、パソコンかぁ。高かったんでしょうね。すさまじく。プリンタとかも
持ってたのですか。僕は MS-DOS 3時時代からですが、OS、ワープロ込みで3
0万くらいだったかな。清水の舞台でしたねぇ。違う話だ。
 なるほど、マシンサイクルね。クロックってことですよね。
 うん、パズルに容易になる世界ですもんね。

> >つまり使う人の短期記憶に頼った電卓ね。そんなの機械じゃねーぞ。
> これは、一部の人から強烈なクレームがつきそう。

 やばい、やばい。

> 200LXとかでも逆ポ電卓機能ってあったはずだし。
> Forthとか日本語MINDなんてプログラム言語でスタックを一切使わずにプログ
> ラムを組むことは実質的に不可能でしょうし。

 そうなんでしょうね。もっとも汎用的なデータ格納領域?xchgとかやっても実
際使ってるんですよね。φ(^^)メモメモ

> 昔なら半荘1回で4〜5回は振込みを決められたのですがね。

 えーと麻雀はほとんどやらないし分からないのですが、これ、自慢することじ
ゃないんじゃなかったですっけ。☆\ (^^;)
 なんかマジで悔しがってるみたいで…。

      - No.2070 -    このTreeへ    コメント元:2066 へ [リストへもどる] pre

(1972) 2050構想以前  投稿者:文太   2007/01/13(土) 01:07
    2044 番 文太 さんへのコメント    コメント数 1

ああ、来てしまった。

 上のマクロ、ダミー文字列を下に入れ替えてみてください。たぶん、分かる人
にはそんなことをするまでもなく、コードを見ただけで、「あ、文太よお、まさ
かそこで転ぶなよ」ものなんでしょう。

00:	p=3+$,."あいうえa"
01:	q=3+$,."んんんが3回$[30]"

 リトル・エンディアンであり、たぶん、Vzマクロでは " 文字列 " が【その
まま】マクロバッファに取り込まれる、というあたりが問題のネックなのでしょ
う。!!(?) のマシン語的・対応・処理???

 ど、どなたが、分かるように導いていただくわけにはいかないでしょうか。
m(_B_)m
 僕はマクロでも、 !! を使ったことがありませんし、幸いなことに、その必要
がありませんでした。実務上、&S関数しか使ったことがない…。

 清十郎さんの講座がどっかにあったか? そういう問題じゃないのかな???

      - No.2050 -    このTreeへ    コメント元:2044 へ [リストへもどる] pre

(1972) 2054Re: 構想以前  投稿者:YASAT   2007/01/14(日) 00:17
    2050 番 文太 さんへのコメント    コメント数 1

2バイト文字は上位バイト→下位バイトの順に格納されていきます。
とくに気にせずそのまま扱って大丈夫です。
数値として扱う場合に、VZマクロの!!やマシン語のxchgを使います。
      - No.2054 -    このTreeへ    コメント元:2050 へ [リストへもどる] pre

(1972) 2056リトル・エンディアンについて  投稿者:文太   2007/01/14(日) 00:56
    2054 番 YASAT さんへのコメント

YASATさん、m(__)m

> 2バイト文字は上位バイト→下位バイトの順に格納されていきます。
> とくに気にせずそのまま扱って大丈夫です。

 ありがとうございました。本当のことはきちんと分かっていないのですが、こ
の場合には、そうですよね。大丈夫ですよね。ダイジョーブ、マイフレンド。し、
進歩がな、ない!!

> 数値として扱う場合に、VZマクロの!!やマシン語のxchgを使います。

 ここ。「数値」として扱う場合には、!!とxchg。とりあえず、今は暗記。
 m(__)m

      - No.2056 -    このTreeへ    コメント元:2054 へ [リストへもどる] pre

(1972) 2053やば、これ動きません  投稿者:文太   2007/01/13(土) 20:45
    2044 番 文太 さんへのコメント    コメント数 1

;mov ax,ds

 ごめんなさい。m(__)m

      - No.2053 -    このTreeへ    コメント元:2044 へ [リストへもどる] pre

(1972) 2055Re: やば、これ動きません  投稿者:文太   2007/01/14(日) 00:51
    2053 番 文太 さんへのコメント

mov ax,ds
mov es,ax
rep movsb
ret			;これを忘れて泣いた、泣いた

 ああ、これ同セグだから、いちおう動きましたね。見かけ上。
 いえ、 どうでもいいことなのですが、ds というマシン語のセグメントレジス
タと通じるものが、Vzに ds レジスタ変数としてあると思った時期がありまし
て、おい、まだそれやってたのか、と焦ったのです。
 なのですが、histcopy はこのロジックでは駄目です。cld だからいけません。
お尻から動かさないといけない、と気づきました。
 長い独り言、すいません。

      - No.2055 -    このTreeへ    コメント元:2053 へ [リストへもどる] pre

(1972) 2021Re: 最短?11バイト  投稿者:YASAT   2007/01/09(火) 22:02
    2009 番 Konno さんへのコメント    コメント数 2

マクロから書き換えてますが、loopを使って小さくする方法

80 ^\ ""
	?.
	&01 bx=r[, cx=20,
	&>
	&m("%d",bx-0])

0:	&i(3+$)."$(43,83,7F,FF,00,E0,F9,C3)"

1:	(3+$)."0123456789$(0,0)ABCDEFGH"

*

code	segment
	assume	cs:code,ds:code

	org	100h
start:	inc	bx
	cmp	word ptr [bx-1],0
	loopnz	start
	ret

code	ends
	end	start

      - No.2021 -    このTreeへ    コメント元:2009 へ [リストへもどる] pre

(1972) 2025これが最短!! 8バイト!!  投稿者: Konno   2007/01/10(水) 00:03
    2021 番 YASAT さんへのコメント    コメント数 1

> マクロから書き換えてますが、loopを使って小さくする方法

さすが YASAT さんです! 8バイトですか!!

> 	&01 bx=r[, cx=20,

受け渡しは bx, cx, だけだし、サイズは cx, にするべきでしたね。
やはり最適化するにはマクロから見直さないと駄目なんですね。

> 	loopnz	start

この命令は初めて見ました。便利な命令があるんですねぇ。勉強になりました。

      - No.2025 -    このTreeへ    コメント元:2021 へ [リストへもどる] pre

(1972) 2030Re: これが最短!! 8バイト!!  投稿者:YASAT   2007/01/11(木) 01:11
    2025 番 Konno さんへのコメント    コメント数 1

まあサンプルということで(^^)

場合によっては連続ヌルが見つからなかったときのために、
なにかフラグを立てる必要があるかも。
      - No.2030 -    このTreeへ    コメント元:2025 へ [リストへもどる] pre

(1972) 2037Re^2: これが最短!! 8バイト!!  投稿者: Konno   2007/01/12(金) 00:23
    2030 番 YASAT さんへのコメント    コメント数 2

> 場合によっては連続ヌルが見つからなかったときのために、
> なにかフラグを立てる必要があるかも。

え〜と、見つからなくても cx の回数で終了するんですよね。フラグが必要な
場合とはどんなときでしょうね? マクロのほうの話かな? それなら終了処理を
分けるということですよね。もしそうだとしたら、cx がゼロかどうかで判断
できそうですね。

#ソースも短い!! これ以上詰めるのは無理だろうなぁ。

      - No.2037 -    このTreeへ    コメント元:2030 へ [リストへもどる] pre

(1972) 2039Re^3: 姑息な7バイト (^^;  投稿者: Konno   2007/01/12(金) 01:15
    2037 番 Konno さんへのコメント

> #ソースも短い!! これ以上詰めるのは無理だろうなぁ。

ちょっと姑息なことをしてみました。意味なし!! というか、これで問題無いのか?

=test
*m
80 ^\ ""
	?.
	&01 bx=r-1, bx[, cx=20,
	&>
	&m("%d",bx-1])

;0:	&i(3+$)."$(43,83,7F,FF,00,E0,F9,C3)"
0:	&i(3+$)."$(43,83,3F,00,E0,FA,C3)"

1:	(3+$)."0123456789$(0,0)ABCDEFGH"
*

code	segment
	assume	cs:code,ds:code

	org	100h
start:	inc	bx
;	cmp	word ptr [bx-1],0
	cmp	word ptr [bx],0		; -1 を取っただけ (^^;
	loopnz	start
	ret

code	ends
	end	start


      - No.2039 -    このTreeへ    コメント元:2037 へ [リストへもどる] pre

(1972) 2048Re^3: これが最短!! 8バイト!!  投稿者:YASAT   2007/01/12(金) 23:51
    2037 番 Konno さんへのコメント

そうか。最後のワード値の比較はバッファを越えてて意味をなさないから、
cxで見つかったかどうか判断できるんでしたね。思い違いしてました。
それかcxをはじめから1小さくしておいて、ゼロフラグで判断するかですね。
      - No.2048 -    このTreeへ    コメント元:2037 へ [リストへもどる] pre

(1972) 2029Re^2: 最短?11バイト  投稿者:文太   2007/01/11(木) 00:36
    2021 番 YASAT さんへのコメント    コメント数 1

YASATさん

= test.def
	&01 bx=r[, cx=20,
               ^^
	&m("%d",bx-0])
                   ^^
1:	(3+$)."0123456789$(0,0)ABCDEFGH"
                         ^^^^^^
start:	inc	bx
        ^^^^^^^^^^
	cmp	word ptr [bx-1],0
                         ^^^^^^
	loopnz	start
	^^^^^^
 読めました。でも、こういう風には書けないんだよなぁ。
 3番目はありがとうございました。し、知らなかった。(^^;

      - No.2029 -    このTreeへ    コメント元:2021 へ [リストへもどる] pre

(1972) 2031Re^3: 最短?11バイト  投稿者:YASAT   2007/01/11(木) 01:19
    2029 番 文太 さんへのコメント    コメント数 1

>  3番目はありがとうございました。し、知らなかった。(^^;

$だったらマシン語コードも(^^)
      - No.2031 -    このTreeへ    コメント元:2029 へ [リストへもどる] pre

(1972) 2033Re^4: 最短?11バイト  投稿者:文太   2007/01/11(木) 01:32
    2031 番 YASAT さんへのコメント    コメント数 1

> $だったらマシン語コードも(^^)

 またすぐ謎めくし。&i("$(machine language)")ってことじゃないんですよね。
 すぐ泣かすんだから。泣かないよ。

      - No.2033 -    このTreeへ    コメント元:2031 へ [リストへもどる] pre

(1972) 2035Re^5: 最短?11バイト  投稿者:YASAT   2007/01/11(木) 22:34
    2033 番 文太 さんへのコメント    コメント数 1

>  またすぐ謎めくし。&i("$(machine language)")ってことじゃないんですよね。

それ(&i)と同じです。""の中に$を置くわけですから。
      - No.2035 -    このTreeへ    コメント元:2033 へ [リストへもどる] pre

(1972) 2036Re^6: 最短?11バイト  投稿者:文太   2007/01/12(金) 00:15
    2035 番 YASAT さんへのコメント    コメント数 1

> それ(&i)と同じです。""の中に$を置くわけですから。

 同じ…。わけですから、って言われても、どういうことだ? 疑問を持てって?
 嫌だ、そういう疑問は持ちたくない、ダメ、ダメ。
 うーん、やっぱり謎めくし。謎めきゴロちゃん。ちゃん、ちゃん。きゃん、き
ゃん。ソースのここを読めでもいいですよ。
 そういえば、文太デビューの頃に、割れ関数事件のときにすでに、「ソースを
読んできました」ってのあったねぇ。一つ目の謎、解決。(^^)v  もの忘れひど
いのよ。

 $って分かんないのよ〜。何のつもりなんでしょう?
 胸の底にずっと暖めておきたいと思います。

      - No.2036 -    このTreeへ    コメント元:2035 へ [リストへもどる] pre

(1972) 2049Re^7: 最短?11バイト  投稿者:YASAT   2007/01/12(金) 23:59
    2036 番 文太 さんへのコメント    コメント数 1

0:      &i(3+$)."$(43,83,7F,FF,00,E0,F9,C3)"
                ^^                         ^
1:      (3+$)."0123456789$(0,0)ABCDEFGH"
              ^          ^             ^

""のあいだはそのままメモリに格納されるわけです。
だからただの文字列としても、&iで使っても同じになりますよね。
      - No.2049 -    このTreeへ    コメント元:2036 へ [リストへもどる] pre

(1972) 2051Re^8: 最短?11バイト  投稿者:文太   2007/01/13(土) 01:18
    2049 番 YASAT さんへのコメント

YASATさん、

> ""のあいだはそのままメモリに格納されるわけです。
> だからただの文字列としても、&iで使っても同じになりますよね。

 ありがとうございました。確かにそうですよね。「そのまま」。ただ、これで
気づきたくないことに気づいてしまいました。「構想以前」です。ど、どうか。
m(__)m
 これだけ読め、あとは知らん、でいいですから。

      - No.2051 -    このTreeへ    コメント元:2049 へ [リストへもどる] pre