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

下载本文档

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

文档简介

1,第六节 汇编语言程序设计 讲课内容 一、概述 1. 编写汇编语言程序步骤 2. 判断程序质量的标准 3. 几种程序结构 二、汇编语言程序设计举例 例1 将寄存器bx中的内容以十六进制形式显示出来。 例2 将键盘输入的十进制数据串转换成其相应大小的数值 存放在bx寄存器中。,2,一、概述 1. 编写汇编语言程序步骤 2. 判断程序质量的标准 3. 几种程序结构,3,一. 编写汇编语言程序步骤 分析实际问题,抽象描述问题的模型 确定解决模型的算法 按算法画出程序流程图 按流程图编写程序 上机调试, 运行程序,4,2. 判断程序质量的标准 程序的正确性 程序的可读性 程序的执行时间 程序所占内存大小,5,3几种程序结构 顺序结构 分支结构 循环结构 子程结构,6,顺序结构,7,分支结构,8,y,y,n,n,分支结构,9,循环结构,当型循环 (当条件成立进入循环),直到型循环 (直到条件成立退出循环),10,1多处调用完成同一功能的子程: code segment start: 、 call subp 、 call subp 、 call subp 、 mov ah, 4ch int 21h subp proc 、 、 ret subp endp code ends end start,2模块化程序设计: code segment begin: call sub1 call sub2 call sub3 mov ah, 4ch int 21h sub1 proc 、 ret sub1 endp sub2 proc 、 ret sub2 endp sub3 proc 、 ret sub3 endp code ends end begin,子程结构,注意返回dos语句位置,11,二、汇编语言程序设计举例 例1 将寄存器bx中的内容以十六进制形式显示出来。 (二进制 十六进制) 例2 将键盘输入的十进制数据串转换成其相应大小的数值 存放在bx寄存器中。,12,有关字符、数码转换的处理 1. 计算机处理字符时,常用的字符编码是ascii 码。 2. 数字和字母的ascii码是一个有序序列 数字09 : 30h 39h 大写字母az : 41h 5ah 小写字母az : 61h 7ah,13,3. 计算机处理信息时,其对象都是二进制数。 外设(显示器、打印机、键盘等) 用ascii码与cpu进行信息传送。 例如: (1) 在键盘上按下某一字符键 (如9), 键盘接口向键盘缓冲区送去的是该字符的ascii码(如39h), 不是送数字09h。 ( 2) 在文本方式下,要在显示器上显示某一字符(如a), 须将该字符的ascii码(如41h)送显示缓冲区, 不是送数字0ah。,计算机要利用显示器、键盘等外设时, 须据程序设计的需要进行有关转换。,14,例 将cpu运算的结果通过显示器显示时,如二进制数“a9” 需将结果转换成其对应的ascii码才能进行显示。,15,例 cpu要处理从键盘输入的某一数据,如键入“1234” 需将该数据串进行转换十六进制后才能应用。,16,例1 将bx寄存器中的内容以十六进制形式显示出来。,bx是一个16位寄存器 二进制 1010 1001 0011 1110,用十六进显示时,每4位用一个字符显示,共4个 其中: 0000 0 30h , 1010 a 41h 0001 1 31h , 1011 b 42h 、 、 1001 9 39h , 1111 f 46h,十六进制 a 9 3 e,屏幕上的显示 a 9 3 e,对应的ascii 41h 39h 33h 45h,17,算法: 取出要显示的某4位,转换为对应的ascii码, 再调用dos系统功能进行显示。,(1) 对于00001001(09), 先扩展成一个字节,高4位清0, 加上30h后, 即可得字符09对应的ascii码。 0000 0001b + 30h= 31h 0000 1001b + 30h=39h 0001b 1 1001b 9,(2) 对于10101111(af), 先扩展成一个字节,高4位清0, 加上30h后, 还要再加上07h,才能得到af 对应的ascii码 0000 1010b+30h+07h = 41h 0000 1111b+30h+07h =46h 1010b a 1111b f,18,code segment assume cs:code start: mov ch, 4 ;字符个数 mov cl, 4 ;循环移位次数 next: rol bx, cl ;取显示位的值 mov dl, bl ;保存在dl中 and dl, 0fh ;清除高4位 add dl, 30h ;转变为数字的ascii cmp dl, 39h ;大于39h, 则应转变 jle print ;为字母af的ascii add dl, 07h print: mov ah, 2h ;显示dl中的字符 int 21h dec ch ;显示结束? jnz next mov ah, 4ch ;返回dos int 21h code ends end start,19,思考: 1. 例1采用的是大写字母af进行显示, 若采用小写字符a f 进行显示,程序如何改写? 1010 0011 1001 1110 a39e 或 a39e,2. 编程将 cpu 内 14个 16位寄存器当前的内容 分别用十六进制形式显示出来。,20,例2 将键盘输入的十进制数据串转换成相应大小的十六进 制数值存放在bx寄存器中。,问题:要转换成1234 即 04d2h存放在bx中, 怎么实现?,21,算法一: 数值大小 = 各位值权值之和 1234d = 千位1000 + 百位100 + 十位10 + 个位 = 11000 + 2100 + 310 + 4 = 0000 0100 1101 0010b = 04d2h,22,算法二: 数值大小 =部分和10 +下一位数值 1234d = ( ( ( 010 + 1 ) 10 + 2 ) 10 + 3 ) 10 + 4 = 0000 0100 1101 0010b = 04d2h 部分和从0开始,循环次数等于输入的位数,23,24,input proc lea dx , string mov ah , 09h int 21h lea dx , num mov ah , 0ah int 21h ret input endp code ends end start,25,change子程序流程图,change proc lea si, num+2 mov cl, num+1 mov ch, 0 mov ax, 0 mov di, 10 next: mul di mov bh, 0 mov bl, si and bl, 0fh add ax, bx inc si loop next zero: mov bx, ax ret change endp,1234d = ( ( ( 010 + 1 ) 10 + 2 ) 10 + 3 ) 10 + 4,26,list_bx子程序流程图,list_bx proc mov ch, 4 mov cl, 4 next: rol bx, cl mov dl, bl and dl, 0fh add dl, 30h cmp dl, 39h jle print add dl, 07h print: mov ah, 2h int 21h dec ch jnz next ret ;子程返回 list_bx endp code ends end start,27,例2 程序存在的问题: 1未处理输入非数字字符的情况 2输入的十进制数范围为065535 3当输入字符个数为0(直接回车)时,结果错误 4未处理负数情况 5结果的显示未换行 input:1234 最后看到的是:0d42t:1234,28,编写子程序的注意事项: 注意子程中push、pop应成对,否则易造成死机。,data segment string db hello,$ data ends code segment assume cs:code, ds:data start: mov ax, data mov ds, ax call input mov ah, 4ch int 21h input proc push ax lea dx, string mov ah, 09h int 21h ret input endp code ends end start,29,例 下面程序段,思考是否可以完成 ax cx, bxdx,code segment assume cs:code start: mov ax,data mov ds,ax push ax push bx call sub mov ah, 4ch int 21h

温馨提示

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

评论

0/150

提交评论