組合語言-001(BYTE、DUP、WORD 、DWORD 、QWORD 、TBYTE 、REAL )
阿新 • • 發佈:2020-12-25
1 : 基礎組合語言展示
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.code
main PROC
mov eax,5
add eax,6
INVOKE ExitProcess,0
main ENDP
END main
2:基礎組合語言展示增加變數的訪問
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
sum DWORD 0
.code
main PROC
mov eax, 5
add eax,6
mov sum,eax
INVOKE ExitProcess,0
main ENDP
END main
3:BYTE資料定義
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
value1 BYTE 'A'
value2 BYTE 0
value3 BYTE 255
value4 SBYTE -128
value5 SBYTE +127
value6 BYTE ?
value7 BYTE 10h
value8 BYTE 20h
value9 DB 255 ;傳統資料偽指令
value10 DB -128 ;傳統資料偽指令
list BYTE 10,20,30,40,50
list2 BYTE 10,20,30,40,50
BYTE 60,70,80,90,100
list3 BYTE 10,32,41h,00100010b
list4 BYTE 0Ah,20h,'a',22h
.code
main PROC
INVOKE ExitProcess,0
main ENDP
END main
4:BYTE定義字串
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
; 多個位元組數值初始化必須用逗號隔開,但字串是個例外要不然後每個位元組都要用逗號,很麻煩
greeting1 BYTE "Good afternoon",0
greeting2 BYTE "Good night",0
greeting3 BYTE "Welcome to the Demo program "
BYTE "created by me .",0dh,0ah
BYTE "If you wish to modify this program, please "
BYTE "send me a copy.",0dh,0ah,0
;行連續符(\)把兩個原始碼連在一起
greeting4 BYTE "Welcome to the Demo program "
greeting5 \
BYTE "Welcome to the Demo program "
.code
main PROC
INVOKE ExitProcess,0
main ENDP
END main
5:DUP操作符分配空間賦初始值,DUP使用一個整數表示式作為計數器,為多個數據分配儲存空間
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
dup1 BYTE 20 DUP(0) ;20個位元組,值都為0
dup2 BYTE 20 DUP(?) ;20個位元組,未補始化
dup3 BYTE 20 DUP("STACK") ;20個位元組,賦字串
.code
main PROC
INVOKE ExitProcess,0
main ENDP
END main
6:WORD資料定義
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
word1 WORD 65535 ;最小無符號數
word2 SWORD -32768 ;最小有符號數
word3 WORD ? ;未初始化,無符號
;傳統資料偽指令
word4 DW 65535 ;無符號
word5 DW -32768 ;有符號
mylist WORD 1,2,3,4,5
array WORD 5 DUP(?) ;5個數值,未初始化
.code
main PROC
INVOKE ExitProcess,0
main ENDP
END main
7:DWORD資料定義 DWORD還可以用於宣告一種變數,這種變數的包含另一個變數(就是儲存地址)
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
value1 DWORD 12345678h ;無符號
value2 SDWORD -2147483648 ;有符號
value3 DWORD 20 DUP(?) ;無符號陣列
;傳統資料偽指令
value4 DD 12345678h ;無符號
value5 DD -2147483648 ;有符號
;DWORD還可以用於宣告一種變數,這種變數的包含另一個變數
pValue1 DWORD value1 ;value1的地址
pValue2 DWORD value2 ;value2的地址
mylist DWORD 1,2,3,4,5
.code
main PROC
INVOKE ExitProcess,0
main ENDP
END main
8:QWORD資料定義
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
value1 QWORD 1234567812345678h
;傳統偽指令
value2 DQ 1234567812345678h
.code
main PROC
INVOKE ExitProcess,0
main ENDP
END main
9:BCD壓縮資料定義 MASM使用TBYTE偽指令來定義BCD變數
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
intVal TBYTE 80000000000000001234h ;有效定義
;intVal TBYTE -1234 無效
;浮點資料使用壓縮BCD碼,要通過浮點暫存器
posVal REAL8 1.5
bcdVal TBYTE ?
.code
main PROC
fld posVal ;載入到浮點堆疊
fbstp bcdVal ;向上舍入到2,壓縮BCD碼值
INVOKE ExitProcess,0
main ENDP
END main
10:REAL浮點資料定義
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
rVal1 REAL4 -1.2 ;短實數 有效數字6位
rVal2 REAL8 3.2E-260 ;長實數 有效數字15位
rVal3 REAL10 4.6E+4096 ;擴充套件精度實數 有效數字19位
ShortArray REAL4 20 DUP(0.0)
;傳統資料偽指令
rVal4 DD -1.2
rVal5 DQ 3.2E-260
rVal6 DT 4.6E+4096
.code
main PROC
INVOKE ExitProcess,0
main ENDP
END main