楊3-8

inc dec 指令不影響 CF標誌位
彙編語言中可以有表達式,表達式又分爲數值表達式和地址表達式
數值表達式分爲:
常數
算術運算符(+ - * / mod)
關係運算符(eq ne lt gt le ge)
邏輯運算符(and or xor not shl shr)
操作符:high low length size seg offset type width mask




變量表示存儲單元,這種存儲單元中存放數值。
標號表示存儲單元,這種存儲單元中存放機器指令。


符號定義語句:
等價語句:
count equ 100
buff_len equ 4*count
等價語句不另外給符號分配存儲單元。
相當於c語言中的宏
等號語句(=):
XX = 10,等號語句可以被重新定義。
定義符號名語句:
符號名 label 類型
類型可以爲byte word dword near far
該語句的功能是定義由符號名指定的符號,使該符號的段屬性和偏移屬性與下一個緊接着的存儲單元的段屬性和偏移屬性相同,使該符號的類型爲參數所規定的類型。
buffer label word
buff db 100 dup (0)


下面的語句表示跳過8個字節的存儲區:
org $+8
彙編語言用"$"表示地址計數器的值。


查表指令:
xlat;該指令將寄存器bx的內容作爲表的首地址,把寄存器al的值作爲下標,取出表項內容再送回al寄存器。


過程定義僞指令語句:
過程名 proc [near | far]
...
過程名 endp


字符串裝入指令:
lodsb lodsw
lodsb 相當於 mov, al, [si],然後根據df改變si
lodsw 相當於 mov ax, [si],然後根據df改變si
不影響標誌位.


字符串存儲指令:
stosb stosw


字符串傳送指令:
movsb movsw


字符串掃描指令:
scasb scasw
scasb: 類似於 cmp al, [di], 然後根據df改變di


字符串比較指令:
cmpsb cmpsw


重複前綴可加在串操作指令之前,達到重複執行其後的串操作指令的目的.
rep repe repz repne repnz


8086/8088的十進制數算術運算調整指令所認可的十進制數是以8421BCD碼錶示的,它分爲未組合(或非壓縮)的和組合(或壓縮)的兩種。組合的BCD碼是指一字節含兩位BCD碼;未組合的BCD碼是指一字節含一位BCD碼,字節的高四位無意義。




組合bcd碼的加減調整指令:daa das
未組合bcd碼的加減乘除調整指令: aaa, aas, aam, aad


程序段前綴是DOS加載一個外部命令或應用程序時,在程序段之前設置的一個具有256字節信息區。
當DOS把控制權轉給外部命令或應用程序之時,數據段寄存器DS和附加段寄存器ES均指向其PSP,即均含有PSP的段值,並不指向程序的數據段和附加段。這樣應用程序可方便地使用到PSP中的有關信息。


PSP的偏移80H處含命令行參數的長度,從PSP的偏移81H開始存放命令行參數。


結構:
struc是MASM支持的一種僞操作
結構名 struc
數據定義語句序列(DB DW DD等僞操作)
結構名 ends


結構變量的定義:
[變量名] 結構名 <[字段值表]>




宏指令在使用之前要先定義。
宏指令的定義如下:
宏指令名 MACRO [形式參數表]
。。。
ENDM
注意endm前沒有宏指令名


特殊的宏運算符:
1.強迫替換運算符&
jump macro con, lab
  j&con lab
         endm
jump nz, here
jump z, there


2.字符串原樣傳遞運算符<>


3.文字字符運算符!
該運算符使用其後的一個字符只作爲一般字符。


4.表達式運算%
調用時如,mess %(12+3-4)


5.宏註釋
在宏定義中,如果註釋以兩個分號引號,那麼宏擴展時該註釋不出現。


局部變量說明僞指令local
彙編程序在每次展開宏時,總把由LOCAL僞指令說明的標號用唯一的符號(??0000至??ffff)代替。
htoasc macro
local isdecm
and al, 0fh
cmp al, 9
jbe isdecm
add al, 7
isdecm:
add al, 30h
endm


清除宏定義的僞指令purge
purge 宏名錶


中止宏擴展的僞指令exitm


重複彙編:
rept 表達式
  需重複的語句組
endm
宏彙編程序將把“需重複的語句組”連續地重複彙編由表達式值所決定的次數。


僞指令irp
irp 形式參數,<實參1,實參2,,,實參n>
  需重複的語句
endm


quart label byte
irp X, <0,1,2,3,4,5>
db X*X
endm


僞指令irpc與僞指令irp相似,但實參列表是一個字符串。字符串的長度規定了重複的次數。


完整的段定義
段名 segment [定位類型] [組合類型] ['類別']
。。。
段名 ends
定位類型:para byte word dword page
組合類型:public common stack memory at表達式 private
類別,實際上只有類別相同的同名段才根據組合類型進行組合。


link程序會把組合類型爲stack的段的有關信息寫入可執行程序文件中。設置的ss值是組合類型爲stack的段的段值,設置的sp值是堆棧段的大小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章