【问题标题】:nasm - assembly language introductionnasm——汇编语言介绍
【发布时间】:2013-03-17 15:04:23
【问题描述】:

我正在尝试在业余时间学习汇编语言,以帮助我担任使用高级语言的开发人员的角色。

我在这里遵循了 NASM 教程:http://leto.net/writing/nasm.php

我能够创建并运行一个将 HelloWorld 打印到屏幕的简单程序。我对上面链接中的以下段落感到困惑:

mov eax,5       ; the syscall number for open()

So where do find out all of the semantics for all of the various system calls?
Well first, the numbers are listed in asm/unistd.h in Linux, and  sys/syscall.h
in the *BSD's

我假设这意味着:如果 eax 寄存器中有一个 5,那么它就是 open 的系统调用。其余的系统调用是否记录在某处?

我在 Windows 7 PC 上使用 NASM。

【问题讨论】:

  • 如果您在 Windows 下运行,bsd/linux 系统调用 ID 将没有多大用处...
  • @Marc B,谢谢。你知道 Windows 中的系统调用是什么吗?

标签: windows assembly x86 nasm


【解决方案1】:

【讨论】:

  • 谢谢。我已经将 Windows API 与 C++ 一起使用,但没有与程序集一起使用。说 Windows API 相当于 Linux 中的 SYSCALL 公平吗?
  • *nix 中的 int 80 相当于 DOS 中断。现代版本的 Windows 确实使用 syscall/sysenter 和中断,但用户模式应用程序不能使用它们。我们使用 Windows API 与操作系统交互。
  • 最后,我认为用户模式应用程序可以在 Linux 中使用系统调用? (我没有使用 Linux 的编程经验)。
  • 是的,Linux 中旧的做事方式是使用中断(您仍然可以使用它们)。完成任务的新方法是使用syscall。 32 位操作系统和 64 位操作系统的 ABI 不同
  • 如果你非要问,那你在Assembly中写驱动或RING0应用太高级了。
猜你喜欢
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多