第八章 汇编语言高级编程技巧.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:64 大小:437KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

第八章 汇编语言高级编程技巧.ppt

第八章汇编语言高级编程技巧.ppt

预览

免费试读已结束,剩余 54 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第八章汇编语言高级编程技巧8.1模块化程序设计8.2汇编语言程序与高级语言程序的连接8.3使用DOSEXEC功能执行程序8.4TSR程序设计软件工程开发包括以下步骤:8.1.1模块通信主模块PRICEM.ASMCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARMOVAX,DATAMOVDS,AXCALLFARPTRSUBMMOVAX,4C00HINT21HMAINENDPCODEENDSENDMAIN子模块PRICES.ASM(1)外部引用伪指令EXTRN程序8.1a主模块PRICEM.ASMcodesegmentmainprocfarassumecs:code,ds:datamovax,datamovds,axCALLFARPTRSUBMMOVAX,4C00HINT21Hmainendpcodeendsendmain程序8.1b子模块PRICES.ASM2.使用公用数据段实现过程通信例8.2实现例8.1的功能,但使用公用数据段实现过程通信,见程序8.2。程序8.2a(主程序):CODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXCALLFARPTRSUBMMOVAX,4C00HINT21HMAINENDPCODEENDSENDMAIN程序8.2b(子程序)CODESEGMENTSUBMPROCFARASSUMECS:CODE,DS:DATAPUSHDSPUSHAXPUSHDXMOVAX,DATAMOVDS,AXMOVAX,PRICEMULQTYMOVWORDPTRTOTAL,AXMOVWORDPTRTOTAL+2,DXPOPDXPOPAXPOPDSRETSUBMENDPCODEENDSEND3.使用寄存器或堆栈实现过程通信EXTRNSUBM:FARPUBLICTOTAL…datasegmentPRICEDW60QTYDW80TOTALDD?dataends…MOVAX,PRICEMOVDX,QTYCALLFARPTRSUBM…endmain可以把程序8.1b改为:8.1.2模块连接一、多模块程序设计上机步骤④对所有模块分别汇编,生成各自的.obj文件⑤连接与本系统相关的所有.obj文件二、连接对程序设计的要求1.定位类型3.组合类型三、模块连接举例codesegmentmainprocfarassumecs:code,ds:datamovax,datamovds,axCALLFARPTRSUBMMOVAX,4C00HINT21Hmainendpcodeendsendmain子模块PRICES.ASM程序8.3连接后生成的.MAP文件2.使用PUBLIC组合类型3.堆栈段使用STACK组合类型4.数据段使用COMMON组合类型设新局部数据段名为NEW_DATA,原局部数据段名为OLD_DATAASSUMEDS:NEW_DATAPUSHDS;保存原局部数据段基址MOVAX,NEW_DATA;建立新局部数据段寻址MOVDS,AX...;访问NEW_DATA段的数据POPDS;恢复原局部数据段基址当全部堆栈数据的总长度不超过段长限定时,通常使用STACK组合类型且同段名同类别名定义所有堆栈段,使其连接后生成一个堆栈段,这样使用起来十分方便。但在必须使用多个独立堆栈段的场合,需要注意堆栈的切换,即堆栈段寄存器SS和堆栈指针SP的保存与恢复,此时需要用内存变量保存原值,如程序8.4所示。程序8.4movcs:sav_ss,ssmovcs:sav_sp,spclimovax,stacksgmovss,axmovsp,offsettopstipushAXPUSHDXMOVAX,PRICEMULQTYMOVWORDPTRTOTAL,AXMOVWORDPTRTOTAL+2,DXPOPDXPOPAXclimovss,cs:sav_ssmovsp,cs:sav_spstiRETsav_ssdw?sav_spdw?SUBMENDPCODEENDSEND设程序8.3的主模块PRICEM有以下堆栈段定义,把程序8.4与程序8.3连接,则生成图8-6的.MAP文件。stacksgsegmentstack‘stk’dw32dup(‘s’)stacksgends8.1.4模块程序设计上机步骤8.1.5综合举例8.2.1C语言程序中直接嵌入汇编代码2