段的申明:section Segment_Name align=0_? vstart=1_?
Segment_Name 表示段名
0_? 表示对齐的字节数
1_? 表示段内汇编地址的开始点
section.段名.start:获取段处的段地址与偏移地址(段地址:高地址2字节,偏移地址:低地址2字节)
缺省:未定义时的默认值
$$:值为vstart,当vstart未定义时(vstart缺省),默认值为所属段相对于程序开头的位置
$:值为vstart + 所在行与所在段的相对位移

section data0 ;程序开头地址:0x00000000,已对齐不需要align,缺省vstart值为它所属段的起始地址(此处为0x00000000)
db 0,0,0      ;地址0x00000000~0x00000002
db $$,$       ;地址0x00000003~0x00000004,$$=vstart=0x0,$=vstart+(所在行地址-所在段地址)=0x3
t0_:          ;指向上一行结束紧接着的下一个字节地址(vstart+0x00000005)
mov ax,t0_    ;地址0x00000005~0x00000006section data1 align=16 ;段开头地址:0x00000010,align=16意味着段开头地址与最近的能整除16的位置为起始地址,缺省vstart值为它所属段的起始地址(此处为0x00000010)
db 0xa,0,0             ;地址0x00000010~0x00000012
db $$,$                ;地址0x00000013~0x00000014,$$=vstart=0x10,$=vstart+(所在行地址-所在段地址)=0x13
t1_:                   ;指向上一行结束紧接着的下一个字节地址(vstart+0x0000005)
mov ax,t1_             ;地址0x00000015~0x00000016section data2 align=16 vstart=0x33 ;段开头地址:0x00000020,align=16意味着段开头地址与最近的能整除16的位置为起始地址,vstart值为0x33
db 0xa,0xa,0                       ;地址0x00000020~0x00000022
db $$,$                            ;地址0x00000023~0x00000024,$$=vstart=0x33,$=vstart+(所在行地址-所在段地址)=0x36
t2_:                               ;指向上一行结束紧接着的下一个字节地址(vstart+0x00000005)
mov ax,t2_                         ;地址0x00000025~0x00000026section data3 align=16 vstart=0x55 ;段开头地址:0x00000030,align=16意味着段开头地址与最近的能整除16的位置为起始地址,vstart值为0x55
db 0xa,0xa,0xa                     ;地址0x00000030~0x00000032
db $$,$                            ;地址0x00000033~0x00000034,$$=vstart=0x55,$=vstart+(所在行地址-所在段地址)=0x58
t3_:                               ;指向上一行结束紧接着的下一个字节地址(vstart+0x00000005)
mov ax,t3_                         ;地址0x00000035~0x00000036section exit align=16              ;段开头地址:0x00000040,align=16意味着段开头地址与最近的能整除16的位置为起始地址,缺省vstart值为它所属段的起始地址(此处为0x00000040)
db 0xa,0xa,0xa                     ;地址0x00000040~0x00000042
db $$,$                            ;地址0x00000043~0x00000044,$$=vstart=0x40,$=vstart+(所在行地址-所在段地址)=0x43
t4_:                               ;指向上一行结束紧接着的下一个字节地址(vstart+0x00000005)

总结
1、观察t0_,t1_,t2,t3,不难发现,vstart对其段内标号的作用
vstart未定义时,vstart缺省值为所在段起始地址,其内标号表示标号处相对于程序头的偏移
vstart定义为0时,其内标号表示标号处相对于其段的偏移
vstart定义为x时,其内标号表示x+标号处相对于其段的偏移
意味着vstart规定段内汇编起始地址,造成标号所表示位置不一定是其所处位置

vstart的另一种理解
vstart未定义时,所属段起始地址为真实段地址
vstart定义后,所属段起始地址为vstart
而$$始终代表所属段起始地址
于是有
vstart缺省时
vstart默认为段偏移
$$为所属段起始地址为段真实起始地址
段内标号表示的也都是真实地址(vstart(真实段偏移)+标号相对于段的偏移)
vstart定义时
所属段起始地址变为vstart
$$也就为vstart
段内标号表示的不一定都是真实地址(vstart(不一定为真实段偏移)+标号相对于段的偏移)

最新文章

  1. 【Python】解决print不能立即打印的问题
  2. (JAVA)CollectionDemo3
  3. Datawhale-零基础入门NLP-新闻文本分类Task03
  4. Linux 大文件快速处理小的办法
  5. vue-meta-info动态设置meta标签
  6. 5 月数据库排行:PgSQL 慢增长,MySQL冲击第一!
  7. java二进制流_java读写二进制流
  8. 树莓派专用msata硬盘转接板
  9. 计算机控制总线传输的是,总线,地址总线,数据总线和控制总线
  10. php个人微信聊天机器人,wxpy将个人微信号变成微信聊天机器人
  11. 【机器学习】监督学习的分类:判别/生成模型,概率/非概率模型、参数/非参数模型
  12. 看完这篇文章,再也不怕别人问我JVM了
  13. 微信开挂怎么防止封号_再也不怕被封号!微信养号秘笈教你防封号防降权
  14. 【占星学】天蝎座女生性格特点
  15. 程控增益放大器电路原理图
  16. 靶机实战(bulldog)
  17. 解锁wp7手机实现真机调试
  18. android新特性:DrawerLayout与NavigationView配合使用
  19. Java课设对对碰_JAVA课程设计题目
  20. 安装:Python库的正确安装

热门文章

  1. ajax async
  2. SqlServerCe 数据库操作示例
  3. PHP-代码审计-XSS
  4. 【数据结构与算法】之深入解析“逆波兰表达式求值”的求解思路与算法示例
  5. HarmonyOS之HiTrace日志跟踪定位分析
  6. 632. Smallest Range Covering Elements from K Lists 最小区间
  7. 30秒实现Vue吸顶效果
  8. 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。
  9. CCS6.2超详细使用方法
  10. Ubuntu下安装pip