2012-04-07 5 views
0

2つのアセンブリ.EXEプログラムをロードして(ユーザーの入力によって)実行できるようにするアセンブリコードを作成しようとしています。アセンブリのロードと実行の問題

-I有効レジスタ(または多分間違った構文)にパス名を割り当てることができていないよう

-Iの後に他のプログラムを実行することができるようにする必要性:私は2つの問題があるんです最初のもの(どちらか一方でもよい)がその実行を開始した。

これは私がこれまで持っているものです。

mov ax,cs ; moving code segment to data segment 
mov ds,ax 

mov ah,1h ; here I read from keyboard 
int 21h 
mov dl,al 

cmp al,'1' ; if 1 jump to LOADRUN1 
JE LOADRUN1 
popf 

cmp al,'2' ; if 1 jump to LOADRUN2 
JE LOADRUN2 
popf 

LOADRUN1: 
    MOV AH,4BH 
    MOV AL,00 
    LEA DX,[PROGNAME1] ; Not sure if it works 
    INT 21H 


LOADRUN2: 
    MOV AH,4BH 
    MOV AL,00 
    LEA DX,[PROGNAME2] ; Not sure if it works 
    INT 21H 

; Here I define the bytes containing the pathnames 
PROGNAME1 db 'C:\Users\Usuario\NASM\Adding.exe',0 
PROGNAME2 db 'C:\Users\Usuario\NASM\Substracting.exe',0 

私はちょうど1が既に実行された後、「親」プログラムに入力することにより、別のプログラムを起動する方法がわかりません。

ご協力いただきありがとうございます。 追加情報私は提供することを喜んでします。

- 私はNASM 16ビット、Windows 7 32ビットを使用しています。

+0

エミュレートされたMS DOS環境で実行していますか?または単にWindowsシェル/ cliの中で実行しようとしていますか? – ShinTakezou

+0

@ ShinTakezou .ASMファイルにコードがあり、NASM.EXEでコンパイルして.EXEファイルを作成し、実行します。それは基本的にアプリです。 –

+0

あなたは 'LEA DX、[PROGNAME1]'を試しましたか? – harold

答えて

1

あなたのコードでは、使用する必要がありますので、あなたがリーを使用して、変数のアドレスを記述する方法は、lea R16, [VARIABLE]次のとおりです。

LEA DX, [PROGNAME1] 

を、私はこれを効果的にテストすることはできません、私は64ビット版のみ持っているので、このコードをそのまま実行しないウィンドウは、

+0

私は今これを試してみるつもりです。私は、私はそれらの行を修正すると思います。私は入力、thoに問題があります。それがラベルを入力しているかどうかはわかりません。 –

+0

私は 'PUSH'がない' POPF'を見ています。これは一般的にあなたが期待していることをしません(対応する状態を押さずにスタックからフラグ状態をポップしています)。 – Petesh

+0

私は正しいことを本当に分かりませんそこ。 –

関連する問題