汇编语言第六章

合集下载

《IBM PC 80X86汇编语言程序设计》PPT电子课件教案-第六章 子程序设计

《IBM PC 80X86汇编语言程序设计》PPT电子课件教案-第六章 子程序设计

《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
1、子程序的概念和特点
子程序:把在程序中多次出现,具有独立功能 的程序段写成程序模块,该模块可被多次调用, 称之为子程序。
特点:①可重复使用(调用) ②具有通用性(可通过入口参数实现) ③可浮动性(存放位置灵活) ④可递归性和可重入性
第6章
第六章 子程序设计
一、子程序的定义 二、子程序的结构形式
三、子程序的设计和调用 四、子程序的参数传递方法 五、子程序的嵌套和递归调用 六、子程序的设计举例 七、多模块程序设计 八、汇编语言和高级语言的混合编程
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
一、子程序的定义
1、子程序的概念和特点 2、子程序的定义 3、子程序的调用和返回
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
2、子程序的定义
子程序的定义是由过程定义伪指令PROC和ENDP 来完成的。其格式如下:
过程名 PROC [NEAR/FAR]

过程名 ENDP
其中PROC表示过程定义开始,ENDP表示过程定 义结束。过程名是过程入口地址的符号表示。
一般过程名同标号一样,具有三种属性,即段 属性、偏移地址属性以及类型属性。
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
3、子程序的调用和返回
❖ 调用
①段内直接调用
格式:CALL 子程序名
功能:将子程序返回地址(断点)入栈
SP←SP-2
(SP)←IP,
并转到子程序入口地址去执行子程序。
❖ 返回指令

汇编语言习题解答李敬兆第二版

汇编语言习题解答李敬兆第二版

汇编语言习题解答李敬兆第二版8086/8088和基于ARM核汇编语言程序设计第1章汇编语言基础知识习题解答1.1 什么是汇编语言?汇编语言的特点是什么?答:为了克服机器语言难以记忆、表达和阅读的缺点,人们采用具有一定含义的符号作为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令(或汇编指令)。

汇编语言是汇编指令集、伪指令集和使用它们规则的统称。

汇编语言的特点是:(1)执行速度快。

(2)程序短小。

(3)可以直接控制硬件。

(4)可以方便地编译。

(5)辅助计算机工作者掌握计算机体系结构。

(6)程序编制耗时,可读性差。

(7)程序可移植性差。

1.2 把下列十进制数转换成二进制数、八进制数、十六进制数。

① 127 ② 1021 ③ 0.875 ④ 6.25答:① 1111111B;177Q;7FH ② 1111111101;1775Q;3FDH③ 0.111 B;0.7Q;0.EH ④ 110.01B;6.2Q;6.4H1.3 把下列二进制数转换成十进制数。

① 1001.11 ② 101011.10011 ③111.011 ④ 1011.1答:① 9.75D ② 43.59375D ③ 7.375D④ 11.5D1.4 把下列八进制数转换成十进制数。

① 573.06 ② 75.23 ③ 431.7 ④123.45答:① 379.09375D ② 61.296875D ③ 281.875 ④ 83.5781251.5 把下列十六进制数转换成十进制数。

① 0D5.F4 ② 8BA.7C ③ 0B2E.3A ④ 6EC.2D答:① 213.953125D ② 2234.484375 ③ 2862.2265625 ④ 1772.175781251.6 把下列英文单词转换成ASCII编码的字符串。

- 1 -① Upper ② Blow ③Computer ④ What答:① 55H,70H,70H,65H,72H ②53H,6CH,6FH,77H③ 43H,6FH,6DH,70H,75H,74H,65H,72H④ 57H,68H,61H,74H1.7 求下列带符号十进制数的8位基2码补码。

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

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

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

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

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

第一章基础知识检测点 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 处。

汇编语言设计-半导体存储器

汇编语言设计-半导体存储器

I/O4∽1
1K4
数据线、读/写控制线并联,
A9∽0
由片选信号来区分各芯片的
CS WE
CS
地址范围。
I/O4∽1
1K4
A9∽0 CS WE
WR
当把容量较小的芯片组成容量较大的存储器时, 需要用 到地址译码器, 以便将地址码翻译成相应的控制信号, 且 用它去控制芯片的片选信号CS。 例如: 试用16K8位的SRAM芯片构成一个64KB的RAM 系统。
片经多次拔插后, 容易损坏管脚; 而且擦除后重写的次数
也是有限的, 多次的拔插降低了芯片的使用寿命。 E2PROM则是一种不需要从电路板上拔下, 而直接在线
用电信号进行擦除的EPROM芯片, 对它的编程也在线操
作,因此, 使用寿命长、改写操作步骤简单。 2、不挥发RAM-NV RAM NV RAM的性能同RAM类似, 但掉电后信息不会丢失(挥
第二节 读写存储器RAM
一、静态MOS RAM 1、基本存储电路 思考:静态MOS六管基本存储电路的结构特点及读写
工作原理。
2、RAM的组成原理(存储器的结构)
AA10 AN-1
•••
地址 译码器
•••
存储矩阵 2NM
•••
三态数据 缓冲器
•••
D0 D1 DM-1
R/W CS
控制逻辑
⑴、存储矩阵
数据线分别单独引出。
例:将1K4位的SRAM芯片组合成1KB的存储器。
分析:采用两块1K4位的RAM芯片,其中一片的数据线
与CPU数据线的低4位相连,另一块的数据线与数据总线
的高4位相连。如图示:
D0
说明:WE通常由CPU的WR
• •
信号控制;CS由地址译码控制。 •

汇编语言之程序的基本结构

汇编语言之程序的基本结构

第6章程序的基本结构在前面几章,我们分别介绍了用汇编语言进行程序设计所需要的几个最基本的知识:内存单元的寻址方式,变量定义和各种汇编指令格式。

在掌握了这些基本内容之后,就需要学习如何把它们组成一个完整的汇编语言程序。

6.1 源程序的基本组成汇编语言源程序的组成部分有:模块、段、子程序和宏等。

一个模块对应一个目标文件,当开发较大型的应用程序时,该程序可能由若干个目标文件或库结合而成的。

有关模块和子程序的知识和宏在第7章介绍,有关宏的知识将在第9章中叙述。

6.1.1 段的定义微机系统的内存是分段管理的,为了与之相对应,汇编语言源程序也分若干个段来构成。

8086CPU有四个段寄存器,在该系统环境下运行的程序在某个时刻最多可访问四个段,而80386及其以后的CPU都含有六个段寄存器,于是,在这些系统环境下开发的运行程序在某个时刻最多可访问六个段。

不论程序在某个时刻最多能访问多少个段,在编程序时,程序员都可以定义比该段数更多的段。

在通常情况下,一个段的长度不能超过64K,在80386及其以后系统的保护方式下,段基地址是32位,段的最大长度可达4G。

段的长度是指该段所占的字节数:、如果段是数据段,则其长度是其所有变量所占字节数的总和;、如果段是代码段,则其长度是其所有指令所占字节数的总和。

在定义段时,每个段都有一个段名。

在取段名时,要取一个具有一定含义的段名。

段定义的一般格式如下:段名 SEGMENT [对齐类型] [组合类型] [类别]…;段内的具体内容…段名 ENDS其中:“段名”必须是一个合法的标识符,前后二个段名要相同。

可选项“对齐类型”、“组合类型”和“类别”的说明作用请见6.3节中的叙述。

一个数据段的定义例子:DATA1 S EGMENTword1 D W 1, 9078H, ?byte1 D B 21, 'World'DD 12345678HDATA1 E NDS一个代码段的例子:CODE1 S EGMENTMOV AX, DATA1 ;把数据段DATA1的段值送AXMOV DS, AX ;把AX的值送给DS,即:DS存储数据段的段值…MOV AX, 4C00HINT 21H ;调用DOS功能,结束程序的运行CODE1 E NDS6.1.2 段寄存器的说明语句在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。

DSP 课件 第六章 汇编语言

DSP 课件 第六章 汇编语言
.word 016h
;将2装入DP
;初始化一个字为16h
1、标号域
标号包含1~32个字母、数字、字符(A~Z,a~2,0~9,—及$),可识别符号的 大小写,且规定第一个字符不能是数字。 标号可以后随冒号(:),冒号并不作为标号的一部分被处理。 如果不使用标号,则第一个字必须是空格或分号或星号。
当选用标号时,其值是段程序计数器 (SPC)的当前值,标号指向与它们相关联的 语句。例如,如果用.word伪指令初始化几个字,那么标号将指向第一个字。
(2)已初始化块
已初始化块包含可执行代码或已初始化数据。块的内容存储在目标 文件中,当程序装入时存放在DSP存储器中。每个已初始化块可以独立 地进行重定位,且可访问在其他块中定义的符号。链接器可自动解决块 与块之间符号访问的问题。有四个命令通知汇编器将代码或数据存放在 严格块中,格式为: .text .data .sect “块名” .asect “块名”,地址 上述命令中, .text 和 .data建立的块名就是.text 和 .data,而后两 命令建立的是自定义块,其中.asect 建立的块有绝对地址,一般不建议 使用。
2、字符串
字符串是包含在双引号内的一串字符,双引号是字符串的一部分。串的 最大长度是变化的,并由每一个使用字符串的伪指令定义。字符在内部 被表示为8位ASCII字符,如:“sample program”定义13个字符的字符 串sample program。 字符串用于下列场合:
(1).copy “filename”中的文件名;
6.3 通用目标文件格式
CCS开发环境可以看成是一个大的软件包,里面包含了源代码 编辑器,以及工程文件组织、编译和调试等一切功能模块。该软件 包里,shell程序可以完成3个功能:编译、汇编和链接。shell程序 缺省在C盘安装时,被安装在 C:\ti\c2400\cgtool子目录下,对应的 文件名为dspcl.exe。 (1)编辑器:包括分析器、优化器、代码产生器。把C语言程序编译 成汇编语言程序。 (2)汇编器:把汇编语言源代码或 C语言已经编译成汇编语言代码进 行汇编,以产生COFF目标文件。 (3)链接器:将文件链接,产生可执行的目标文件。

08级微机原理6_汇编语言程序设计基础

08级微机原理6_汇编语言程序设计基础

汇编程序框架例程
;程序说明注释 st_seg segment stack ;定义堆栈段 db 20 dup (‘stack’) ;定义堆栈数据区 段 st_seg ends ;堆栈段结束 名 datarea segment ;定义数据段 段属性 : ;数据定义 datarea ends ;数据段结束 program segment 过 main proc far ;主程序声明 程 assume cs:program,ds:datarea,ss:st_seg 名 start: ;主程序入口地址 push ds ;返回操作系统的段基址入栈 标号 sub ax,ax ; 设置返 push ax ;0000H入栈 回堆栈
字符串定义
NOTES DB ‘The result is :’,’$’ 字符串结束符 ’00H’
PTR的作用:MOV AX, WORD PTR FIRST
6.2.3 标号
标号是一条指令语句的符号地址。在汇编源程序中, 只有在需要转向一条指令语句时,才为该指令语句设 置标号,以便在转移类指令(含子程序调用指令)中 直接引用这个标号。因此,标号可作为转移类指令的 操作数,即转移地址。 【例6.1】符号地址表示。 ┆ NEXT:MOV AL, [SI] ;带标号NEXT的指令 ┆ DEC CX JNE NEXT ;标号NEXT作转移指 令的操作数
【例6.4】用算术运算符进行数值表达式运算。 ┆ NUM1 EQU 25*4 –50 ;NUM1=50 NUM2 EQU NUM1 / 7 ;NUM2=7 NUM3 DB NUM1 MOD 7 ;NUM3=1 VAR1 DB 1,2,3,4,5 VAR2 DB ‘12345’ NUM4 EQU VAR2-VAR1 ;NUM4=5 NUM5 EQU 0FH ┆ MOV AL,NUM5 SHL 4 ;(AL)=11110000B MOV BL,NUM5 SHR 4; (BL)=00000000B ┆

汇编语言程序设计第二版

汇编语言程序设计第二版

汇编语言程序设计第二版汇编语言是一种低级编程语言,它使用助记符来表示机器指令,允许程序员直接控制硬件。

汇编语言程序设计第二版是针对那些希望深入理解计算机系统底层工作机制的程序员和计算机科学学生编写的教材。

本书在第一版的基础上进行了更新和扩充,以适应现代计算机体系结构和编程实践的发展。

第一章:汇编语言基础本章介绍了汇编语言的基本概念,包括指令集、寄存器、内存寻址方式以及指令的格式和操作。

通过实例代码,读者可以初步了解如何使用汇编语言编写简单的程序。

第二章:数据表示和运算数据在计算机中的表示是程序设计的基础。

本章详细讨论了不同数据类型(如整数、浮点数和字符)在汇编语言中的表示方法,以及基本的算术和逻辑运算。

第三章:程序控制结构程序控制结构是程序设计中的重要组成部分。

本章讲解了条件语句、循环、跳转等控制结构在汇编语言中的实现方式,并通过实际例子展示了如何使用这些结构来编写更复杂的程序。

第四章:子程序和参数传递子程序是程序设计中常用的模块化技术。

本章介绍了如何在汇编语言中定义和调用子程序,以及参数传递的机制。

此外,还讨论了堆栈的使用和调用约定。

第五章:输入输出和中断处理现代计算机系统通常需要与外部设备交互。

本章讲解了汇编语言中实现输入输出的方法,包括直接内存访问(DMA)和中断驱动的I/O。

同时,介绍了中断服务程序的编写。

第六章:高级汇编技术随着计算机技术的发展,汇编语言也引入了一些高级技术,如宏定义、条件汇编和模块化编程。

本章对这些高级技术进行了深入的探讨,并提供了相应的编程实例。

第七章:系统级编程系统级编程涉及到操作系统的底层接口。

本章介绍了如何在汇编语言中实现系统调用,以及如何处理进程和线程的创建和管理。

第八章:性能优化性能是程序设计中的一个重要考虑因素。

本章讨论了汇编语言程序的性能优化技巧,包括指令选择、循环展开和流水线优化等。

第九章:安全性和可维护性随着软件安全和可维护性的重要性日益增加,本章讨论了在汇编语言编程中如何实现代码的安全性和可维护性,包括错误处理、异常处理和代码审查。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、子程序的调用与返回
主程序 子程序
CALL label
RET 回到CALL指令后的指令 指令后的指令 回到 处——返回地址 返回地址
二、子程序的调用与返回
—书写形式(同一代码段内) 书写形式(同一代码段内) 书写形式
二、子程序的调 用与返回
—书写形式 书写形式 不同代码段) (不同代码段)
三、现场的保护与恢复
① 寄存器 ② 变量 ③ 堆栈
例:将两个给定的二进制数转换成为二 进制数的ASCII码形式并加以显示 进制数的 码形式并加以显示 对两个数进行转换、显示的工作是相同的, 对两个数进行转换、显示的工作是相同的, 没有必要重复编写, 没有必要重复编写,以子程序的形式来完 成
被转换的数及其长度
转换子程序需被告知: 转换子程序需被告知
SSEG SSEG DSEG BIN1 BIN2 ASCBUF DSEG CSEG MAIN
SEGMENT PARA STACK 'stack' dw 100h dup(0) ENDS SEGMENT PARA 'Data' DB 35H DW 0AB48H DB 20H DUP(?) ENDS SEGMENT PARA 'Code' assume cs:CSEG, ds:DSEG,ss:SSEG PROC FAR mov ax,dseg mov ds,ax MOV BH,BIN1 MOV CX,8 LEA DI,ASCBUF PUSH DI PUSH CX CALL BINASC POP CX POP DI PUSH DI CALL DISP POP DI ADD DI,10H MOV BX,BIN2 MOV CX,16 PUSH DI PUSH CX CALL BINASC POP CX POP DI CALL DISP mov ax,4C00H int 21h
十六进制数显示的实现
4
BHH4 BHL4 BLH4 BLL4 BHL4 BLH4 BLL4 BHH4 AL BHH4
从 最 高 位 开 始
;例6-3,十进制到十六进制数的转换 例 ,
SSEG
SEGMENT PARA STACK 'stack' dw 100h dup(0) SSEG ENDS DSEG SEGMENT PARA 'Data' DSEG ENDS CSEG SEGMENT PARA 'Code' assume cs:CSEG, ds:DSEG,ss:SSEG MAIN PROC FAR ;make neccessary initalizalition mov ax,dseg mov ds,ax repeat: call decibin call crlf call binihex call crlf jmp repeat mov ah,0AH int 21h ;return DOS mov ax,4C00H int 21h MAIN ENDP
第六章 子程序结构
§6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用 系统功能调用
§6.1 子程序的设计方法
一、子程序指令 二、子程序的调用与返回 三、现场的保护与恢复 四、子程序参数的传递
一、子程序指令
子程序是完成特定功能的一段程序 当主程序(调用程序) 当主程序(调用程序)需要执行这个功能 采用CALL调用指令转移到该子程序 时,采用 调用指令转移到该子程序 的起始处执行 当运行完子程序功能后,采用RET返回指 当运行完子程序功能后,采用 返回指 令回到主程序继续执行
转换子程序: 转换子程序
显示子程序: 显示子程序
CX:被显示内容的长度 被显示内容的长度
;转换子程序 转换子程序 BH BL BINASC PROC DL REP1: ROL BX,1 DI MOV DL,BL AND DL,01H ADD DL,30H ;屏蔽除最低位外的其他位 屏蔽除最低位外的其他位 MOV [DI],DL INC DI LOOP REP1 RET BINASC ENDP
三、现场的保护与恢复
—在主程序中进行 在主程序中进行
…… PUSH BX PUSH AX CALL SUB1 POP AX POP BX …… 注意: 注意: 进栈/出栈的顺序 进栈 出栈的顺序 保护与恢复的对象: 保护与恢复的对象: 主程序用到的存有数据、 主程序用到的存有数据、 中间结果且在CALL指令 中间结果且在 指令 后还要用到的R/M 后还要用到的
存放结果的起始位置 被显示内容的起始位置
显示子程序需被告知: 显示子程序需被告知
被显示内容的长度
例:将两个给定的二进制数转换成为二进制 数的ASCII码形式并加以显示(6-1-1.asm) 数的 码形式并加以显示 方法一: 方法一:用寄存器传递参数
BX:被转换的数 被转换的数 CX:被转换数的长度 被转换数的长度 DI:存放结果的起始位置指针 存放结果的起始位置指针 DI:被显示内容的起始位置指针 被显示内容的起始位置指针
;屏蔽除最低位外的其他位 屏蔽除最低位外的其他位
;设置显示后的光标位置 设置显示后的光标位置
;set entry point
例:将两个给定的二进制数转换成为二进制 数的ASCII码形式并加以显示(6-1-2.asm) 数的 码形式并加以显示 方法二: 方法二:用堆栈传递参数
方法二之主程序段
MOV AH,BIN1 PUSH AX LEA DI,ASCBUF PUSH DI MOV AX,8 PUSH AX CALL BINASC MOV AX,BIN2 PUSH AX ADD DI,10H PUSH DI MOV AX,16 PUSH AX CALL BINASC
一、子程序指令—调用指令 子程序指令
CALL指令分成 种类型(类似 指令分成4种类型 类似JMP) 指令分成 种类型( )
CALL label CALL r16/m16 CALL far ptr label CALL far ptr mem
;段内调用、直接寻址 段内调用、 段内调用、 ;段内调用、间接寻址 段间调用、 ;段间调用、直接寻址 段间调用、 ;段间调用、间接寻址
;从键盘获得十进制数并将其转换成十六进制数置于bx中
decibin newchar:
proc movsub al,30h jl exit ;非十进制数则退出 cmp al,9 jg exit cbw xchg ax,bx ;将原有的数*10后加新输入的数 mov cx,10 mul cx xchg ax,bx add bx,ax jmp newchar ret endp
IP BP+14 长度 BP+16 地址 BIN1 BP+18
§6.2 嵌套与递归子程序
嵌套:子程序调用其他子程序, 嵌套:子程序调用其他子程序,嵌套层数 取决于堆栈的大小32K(基本不受限制) 取决于堆栈的大小 (基本不受限制)
递归:子程序调用自己, 递归:子程序调用自己,该情况要合理设 置出口参数, 置出口参数,否则会造成程序死锁
;转换子程序 转换子程序 BINASC PROC REP1: ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV [DI],DL INC DI LOOP REP1 RET BINASC ENDP ;显示子程序 显示子程序 DISP PROC REP2: MOV AH,2 MOV DL,[DI] INT 21H INC DI LOOP REP2 MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H RET DISP ENDP MAIN CSEG ENDP ENDS END MAIN
;要转换的数进栈
;地址指针
;长度
;调用转换子程序
;转换并显示子程序 转换并显示子程序
BINASC PROC PUSH DI PUSH AX PUSH BX PUSH CX PUSH DX PUSH BP MOV BP,SP MOV BX,[BP+18] MOV DI,[BP+16] MOV CX,[BP+14] REP1: ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H ;屏蔽除最低位外的其他位 屏蔽除最低位外的其他位 MOV [DI],DL MOV AH,6 INT 21H INC DI LOOP REP1
现场:主程序转向子程序之前, 现场:主程序转向子程序之前,其所使用 的一些资源的状态(如标志位、 的一些资源的状态(如标志位、R/M等) 等 子程序与主程序分别编制, 子程序与主程序分别编制,通常会导致使 用的资源发生冲突而影响主程序在调用子 程序之后的正确执行 方法: 方法:利用堆栈
在主程序中进行 在子程序中进行
入口参数(输入参数):主程序提供给子 入口参数(输入参数):主程序提供给子 ): 程序 出口参数(输出参数): ):子程序返回给主 出口参数(输出参数):子程序返回给主 程序 参数的形式: 参数的形式:
数据本身(传值) ① 数据本身(传值) 数据的地址(传址) ② 数据的地址(传址)
传递的方法: 传递的方法:
一、子程序指令—返回指令 子程序指令
根据段内和段间、有无参数,分成 种类型 根据段内和段间、有无参数,分成4种类型
RET RET i16 RET RET i16
;无参数段内返回 ;有参数段内返回 ;无参数段间返回 ;有参数段间返回
需要弹出CALL指令压入堆栈的返回地址 指令压入堆栈的返回地址 需要弹出
CALL指令需要保存返回地址: 指令需要保存返回地址: 指令需要保存返回地址
段内调用——入栈偏移地址 入栈偏移地址IP 段内调用 入栈偏移地址 SP←SP-2,SS:[SP]←IP - , 段间调用——入栈偏移地址 和段地址 入栈偏移地址IP和段地址 段间调用 入栈偏移地址 和段地址CS SP←SP-2,SS:[SP]←IP - , SP←SP-2,SS:[SP]←CS - ,
相关文档
最新文档