1:變量相加程序
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
firstval DWORD 20002000h
secondval DWORD 11111111h
thirdval DWORD 22222222h
sum DWORD 0.code
main PROCmov eax,firstvaladd eax,secondvaladd eax,thirdvalmov sum,eaxINVOKE ExitProcess,0
main ENDP
END main
2:.data? 偽指令聲明未初始化程序,當定義大量未初始化數據時,.data?偽指令減少了程序的大小
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
smallArray DWORD 10 DUP(10)
.data?
bigArray DWORD 5000 DUP(?) ;20000個字節,未初始化.code
main PROCINVOKE ExitProcess,0
main ENDP
END main
3:不用.data? 程序會比使用大
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
smallArray DWORD 10 DUP(10)
bigArray DWORD 5000 DUP(?) ;不用.data?,生的編譯程序將會多出20000個字節.code
main PROCINVOKE ExitProcess,0
main ENDP
END main
4:等號偽指令等號偽指令與宏定義差不多在匯編器預處理時替換的,不占內存,運行時數值不能變,$當前地址計數器符號,返回當前程序語句的偏移量
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
selfPtr DWORD $ ;$當前地址計數器符號,返回當前程序語句的偏移量
selfPPtr DWORD selfPtr ;與上面一樣;等號偽指令與宏定義差不多在匯編器預處理時替換的,不占內存,運行時數值不能變COUNT = 10
array DWORD COUNT DUP(0) .code
main PROCINVOKE ExitProcess,0
main ENDP
END main
5:使用$計算數組長度
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitProcess:DWORD.data
list BYTE 10,20,30,40
listSize = ($-list) ;使用$計算數組長度時$前不能有別的數據myString BYTE "This is a long String"BYTE "any number of character"
Ssize = ($-myString)Wlist WORD 10,20,30,40
WlistSize = ($-Wlist)/2 ;除以WORD的長度.code
main PROCINVOKE ExitProcess,0
main ENDP
END main
6:EQU 偽指令使用,也是類似宏
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
pressKey EQU <"Press any key to continue....",0>
prompt BYTE pressKey ;pressKey直接把里面的當做文本數據保存到promptmatrix1 EQU 10*10
matrix2 EQU <10*10> M1 WORD matrix1 ;等于M2 WORD 100
M2 WORD matrix2 ;等于M2 WORD 10*10 <>括號內的數據直接復制到M2.code
main PROCINVOKE ExitProcess,0
main ENDP
END main
7:TextEQU文本宏使用,與EQU類似,如果用<>括號都復制替換里面的內容
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
contiuneMsg TEXTEQU <"Do you wish co continue(Y/N)?">
prompt1 BYTE contiuneMsg;文本宏可以相互構建
rowSize = 5
count TEXTEQU %(rowSize * 2) ;分配整數表達式
move TEXTEQU <mov> ;分配文本
setupAL TEXTEQU <move al,count>P1 TEXTEQU <"proc">
P2 TEXTEQU <P1,"edure">
S BYTE P2 ;S 等于“procedure.code
main PROCsetupAL ;等于 mov al,10INVOKE ExitProcess,0
main ENDP
END main
8:mov偽指令使用
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
oneByte BYTE 78h
oneWord WORD 1234h
oneDword DWORD 12345678h.code
main PROCmov eax,0mov al,oneBytemov ax,oneWordmov eax,oneDwordmov ax,0INVOKE ExitProcess,0
main ENDP
END main
9:使用mov處理較小有符號數向較大寄存器賦值
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
signedVal SWORD -16.code
main PROCmov ecx,0FFFFFFFFhmov cx,signedValINVOKE ExitProcess,0
main ENDP
END main
10:MOVSX偽指令,符號位擴展賦值
.386
.model flat,stdcall.stack
ExitProcess PROTO,dwExitCode:DWORD.data
byteVal BYTE 10001111b
.code
main PROCmovsx ax,byteValmov bx,0A69Bhmovsx eax,bxmovsx edx,blmovsx cx,blINVOKE ExitProcess,0
main ENDP
END main
11:MOVZX偽指令,零擴展賦值
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
byteVal BYTE 10001111b
.code
main PROCmovzx ax,byteValmov bx,0A69Bhmovzx eax,bxmovzx edx,blmovzx cx,blINVOKE ExitProcess,0
main ENDP
END main