《汇编语言程序设计》-相伟-电子教案第10章-讲义

合集下载

汇编语言 第十章 Windows汇编程序设计基础

汇编语言 第十章 Windows汇编程序设计基础

(5)数据和代码部分 程序中的数据部分和代码部分是分开定义的, 程序中的数据部分和代码部分是分开定义的, 分别以. 开始, end结束 结束. 分别以.data 和.code 开始,以end结束. end语句一般是整个程序的最后一条语句 语句一般是整个程序的最后一条语句, end语句一般是整个程序的最后一条语句,end 语句后面跟的是起始标号, 语句后面跟的是起始标号,指出了程序执行的第 一条指令的位置 .
汇编语言程序设计
第十章 Windows 汇编语言程序设计基础
10.1 Windows汇编环境 Windows汇编环境 Windows下的子程序设计与函数调用 10.2 Windows下的子程序设计与函数调用 使用VC VC编译调试汇编程序 10.3 使用VC编译调试汇编程序
Windows汇编环境 10.1 Windows汇编环境
写Байду номын сангаас
(3)函数声明语句 格式: 格式:
函数名称 PROTO [调用规则]:[第一个参数类型][,:后续参数类型] 调用规则] 第一个参数类型][, 后续参数类型] ][,:
(4)include语句 include语句 语法: 语法: include 文件名 例如: 例如: kernel32 32. include kernel32.inc user32 32. include user32.inc user32 32. 以 后 程 序 中 用 到 user32.dll 和 kernel32 dll中的函数时 32. 中的函数时, kernel32.dll 中的函数时 , 不需要事先声明 就可以直接使用. 就可以直接使用.
Windows汇编源程序的格式 10.1.2 Windows汇编源程序的格式

汇编语言 第10章

汇编语言 第10章
行 程 序 第n条指令 第n+1条指令 例 行 程 序 中 断 服 务 程 序
3
中断控制技术主要应用在下列几种场合: 1、及时处理计算机中的突发故障。如执行指令时产生溢出,内存出 错等。 2、协调主机与外设工作速度的矛盾。 3、在实时控制系统中,及时处理各控制点的现场信息。 二、中断源及中断类型码 引起中断的原因或来源称为中断源。8086/8088CUP可以处理256种 类型的中断,这些中断源可分为两大类。 1、外部中断 非CUP内部原因产生的中断,称为外部中断。外部中断又分为非屏 蔽中断和可屏蔽中断。 可屏蔽中断 ——可以通过标志寄存器中的中断允许位IF控制CUP 是否响应中断请求。当IF=1,允许CUP响应可屏蔽中断;IF=0,禁止 CUP响应可屏蔽中断。IF由指令STI和CLI设置。 非屏蔽中断 ——不能由IF控制的中断源。当非屏蔽中断发生后, CUP一定要响应。
. . .
类型0 类型1 类型2
IP CS IP CS
类型254 类型255
5
四、中断过程 一个完整的中断过程包括以下四个步骤: 1、中断请求 一个中断源当满足一定条件后,将向CPU提出中断请求。 2、中断响应 CPU每执行完一条指令后,都要查询是否有中断请求送来,按照 一定次序查询各种中断源。如果有中断请求,根据一定的规定和条件 决定是否响应该中断。如果CPU响应中断,则将做以下几项工作: * 将标志寄存器内容压栈; * 保存断点(CS和IP内容压栈); * 禁止新的中断 (IF<=0, TF<=0); * 根据中断类型码从中断矢量表取出中 断服务程序的入口地址,送入IP和CS。 3、中断处理 执行中断服务程序就是完成中断处理。根据中断源的不同,所要 求的处理也不同。因此其中断处理程序也不相同。

计算机组成原理与汇编语言电子教案第十章

计算机组成原理与汇编语言电子教案第十章

第3节 条件转移指令
1.概述 (1) 与无条件转移指令不同,条件转移指令是根据前面形成的条件 来确定转移去向。 (2)条件转移指令的条件主要由标志寄存器给定,根据ZF、CF、SF、 OF及PF等标志位的值来转移。能改变这些标志位的运算和指令均可形 成转移条件,CMP、TEST指令常用于形成转移的条件。CX的值是否 为0也常表示转移条件。 (3) 条件转移指令共有19条,分为简单条件转移指令、无符号数条 件转移指令、符号数条件转移指令及CX条件转移指令4类。 (4)所有条件转移只能是段内直接短转移,而且与JMP指令一样不影 响任何标志位。
(5)条件转移指令的一般格式为:条件转移指令助记符短标号
2.简单条件转移指令 简单条件转移指令是仅取决于ZF、CF、SF、OF及PF中某一标志位的条件 转移指令。标
志ZF、CF、SF、OF及PF的值可以表示10种状态,因而设置了10条简单条 件转移指令,见
表5-1。 【例5—2】简单条件转移指令举例。 CMP AX,0 JELl;AX为0时转L1 ADD AX,1234H JOL2;溢出时转L2
【例5—4】JG与JA指令。 MOV AL,一40H CMP AL,50H JG LLL;AL<50H,顺序执行,不转移
JA LLL;用AL的补码进行比较,条件成立,转LLL处继续执行
5. CX条件转移指令 (1)CX条件转移指令JCXZ是一条特殊的条件转移指令,它以 CX的内容作为转移的条件,CX为0时转移,CX非0时不转移。 (2)使用CX条件转移指令前必须初始化CX。 (3)当CX用作计数器时,JCXZ指令对程序设计很有帮助。 (4)JCXZ指令等价于:
无条件转移指令包括JMP、CALL和RET 3条指令,本节只讨论JMP指令,CALL 和RET 指令将在第7章子程序中讨论。

汇编语言第十章CALL和RET指令

汇编语言第十章CALL和RET指令

汇编语⾔第⼗章CALL和RET指令call和ret指令都是转移指令,它们都修改IP,或同时修改IP和CSret和retf:ret指令使⽤栈中数据,修改IP内容,实现近转移。

进⾏两步操作:(1)(IP)= ((ss) * 16 + (sp)) (2) (sp) = (sp) + 2 等价于 pop IP retf指令使⽤栈中数据,修改CS和IP内容,实现远转移。

进⾏四步操作:(1)(IP)= ((ss) * 16 + (sp)) (2) (sp) = (sp) + 2 (3) (CS) = ((ss) * 16 + (sp)) (4)(sp) = (sp) + 2 等价于pop IP pop CScall指令:call指令进⾏两步操作:(1)将当前的IP 或 CS和IP压⼊栈中;(2)转移(IP对应近转移,CS和IP对应远转移)依据位移进⾏的call指令:call 标号进⾏如下操作:(1)(sp)= (sp) - 2 ((ss) * 16 + (sp)) = (IP) (2)(IP) = (IP) + 16位位移等价于 push IP jmp near ptr 标号依据地址进⾏的call指令:call far ptr 标号进⾏如下操作:(1)(sp)= (sp) - 2 ((ss) * 16 + (sp)) = (CS) (sp) = (sp) - 2 ((ss) * 16 + (sp)) = (IP) (2) (CS)的地址 = 标号所在段的段地址;(IP)的地址 = 标号所在段的偏移地址等价于 push CS push IP jmp far ptr 标号call 16 位reg 进⾏如下操作:(sp)= (sp) - 2 ((ss) * 16 + (sp)) = (IP) (IP) = 16位reg等价于 push IP jmp near 16位regcall word ptr 内存单元地址进⾏如下操作:(sp) = (sp) - 2 ((ss) * 16 + (sp)) = (IP) (IP) = (内存单元地址中的内容)等价于push IP jmp word ptr 内存单元地址call dword ptr 内存单元地址进⾏如下操作:(1)(sp)= (sp) - 2 ((ss) * 16 + (sp)) = (CS) (sp) = (sp) - 2 ((ss) * 16 + (sp)) = (IP)(2) (CS)的地址 = 后两字节内容;(IP)的地址 = 前两字节内容等价于push CS push IP jmp dword ptr 内存单元地址⽤call和ret实现调⽤⼦程序:call sub1...(返回处)sub 1 :.....(⼦程序)ret (返回第⼆⾏)mul乘法指令:mul reg 或者 mul 内存单元两个数相乘,位数必须相等,要么都是8位(⼩于255),要么都是16位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
④ 模块间的接口应该简单,要尽量减少公共符 号的个数,尽量不共用数据存储单元。
采用模块化程序设计的优点:
① 容易把复杂的问题分解成一系列简单问题, 便于解决实际问题。
② 单个模块容易编写、查错、调试。
③ 单个模块容易重复使用,对一些经典模块以直接利用现有的模块,提高工作 效率。
各个定位属性的意义如下:
[PARA] 节地址。表示该段的存放开始地址是 物理地址的最低4位为0的地址。定位属性省略 时,表示PARA。在前面的例题中,程序中多数 逻辑段的定位属性都被省略,说明采用了PARA 属性。
WORD 字地址。表示该段的存放开始地址是 物理地址的最低1位为0的地址。
BYTE 字节地址。表示该段的存放开始地址 可以是任何物理地址。
COMMON 连接程序为本段和同名、同 ‘类别’的其他段指定相同的段地址, 即将本段与这些段相覆盖,段的长度取 决于最长的具有COMMON属性的段的长 度。
AT 表达式 连接程序将把本段装在表 达式的值所指定的段地址上。使用这个 组合属性可以很方便地实现在某一固定 存储区(如ROM区或中断向量区)内的 固定偏移地址处定义标号或变量,这样 源程序就能以标号和变量的形式访问这 些固定的存储单元。
MEMORY:连接程序将本段定位在被连 接在一起的其它所有段之上(即安排在 最高地址上)。如果有几个段都选择 MEMORY组合属性,则宏汇编程序将把 遇到的第一段处理为MEMORY段,而其 它段都被处理为COMMON段。
③ ‘类别’属性
段名的‘类别’ 属性用于连接程序在装配 时安排各个段的存放顺序。它是用单引号括起 来的字符串,该字符串可以包括任何合法的字 符。连接程序在装配时,将把‘类别’相同、 段名相同且组合属性为PUBLIC或STACK的段按 连接时的顺序连续存放,组成一个的物理段, 具有相同的段地址;而仅‘类别’和段名相同 的段将按连接时的顺序连续存放,但仍然是不 同的段,每个段都有自己的段地址。
从汇编语言源程序的角度来看,一个模块 就是一个以END语句作为结束标志的源程序。
模块的划分与设计可参考如下规则:
① 一个模块既不能过大,也不能过小。过大则 模块的通用性较差,过小则会造成时间和空间 上的浪费。
② 力求使模块具有通用性, 通用性越强的模 块利用率越高。
③ 各模块间就在功能上、逻辑上相互独立,特 别应避免用转移语句在模块间转来转去。
[NONE] 表示本段与其它段逻辑上不发生 关连,尽管在物理地址上可能相邻,但 每个段都有自己的段首址,这是隐含的 组合属性,可以省略。在前面学过的例 题中,多采用这种组合属性。
PUBLIC 表示应将本段与其它模块中的同 名、同‘类别’段按各模块连接的顺序 相邻地连接在一起,组成一个物理段, 但该段大小不能超过64K。一般情况下, 各个模块的数据段、代码段都分别定义 成同名、同‘类别’且组合属性为 PUBLIC的段,以便使连接后生成的文件 只有一个数据段、一个代码段。
《汇编语言程序设计》-相伟-电子教 案第10章
精品
第十章 模块化程序设计
本章学习目标
通过本章学习,读者应该掌握以下内容: 模块的概念及设计 模块之间的通信 模块化程序设计方法
10.1 概述
模块化程序设计是大型程序设计的常用方 法,它是指按照要实现的功能把一个大型程序 划分成多个模块,每个模块完成一个子功能, 然后按模块来分配设计人员,由设计人员编制 和调试各个模块程序,最后再把它们按照一定 的调用关系组合起来,完成指定的功能。
通常为使程序简洁,约定数据段的
‘类别’ 属性取名为‘DATA’,附加数据 段的‘类别’ 属性取名为‘EXTRA’,堆 栈段的‘类别’ 属性取名‘STACK’,代 码段的‘类别’ 属性取名为‘CODE’。
10.3 模块通信
模块化程序设计是按照程序的功能把 程序划分成多个模块,按模块来编制程 序的。尽管在划分模块时,使模块具有 高的的独立性是划分模块的重要原则, 但要使模块的功能完全独立是很难做到 的,因此模块之间不可避免的要进行通 信,以便在一个模块内访问另一个模块 定义的符号(变量、标号、过程名、符 号常数)。
STACK 与PUBLIC一样,表示本段与其 它模块中的同名、同‘类别’段按各模
块连接的顺序相邻地连接在一起,组成 一个物理段,该段大小也不能超过64K。 但与PUBLIC不同的是,该段作为堆栈段。 一般情况下,各个模块的堆栈段也都定
义成同名、同‘类别’且组合属性为 STACK的段,以便使连接后生成的文件 只有一个堆栈段。
⑤ 软件运行之后的维护方便。
10.2 模块命名与装配
在模块化程序设计中,一个程序通常 由一个主模块和一个或多个子模块构成, 当编写完所有模块的汇编语言源程序后, 宏汇编程序需要对包括主模块在内的所 有模块的源程序进行单独汇编,生成主 模块的目标文件和各个子模块的目标文 件,然后由连接程序将主模块和所有子 模块的目标文件连接在一起构成一个可 执行文件。
1.模块命名伪指令
格式:NAME 模块名 功能:给一个模块命名。通常作为一个 模块的第一条指令。
2.段定义伪指令
段名 SEGMENT [定位属性] [组合 属性] [‘类别’]
┇ 段名 ENDS 功能:定义程序中的一个逻辑段,并指 定该逻辑段的属性。
① 定位属性
定位属性是对该段的起始地址所提出的 要求,即告诉连接程序,在将各个段装 配在一起时,前一个段安排完后,下一 个段将从一个什么样的地址开始存放。 定位属性是规定好的,它们是:[PARA]、 WORD、BYTE、PAGE,分别称为节地址、 字地址、字节地址、页地址。
PAGE 页地址。表示该段的存放开始地址是 物理地址的最低8位为0的地址。
② 组合属性
组合属性用于向连接程序提供本段同其 它段在连接时的组合关系。 组合属性也是规定好的,有以下几种属 性供选择,它们是:[NONE]、PUBLIC、 COMMON、AT表达式、STACK、 MEMORY。
各个组合属性的意义如下:
相关文档
最新文档