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