assume
作用:
- 編寫程序,需要經過編譯軟件,經過編譯后,才形成機器碼,再去控制CPU。但對於assume語句,並不生成機器碼。因此,代碼中仍必須有給段寄存器的操作。
- assume對除了CS以外的其他段寄存器,僅僅只是關聯了段名,以便在訪問段內變量時程序可以知道用哪個段寄存器,並沒有在程序加載時將段地址裝入段寄存器。
換句話說,assume的作用是讓編譯器知道在代碼段中使用的變量來自於哪個段,從而可以利用段寄存器尋址。而將段地址裝入段寄存器的任務仍然要在代碼中實現。
db,dw,dd
作用:
db定義字節類型變量,一個字節數據占1個字節單元
dw定義字類型變量,一個字數據占2個字節單元
dd定義雙字類型變量,一個雙字數據占4個字節單元
segment系列指令
定義格式:
segment_name segment [定義類型] [組合類型] [類別名]
… ;這里寫代碼
segment_name ends
作用:
segment是段,是段定義的偽指令
1.定位類型
指明段開始的邊界,如para,它使段定位在小段的邊界,段首地址正好能被16整除,定位類型未指明時默認為para。
段的定位類型又4種,分別是:
(1)page(頁起始),起始地址以00H結尾,能被256整除
(2)para(節起始),起始地址以0H結尾,能被16整除
(3)word(字起始),起始地址末尾為0,是偶地址
(4)byte(字節起始),起始地址為任意邊界
2.組合類型
決定本段是否要和其他段組合在一起,組合類型有:stack, common, public
3.類別名
連接時用於相關段組合在一起,如代碼段 ’code’ ,數據段 ‘data’ ,堆棧段 ‘stack’
變量定義命名方法
格式:
變量名 db/dd/dw 數據
(代碼中可使用)
type 變量名
seg 變量名
size 變量名
offset 變量名
作用:
type可以獲取變量的類型,如果是db定義的則為1,dw定義的則為2,以此類推。
seg可以獲得變量的段地址
offset可以獲得變量的偏移地址
length對於變量中使用DUP的情況,返回分配的單元數(例如 3 dup(?))則返回3
size為 type*length
$
$為地址計數器偽指令,用於表示下一個可用單元的地址
equ
格式:
<符號名> equ <表達式>
作用:
equ為等值偽指令,用於給符號定義一個值,別的符號名、表達式或指令助記符
struc
格式:
結構體名 struc
成員名 dw/dd/db 默認值
結構體名 ends
作用:
定義結構體
例子
dup
dup是一個操作符,用來進行數據重復