gpt4 book ai didi

c++ - Borland/Embarcadero 内联汇编

转载 作者:行者123 更新时间:2023-11-30 02:34:12 26 4
gpt4 key购买 nike

这里有一个简短的问题:

我正在尝试在 32 位 Windows 7 上使用 Embarcadero C++ Builder XE3 试验内联汇编,特别是为了开始重新自学汇编,以备将来实际应用的可能性。

到目前为止,我已经能够在一个简单的控制台项目中编写一组指令,该项目使用我掌握的所有 C++ Builder 语法编译得很好:

int _tmain(int argc, _TCHAR* argv[]) {
_asm{
mov dl, 0x24
mov ah, 2 // Print character
int 0x21 // Dos Interrupt - Run operation in AH

mov dl, 0x25
mov ah, 2 // Print character
int 0x21 // Dos Interrupt - Run operation in AH

mov dl, 0x26
mov ah, 2 // Print character
int 0x21 // Dos Interrupt - Run operation in AH

mov dl, 0x27
mov ah, 2 // Print character
int 0x21 // Dos Interrupt - Run operation in AH

int 0x20 // terminate COM
}

return 0;
}

编译正常,这些指令直接在 NASM 和 Windows native DEBUG 环境中工作。我期望的是对控制台的简单写入:$%&',然后成功终止。

但是,当我尝试通过命令行运行 Project1.exe 时,我立即收到一个标准的 Win7 运行时错误弹出窗口,该弹出窗口在几秒钟后消失并终止程序。

通过调试运行,我似乎成功到达了第一个 int 0x21,然后它挂起,此时 Borland 给我消息:

Project Project1.exe raised exception class $C00000005 with message 'access violation at 0x00401213: read of address 0xffffffff'.

我的理论是我没有正确初始化具有 256 字节偏移量的段(NASM 会在指令集的开头使用类似 org 0x100 的东西)。但我不完全确定这就是问题所在。

有什么想法吗?

最佳答案

那些 int 0x21 指令适用于 MS-DOS 而不是 Windows。它们在 Windows 程序中有其他含义,结果是你火上浇油。

关于c++ - Borland/Embarcadero 内联汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34688768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com