- 1、本文档共192页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言基础5教程
第五章 汇编语言程序设计;5.1 汇编源程序的编程格式;5.1.1 EXE文件的编程格式;例 显示10行HELLO (EXE文件的编程格式); MOV CX,10
LAST: MOV AH,9 MOV DX,OFFSET MESG INT 21H LOOP LAST MOV AH,4CH ;返回DOS
INT 21HCODE ENDS END BEG;5.1.2 COM文件的编程格式;例 显示10行HELLO (COM文件的编程格式);
DOS把COM文件调入内存后,自动使DS=CS,所以DS不必初始化。
COM文件的生成
?首先源程序的编程格式必须符合以上规定。
?如果使用低版本的汇编和链接程序,生成COM文件需4步:
①编辑生成ASM文件
②汇编生成OBJ文件
③链接生成EXE文件
④用EXE2BIN.EXE文件将EXE文件转换成COM文件。;COM文件的生成
? 使用高版本的汇编和链接程序,需要3步:
①编辑生成ASM文件
②汇编生成OBJ文件
③链接时使用小写‘t’做链接参数即可直接生成COM文件;由汇编语言源程序到可执行文件的处理过程;5.1.3 EXE和COM文件的内存映象;EXE文件的内存映像
DOS自动使CS:IP指向用户程序的启动指令所在的存储单元,
SS:SP指向用户堆栈段的栈顶(SS指向堆栈段的段基址),
同时自动给DS、ES、FS和GS赋值,使DS=ES=PSP所在段的段基址,FS=GS=0。
然后,把计算机的控制权交给用户程序。
;EXE文件的内存映象图:
;用户程序无须对CS,SS进行赋值。
在程序开始需重新给DS和ES赋初值。
DOS对DS和ES赋给的初值并不等于用户程序中数据段和附加段的段基址,所以在程序开始需重新给DS和ES赋初值。
;2. COM文件的内存映像
COM文件没有重定位信息,文件体积比EXE小。
程序段前缀(PSP)
DOS装入COM文件时会在用户程序上方(低地址)偏移地址为00~FFH的内存单元中生成一个256个字节的数据块,即程序段前缀(PSP)。
在偏移地址为100H的内存单元开始存放程序的第一条指令。
DOS自动使CS=DS=ES=SS=PSP所在段的段基址, FS=GS=0,且IP=100H,SP=FFFEH ( SS:SP指向用户堆栈段的栈顶)。
然后,把计算机的控制权交给用户程序。;? COM文件的内存映象图;5.1.4 程序段前缀PSP;? PSP格式;5.1.5 返回DOS的其他方法;
⑵对COM文件返回DOS另外三种方法:
直接调用INT 20H;
调用INT 21H 的0号功能;
执行RET功能。
(必须保证此时SP=FFFEH, CPU将无条件转入PSP的首单元,执行那里的INT 20H, 返回DOS. );⑶ 对于EXE文件返回DOS的另一种方法:
当用户程序执行完成后,设法修改CS:IP的值,让它们指向PSP中第一个存储单元开始存储的INT 20H指令。
以下三个步骤缺一不可:
①把整个用户程序定义在一个类型属性为FAR的远过程中;
②在对DS赋初值之前,使用以下三条指令压栈保存PSP第一个字节单元的地址:
PUSH DS
MOV AX,0
PUSH AX ;
③在用户程序末尾添加一条RET指令。
因为在这个FAR类型的过程中,执行RET指令会从堆栈的栈顶指示的存储单元开始,弹出两个字长的数据(即PSP首单元的地址),分别送入IP和CS。于是,在执行完用户程序的最后一条指令以后,CPU紧接着执行PSP首单元指示的指令INT 20H,从而返回DOS。;例5.1.3 显示10行HELLO; MOV CX,10
LAST: MOV AH,9 MOV DX,OFFSET MESG INT 21H LOOP LAST RET ; ③弹出 PSP首单元的地址
MAIN ENDPCODE ENDS END BEG;5.1.6 源程序堆栈段的设置;5.2 DOS系统的I/O功能调用;[功能号00H]
结束一个程序。在COM格式的文件中,可以用来结束当前程序。
入口参数
文档评论(0)