0

多分誰かがこのコードが何をするのか説明できるでしょう:

   MOV SI,80h     
    XOR DI,DI      
    MOV BL,[SI]    
    INC SI         

    MOV AH,9
    LEA DX,info     
    INT 21h

    OR BL,BL        
    JZ be_arg       

    INC SI
    JMP su_arg      

be_arg:     
    MOV AH,9
    LEA DX,input1
    INT 21h

...
su_arg:
    XOR DI,DI
vej:
    MOV AL,[SI]
    CMP SI,100h
    JZ vej_j

    CMP SI,100h
    JZ vej_j

    MOV [failas+DI],AL

    INC SI
    INC DI
    JMP short vej

vej_j:
    JMP input_juz

そこの

    failas DB 80h DUP(0)

私が理解しているように、プログラムを実行するときに書き込むことができるいくつかの引数を読み取ることができるので、「su_arg」に移動しますか、それとも間違っていますか? 私が正しければ、例えば何がありますか?

誰かがこのコードを詳細に説明できればいいでしょう。

PS アセンブラー Tasm の使用

4

1 に答える 1

2

最近、DOS が何をするか誰が気にしますか? このコードを理解するには、知っておく必要があります。プログラムを「myprog foo」として開始した場合、「foo」は「コマンドライン引数」です。DOS は、これを PSP (プログラム セグメント プレフィックス) の後半部分に配置します。アドレス [80h] は、コマンド ライン引数の合計 (バイト) 数です。コードの最初の部分で、この値を に入れますbl。それからあなたは何かを印刷します。はのor bl, bl値を変更せずbl、フラグを設定するだけです。値がゼロの場合、おそらく「コマンドライン引数が指定されていません」などを出力するセクションにジャンプします。示されているように、それは次にドロップスルーしますsu_arg:-おそらく...より賢明なことを行うコードを示します。この時点で、PSP の残り全体を のバッファにコピーしますfailas。に「カウント」がありましたbl。また、コマンド ライン引数の最後にキャリッジ リターン (10 進数の 13 または 0Dh) があることもわかっています。CR を「$」で上書きすることもできます。int 21h/9 で表示できるようにしました。しかし、いいえ、PSP の残りの部分全体をコピーします。たぶん、あなたがそれで何をしようとしても大丈夫です。かなりひどいコード - せいぜい C+。あなたのインストラクターがこれをあなたに与えたなら、彼を解雇してください!:)

于 2012-12-16T20:48:59.153 に答える