;过程偏移表 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.使用过程量偏移表实例
猜你喜欢
转载自blog.csdn.net/dosdiosas_/article/details/106253210
今日推荐
周排行