汇编语言第六章
《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 课件 第六章 汇编语言
;将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_汇编语言程序设计基础
汇编程序框架例程
;程序说明注释 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 ┆
现代编译原理--第六章(中间树IRTree含源码)
现代编译原理--第六章(中间树IRTree含源码)这⼀章,就虎书⽽⾔,理论知识点是及其少的,就介绍了为什么要有⼀个中间表⽰树。
看下⾯这张图就能理解为什么了。
由以上可以知道,中间表达式树可以看成是⼀种简化过的汇编语⾔组成的树。
在这个阶段,我们已经抛弃了所有的变量名称和函数名称,使⽤标号以及变量以及临时变量(temp_newtemp)来代替来代替。
,⽽且所有的变量都存储在frame中,也就是说,我们是使⽤frame 来分割代码的,⼀个frame就代表了⼀个函数。
这章的代码量却是挺多的。
在写代码之前,如果不懂整个代码的布局,是很难了解书上那写代码是对应那些功能,以及书上没有给出的代码,我应该这么完善。
那么,我就我⾃⼰的理解来说⼀下到⽬前为⽌(翻译成中间表⽰树以后,编译器的前端就算基本完成了),整个代码的布局是什么样。
⾸先我们从外部读取tiger语⾔编写的源代码,经过由flex和bison⽣成的lex.yy.cpp tiger.tab.cpp tiger.tab.h的处理(词法分析,语法分析),⽣成了抽象语法树,这个语法树的数据结构是在absyn,table,symbol这些⽂件中定义的。
然后我们要抽象语法树转化为中间表⽰树,这个转化过程都是由 semant ⽂件中的函数完成(语义分析)。
semant主要完成了两个任务:对类型检测(类型检测)以及⽣成中间表达树(中间表达树)。
类型检测过程中使⽤到了evn,table,symbol,type中定义的⼀些东西。
⽽转化为中间表⽰树使⽤了translate⽂件中的函数,之所以使⽤这translate⽂件,是为了将树的具体构建过程和语义分析过程分离,这样如果想要⽤另⼀种⽅式表⽰中间表⽰树,可以不动原来semant的代码。
因为在semant定义的函数只能看到以Tr_开头的函数,⽽看不到关于树的任何信息。
⼀棵中间表⽰树是由frame(F 开头),tree(T开头)两部⽂件分组成的,并且这两部分只被translate使⽤。
汇编语言程序设计第二版
汇编语言程序设计第二版汇编语言是一种低级编程语言,它使用助记符来表示机器指令,允许程序员直接控制硬件。
汇编语言程序设计第二版是针对那些希望深入理解计算机系统底层工作机制的程序员和计算机科学学生编写的教材。
本书在第一版的基础上进行了更新和扩充,以适应现代计算机体系结构和编程实践的发展。
第一章:汇编语言基础本章介绍了汇编语言的基本概念,包括指令集、寄存器、内存寻址方式以及指令的格式和操作。
通过实例代码,读者可以初步了解如何使用汇编语言编写简单的程序。
第二章:数据表示和运算数据在计算机中的表示是程序设计的基础。
本章详细讨论了不同数据类型(如整数、浮点数和字符)在汇编语言中的表示方法,以及基本的算术和逻辑运算。
第三章:程序控制结构程序控制结构是程序设计中的重要组成部分。
本章讲解了条件语句、循环、跳转等控制结构在汇编语言中的实现方式,并通过实际例子展示了如何使用这些结构来编写更复杂的程序。
第四章:子程序和参数传递子程序是程序设计中常用的模块化技术。
本章介绍了如何在汇编语言中定义和调用子程序,以及参数传递的机制。
此外,还讨论了堆栈的使用和调用约定。
第五章:输入输出和中断处理现代计算机系统通常需要与外部设备交互。
本章讲解了汇编语言中实现输入输出的方法,包括直接内存访问(DMA)和中断驱动的I/O。
同时,介绍了中断服务程序的编写。
第六章:高级汇编技术随着计算机技术的发展,汇编语言也引入了一些高级技术,如宏定义、条件汇编和模块化编程。
本章对这些高级技术进行了深入的探讨,并提供了相应的编程实例。
第七章:系统级编程系统级编程涉及到操作系统的底层接口。
本章介绍了如何在汇编语言中实现系统调用,以及如何处理进程和线程的创建和管理。
第八章:性能优化性能是程序设计中的一个重要考虑因素。
本章讨论了汇编语言程序的性能优化技巧,包括指令选择、循环展开和流水线优化等。
第九章:安全性和可维护性随着软件安全和可维护性的重要性日益增加,本章讨论了在汇编语言编程中如何实现代码的安全性和可维护性,包括错误处理、异常处理和代码审查。
汇编语言程序设计第四版
汇编语言程序设计第四版汇编语言是一种低级编程语言,它允许程序员直接使用机器指令来编写程序。
由于其与硬件的紧密关联,汇编语言通常用于对性能要求极高的系统编程、嵌入式系统开发以及操作系统内核编写等场景。
《汇编语言程序设计》第四版作为该领域的教材,不仅更新了内容以适应最新的硬件发展,还增加了一些新的编程技术和实践。
第一章:汇编语言概述本章介绍了汇编语言的基本概念,包括它的定义、特点以及与其他编程语言的比较。
同时,阐述了汇编语言在现代计算机系统中的重要性和应用领域。
第二章:计算机系统基础在深入学习汇编语言之前,了解计算机系统的工作原理是非常必要的。
本章详细介绍了计算机的硬件组成、指令执行过程以及内存管理等基础知识。
第三章:汇编语言的语法和指令集这一章是汇编语言编程的核心,涵盖了汇编语言的基本语法规则、指令集以及操作数的使用。
通过本章的学习,读者将能够理解汇编指令的结构,并开始编写简单的汇编程序。
第四章:汇编程序的编写与调试本章介绍了如何使用汇编器将汇编语言代码转换为机器代码,以及如何使用调试工具来测试和调试汇编程序。
此外,还讨论了程序的优化技巧,帮助读者提高程序的执行效率。
第五章:高级汇编语言技术随着硬件技术的发展,汇编语言也在不断进步。
本章介绍了一些高级汇编语言技术,如宏指令、条件汇编和重复汇编等,这些技术可以显著提高编程的灵活性和效率。
第六章:输入输出和中断处理在计算机系统中,输入输出操作和中断处理是不可或缺的。
本章讲解了如何使用汇编语言来控制硬件设备,实现数据的输入输出,以及处理各种中断事件。
第七章:汇编语言在操作系统中的应用操作系统是计算机系统中最为关键的软件之一,而汇编语言在操作系统的开发中扮演着重要角色。
本章探讨了操作系统中的一些关键组件,如进程调度、内存管理和文件系统等,并展示了如何使用汇编语言来实现这些功能。
第八章:汇编语言在嵌入式系统中的应用随着嵌入式系统的普及,汇编语言在这一领域的应用也越来越广泛。
《汇编语言》作业答案
3545233.doc 制作:江家宝《IBM—PC汇编语言程序设计》课后作业参考答案目录第一章:基础知识 ........................................................................................ 2第二章:80×86计算机组织......................................................................... 2第三章:80×86的指令系统和寻址方式..................................................... 3第四章:汇编语言程序格式........................................................................ 7第五章:循环与分支程序设计.................................................................... 9第六章:子程序结构 ................................................................................ 12第七章:高级汇编语言技术.................................................................... 20第八章:输入输出程序设计.................................................................... 22第九章:BIOS和DOS中断 (23)3545233.doc 制作:江家宝第一章:基础知识1.1、用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(3) 4095 答:(3) 4095 =1111 1111 1111B=FFFH1.2、将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 答:(1) 10 1101B=2DH=451.3、将下列十六进制数转换为二进制数和十进制数:(4) 1234 答:(4) 1234H=1 0010 0011 0100B=46601.4、完成下列十六进制数的运算,并转换为十进制数进行校核:(3) ABCD-FE 答:(3) ABCD-FEH=AACFH=437271.5、下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
汇编语言(王爽)第六章检测点与实验5
汇编语⾔(王爽)第六章检测点与实验5检测点6.1(1)依次⽤内存0:0~15单元中的内容改写程序中的数据,补全程序:assume cs:codesgcode segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hstart:mov ax,0mov ds,axmov bx,0mov cx,8s:mov ax,[bx]mov cs:[bx],ax ;确定⽬标区域段地址和偏移地址add bx,2loop smov ax,4c00hint 21hcodesg endsend start(2)程序实现依次⽤0:0~15单元的内容改写程序中数据,数据传送⽤栈来进⾏。
栈空间设置在程序内,补全程序:assume cs:codesgcode segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdw 0,0,0,0,0,0,0,0,0,0;10个字空间作为栈start:mov ax,cs ;设置栈的段地址mov ss,axmov sp,1ah ;cs:0~cs:f为原始数据空间,cs:10~cs:19为栈空间,初始为空,栈顶指向下⼀单元mov ax,0mov ds,axmov bx,0mov cx,8s:push [bx] ;先把0:0处的字单元内容⼊栈pop cs:[bx] ;再把栈顶内容出栈放⼊程序数据段中add bx,2loop smov ax,4c00hint 21hcodesg endsend start实验5 编写、调试具有多个段的程序<程序加载后,ds:0~ff为PSP区域,(ds+10H):0为整个程序的⼊⼝,如程序依序设置有data\stack\code3个数据段区域,其中设data和stack段各⾃为16个字节,那么程序加载后(还未运⾏前):(ds+10h)则为data的⼊⼝段地址;(ds+10h+1)为stack的⼊⼝段地址;(ds+10h+2)为code的⼊⼝段地址;>1、编译连接下⾯程序,⽤debug加载、跟踪,回答问题。
汇编语言第六章
三.中断向量表
3. 设置或取出中断向量指令 (1) 设置中断向量指令 功能:把由AL指定的中断类型的中断向量DS:DX放入中
断向量表中。
(AH)= 25H
(AL)= 中断类型号
DS:DX = 中断向量 INT 21H
三.中断向量表
(2) 取出中断向量指令
功能:把AL中指定的中断类型的中断向量从中断
一、 WIN32编程基础
(2) 循环控制伪指令
格式:.WHILE 条件表达式 循环体 .ENDW 格式:.REPEAT 循环体 .UNTIL 条件表达式 格式:.CONTINUE 功能:终止本次循环, 开始下一次循环 格式:.BREAK 功能:退出当前循环
功能:实现循环结构
一、 WIN32编程基础
内中断的处理特点: ①中断类型号一般在指令中; ② 不受中断允许标志位IF的影响。
二、 中断源
2. 外中断 由外设控制器、协处理器等CPU以外的事件引起的中断, 称为外中断。 外中断的处理特点: ① 中断类型号由8259A提供,或由自制电路来提供;
② 受中断允许标志位IF的影响(IF=1,响应中断)。
个字节。
三.中断向量表
如:INT 4AH
中断向量地址 = 4AH*4 = 128H
DEBUG执行后, 用D命令查看: ―D0:0↙ … 执行INT 4AH时: IP=1805H CS=F000H IP F000: 1805 中断处理
0:128H
0:129H
05 18
0:12AH
0:12BH
00
F0 …
外设
二、 外设与主机传送的接口与信息
接口的组成:设备状态寄存器、设备控制寄存 器、数据寄存器。 I/O端口的地址空间:允许设置64K个8位端口 或32K个16位端口。 如:40H~43H时钟/定时器,60H~63H为 8255通讯芯片的接口。
IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大...
IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美明,温冬蝉著)第六章答案2006-11-04 22:022、答:(1) NAME1 NAMELIST < >(2) MOV AX,DATA ;假设结构变量NAME1定义在数据段DATA中MOV DS,AXMOV ES,AX;MOV AH,10LEA DX,NAME1INT 21H;MOV CL,NAME1.ACTLENMOV CH,0LEA SI,INLEA DI,DISPFILECLDREP MOVSB6、答:SKIPLINES PROC NEARPUSH CXPUSH DXMOV CX,AXNEXT:MOV AH,2MOV DL,0AHINT 21HMOV AH,2MOV DL,0DHINT 21HLOOP NEXTPOP DXPOP CXRETSKIPLINES ENDP7、答:dseg segmentnum dw 76,69,84,90,73,88,99,63,100,80n dw 10s6 dw 0s7 dw 0s8 dw 0s9 dw 0dseg endscode segmentmain proc farassume cs:code, ds:dseg start:push dssub ax, axpush axmov ax, dsegmov ds, axcall sub1retmain endpsub1 proc nearpush axpush bxpush cxpush simov si, 0mov cx, nnext:mov ax, num[si]mov bx, 10div blmov bl, alcbwsub bx, 6sal bx, 1inc s6[bx]add si,2loop nextpop sipop cxpop bxpop axretsub1 endpend start8、答:data segmentmaxlen db 40n db ?table db 40 dup (?)char db 'a' ; 查找字符’a’evenaddr dw 3 dup (?)data endscode segmentassume cs:code, ds:datamain proc farstart:push dsmov ax, 0push axmov ax, datamov ds, axlea dx, maxlenmov ah, 0ahint 21h ; 从键盘接收字符串mov addr, offset tablemov addr+2, offset nmov addr+4, offset charmov bx, offset addr ; 通过地址表传送变量地址call count ; 计算CHAR的出现次数call display ; 显示retmain endpcount proc near ; count子程序push sipush dipush axpush cxmov si, [bx+2]mov cl, byte ptr[si]mov ch, 0mov si, [bx+4]mov al, byte ptr[si]mov bx, 0again:cmp al, byte ptr[di]jne l1inc bxl1: inc diloop againpop cxpop axpop dipop siretcount endpdisplay proc near ; display子程序call crlf ; 显示回车和换行mov dl, charmov ah, 2int 21hmov dl, 20hmov ah, 2int 21hmov al, bland al, 0fhadd al, 30hcmp al, 3ahjl printadd al, 7print:mov dl, alint 21hcall crlfretdisplay endpcrlf proc near ; crlf子程序mov dl, 0dhmov ah, 2int 21hmov dl, 0ahmov ah, 2int 21hretcrlf endpcode endsend start。
大学汇编语言基础试题4
汇编语言基础试题4第六章数据传送指令一、程序分析题(阅读程序段后给出其运行结果)设(SP)=80H,(BX)=0FFH;(AX)=1PUSH BXADD BX,AXXOR BX,AXPUSH BXPOP CX上述程序段运行后,(SP)=7EH,(CX)=0101H二、单项选择题(1.堆栈指针SP的内容是(B)A.栈顶单元内容B.栈顶单元地址C.栈底单元内容D.栈底单元地址2.VAR是数据段中定义的变量,指令MOV AX,VAR 源操作数的寻址方式是(B)A.立即寻址B.直接寻址C.相对寻址D.寄存器寻址3.已知(DS)=3000H,(SS)=2500H,(BX)=0100H,(BP)=0040H,指令MOV AX,DS:[BP]源操作数的物理地址是(B)。
A.25040HB.30040HC.25100HD.55040H4.下列传送指令中,有语法错误的指令是(A)。
A.MOV CS,AXB.MOV DS,AXC.MOV ES,AXD.MOV SS,AX5.与MOV BX,OFFSET VAR指令完全等效的指令是(D)。
A.MOV BX,VARB.LDS BX,VARC.LES BX,VARD.LEA BX,VAR6.MOV SP,3210HPUSH AX执行上述指令序理后,SP寄存器的值是(B)。
A.3211HB.320EHC.320FHD.3212H7.执行指令PUCH CX后堆栈指针SP自动(C)A.+1B.不操作C.-2D.-1三、简答题已知数据段定义如下:DATA SEGMENTVA DB 10HVB DW 3*20MSG DB ‘HELLO!’COUNT EQU 15BUF DW COUNT DUP(5,3 DUP(1,2),0)DATA ENDS问题:(1)执行MOV BX,0FFSET VA后,(BX)=(2)执行MOV CX,TYPE BUF后,(CX)=(3)用一条指令将字母‘O’取到AL中.(4)经汇编后,BUF占有的存储空间是字节答:(1)0(2)2(3)MOV AL, MSG+4(4)240四、执行下列指令语句,把执行结果填在空格中已知(SS)=3000H(SP)=200H(AX)=785AH (BX)=1234H,先执行PUSH AX,再执行PUSH BX,此时(SS)= ()(SP)= ()数12H存放的物理地址是()答:(SS)= (3000H)(SP)= (1FCH)数12H存放的物理地址是(1FDH)第七章算术运算程序一、单项选择题1.十进制数运算调整指令AAS可以紧跟在(A)之后:A.SBBB.DECC.CMPD.NEG2.除法调整指令AAD是对(C)调整:A.AX中组合的十进制被除数B.AL中组合的十进制的商数C.AX中未组合的十进制被除数D.AL中未组合的十进制的商数3.在多字节加减运算时,特别要注意标志(B)对运算的影响:A.AFB.CFC.SFD.OF4.设(DS)=8260H(DI)=3500H,指令DEC WORD PTR[DI]操作数的物理地址是(B)A.11760HB.85B00HC.86100HD.以上都不时5.指令ADD ES:[DI],AX和存放在(B)A.寄存器B.附加段C.堆栈段D.代码段6.设VAR是数据段中定义的字节变量,指令MUL VAR乘积存放在(A)A.AXB.BXC.CXD.DX7.设(DH)=20H,执行NEG DH指令后,正确的结果是(C)A.(DH)=20HCF=1B.(DH)=20HCF=0C.(DH)=0E0HCF=0D.(DH)=0E0HCF=18.设DS=8225H,DI=3942H,指令NEG BYTE PTR [DI]操作数的物理地址是(A)A.85B92HB.86192HC.BB690HD.12169H9.执行INC指令除对于SF.ZF有影响外,还要影响的标志位是(A)A.OF,AF,PFB.OF,AF,CFC.OF,PF,CFD.AF,PF,CF10.设DH=10H,执行NEG DH指令后,正确的结果是(D)A.DH=10HCF=1B.DH=10HCF=0C.DH=10HCF=0D.DH=0F0H11.执行除法指令后,影响的标志位是(D)A.CF,OFB.SF,ZFC.CF,OF,SFD.AF,CF,OF,PF,SF,ZF都不确定12.执行下面指令序列后,结果是(A)MOV AL,82HCBWA.AX=0FF82HB.AX=8082HC.AX=0082HD.AX=0F82H二、判断题(正确的画√,错误的画×)1.指令AAA必须紧跟在加法指令之后使用。
6 汇编语言高级编程
说明:如使用LOCAL伪指令,则该伪指令必须是宏定义中的第一条 指令。
18
例题6.7 定义取绝对值的宏指令。
ABS MACRO OPS
LOCAL NEXT ;定义NEXT为形参
CMP OPS,0
JGE NEXT
NEG OPS
NEXT: MOV AX,OPS ;若无LOCAL说明,宏展开后将出现标号重名
6
6.1.2 宏调用与宏展开
宏调用的格式为: <宏名> [<实参表>]
说明: ①宏名为已定义过的宏,即必须先定义、后调用。 ②实参表中的参数将一一对应替换宏定义中形参表中的参
数。两处的参数个数可以不同。若实参个数多于形式参数 个数,则多余的实参忽略;若实参个数少于形式参数个数, 则多余的形式参数用零或空格代替。 ③汇编程序在汇编源程序时,若遇到宏调用,则用调用所 提供的实参数替代相应的形参数,并把宏体中的指令嵌入 到源程序中。这种嵌入操作称为宏展开。
宏名可以与指令名或伪指令名相同,且宏名的优先级别高, 此时与其同名的指令和伪指令将失去作用。为了恢复指令 助记符和伪指令助记符的功能,就必须将宏取消,可用 PURGE伪指令实现此功能。其格式为: PURGE <宏名> [, <宏名>…]
作用:取消已经定义的宏,选用任选项时可同时取消多个宏。 例题6.8 取消例6.4和例6.7定义的宏指令
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
+
mov ah, 09h;宏调用Prompt String1的宏展开
+
lea dx, String1
王爽汇编语言第二版全部
王爽汇编语言第二版全部汇编语言是计算机体系结构的重要组成部分,它是一种低级的计算机语言,用于编写和控制计算机程序。
王爽的《汇编语言》第二版是学习汇编语言的经典教材,全面介绍了汇编语言的基本概念、语法、指令集等内容。
本文将对王爽汇编语言第二版的全部内容进行汇总和归纳,以便读者更好地理解和掌握汇编语言。
第一章:计算机系统概述王爽的《汇编语言》第二版从计算机系统概述开始,为读者介绍了计算机的发展历程、计算机的基本组成以及计算机的工作原理。
本章包括了计算机硬件、计算机软件、计算机系统结构和指令执行的基本概念。
第二章:汇编语言的基本概念在本章中,王爽详细介绍了汇编语言的基本概念,包括机器语言、汇编语言、汇编过程和编程方法。
他还介绍了汇编程序的基本结构、程序设计的基本原则以及一些常用的汇编指令。
第三章:x86处理器本章主要介绍了x86处理器的基本特征、寄存器、指令格式和地址寻址方式。
王爽通过详细解释和示例代码让读者了解x86处理器的内部结构和工作原理。
第四章:汇编语言程序设计基础在这一章节中,王爽介绍了汇编语言程序设计的基础知识,包括数据的表示和操作、常用的数据转移和运算指令、程序的循环和分支控制等内容。
通过实际例子和练习,读者可以掌握汇编语言程序设计的基本技巧和方法。
第五章:中断和异常处理该章节详细讲解了中断和异常处理的概念和原理。
王爽介绍了中断和异常的分类、中断向量表的结构和使用方法,以及中断处理程序的编写和调用。
第六章:8086汇编语言程序的转移与操作本章主要介绍了8086汇编语言程序的转移和操作指令。
王爽通过示例和实践让读者了解和掌握如何编写和调试8086汇编程序。
第七章:8086汇编语言程序的子程序设计在这一章中,王爽详细介绍了8086汇编语言中子程序的概念、设计和调用方法。
他还介绍了如何使用栈来传递参数和保存返回地址,以及如何处理函数的局部变量。
第八章:输入/输出编程该章节涵盖了输入/输出编程的基本知识和技巧。
【汇编语言】32位指令及其编程(可编辑)
封面第六章 32位指令及其编程第六章32位指令及其编程概述 6.1 32位指令运行环境6.2 32位扩展指令 6.3 32位指令的程序设计 6.4 32位新增指令 6.5 用汇编语言编写 32位WINDOWS应用程序概述1 概述 32位指令系统以80386 CPU 为基础,其指令集可分为整数指令集(16位整数指令集、32位整数指令集)和浮点指令集,16位整数指令集全兼容8086 CPU。
1996年,Intel推出MMX Pentium,首次增加了MMX (多媒体扩展)指令集,提高了CPU对多媒体数据的处理能力。
1999年,Intel推出Pentium Ⅲ,增加了SSE指令集(数据流SIMD扩展指令,SIMD为MMX指令集的关键技术,意为“单指令流多数据流”)。
2000年,Intel推出Pentium4,又增加SSE2指令集,增强了处理器对3-D图象、视频编码解码、语音识别等数据的处理能力。
概述2 本章主要介绍80386的32位整数指令集,及其汇编语言程序设计,对386以后推出的CPU新增指令(0>.、 .、.)简单介绍。
6.5 节简单介绍如何使用汇编语言编写WINDOWS应用程序。
本章应重点掌握: 32位编程环境 32位寻址方式 32位指令编程方法 6.1 32位指令运行环境 6.1 32位指令运行环境补充.386的工作方式及16位段和32位段 . 寄存器组 . 寻址方式 .机器代码格式 386的工作方式:实方式补充 386的工作方式实地址方式:实方式(Real Mode)与8086/80186的工作方式以及80286的实地址方式具有相同的基本结构。
不使用386的优先级分级制,所有程序(DOS和应用程序都工作在0级(特权级)。
32位x86 CPU只能寻址1MB物理存储器空间,分段最大64KB,采用16位逻辑段。
32位x86 CPU可以使用32位寄存器和32位操作数,也可以采用32位寻址方式。
汇编语言(王爽)学习记录_第六章
汇编语⾔(王爽)学习记录_第六章第六章包含多个段的程序6.1 在代码段中使⽤数据考虑计算以下8个数据的和结果存⼊ax中。
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h思考如果⼀个⼀个相加会很⿇烦,考虑⽤循环:CODES SEGMENTASSUME CS:CODESdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hmov bx,0mov ax,0mov cx,8s: add ax,cs:[bx]add bx,2loop sMOV AH,4CHINT 21HCODES ENDSENDdw(define word)⽤于定义字型数据,定义在此代码段的开始地址。
怎么让cs:ip指向mov bx ,0呢?观察debug中cs:ip指向。
⽤伪指令start表⽰cpu从这⾥开始执⾏代码观察cs:ip指向CODES SEGMENTASSUME CS:CODESdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hSTART:mov bx,0mov ax,0mov cx,8s: add ax,cs:[bx]add bx,2loop sMOV AH,4CHINT 21HCODES ENDSEND START6.2 在代码段中使⽤栈程序:assume cs:codesgcodesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0start: mov ax,cs mov ss,ax mov sp,30h mov cx,8 s: push cs:[bx] add bx,2 loop s mov bx,0 mov cx,8 s1: pop cs:[bx] add bx,2 loop s1 mov ax,4c00h int 21hcodesg endsend startsp指向30h(48)是因为前16字节是指定的8个数据(0~15地址),后32个字节是16个字型数据的栈(16~47地址)ss:sp指向栈顶48地址检测点6.1(1): 添加代码:mov cs:[bx],ax(2): cs、24h(0~15是给定的数据,16~35是栈段,栈指针在36也就是24h)、pop cs:[bx]6.3 将数据、代码、栈放⼊不同的段如果⼀个程序需要处理的数据很多上⾯的程序就不合适(⼀个段只能⼩于64kb)需要把数据,代码,栈分开例如程序6.4:DATAS SEGMENTdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hDATAS ENDSSTACKS SEGMENTdw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0STACKS ENDSCODES SEGMENTSTART:MOV AX,STACKSMOV ss,AXMOV SP,20HMOV AX, DATASMOV DS,AXMOV BX,0MOV CX,8S: PUSH [BX]ADD BX,2LOOP SMOV BX,0MOV CX,8S1: POP [BX]ADD BX,2LOOP S1MOV AH,4CHINT 21HCODES ENDSEND START实验5 编写、调试具有多个段的程序(1)在调试的时候肝了⼀会⼉,发现程序⽤debug打开后必须执⾏到 mov ds ,ax才能查看到数据段的数据;1.2.执⾏前:执⾏后:3.data段地址:X-2 stack段地址:X-1(2)1.2.cs=0770h ss=076fh ds=076eh3.data段地址:x-2 stack段地址:x-1(3)1.2.cs=076eh ss=0772h ds=0771h3.data段地址:x-2 stack段地址:x-1(4)只有3能正确执⾏,1和2不指明程序⼊⼝的话会把前⾯定义的数据段栈段当作指令执⾏,逻辑上是错误的。
汇编语言基础手册
汇编语言基础手册第一章概述汇编语言是一种低级语言,用于直接操作计算机硬件。
本手册将介绍汇编语言的基础知识和常用指令,帮助读者快速入门汇编语言编程。
第二章寄存器寄存器是汇编语言中最基本的数据存储单元,用于存储和处理数据。
本章将介绍汇编语言中常用的通用寄存器、段寄存器和特殊寄存器,并讲解它们的用途和操作方法。
第三章指令汇编语言的指令是用于完成各种操作的命令,例如数据传送、运算和控制等。
本章将详细介绍常用的数据传送指令、算术指令和逻辑指令,并提供相关的示例代码,帮助读者理解和应用。
第四章内存操作汇编语言中,内存是用于存储数据和指令的重要部分。
本章将介绍如何使用汇编语言进行内存的读取、写入和操作,并提供实际案例来演示内存操作的应用。
第五章程序控制程序控制是汇编语言中的核心内容,用于控制程序的流程和执行顺序。
本章将详细介绍条件转移、循环和子程序等程序控制结构,并提供实例代码以及相应的调试技巧。
第六章 I/O操作汇编语言可以通过输入和输出操作与外部设备进行通信。
本章将介绍如何使用汇编语言进行键盘输入和屏幕输出,并提供相应的示例代码和调试方法,使读者能够灵活运用I/O操作。
第七章常见问题与调试技巧本章将列举一些常见的汇编语言编程问题,并给出相应的解决方案和调试技巧。
读者可以通过学习这些问题和技巧,提高自己的编程能力和问题排除能力。
第八章汇编语言应用本章将介绍汇编语言在实际应用中的一些常见场景,包括操作系统开发、驱动程序编写和嵌入式系统设计等。
读者可以了解到汇编语言的实际用途,并借鉴相关案例来进行实际项目开发。
结语汇编语言是一门重要而底层的编程语言,对于理解计算机系统和进行系统级编程具有重要意义。
通过学习本手册,读者可以掌握汇编语言的基础知识和编程技巧,为进一步深入学习和应用打下坚实基础。
注:本手册基于x86架构进行讲解,部分指令和操作可能在其他架构中有所不同。
读者在实际应用中应结合具体环境和需求进行相应调整和学习。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
INT 21H
MOV AH,4CH INT 21H
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
;大小写转换子程序 STRDTX PUSH PUSH PUSH PROC NEAR AX CX SI EXIT:
JA
NEXT1
ADD AL,20H MOV [SI],AL
NEXT1:INC SI
例6-3:将在BUFFER为首地址的缓冲区的一个字符串中的所 有大写字母都转换成小写字母,并在屏幕显示出来。 程序清单如下: DATA SEGMENT
ORG STRING STRLEN DATA ENDS 200H DB ‘ABsDFAIViop’ EQU $-STRING ;字符串长度
第 6章
CODE
JMP NEXT POP SI
NEXT:MOV AL,[SI] CMP JZ CMP JB CMP CX,0 EXIT AL,‘A’ NEXT1 AL,‘Z’
POP CX
POP AX RET
STRDTX
CODE END
ENDP
ENDS START
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
长治医学院计算机中心
第 6章
DATA SEGMENT BLOCK1 DB LENS EQU DB 45H,0AH,83H,2EH,93H,12H $- BLOCK1 LENS DUP(?)
BLOCK2
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA MOV DS,AX
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
MBTADD
PROC
PUSH SI PUSH DI PUSH BX PUSH AX PUSH CX CLC
《IBM PC 80X86汇编语言程序设计》
保护现场
;CF=0
长治医学院计算机中心
第 6章
NEXT: MOV AL,[SI]
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
2、子程序的定义
子程序的定义是由过程定义伪指令PROC和ENDP 来完成的。其格式如下:
过程名
PROC [NEAR/FAR]
┆
过程名
ENDP
其中PROC表示过程定义开始,ENDP表示过程定 义结束。过程名是过程入口地址的符号表示。 一般过程名同标号一样,具有三种属性,即段 属性、偏移地址属性以及类型属性。
返回指令 格式: RET
功能:返回堆栈中存放的断点,并返 回到CALL指令的后续指令继续执行。
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
二、子程序的结构形式
子程序设计考虑四部分: 保护现场(保存寄存器原有的内容)、处理 部分、恢复现场(恢复寄存器原有的内容)、 子程序的返回。 “现场”:子程序执行中要用到的寄存器。 保护现场:一般通过压栈实现(进入子程序前)
长治医学院计算机中心
第 6章
┆ POP DX POP CX POP BX ;恢复现场 POP AX RET ;返回断点处 PROC ENDP
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
三、子程序的设计和调用举例
例6-2 多字节二进制数加法子程序 ;子程序名:MBTADD ;功能:两个多字节二进制相加 ;入口参数:SI,DI分别存放两个数 的首地址,BX存放和的首地址,CX存 放多字节数的长度。 ;出口参数:BX存放和的首地址
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
1、子程序的概念和特点 子程序:把在程序中多次出现,具有独立功能 的程序段写成程序模块,该模块可被多次调用, 称之为子程序。 特点:①可重复使用(调用)
②具有通用性(可通过入口参数实现)
③可浮动性(存放位置灵活)
④可递归性和可重入性
《IBM PC 80X86汇编语言程序设计》
CODE ENDS
END
START
21H
长治医学院计算机中心
第 6章
②段内间接调用 格式:CALL CALL DST 或 WORD PTR DST
(DST为寄存器或字存储器) 功能:断点入栈,转子程序执行。 SP←SP-2 例: CALL CALL (SP)←IP BX WORD PTR [SI]
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
例:段内直接调用,显示字符P CODE SEGMENT
ASSUME CS:CODE
START:CALL DISP MOV AH,4CH INT DISP PROC 21H DISP ENDP
MOV DL,’P’
MOV AH,2 INT RET
长治医学院计算机中心
IP←(EA)
《IBM PC 80X86汇编语言程序设计》
第 6章
③段间直接调用
格式:CALL FAR PTR DST(DST为子程序名)
功能:段点(CS和IP)入栈,并转到子程序处执行。 SP←SP-2 SP←SP-2 (SP)←CS (SP)←IP
IP←子程序入口地址的偏移地址
CS←子程序入口地址的段地址
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
例: 段内间接调用,显示一个字符P CODE1 SEGMENT DISP PROC FAR MOV DL,’P’ MOV AH,2
ASSUME CS:CODE1 START:CALL DISP
MOV AH,4CH
出口参数:CX
MCDST PROC PUSH AX PUSH BX PUSH DX
MOV CX,BX
POP DX POP BX POP AX RET
AGAIN:XOR DX,DX
DIV BX AND DX,DX JZ EXIT
《IBM PC 80X86汇编语言程序设计》
MCDST
ENDP
长治医学院计算机中心
第 6章
第六章 子程序设计
一、子程序的定义 二、子程序的结构形式
三、子程序的设计和调用
四、子程序的参数传递方法
五、子程序的嵌套和递归调用
六、子程序的设计举例
七、多模块程序设计
八、汇编语言和高级语言的混合编程
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
一、子程序的定义
1、子程序的概念和特点 2、子程序的定义 3、子程序的调用和返回
START:
SEGMENT
ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX
《IBM PC 80X86汇编语言程序设计》
;设置数据段
长治医学院计算机中心
第 6章
MOV SI,OFFSET STRING;取串首地址赋给SI MOV CX,STRLEN ;串长送CX CALL STRDTX;调用子程序 MOV DX,OFFSET STRING;输出转换后的字符串 MOV AH,9
PUSH
AX
NEXT: MOV AL, BLOCK1[SI] MOV BLOCK2[DI], AL INC SI
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
3、通过堆栈传递参数(P155)
主程序的入口参数用堆栈保存,不占用 存储单元,在子程序中弹出入口参数,执行 完子程序后,释放堆栈空间。
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
XOR XOR
SI,SI DI,DI INC DI
MOV CX, LENS
CALL MOVSTOK MOV INT MOVSTOK AH,4CH 21H PROC NEAR
LOOP NEXT
POP AX RET MOVSTOK ENDP CODE END ENDS START
例6-8用堆栈传递参数,实现数据块传送。 (X_P155.ASM)
MOV CX, LENS
CALL MOVSTOK MOV INT MOVSTOK AH,4CH 21H PROC NEAR
INC DI
LOOP NEXT POP AX
RET
MOVSTOK ENDP CODE ENDS END START
PUSH
AX
NEXT: MOV AL,[SI]
MOV [DI],AL
INT 21H
INT
RET DISP ENDP CODE2
21H
CODE1 ENDS CODE2 SEGMENT
ENDS START
ASSUME CS:CODE2
END
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
④段间间接调用 例:CALL CALL DWORD PTR [BX] DWORD PTR ADDR
例6-5数据块传送子程序(X_P152.ASM)
分析: 入口参数:源操作块首地址、目的块首 地址和块长度。分别用SI、DI和ห้องสมุดไป่ตู้X来传 递参数。
《IBM PC 80X86汇编语言程序设计》
长治医学院计算机中心
第 6章
DATA SEGMENT
BLOCK1 DB LENS 45H,0AH,83H,2EH,93H,12H
入口参数:AX,BX 出口参数:CX 算法: (1)判断如M>N,转(2),否则交换M、N (2)M/N得到余数R (3)判断若R=0,则N为最大公约数,否则