x86汇编语言 汇编地址&标号

段地址:偏移地址

  • 处理器访问内存时,采用的是“段地址:偏移地址”的模式。
  • 对于任何一个内存段来说,段地址可以开始于任何 16 字节对齐的地方,偏移地址则总是从 0x0000 开始递增。

汇编地址

  • 为了支持这种内存访问模式,在源程序的编译阶段,编译器会把源程序整体上作为一个独立的段来处理,并从 0 开始计算和跟踪每一条指令的地址。
  • 因为该地址是在编译期间计算的,故称为 汇编地址
  • 汇编地址是在源程序编译期间,编译器为每条指令确定的汇编位置Assembly Position),也就是每条指令相对于整个程序开头的偏移量,以字节计。当编译后的程序装入物理内存后,它又是该指令在内存段内的偏移地址。

标号

  • 在 NASM 汇编语言里,每条指令的前面都可以拥有一个标号,以代表和指示该指令的汇编地址
  • 毕竟,由我们自己来计算和跟踪每条指令所在的汇编地址是极其困难的。

举个标号的栗子:

;行号	汇编地址		机器代码		源程序代码				注释
 98		0000012D	E9FDFF		infi:jmp near infi 		;无限循环
 99

为了方便理解说明其地址关系,这里放的是编译后生成的列表文件内容。最上面的一行中文是为了方便理解。
共分五栏,从左到右依次是行号、指令的汇编地址、指令编译后的机器代码、源程序代码和注释。

简化为源程序代码:

		infi:jmp near infi
  • 在这里,行首中带冒号的“ infi ”就是一个号标。
  • 这条指令的汇编地址是 0x0000012D,故 infi 就代表数值 0x0000012D,或者说是 0x0000012D 的符号化表示。

资料参考

  • 《x86汇编语言:从实模式到保护模式》(编著:李忠 王晓波 余洁)
发布了29 篇原创文章 · 获赞 42 · 访问量 8496

猜你喜欢

转载自blog.csdn.net/qq_43068326/article/details/104738916
今日推荐