我们在 64 位机器上,在 x86-64 上编译/链接 32 位应用程序时,设置模拟以 elf_i386
提供正确的 ELF 格式
1 | nasm -f elf -o xxx.o xxx.s |
下断点,在 bochs 的配置文件加入 “magic_break: enabled=1”,作用是 bochs 启动时开启魔术断点调试功能
1 | xchg bx, bx |
标号
在 NASM 汇编语言中,每条指令的前面都可以拥有一个标号,以代表和指示该指令的汇编地址。比如:
1 | infi: jmp near infi |
标号后面的冒号是可选的,所以:infi jmp near infi
也是正确的。
还有标号可以单独占用一行的位置:
1 | infi: |
效果一样,因为 infi 所在的那一行没有指令,他的地址就是下一行的地址。
标号可以由字母、数字等特殊符号组成,但必须以字母、点、下划线、问号 中的任意一个打头。
声明并初始化地址
DB(Declare Byte):声明字节。注意要声明超过一个以上的数据,各个操作数之间必须以逗号隔开
DW(Declare Word):声明字数据
DD(Declare Double Word):声明双字数据
DQ(Declare Quad Word):声明四字数据
这些是编译器提供的汇编指令,也称为伪指令。