我正在学习汇编语言,并发现以下内容令人惊讶。我从互联网上某个地方复制了一些“Hello World”代码。
section .text
global _start
_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80 ; interrupt for calling kernel
mov eax,1
int 0x80
section .data
msg db 'Hello, world!',0xa
len equ $ - msg
我用nasm -f elf -g hellow.asm编译和链接,然后使用ld hellow.o -o hellow。如果我现在将它加载到gdb中,我可以很好地列出代码并运行它。如果我在第一个mov指令上设置断点,程序不会停在那里。在生成的文件上运行ndisasm(ndisasm -b32 hellow),我得到了以下结果(我认为这部分是相关的):
0000007D 0000 add [eax],al
0000007F 00BA0E000000 add [edx+0xe],bh
00000085 B9A0900408 mov ecx,0x80490a0
0000008A BB01000000 mov ebx,0x1
0000008F B804000000 mov eax,0x4
00000094 CD80 int 0x80
00000096 B801000000 mov eax,0x1
0000009B CD80 int 0x80
因此,指令未出现。
如果您能提供发生情况的提示或告诉我去哪里了解情况,我将不胜感激。