汇编语言第八章

合集下载

《汇编语言》第8章

《汇编语言》第8章

DOS是IBM PC机的磁盘操作系统,它由 是 机的磁盘操作系统, 机的磁盘操作系统 软盘或硬盘提供。它有二个模块 软盘或硬盘提供。它有二个模块 它们使BIOS用起来更方便 用起来更方便–– 和,它们使 它们使 用起来更方便 –DOS模块提供了更多更必要的测试 , 使 DOS 模块提供了更多更必要的测试, 模块提供了更多更必要的测试 操作比使用相应功能的BIOS操作更简易而且对 操作更简易而且对 操作比使用相应功能的 硬件的依赖性更少些。 硬件的依赖性更少些。
个单元内容对应屏蔽上的哪个位置。 个单元内容对应屏蔽上的哪个位置。 行号:0~24 列号:0~9
一、属性 单色屏幕上的每个字符在存储器中由二个字 单色屏幕上的每个字符在存储器中由 二个字 节表示、 一个字节保存字符的ASCII码 , 另一个 节表示 、 一个字节保存字符的 码 字节保存字符的属性。字符的属性确定了每个显 字节保存字符的属性。 字符的属性 示字符的特性––––如字符是否闪烁显示,是否被 如字符是否闪烁显示, 示字符的特性 如字符是否闪烁显示 加亮,是否反相显示。 加亮,是否反相显示。
使用BIOS功能调用,给程序员编程带来很 功能调用, 使用 功能调用 大的方便(他不必了解硬件 接口的特性, 大的方便 他不必了解硬件I/O接口的特性 , 可 他不必了解硬件 接口的特性 直接用指令设置参数,然后中断调用BIOS中的 直接用指令设置参数,然后中断调用 中的 程序。 使程序简洁, 程序。–––使程序简洁,可读性好,易于移植 使程序简洁 可读性好,易于移植)
get-ec: mov ah, 7 int 21h cmp al, 38h je op1 cmp al, 3ch je op2 cmp al, 3dh je op3 jmp error ; F3? ; F2? ; F1?

汇编语言-王爽-完美高清版视频教程

汇编语言-王爽-完美高清版视频教程

汇编语言》-王爽-完美高清版-零基础汇编语言入门书籍PDF格式同时按ctrl+要下载的地址既可下载对应的视频下载地址:/file/f61cb107c8001第一章- 基础知识01下载地址:/file/f6806f45b8002第一章- 基础知识02下载地址:/file/f6ec42d4d3003第一章- 基础知识03下载地址:/file/f6deb05ec4004第一章-基础知识04下载地址:/file/f6e51f6838005第一章- 基础知识05下载地址:/file/f66edaf8d3006第二章- 寄存器(CPU工作原理)01下载地址:/file/f6d07e07b9007第二章- 寄存器(CPU工作原理)02下载地址:/file/f6d7f585a8008第二章- 寄存器(CPU工作原理)03下载地址:/file/f639d8b3cf009第二章- 寄存器(CPU工作原理)04下载地址:/file/f6dcadbde6010第二章- 寄存器(CPU工作原理)05下载地址:/file/f6ea3f01c1011第二章- 寄存器(CPU工作原理)06下载地址:/file/f65b96a06f012第二章- 寄存器(CPU工作原理)07下载地址:/file/f682da085a013第三章- 寄存器(内存访问)01下载地址:/file/f6486e698014第三章- 寄存器(内存访问)02下载地址:/file/f6b7491d9f015第三章- 寄存器(内存访问)03下载地址:/file/f622b7f9a7016第三章- 寄存器(内存访问)04下载地址:/file/f64e2424b9017第三章- 寄存器(内存访问)05下载地址:/file/f6e5132d4d018第三章- 寄存器(内存访问)06下载地址:/file/f655c10e86019第三章- 寄存器(内存访问)07下载地址:/file/f6b22e64e6020第四章- 第一个程序01下载地址:/file/f6812126a4021第四章- 第一个程序02下载地址:/file/f6523e625c022第四章- 第一个程序03下载地址:/file/f63e0ccb28023第五章- [BX]和loop指令01下载地址:/file/f611e07b8a#024第五章- [BX]和loop指令02下载地址:/file/f6e047bccc#025第五章- [BX]和loop指令03下载地址:/file/f6d348d781#026第五章- [BX]和loop指令04下载地址:/file/f6ada24153#027第五章- [BX]和loop指令05下载地址:/file/f64f97518b#028第五章- [BX]和loop指令06下载地址:/file/f6f9ba96f8#029第六章- 包含多个段的程序01下载地址:/file/f650e06f38#030第六章- 包含多个段的程序02下载地址:/file/f683ee5b2a#031第六章- 包含多个段的程序03下载地址:/file/f69009bfc2#032第七章- 更灵活定位内存地址的方法01下载地址:/file/f6ea427646#033第七章- 更灵活定位内存地址的方法02下载地址:/file/f6acdc6b7f#034第七章- 更灵活定位内存地址的方法03下载地址:/file/f6c85745d0#035第七章- 更灵活定位内存地址的方法04下载地址:/file/f61a26cf12#36第七章- 更灵活定位内存地址的方法05下载地址:/file/f631edf5c6#037第七章- 更灵活定位内存地址的方法06下载地址:/file/f6b0fa6fb8#038第八章- 数据处理的两个基本问题01下载地址:/file/f6f5fe8962#039第八章- 数据处理的两个基本问题02下载地址:/file/f6bf975e0#040第八章- 数据处理的两个基本问题03下载地址:/file/f6d522784c#041第八章- 数据处理的两个基本问题04下载地址:/file/f6b5ac9991# 042实验七寻址方式在结构化数据访问中的应用下载地址:/file/f62e80ced5#076第十七章_使用BIOS进行键盘输入和磁盘读写02/file/bhbgrnfz#077第十七章_使用BIOS进行键盘输入和磁盘读写03[url=/file/dnsl0kxp#[/sell]/file/dnsl0kxp#[/sell[/url]]。

汇编语言王爽第三版检测点答案带目录

汇编语言王爽第三版检测点答案带目录

汇编语言王爽第三版检测点答案带目录在学习汇编语言的过程中,王爽老师的《汇编语言(第三版)》无疑是一本备受推崇的经典教材。

而对于学习者来说,检测点的答案能够帮助我们更好地巩固知识,查漏补缺。

接下来,我将为大家详细呈现这本教材中各个章节检测点的答案,并附上清晰的目录,方便大家查阅和学习。

第一章基础知识检测点 11(1)1 个 CPU 的寻址能力为 8KB,那么它的地址总线的宽度为。

答案:13 位。

因为 8KB = 8×1024 = 2^13B,所以地址总线的宽度为 13 位。

检测点 12(1)8086 CPU 有根数据总线。

答案:16 根。

(2)8086 CPU 有根地址总线。

答案:20 根。

检测点 13(1)内存地址空间的大小受的位数决定。

答案:地址总线。

(2)8086 CPU 的地址总线宽度为 20 位,其可以寻址的内存空间为。

答案:1MB。

因为 2^20 = 1048576B = 1MB。

第二章寄存器检测点 21(1)写出每条汇编指令执行后相关寄存器中的值。

mov ax,62627 AX = 62627mov ah,31H AH = 31H,AX = 31627mov al,23H AL = 23H,AX = 3123H检测点 22(1)给定段地址为 0001H,仅通过变化偏移地址寻址,CPU 的寻址范围为到。

答案:00010H 到 1000FH。

(2)有一数据存放在内存 20000H 单元中,现给定段地址为 SA,若想用偏移地址寻到此单元。

则 SA 应满足的条件是:最小为,最大为。

答案:最小为 1001H,最大为 2000H。

第三章内存访问检测点 31(1)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。

完成程序。

assume cs:codesgcodesg segmentdw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987Hstart: mov ax,0mov ds,axmov bx,0mov cx,8s: mov ax,bxmov bx+16,axadd bx,2loop smov ax,4c00hint 21hcodesg endsend start检测点 32(1)下面的程序将“Mov ax,4c00h ”之前的指令复制到内存 0:200 处。

汇编语言第八章

汇编语言第八章
5
8.1
Sound
1
1 0
设备控制寄存器( 设备控制寄存器 61h )
ห้องสมุดไป่ตู้
1/0
0
2 控制其它外部设备 与 门

SOUND PROC NEAR PUSH AX PUSH DX MOV DX,CX IN AL,61H AND AL,11111100B TRIG: XOR AL,2 OUT 61H,AL MOV CX,BX
DELAY:LOOP DELAY DEC DX JNE TRIG POP DX POP AX RET SOUND ENDP
6
3. 中断传送方式
什么是中断:中断是一种使 什么是中断:中断是一种使CPU中止正在执行的程序而转去处理特 中止正在执行的程序而转去处理特 殊事件的操作。 殊事件的操作。 什么是中断源: 什么是中断源:引起中断的事件 。 中断的优点:避免因反复查询外部设备的状态而浪费时问, 中断的优点:避免因反复查询外部设备的状态而浪费时问,从而提 高了CPU的效率。 的效率。 高了 的效率 外中断(硬中断) 由外设控制器或协处理器引起的中断。 外中断(硬中断):由外设控制器或协处理器引起的中断。 外设的 I/O 请求 —— 可屏蔽中断 非屏蔽中断NMI 电源掉电 / 奇偶错 —— 非屏蔽中断 内中断(软中断) 中断指令INT产生的中断, 或由 产生的中断, 内中断 ( 软中断 ) : 中断指令 产生的中断 或由CPU的某些错误结 的某些错误结
端口地址PORT是一个 位的立即数, 是一个8位的立即数 直接端口寻址方式 :端口地址 是一个 位的立即数, 其范围是0一 。 其范围是 一255。 端口地址在DX中 其范围为0一 间接寻址方式 :端口地址在 中,其范围为 一65535 。

汇编语言课件7-8

汇编语言课件7-8

第七章高级汇编语言技术宏汇编重复汇编条件汇编为用户提供更加容易、更加灵活、更加向高级语言靠拢的汇编工具。

7.1 宏汇编宏:源程序中一段有独立功能的程序代码。

宏指令:用户自定义的指令。

在编程时,将多次使用的功能用一条宏指令来代替。

宏定义macro_name MACRO [哑元表] ; 形参/虚参[ LOCAL 标号表]…… (宏定义体)……ENDM* 如果宏定义体有一个或多个标号,则必须用LOCAL伪操作列出所有的标号。

宏调用macro_name [实元表] ; 实参* 实元表中的实元与哑元表中的哑元在位置上一一对应;* 若实元数>哑元数,则多余的实元无效;* 若实元数<哑元数,则多余的哑元作“空(NUL)”处理;* 对宏指令的调用必须先定义后调用。

宏展开源程序被汇编时,汇编程序把宏调用展开,也就是把宏定义体复制到调用宏指令的位置上,同时用实元取代哑元,由LOCAL定义的标号也由??0000~??FFFF替代。

例7.7 宏指令名与指令助记符或伪操作名相同,宏指令的优先级最高。

宏定义:add MACRO opr1, opr2, result…………ENDM宏调用:……add xx, yy, zzpurge add ; 取消宏定义……宏汇编操作符& ;; %符号1 & 符号2 ; 宏展开时,合并前后两个符号形成一个符号。

;; 注释; 宏展开时,;;后面的注释不予展开。

例:Q MACRO m; display a message 每次展开保留此注释;; m is a string 每次展开不保留此注释……ENDM% 表达式; 汇编程序将%后面的表达式转换为数字,并在展开期间用这个数取代哑元。

列表伪操作源程序(ASM文件)经汇编程序汇编,主要输出是OBJ文件和LST文件(列表文件)。

LST文件同时列出源程序和机器语言程序清单,并给出符号表。

.LALL:在LST清单中列出宏展开后的全部语句(包括注释)。

汇编语言程序设计第8章_80868088分支程序设计.ppt

汇编语言程序设计第8章_80868088分支程序设计.ppt
21.03.2019
114H,128H,256H,259H,325H,14ADH, 34DEH,4D34H,5FDAH 256H ? ? ?
第 1章
汇编语言基础知识 8章
8086/
22
8.2
分支结构程序设计
LEA CMP JA LEA JE STC JMP LAB1: MOV SHL ADD CMP JB JE STC JMP LAB2: MOV MOV MOV DI,ARRAY AX,ES:[DI] LAB1 SI ,ES:[DI] EXIT EXIT1 SI,LEN1-1 SI,1 SI,DI AX,ES:[SI] LAB2 EXIT EXIT1 MOV LOW1,1 BX,LEN1 HIGH1,BX BX,DI
21.03.2019
al, 0
;AL为逻辑尺
continue bx, branch_table al, 1 ;逻辑右移 add1 word ptr[bx] ;段内间接转移 bx, type branch_table ;add bx,2 L
第 1章
汇编语言基础知识 8章
8086/
17
…… cmp je mov L: shr jnc jmp add1: add jmp continue: …… routine1: …… routine2: ……
21.03.2019
第 1章
汇编语言基础知识 8章
8086/
9
8.2 分支结构程序设计 CODE SEGMENT ASSUME DS:DATA,CS:CODE 8.2.1 测试法分支程序设计 START: MOV AX, DATA MOV DS, AX MOV AX, X CMP AX, Y DATA SEGMENT JGE L1 X DW -0ABH MOV AX, Y Y DW 205 L1: CMP AX, Z Z DW 200 JGE EXIT MAX DW ? MOV AX, Z DATA ENDS EXIT: MOV MAX, AX MOV AH, 4CH INT 21H CODE ENDS END START

汇编语言程序设计

汇编语言程序设计

《汇编语言程序设计》课程教学大纲学时:32 学分:2理论学时:24 实验学时:8面向专业:电科、电信、通信课程代码:B2700009先开课程:C语言程序设计课程性质:必修执笔人:王艳春审定人:陈龙猛、张金政第一部分:理论教学部分一、说明1、课程的性质、地位和任务本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。

掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。

汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。

因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。

通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。

2、课程教学和教改基本要求课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。

通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。

学习这门课程,应达到以下几个要求:①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧;②具有阅读,分析汇编语言程序的能力;③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行过程及debug工具的调试手段。

课堂授课采用多媒体教学,采用由浅入深、循序渐进学习步骤,主要讲解设计思想、实现技巧,通过提问题引导学生思考,提高学生的学习兴趣,从而加深学生对理论课的理解,提高学生的动手能力。

二、教学内容与课时分配第一章基础知识(2学时)1.1 机器语言及汇编语言的产生1.2 汇编语言的组成1.3 存储器1.4 指令和数据1.5 存储单元及CPU对存储器的读写1.6 三大总线1.7 主板、接口卡及各类存储器芯片1.8 内存地址空间教学的重点与难点:指令和数据在内存或磁盘上没有区别;内存地址空间。

汇编语言程序设计教程2版8章

汇编语言程序设计教程2版8章
2010-12-24 7
直接存储器存取方式(DMA) 直接存储器存取方式(DMA)
中断传送方式虽然能快速地响应I/O设备的传送 中断传送方式虽然能快速地响应I/O设备的传送 要求,但其服务过程仍由软件来实现。 要求,但其服务过程仍由软件来实现。每次中 断处理需要保护断点、保护现场及恢复现场、 断处理需要保护断点、保护现场及恢复现场、 恢复断点,这些操作都要占用CPU的额外时间 的额外时间。 恢复断点,这些操作都要占用CPU的额外时间。 对某些需要高速地传送大量数据的设备( 对某些需要高速地传送大量数据的设备(如磁 来说,这种中断传送方式就显得太慢。 盘)来说,这种中断传送方式就显得太慢。 因此,希望由硬件电路来直接实现数据交换, 因此,希望由硬件电路来直接实现数据交换, 而不必通过CPU,这就是DMA方式 方式。 而不必通过CPU,这就是DMA方式。 DMA方式能摆脱 DMA方式能摆脱CPU的直接干预,利用硬件控 方式能摆脱CPU的直接干预 的直接干预, 制设备DMA控制器 DMAC), 控制器( ),实现外部设备 制设备DMA控制器(DMAC),实现外部设备 与内存间的直接数据传送。 与内存间的直接数据传送。
2010-1U寻址外设的方式
CPU寻址外设的方式有存储器寻址和端口寻址两 CPU寻址外设的方式有存储器寻址和端口寻址两 种方式。第一种存储器寻址方式是把外设看作一 种方式。第一种存储器寻址方式是把外设看作一 个存储单元, 个存储单元,每个外设占有存储器的一个或若干 个地址。当要从外设输入一个数据时, 个地址。当要从外设输入一个数据时,就对外设 进行读操作,即到外设接口寄存器中读回数据。 进行读操作,即到外设接口寄存器中读回数据。 在向外设输出一个数据时, 在向外设输出一个数据时,则以同样的方式对与 外设对应的存储单元地址进行一次存储器写操作, 外设对应的存储单元地址进行一次存储器写操作, 即把数据写到外设接口的寄存器中去。 即把数据写到外设接口的寄存器中去。 CPU寻址外设的另一种方式是端口寻址 CPU寻址外设的另一种方式是端口寻址,这种方 寻址外设的另一种方式是端口寻址, 式要求使用专门的输入输出指令, 式要求使用专门的输入输出指令,并要求为外设 接口分配地址,以便通过接口地址来寻址外设。 接口分配地址,以便通过接口地址来寻址外设。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主程序
子程序SUBR
:
: CALL SUBR : :
:
: : : :
RET
8.1 子程序的引出
3.主程序与子程序之间的信息转换 主程序调用子程序前,应当向子程 序提供必要的加工对象,子程序执行结 束返回主程序时,应向主程序传递加工 结果。 4.保护现场与恢复现场 主程序和子程序在工作时都需要使 用寄存器,在主子程序之间来回交替工 作时就会发生寄存器冲突。
第八章
8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8
子程序设计
子程序的引出 子程序(过程)定义伪指令 调用和返回指令 子程序设计方法 子程序嵌套 递归子程序 可重入子程序 程序的连接
8.1 子程序的引出
在我们编写解决实际问题的程序时,往往会遇 到多处使用相同功能的程序段, 使用该程序段的唯 一差别是对程序变量赋不同的值,例如计算: S=√2X+√3Y+√150 计算上述函数需要多次使用开方运算,如果每 次用到开方运算就编写一段开方程序,那末开方程 序在程序中会多次出现,不仅书写麻烦,容易出错, 编辑、汇编它时,也会花费较多时间。同时,由于 冗长,占用内存也较多。如果把多次使用的功能程 序编制为一个独立的程序段,每当用到这种功能时, 就将控制转向它,完成功能后再返回到原来 的程序,这就会大大减少编程工作量。
DX,PX ;取X DX,DX ;计算2X SQROOT1 ;调用开平方子程序 DX ;暂存结果√2X DX,PY ;取Y SQROOT1 AX,DX ;计算3Y XOR DX,DX AND DX,AX JZ SQROOT1 ;调用开平方子程序SQRT1: MOV AX ;取出√2X SHL AX,DX ;计算√2X+√3Y INC AX ;暂存结果 SUB DX,150 JC SQROOT1 INC AX ;取出中间结果 JMP AX,DX ;计算最终结果 SQRT2: MOV RLT,AX ;保存结果 RET AH,4CH SQROOT1 21H ENDS MAIN1
子程序运行时所需的加工对象应由调用程序提供,处理 的结果应提相互之间要传递参数。 常用的传送方法有四种: (1)约定寄存器法; (2)约定存储单元法; (3)堆栈法; (4)约定参数地址指针法。 以计算下述函数为例,说明各种参数传送方法。 例8.1 编制程序计算:Z=√2X+√3Y+√150 设X,Y 为整数字数据,且存于PX和PY单元,计算结果存入 RLT单元。
18: MOV 19: ADD 20: CALL 21: PUSH 22: MOV 23: MOV 24: ADD 25: ADD 26: CALL 27: POP 28: ADD 29: PUSH 30: MOV 31: CALL 32: POP 33: ADD 34: MOV 35: MOV 36: INT 37:CSEG 38: END
MOV DX,PX ;取X 2.约定存储单元法 ADD DX,DX ;计算2X MOV ARGX,DX CALL SQROOT2 ;调用开平方子程序 MOV DX,ROOT SQROOT2 PROC NEAR PUSH DX ;暂存结果√2X MOV DX,ARGX MOV DX,PY ;取Y XOR AX,AX MOV AX,DX ;计算3Y AND DX,DX ADD DX,DX JZ SQRT2 ADD DX,AX SQRT1: MOV BX,AX MOV ARGX,DX SHL BX,1 CALL SQROOT2 ;调用开平方子程序 INC BX POP AX ;取出√2X SUB DX,BX ADD AX,ROOT ;计算√2X+√3Y JC SQRT2 PUSH AX ;暂存结果 INC AX MOV ARGX,150 JMP SQRT1 CALL SQROOT2 SQRT2: MOV ROOT,AX POP AX ;取出中间结果 RET ADD AX,ROOT ;计算最终结果 SQROOT2 ENDP MOV RLT,AX ;保存结果 MOV AH,4CH INT 21H CSEG ENDS END MAIN2
主程序 : : CALL SUBR : :
子程序SUBR : : : :
:
RET
8.2 子程序(过程)定义伪指令
子程序定义伪指令所定义的子程序的一般格式: PN PROC[NEAR]/[FAR] ;说明过程开始 : ;过程体 : PN ENDP ;说明过程结束
8.3 调用和返回指令
1.调用分类 (1)段内调用与段间调用 (2)直接调用与间接调用
1.约定寄存器法
约定寄存器法传送参数,即事先约定一 些存放参数的通用寄存器,调用程序转向子 程序时,先把要传送的参数放到约定好的寄 存器中,子程序工作时,从约定的寄存器中 取参数,然后把结果存入事先约定的寄存器 中,调用程序再从约定的寄存器中取结果。 这种方法是程序设计中最常用、最简单、最 方便的方法,在传送参数不多的情况下都采 用此方法。
8.4.2子程序说明文件
子程序说明文件例子: (1)子程序名:SQROOT1; (2)程序功能:求双字节整数的平方根的整 数部分; (3)入口条件:被开方数放在DX中; (4)出口条件:平方根在DX中; (5)受影响的寄存器:AX,BX,CX,DX及标志寄 存器F。
8.4.3 主程序与子程序之间的参数传递
8.1 子程序的引出
使用子程序的好处: (1)简化了程序设计过程,减少了工作量,节 省了时间; (2)源程序缩短,节省了机器汇编源程序的时 间和存储目标代码的存储空间; (3)增加了源程序的可读性,便于调试维护; (4)有利于程序模块化、结构化和自顶向下的 程序设计; (5)子程序一旦编制成功,在开发研制各种软 件时都可利用,大大缩短了软件的开发周期。
8.4 子程序设计方法
8.4.1 现场的保护和恢复 8.4.2 子程序说明文件 8.4.3 主程序与子程序之间的参数传递
8.4.1 现场的保护和恢复
子程序中需要使用的寄存器,有可能在主程序中正被用来 保存某种中间结果,这些寄存器的值在从子程序返回主程序后 还要继续使用, 这些寄存器的值或所需的标志位的值等信息称 之为现场。显然,子程序执行前需要保护现场,返回时要恢复 现场。 保存现场与恢复现场的工作既可在调用程序中完成,也可 在子程序中完成,程序设计时根据情况安排。如果子程序已经 设计好了,而其中未保护主程序现场,那么调用程序在使用子 程序之前应保护现场,从子程序返回后再恢复现场。 通常在主程序中保护现场,则一定在主程序中恢复;在子 程序中保护现场,则一定在子程序中恢复。这样可以增强主程 序和子程序之间的相对独立性,减少相互依赖,使程序结构清 楚,减少错误。
PROC AX,AX DX,DX SQRT2 BX,AX BX,1 BX DX,BX SQRT2 AX SQRT1 DX,AX ENDP
2.约定存储单元法
3.堆栈法 4.约定参数地址指针法
2.约定存储单元法例子
约定被开方数放在ARGX单元,计算结果放在ROOT单元
SSEG SEGMENT STACK STKTOP DB 20 DUP(0) SSEG ENDS DSEG SEGMENT PX DW 12345 PY DW 2469 RLT DW 0 ARGX DW 0 ROOT DW 0 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG MAIN2: MOV AX,DSEG MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,SIZE STKTOP
8.4.1 现场的保护和恢复
保护现场和恢复现场的方法: (1) 利用压栈和出栈指令,将寄存器内容或状态标志位内 容保存在堆栈中,恢复时再从堆栈中取出。 例子:
SQROOT1 PROC NEAR PUSH AX PUSH BX PUSH CX ... POP CX POP BX POP AX RET ENDP ;保存现场
;子程序正常工作 ;恢复现场
SQROOT1
(2) 利用内存单元。用传送指令将寄存器的内容保存到指 定的内存单元,恢复时再用传送指令取出。
8.4.2子程序说明文件
(1)子程序名(子程序入口地址):用过程(子程序)定义伪 指令定义该过程(子程序)时的过程名,这时过程(子程序) 中第一条语句必须是子程序的入口指令;否则应写子程序入 口指令的标号或地址。 (2)子程序功能:用自然语言或数学语言等形式简单清楚地描 述子程序完成的任务。 (3)入口条件:说明子程序要求有几个入口参数,这些参数表 示的意义及存放位置。 (4)出口条件:说明子程序有几个输出参数(运行结果),这 些参数表示的意义、存放的位置。 (5)受影响的寄存器:说明子程序运行后,哪些寄存器的内容 被破坏了,以便使用者在调用该子程序之前注意保护现场。
2.调用指令
指令汇编格式:CALL PROCNAME/REGNAME/MEMLABEL 操作:(1)段内调用: SP←SP-2 (SP+1,SP)←IP IP←OFFSET PROCNAME或REGNAME或(MEMLABEL) (2)段间调用: SP←SP-2 (SP+1,SP)←CS CS←SEG PROCNAME或(MEMLABEL+2,MEMLABEL+3) SP←SP-2 (SP+1,SP)←IP IP←OFFSET PROCNAME或(MEMLABEL,MEMLABEL+1) 受影响的寄存器:没有
8.1 子程序的引出
子程序设计需了解的问题: 1.子程序的定义与调用 设计出可以完成相对独立功能的程序 段,并对汇编程序提供必要的信息,使得 对该程序段汇编之后,在需要时可以被其 他主程序调用,这一过程称为子程序的定 义。 已定义的子程序在什么时候被执行, 执行多少次,都不是由子程序自身决定的 。在主程序需要调用相应的子程序时,可 以用调用子程序指令使得相应子程序被执 行。 2.主程序与子程序之间的调用与返回 在主程序需要利用子程序的执行来完 成某种工作时,就可以使用调用子程序指 令来调用相应的子程序;在子程序完成它 应该完成的工作之后,应当用返回指令返 回调用它的主程序。
相关文档
最新文档