【问题标题】:What changes I have to do to make this 16 bit assembly to 32 bit?要将这个 16 位程序集转换为 32 位,我需要做哪些更改?
【发布时间】:2011-11-14 18:04:41
【问题描述】:

我问了一个关于汇编语言的问题here。我觉得很难使用 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,我必须做哪些改变,为什么? 我的想法:

  1. 我想我必须更改 ORG 0x100。我认为它特定于 COM 文件。所以我想知道,我应该在这里做些什么改变? COM 文件不能在 win XP 和 win 7 上运行吗?我可以制作 EXE 文件而不是 COM 文件吗?我只是想了解这个过程。

  2. 我必须更改倒数第二行,因为它用于告诉 DOS 程序已完成。我必须在这里做哪些改变,为什么?

  3. 我忘了为什么要使用最后一行?谁能告诉我,如果需要,可以替代它吗?

【问题讨论】:

    标签: debugging assembly 32-bit 16-bit


    【解决方案1】:

    我认为,NASM 不能直接生成 EXE。 您需要将 ASM 编译为目标文件,然后使用一些链接器(例如 MinGW 包中的 ld.exe)链接。

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

    代码:

    mov ax, 0x4c00 
    int 0x21
    

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

    这可以帮助(一点): http://en.kioskea.net/faq/1559-compiling-an-assembly-program-with-nasm

    您也可以查看 FASM http://flatassembler.net/,它可以直接构建 exe。

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      相关资源
      最近更新 更多