chapter4 汇编语言程序设计.ppt

  1. 1、本文档共111页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
75 条件汇编 格式: IFxx < 条件表达式 > …… ; 条件块 1 [ELSE] …… ; 条件块 2 ENDIF 功能: 根据某个表达式的真假,决定是否对指定的程序段进行 编译 76 ? IF 表达式: 如果表达式的值不为 0 ,则条件满足。 ? IFE 表达式: 如果表达式值为 0 ,则条件满足。 ? IF1 : 在汇编程序的第一次扫视期间满足条件。 ? IF2 : 在汇编程序的第二次扫视期间满足条件。 ? IFDEF 符号: 如果指定的符号已经在程序中被定义,或被说明为 EXTRN ,则 条件为真。 77 ? IFNDEF 符号: 如果指定的符号在程序中未被定义,且不被说明为 EXTRN ,则 条件为真。 ? IFB < 变量 > : 如变量为空,则条件为真。 ? IFNB < 变量 > : 如变量不为空,则条件为真。 ? IFIDN <arg1> , <arg2> : 如字符串 arg1 和串 arg2 相同,条件为真。 ? IFDIF <arg1> , <arg2> : 如字符串 arg1 和串 arg2 不相同,条件为真。 78 4.5 编写完整的汇编语言程序 ? 汇编语言程序与 MS-DOS ? 一般的汇编语言程序的整体框架 ? 模块化程序设计的思想 ? 利用简化段定义伪指令编写完整程序 79 ? 汇编语言程序与 MS-DOS ? 确定用于存放程序的内存地址空间 ? 建立程序段前缀 PSP ( Program Segment Prefix ) ? 100H 个字节,存放程序有关信息及进程间的控制信息 ? 最开始的两个字节是一条 INT 20H 软中断指令 ? 在 PSP 后装入可执行程序:数据段,附加段,代码段,堆栈段 ? 初始化各个相关寄存器的值: ? DS 、 ES : PSP 所在段的段地址 ? CS 、 IP :程序的入口地址 ? 入口地址 = 第一条可执行语句的段地址和偏移量 ? 这个地址是从 END 语句中标号的地址属性得到的 ? SS 初始化为堆栈段的段地址 ? SP 指向堆栈段的栈底 ? DOS 的装入功能 80 ? DOS 的返回 ? 方法一: ? 执行 PSP 中的“ INT 20H” 指令: ? CS←PSP 的段地址 ? IP←0 ? 具体过程: ? 程序开头: PUSH DS ;开始时 (DS)=PSP 的段地址 MOV AX , 0 PUSH AX ;“ 0” 入栈 ? 程序过程,要求 PUSH 与 POP 配对 ? 程序结束: RETF ; CS←PSP 的段地址, IP←0 81 例 4-47 : CODE SEGMENT ASSUME CS : CODE MAIN PROC FAR BEGIN : PUSH DS ; PSP 的段地址入栈 MOV AX , 0 ; INT 20H 的偏移量为 0 PUSH AX ;把偏移量入栈 …… RET ; IP←0 , CS←PSP 段地址 MAIN ENDP CODE ENDS END BEGIN 82 ? 方法二 调用 DOS 系统的 4CH 功能,实现 DOS 返回: MOV AH , 4CH INT 21H CODE SEGMENT ASSUME CS : CODE BEGIN : …… …… MOV AH , 4CH ;返回 DOS INT 21H CODE ENDS END BEGIN 例 4-48 : 83 ? 一般的汇编语言程序的整体框架 ? 数据段、附加段 ? 堆栈段 ? ASSUME 伪指令 ? 代码段 ? END 伪指令 ? 注释 84 ? 源程序结构框架 DATA SEGMENT ;数据段 …… ;定义变量、缓冲区等 DATA ENDS STACK SEGMENT PARA STACK ‘STACK' ;堆栈段部分 DB XXXX DUP ( ? ) ;定义堆栈的长度 STACK ENDS CODE SEGMENT ;代码段部分 ASSUME CS:CODE , DS:DATA , SS:STACK , ES:DATA MAIN PROC FAR BEGIN : PUSH DS MOV AX , 0 ;为 RET 提供转移地址 PUSH AX 85 MOV AX , DATA MOV DS , AX ;初始化段寄存器 DS 、 ES MOV ES , AX …… ;程序部分 RET ;返回 DOS MAIN ENDP PROC_1 PROC NEAR/FAR …… ;定义其他过程 RET PROC_1 ENDP CODE ENDS END MAIN 86 ? 模块化程序设计的思想 ? 模块命名伪指令 NAME 、 TITLE 格式: NAME 模

文档评论(0)

yusuyuan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档