;過程偏移表 ProcTable.asm
;本程序包含了過程偏移量表格
;它使用這個表格執行間接過程調用
include irvine32.inc
.data
CaseTable BYTE 'A' ;查詢值
DWORD Process_A ;過程地址
EntrySize=($-CaseTable) ;
BYTE 'B' ;
DWORD Process_B ;
BYTE 'C' ;
DWORD Process_C ;
BYTE 'D' ;
DWORD Process_D ;
NumberOfEntries=($-CaseTable)/EntrySize ;
prompt BYTE "Press capital A B C or D:",0
;爲每一個過程定義一個單獨的消息字符串
msgA BYTE "Process_A",0 ;
msgB BYTE "Process_B",0 ;
msgC BYTE "Process_C",0 ;
msgD BYTE "Process_D",0 ;
.code
main PROC
mov edx,OFFSET prompt ;請求用戶輸入
call WriteString ;
call ReadChar ;將字符讀取到AL
mov ebx,OFFSET CaseTable ;設置ebx爲表指針
mov ecx,NumberOfEntries ;循環計數器
L1:
cmp al, [ebx] ;發現匹配項?
jne L2 ;否?繼續
call NEAR PTR [ebx+1] ;是,調用過程
;這個call指令的調用過程期地址保存在EBX+1指向的內存位置中,像這樣的間接調用需要使用NEAR PTR運算符
call WriteString ;顯示消息
call Crlf
jmp L3 ;退出搜索
L2:
add ebx,EntrySize ;指向下一個表項
loop L1
L3:
call WaitMsg ;
exit ;
main ENDP
;下面的每一個過程向EDX加載不同的字符串偏移量
Process_A PROC
mov edx,OFFSET msgA ;
ret ;
Process_A ENDP ;
Process_B PROC
mov edx,OFFSET msgB ;
ret ;
Process_B ENDP ;
Process_C PROC
mov edx,OFFSET msgC ;
ret ;
Process_C ENDP ;
Process_D PROC
mov edx,OFFSET msgD ;
ret ;
Process_D ENDP ;
END main
024.使用過程量偏移表實例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.