生活随笔
收集整理的這篇文章主要介紹了
nasm汇编:段的申明、$$、$
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
段的申明: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
(不一定為真實段偏移
)+標號相對于段的偏移
)
總結
以上是生活随笔為你收集整理的nasm汇编:段的申明、$$、$的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。