生活随笔
收集整理的這篇文章主要介紹了
nasm汇编:段的申明、$$、$
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
段的申明:section Segment_Name align=0_? vstart=1_?
Segment_Name 表示段名
0_? 表示對(duì)齊的字節(jié)數(shù)
1_? 表示段內(nèi)匯編地址的開始點(diǎn)
section.段名.start:獲取段處的段地址與偏移地址(段地址:高地址2字節(jié),偏移地址:低地址2字節(jié))
缺省:未定義時(shí)的默認(rèn)值
$$:值為vstart,當(dāng)vstart未定義時(shí)(vstart缺省),默認(rèn)值為所屬段相對(duì)于程序開頭的位置
$:值為vstart + 所在行與所在段的相對(duì)位移
section data0
;程序開頭地址:0x00000000,已對(duì)齊不需要align,缺省vstart值為它所屬段的起始地址
(此處為0x00000000
)
db
0,0,0
;地址0x00000000~0x00000002
db
$$,$
;地址0x00000003~0x00000004,
$$=vstart
=0x0,$
=vstart+
(所在行地址-所在段地址
)=0x3
t0_:
;指向上一行結(jié)束緊接著的下一個(gè)字節(jié)地址
(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_:
;指向上一行結(jié)束緊接著的下一個(gè)字節(jié)地址
(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_:
;指向上一行結(jié)束緊接著的下一個(gè)字節(jié)地址
(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_:
;指向上一行結(jié)束緊接著的下一個(gè)字節(jié)地址
(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_:
;指向上一行結(jié)束緊接著的下一個(gè)字節(jié)地址
(vstart+0x00000005
)
總結(jié)
1、觀察t0_,t1_,t2,t3,不難發(fā)現(xiàn),vstart對(duì)其段內(nèi)標(biāo)號(hào)的作用
vstart未定義時(shí),vstart缺省值為所在段起始地址,其內(nèi)標(biāo)號(hào)表示標(biāo)號(hào)處相對(duì)于程序頭的偏移
vstart定義為0時(shí),其內(nèi)標(biāo)號(hào)表示標(biāo)號(hào)處相對(duì)于其段的偏移
vstart定義為x時(shí),其內(nèi)標(biāo)號(hào)表示x+標(biāo)號(hào)處相對(duì)于其段的偏移
意味著vstart規(guī)定段內(nèi)匯編起始地址,造成標(biāo)號(hào)所表示位置不一定是其所處位置
vstart的另一種理解
vstart未定義時(shí),所屬段起始地址為真實(shí)段地址
vstart定義后,所屬段起始地址為vstart
而
$$始終代表所屬段起始地址
于是有
vstart缺省時(shí)
vstart默認(rèn)為段偏移
$$為所屬段起始地址為段真實(shí)起始地址
段內(nèi)標(biāo)號(hào)表示的也都是真實(shí)地址
(vstart
(真實(shí)段偏移
)+標(biāo)號(hào)相對(duì)于段的偏移
)
vstart定義時(shí)
所屬段起始地址變?yōu)関start
$$也就為vstart
段內(nèi)標(biāo)號(hào)表示的不一定都是真實(shí)地址
(vstart
(不一定為真實(shí)段偏移
)+標(biāo)號(hào)相對(duì)于段的偏移
)
總結(jié)
以上是生活随笔為你收集整理的nasm汇编:段的申明、$$、$的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。