《微机原理与接口技术》PPT电子课件教案- 第五章 汇编语言程序设计(1) .ppt_第1页
《微机原理与接口技术》PPT电子课件教案- 第五章 汇编语言程序设计(1) .ppt_第2页
《微机原理与接口技术》PPT电子课件教案- 第五章 汇编语言程序设计(1) .ppt_第3页
《微机原理与接口技术》PPT电子课件教案- 第五章 汇编语言程序设计(1) .ppt_第4页
《微机原理与接口技术》PPT电子课件教案- 第五章 汇编语言程序设计(1) .ppt_第5页
免费预览已结束,剩余37页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第五章 汇编语言程序设计 第一节 汇编语言程序结构 第二节 指示性语句 第三节 汇编语言程序举例 第四节 bios和dos功能调用 第五节 汇编语言程序设计,2,第一节 汇编语言程序结构 一、程序结构 二、语句结构,3,第一节 汇编语言程序结构 例一 程序: movs.asm 功能: 实现数据传送功能 数据段1 传送到 数据段2 目的: 学习程序结构,4,一、程序结构 程序由数条语句构成,每条语句占一行。 指令性语句(指令语句) 指示性语句(伪指令语句) 分段结构 程序按段编写, 与8086内存分段编址相对应。 每段由伪操作segment开始、由ends结束。 程序最后为end结束语句,后跟一启动地址。 启动地址指示程序开始执行的第一条语句。 程序中设有返回dos的功能。 使程序执行完后返回dos系统的命令接受状态。 程序中用到内存操作数时, 应按操作数的寻址方式,给相应的段寄存器赋值,;汇编语言程序结构例一 movs.asm ;实现数据传送功能 aa segment ;数据段1 str1 db hello! aa ends bb segment ;数据段2 str2 db 6 dup (?) bb ends cc segment ;代码段 assume cs:cc, ds:aa, es:bb start: cld mov ax , aa mov ds , ax lea si , str1 mov ax , seg str2 mov es , ax mov di ,offset str2 mov cx , 6 rep movsb mov ah , 4ch int 21h ;返回dos cc ends end start ;指示程序结束,5,汇编语言程序结构例二 程序: scans.asm (子程结构) 子程内容: 用二进制显示bx内容 功能: 实现 用二进制显示 中断向量表中(0:00:3ffh) 数据d0h的个数 目的: 了解程序可由多个段构成,6,7,二、语句结构,8,1. 名字项 据语句功能的不同, 名字项可用来表示: 段名、变量名、 标号、过程名以及常量名等。,data segment ; 数据段 var db ? data ends code segment ;代码段 assume cs:code,ds:data start: mov ax, data mov ds , ax mov var, cl mov ah , 4ch int 21h ;返回dos code ends end start,9,名字项用一个符号表示。 对符号的规定: 由字符az ,az ,09及符号、$、下划线_ 等组成, 最长31个字符,超出部分忽略。 不能用数字打头,以免与十六进制数相混。 不使用汇编程序中的保留字。 (如指令的助记符等) 对定义的符号不区分大小写。,10,2. 助记符项 助记符可以是指令、伪操作中的助记符。,对于指令,汇编程序将其翻译成机器语言指令。 mov ax, 100 b8 00 01,对于伪操作,汇编程序据其要求的功能进行处理。 data segment data与一段值对应 string db tsinghua string与一内存地址对应,11,3操作数项 操作数给出参与操作的数或数所在的地方。 操作数多于一个时,用逗号分开。 操作数可以是常数、寄存器、存储器操作数、 标号名、过程名或表达式等。,12,13,14,4注释项 由分号引出,用来说明语句或程序的功能。 汇编程序对分号后的内容不做处理。 作用: 注释程序,增强程序可读性。 可放在语句最前,暂时注释某语句,调试程序用。 例 、 ; mov ah, 2 ;显示提示信息 ; mov dl, a ; int 21h 、,15,第二节 指示性语句 / 第三节 汇编语言程序举例 一、程序开始和结束 二、段定义 三、变量定义 四、assume语句 汇编语言程序举例一 了解dos的返回,装入功能 五、表达式及表达式中的操作符 汇编语言程序例二 六、过程定义 (第五节程序设计介绍) 七、等值定义 (第五节程序设计介绍) 汇编语言程序例三 (第五节程序设计介绍),16,指示性语句与指令性语句: 指令性语句是用指令系统中的指令构成的语句。 例 mov ax, bx 指示性语句是指示汇编程序进行汇编的操作。 例 mov ax, 4 + 8 中的+ code segment 中的segment mov bx, offset string 中的offset 指示性语句与指令性语句区别,17,常用伪操作介绍 一、程序开始和结束 二、段定义 三、变量定义 四、assume语句 五、表达式中的操作符 六、过程定义 七、等值定义,18,一、模块定义和程序结束伪操作 1 . name 和 title 伪操作 格式 name 模块名 格式 title 模块名 在源程序开始可用 name 或 title 为模块命名, 模块名的作用是指示给连接程序进行连接用。 源程序中可无模块定义,此时源文件名作为模块名。,19,2. end伪操作 格式 end 启动地址 作用是指示源程序到此结束。 汇编程序对 end 之后的语句不进行处理。 程序中所有有效语句应放在 end 语句之前。 源程序中必须有 end 结束语句。 汇编程序对无 end 语句的源程序不进行处理, 只给出无 end 语句错误信息。 启动地址可是一个标号或过程名, 指示程序的入口。 程序装入内存后,系统跳转到入口处, 开始执行程序,20,二、段定义伪操作 格式 段名 segment 、 、 段名 ends 段定义由伪操作segment开始、ends结束。 其中: segment 和ends 必须成对出现, 且语句前必须有段名,段名必须相同。 segment和ends语句之间可以有指令和其他伪操作, 表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理 程序中可以定义多个段。 程序经汇编、连接及装入内存后,段名为一具体的段值。,21,三、变量定义伪操作 格式 变量名 类型助记符 操作数 ,操作数 , . 用来定义程序中所用的内存操作数。 其中 变量名指示内存操作数的地址(符号地址) 类型助记符指示内存操作数的类型(字节、字、双字等) 操作数指示内存操作数的内容 汇编程序将定义的操作数,按其类型分配内存单元数, 顺序存入变量名指向的内存单元中。 常用的类型助记符有: db 指示其后的操作数为字节类型 dw 指示其后的操作数为字类型 dd 指示其后的操作数为双字类型,22,例1: 定义赋初值的变量 data segment xx db 1, -1, 0fch yy dw 1, -1, 0fch zz dd 1,- 1, 0fch data ends,23,例2: 定义字符串变量( 只能用db定义 ) data segment str1 db tsinghua str2 db input: , 0dh , 0ah ,$ data ends,24,操作数可以是用常量、表达式和 ? 表示。 常量和表达式表示内存操作数的初始值, 其值应在其定义的类型范围内,否则汇编出错。 例 aa db 270 bb dw 80000 用 ? 表示不置初始值的内存操作数。 例 cc db ? 可用 dup 复制操作符定义相同的操作数,其格式为 重复次数 dup( 操作数) 例 ee db 3 dup ( 4 ) 等价于 ee db 4, 4, 4,25,四、assume伪操作 格式 assume 段寄存器:段名 , 段寄存器:段名, 其中 段寄存器为cs、ds、es、ss中的一个 段名为用伪操作segment定义过的段名 例 assume cs: cc , ds:aa assume 伪操作的作用 指示汇编程序指令中用到的标号、过程及变量所在的段。 其中 对标号、过程必须用 cs 段寄存器指示 对变量可用 cs、ds、es、ss 段寄存器指示,26,若未用assume语句指示指令中用到的标号、 过程和变量所在的段, 汇编程序将给出错误信息。 assume语句只起指示作用,并无实际的操作。 在程序中引用定义的变量做内存操作数时, 需按寻址方式用传送指令(如mov)给相应的段寄存器赋值。,27,例 用程序实现 1234h + 5678h,data segment value dw 1234h, 5678h result dw ? data ends code segment assume cs:code, ds:data start: mov ax, data ;给ds赋值 mov ds, ax mov ax, value ;取数 add ax, value+2 ;两数相加 mov result, ax ;保存结果 mov ah, 4ch ;返回dos int 21h code ends end start,28,汇编语言程序举例一,29,30,code segment assume cs: code start: . . . . code ends end start,mov cx , 8 ;显示字符个数为8 next: shl bl , 1 ;将显示位移至cf中 jc one ;cf=1? mov dl , 30h ;cf=0, 将0的ascii放在dl中 jmp exit one: mov dl , 31h ;cf=1, 将1的ascii放在dl中 exit: mov ah , 2 int 21h ;调用dos功能显示 dec cx ;循环次数减1 jnz next ;判断是否结束,31,调用dos系统的4ch 功能, 返回dos 方法: 在要返回dos 处,安排指令: mov ah, 4ch int 21h 执行完4ch的功能调用,即返回dos 。,例 code segment assume cs: code start: 、 ;程序主体部分 、 、 mov ah, 4ch ;返回dos int 21h code ends end start,32,code segment assume cs: code start: . . . . mov ah, 4ch ;返回dos int 21h code ends end start,mov cx , 8 ;显示字符个数为8 next: shl bl , 1 ;将显示位移至cf中 jc one ;cf=1? mov dl , 30h ;cf=0, 将0的ascii放在dl中 jmp exit one: mov dl , 31h ;cf=1, 将1的ascii放在dl中 exit: mov ah , 2 int 21h ;调用dos功能显示 dec cx ;循环次数减1 jnz next ;判断是否结束,mov bl, 53h ;设置一个测试53h,33,34,第二种dos返回方法,调用20h类型的中断程序 20h 中断程序的功能: 处理程序结束,返回系统。 调用20h中断程序是有条件的: 要求当前的cs应为程序段前缀在内存的段值,35,五、表达式及表达式中的操作符,表达式 由常量、标号、变量和一些操作符构成。 汇编程序对表达式进行运算后,得到一个确定的数值, 再把这个数值汇编到指令中。 据表达式所表示的内容,分数字表达式、地址表达式。 表达式是指令或伪操作的操作数; 表达式中的操作符由汇编程序完成 例 mov ax, 12 - 4 ;mov ax, 8 ;数字表达式 lea bx, string + 4 ;地址表达式,36,表达式中的操作符 有以下几类: 1. 算术运算符 ( +、-、*、/、mod ) 2. 逻辑运算符 ( and、or、not、xor ) 3. 关系运算符 ( eq、ne、gt、ge、lt、le ) 真:ffffh; 假: 0 4. 数值返回操作符 ( seg、offset ) 5. 类型操作 ( ptr ) 6. 地址记数器( $ ),37,例: 1. 算术运算符 ( +、-、*、/、mod(取余数) ) mov ax, 6 * 8 mov ax, 48 2. 逻辑运算符 (and、or、not、xor) mov ax, 80h or 70h mov ax,0f0h 3. 关系运算符 ( eq、ne、gt、ge、lt、le ) 真:ffffh; 假: 0 mov ax, 1 ge 2 mov ax, 0,38,4. 数值返回操作符 ( seg、offset ) seg 取符号地址的段地址 例 mov ax , seg yy offset 取符号地址的偏移地址 例 mov bx , offset yy,bb segment yy db 6 dup (?) bb ends cc segment assume cs:cc, ds:aa, es:bb start : cld mov ax , seg yy mov es , ax mov di , offset yy mov cx , 6 . cc ends end start,39,汇编语言程序举例,编写完整汇编语言程序,完成内存数据块传送功能。 将某段中的字符串“hello!”传送到另一段中。,40,例一 编写完整汇编语言程序,完成内存数据块传送功能。 将某段中的字符串“hello!”传送到另一段中。,利用变量定义字符串和缓冲区,41,aa segment ; 数据段1 xx db hello! ; 定义源串 aa ends bb segment ;数据段2 yy db 6 dup (?) ; 定义目的缓冲区 bb end

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论