Debugging 要将这个16位程序集变成32位,我必须做哪些更改?

Debugging 要将这个16位程序集变成32位,我必须做哪些更改?,debugging,assembly,32-bit,16-bit,Debugging,Assembly,32 Bit,16 Bit,我问了一个关于汇编语言的问题。我觉得使用16位程序很难。现在我想把它改成32位。下面是我尝试的第一个程序的代码: [org 0x0100] mov ax, 5 mov bx, 10 add ax, bx mov bx, 15 add ax, bx mov ax, 0x4c00 int 0x21 我把它命名为ex01.asm。我用NASM制作了一个COM文件。命令是 nasm ex01.asm -o ex01.com -l ex01.lst 但我无法在Ollydbg中使用创建的COM文件。因

我问了一个关于汇编语言的问题。我觉得使用16位程序很难。现在我想把它改成32位。下面是我尝试的第一个程序的代码:

[org 0x0100]
mov ax, 5
mov bx, 10
add ax, bx
mov bx, 15
add ax, bx 
mov ax, 0x4c00
int 0x21
我把它命名为ex01.asm。我用NASM制作了一个COM文件。命令是

nasm ex01.asm -o ex01.com -l ex01.lst
但我无法在Ollydbg中使用创建的COM文件。因此,如果我想将此程序更改为在win xp或win 7中工作,以便我可以使用Ollydbg,我必须做哪些更改,为什么? 我的想法:

  • 我想我得换组织0x100。我认为这是针对COM文件的。所以我想知道,我应该在这里做些什么改变?COM文件在win XP和win 7上是否不起作用?我可以用EXE文件代替COM文件吗?我只是想了解这个程序

  • 我必须更改最后一行,因为它是用来告诉DOS程序已经完成的。我必须在这里做什么改变?为什么

  • 我忘了为什么用最后一行了?有人能告诉我,如果需要的话,它有一个取代基吗


  • 我认为,NASM不能直接生成EXE。 您将需要将ASM编译成对象文件,然后与某个链接器链接(例如MinGW包中的ld.exe)

    在代码中,您需要创建过程而不是内联代码(WinMain)

    代码:

    将替换为从过程返回(或从kernel32.dll调用函数)

    这会有帮助(一点):

    您还可以查看FASM,它可以直接构建exe

    mov ax, 0x4c00 
    int 0x21