2012-04-07 31 views
0

我想开发的程序集允许我加载和执行(通过输入用户)2其他程序集.EXE程序。我有两个问题:大会加载和执行问题

-I似乎不能够将路径分配给一个有效的寄存器(或者不正确的语法)

-I需要能够后执行其他程序第一个(可能是)开始执行。

这是我到目前为止有:

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 

我只是不知道如何通过输入在“父”程序启动其他程序,后一个是已经在执行。

在此先感谢您的帮助! 我将非常乐意提供任何其他信息。

- 我使用NASM 16位,Windows 7 32位。

+0

您是否在模拟的MS DOS环境中执行该程序?或者只是试图在Windows Shell/CLI中运行它? – ShinTakezou 2012-04-07 17:36:21

+0

@ShinTakezou我有一个.ASM文件中的代码,用NASM.EXE编译它来创建.EXE文件,然后执行它。所以它基本上是一个应用程序。 – 2012-04-07 17:38:18

+0

你试过'LEA DX,[PROGNAME1]'吗? – harold 2012-04-07 17:53:24

回答

1

你描述使用LEA变量地址的方式是lea R16, [VARIABLE],所以在你的代码,你应该使用:

LEA DX, [PROGNAME1] 

我不能有效地测试这一点,因为我只带了64位版本窗口,这将不会运行此代码原样

+0

我现在要试试这个。我做了,我认为那修正了这些线。我对输入有问题,tho。不知道它是否输入标签。 – 2012-04-07 17:55:52

+0

我看到没有'PUSHF'的'POPF's,这通常不会达到你所期望的效果(你从堆栈中弹出标记状态而没有推入相应的状态) – Petesh 2012-04-07 18:05:06

+0

我不确定如何做对那里。 – 2012-04-07 18:09:59