嵌入式技术
图4-2 对用户程序的处理步骤
图 4-4 程序链接示意图
图 4-3 作业装入内存时的情况例如,在用户程序的 1000 号单元处有一条指令LOAD 1,2500,该指令的功能是将 2500 单元中的整数 365 取至寄存器 1。但若将该用户程序装入到内存的 10000~15000号单元而不进行地址变换, 则在执行11000号单元中的指令时,它将仍从 2500 号单元中把数据取至寄存器1而导致数据错误。由图4-3 可见,正确的方法应该是将取数指令中的地址 2500 修改成 12500,即把指令中的相对地址 2500 与本程序在内存中的起始地址 10000 相加,才得到正确的物理地址12500。除了数据地址应修改外,指令地址也须做同样的修改,即将指令的相对地址 1000 与起始地址 10000 相加,得到绝对地址 11000。优点:无需硬件支持缺点:1)程序重定位之后就不能在内存中搬动了;2)要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域中。
「DLL函数的调用过程:」
HINSTANCE hInstLibrary;//模块句柄定义 DWORD (WINAPI *InstallStatusMIF)(char*, char*, char*, char*, char*, char*, char*, BOOL);//函数指针定义 if (hInstLibrary = LoadLibrary("ismif32.dll"))//映射 { InstallStatusMIF = (DWORD (WINAPI *)(char*,char*,char*, char*, char*, char*, char*, BOOL)) GetProcAddress(hInstLibrary, "InstallStatusMIF");//获得函数指针 if (InstallStatusMIF) { if (InstallStatusMIF(“office97”, “Microsoft”, “Office 97”, “999.999”, “ENU”, “1234”, ”Completed successfully”, TRUE) !=0)//调用DLL模块中的函数 { } } FreeLibrary(hInstLibrary);//拆除映射 }
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !