1. 程式人生 > 其它 >組合語言-001(BYTE、DUP、WORD 、DWORD 、QWORD 、TBYTE 、REAL )

組合語言-001(BYTE、DUP、WORD 、DWORD 、QWORD 、TBYTE 、REAL )

技術標籤:彙編程式語言反彙編

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