微机原理课程设计-英文字母大小写转换程序设计.doc_第1页
微机原理课程设计-英文字母大小写转换程序设计.doc_第2页
微机原理课程设计-英文字母大小写转换程序设计.doc_第3页
微机原理课程设计-英文字母大小写转换程序设计.doc_第4页
微机原理课程设计-英文字母大小写转换程序设计.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

此文档收集于网络 如有侵权 请联系网站删除 精品文档 目 录 摘 要 I 1 原理 1 1 1 8086 简介 1 1 2 汇编程序设计简介 2 1 3 报警设计 2 2 程序设计 4 2 1 程序设计流程图 4 2 2 从键盘接受字符程序段 5 2 3 大写字母转换成小写字母程序段 5 2 4 小写字母转换成大写字母程序段 6 2 5 报警程序段 7 2 6 总程序代码 8 3 运行结果分析 11 4 心得体会 12 参考文献 13 此文档收集于网络 如有侵权 请联系网站删除 精品文档 摘 要 在课程设计之前 具备微机原理的理论知识和实践能力 熟悉汇编语言编程技术 熟悉 80X86 的 CPU 结构和指令系统 熟悉相关常用接口电路的设计使用方法是必不可少 的 因此原理部分重新温习并整理了相关知识 课程设计要求进行大小写字母的转换 其实字母大小写的区别在于他们的 ASCII 码 范围 它们之间的转换其实就是加减相应的 ASCII 码值 在判断输入的字母是大写的还 是小写的 即判断输入符号 ASCII 码在 41H 5AH 还是在 61H 7AH 内 之后 决定判断是 加上还是减去 ASCII 码值 另外如果输入的不是字母 输入字符对应 ASCII 码值不在 41H 5AH 或 61H 7AH 内 则需要报警提示 这不但涉及到用汇编语言实现发声的方法 而且对计算机硬件的了 关键词 8086 大小写字母转换 报警 此文档收集于网络 如有侵权 请联系网站删除 精品文档 1 原理 1 1 8086 简介 Intel 8086 拥有四个 16 位的通用寄存器 也能够当作八个 8 位寄存器来存取 以 及四个 16 位索引寄存器 包含了堆栈指标 资料寄存器通常由指令隐含地使用 针对暂 存值需要复杂的寄存器配置 它提供 64K 8 位元的输出输入 或 32K 16 位元 以及固 定的向量中断 大部分的指令只能够存取一个内存位址 所以其中一个操作数必须是一 个寄存器 运算结果会储存在操作数中的一个 Intel 8086 有四个内存区段 segment 寄存器 可以从索引寄存器来设定 区段寄 存器可以让 CPU 利用特殊的方式存取 1 MB 内存 8086 把段地址左移 4 位然后把它加 上偏移地址 大部分的人都认为这是一个很不好的设计 因为这样的结果是会让各分段 有重叠 尽管这样对组合语言而言大部分被接受 也甚至有用 可以完全地控制分段 使在编程中使用指针 如 C 编程语言 变得困难 它导致指针的高效率表示变得困难 且有可能产生两个指向同一个地方的指针拥有不同的地址 更坏的是 这种方式产生要 让内存扩充到大于 1 MB 的困难 而 8086 的寻址方式改变让内存扩充较有效率 80X86 从功能上分执行单元 EU Execution Unit 和总线接口单元 BIU Bus Interface Unit 执行单元由算术逻辑单元 ALU 标志寄存器 通用寄存器组和 EU 控制器等部件组成 指令执行部件 EU 由算术逻辑单元 标志寄存器 通用寄存器和 EU 控制器等部件组 成 主要功能是执行指令 一般顺序执行 EU 不断地从指令队列中取指令连续执行 而省去访问存储器取指令 的时间 需要访问存储器取操作数时 EU 将访问地址送给 BIU 后 将要等待操作数到来后才 能继续操作 遇到转移类指令时 要将指令队列中的后续指令作废 等待 BIU 重新从存储器取出 目标地址中的指令代码进入指令队列后 EU 才能继续执行指令 此文档收集于网络 如有侵权 请联系网站删除 精品文档 算术逻辑单元 ALU 完成 16 位或 8 位的二进制运算 16 位暂存寄存器用来暂存参 加运算的操作数 运算结果通过内部总线送到通用寄存器组或 BIU 的内部寄存器中等待 写入存储器 经 ALU 运算后的结果特征置入标志寄存器中保存 EU 控制器负责从 BIU 的指令队列中取指令 并对指令译码 根据指令要求向 EU 内部 各部件发出控制命令以完成各条指令的功能 总线接口单元由地址加法器 专用寄存器组 指令队列缓冲器和总线控制电路等部 件组成 主要功能是形成访问存储器的物理地址 负责与外部 存储器或 I O 接口 打交道 1 2 汇编程序设计简介 汇编 计算机不能直接识别和执行汇编语言程序 而要通过 翻译 把源程序译成 机器语言程序 目标程序 才能执行 这一 翻译 工作称为汇编 汇编有人工汇编和 计算机汇编两种方法 汇编语言是面向机器的 每一类计算机分别有自己的汇编语言 汇编语言占用的内 存单元少 执行效率高 广泛应用于工业过程控制与检测等场合 汇编语言语句格式 标号 操作符 操作数 注释 START MOV AX 50H AX 50H 标号用来标明语句地址 它代表该语句指令机器码的第一个字节的存储单元地址 标号一般规定由 1 8 个英文字母或数字组成 但第一个符号必须是英文字母 注释只是对语句或程序段的含义进行解释说明 以方便程序的编写 阅读和交流 简化软件的维护 一般只在关键处加注释 伪指令 伪指令只用于汇编语言源程序中 对汇编过程起控制和指导的作用 不生 成机器码 汇编结束 自动消失 汇编语言程序设计步骤 分析问题 确定算法 设计程序流程 分配内存单元 分 配内存工作单元 确定程序和数据区的起始地址 编写汇编语言程序 调试程序 此文档收集于网络 如有侵权 请联系网站删除 精品文档 1 3 报警设计 8253 8254 是早期的 PC 系列机中有一个专门用于定时的集成电路 定时器通道 3 的 G 端与 61H 端口的 bit0 位相联 如果将 61H 端口的 bit0 位置成 1 那么定时器通道 3 就 被启动 此时将有一组信号从 OUT 端输出 信号的频率可以用程序控制 若 61H 端口 bit0 位为 0 则定时器被关闭 OUT 端就会恒定为 1 此电路用在这里相当一个 可控开关 如果将 61H 端口的 bit0 bit1 位都置成 1 则相当于既打开了定时器又打开了开关 这时候定时器产生的声音信号就会送到放大器 推动喇叭发声 若将 bit0 位置 0 则定时器关闭 此时 OUT 端为 1 这时候如果连续改 变 bit1 位的状态 也可以从喇叭中听到声音若将 bit1 位置 0 则开关关闭 此时即使打 开定时器也不能听到声音 PC 中的定时电路有三个通道 通道 3 用于发声 通道 1 用于控制系统内部的时钟 大家都十分清楚用 DOS 的 TIME 命令可以观察并修改系统内部的一个时钟 这个时钟之 所以能连续运转主要依靠定时器的通道 1 通道 1 的工作方式和通道 3 一样 但是系统启动时设定其发出一个频率固定为 18 2Hz 的信号 这个信号直接送到系统中的 中断控制器 每一个 Hz 都产生一个硬件 中断 一般称这个硬中断为 IRQ0 对应的中断号是 08H 也就是说 当计算机启动后 我们的机器看上去十分平静 但实际上 CPU 非常忙碌 在定时器的控制下每隔 55 毫秒就 要执行一个 08H 号中断 这个中断的主要工作就是连续地计数 在内存 0040H 006CH 处有四字节的存储空间专门用于保存计数值 CPU 每执行一次 08H 中断 这四字节的计数值就被加 1 不难算出这个计数值每增加 1091 后时间恰好过 了 1 分钟 每增加 65454 后时间恰好过了 1 小时 系统内部的时钟之所以能准确走时 靠得就是 08H 中断和这四字节的计数值 因此我们要想精确的定时 必须依靠时钟计数 值才行 此文档收集于网络 如有侵权 请联系网站删除 精品文档 2 程序设计 2 1 程序设计流程图 N Y 图 2 1 流程图 开始 array 首地址 bx 从键盘接受字符 输入字 母 大写转小写 小写转大写 回车换行输出 结束 报警 此文档收集于网络 如有侵权 请联系网站删除 精品文档 2 2 从键盘接受字符程序段 本程序段要求能够从键盘接受字符 从而做出下面的判断是字母还是其他字符 程序 段如下 lea bx array mov ax cs mov ds ax mov dx offset p1 mov ah 0ah int 21h 程序段中的一些指令功能 MOV 数据传送指令 将源操作数传送到目的操作数中 OFFSET 取源操作数首地址 int 21h 结束 该程序段先将 array 的首地址给 bx 将 cs 付给 ax 再将 ax 传到 ds 中 将 pl 的偏 移量给 dx 接着调用中断 21 的 0a 号功能从键盘接收字符 2 3 大写字母转换成小写字母程序段 本程序段要求实现大写字母转换成小写字母的设计 可以根据 A Z 的 ASCII 码来进 行程序设计 若小于 A 的 ASCII 码 41h 则跳至报警程序 若大于 Z 的 ASCII 码 5ah 则跳 至小写转换成大写字母程序 若在 41h 5ah 范围内 则将其 ASCII 码加 20h 从而实现大 写字母转换成小写字母 程序段如下 next inc di di自加 cmp array di 比较 je exit 相等 则跳到exit执行 cmp array di 41h A Z 41h 5ah a z 61h 7ah 与A比较 jl exit1 小于 则跳 cmp array di 5ah 与Z比较 此文档收集于网络 如有侵权 请联系网站删除 精品文档 jg next1 大于 则跳 add array di 20h 加20h 大写转小写 该程序段中的一些指令功能 INC 自动加 1 指令 执行后操作数自动加 1 CMP 比较指令 将源操作数和目的操作数相减 结果不存储 影响标志位 JE 条件跳转指令 相等则跳转 JL 条件跳转指令 小于则跳转 JG 条件跳转指令 大于则跳转 ADD 算术加法指令 将两操作数相加 结果放目的操作数 该程序段中 cmp array di 41h 表示将输入的字符与大写字母 A 41h 进行比较 jl exit1 表示若小于 41h 则跳到报警程序发出错误报警 add array di 20h 表示将 输入字符的 ASCII 码加上 20h 从而实现大写转换成小写 2 4 小写字母转换成大写字母程序段 本程序段要求实现小写字母转换成大写字母的设计 可以根据 a z 的 ASCII 码来进 行程序设计 若小于 a 的 ASCII 码 61h 则跳至小写转换成大写字母程序 若大于 z 的 ASCII 码 7ah 则跳至报警程序 若在 61h 7ah 范围内 则将其 ASCII 码加 20h 从而实现 小写字母转换成大写字母 程序段如下 next1 cmp array di 比较 je exit 相等 则跳到exit执行 cmp array di 61h A Z 41h 5ah a z 61h 7ah 与a比较 jl next 小于 则跳 cmp array di 7ah 与z比较 jg exit1 大于 则跳 sub array di 20h 减20h 小写转大写 jmp next 该程序段中的一些指令功能 CMP 比较指令 将源操作数和目的操作数相减 结果不存储 影响标志位 此文档收集于网络 如有侵权 请联系网站删除 精品文档 JE 条件跳转指令 相等则跳转 JL 条件跳转指令 小于则跳转 JG 条件跳转指令 大于则跳转 SUB 算术减法指令 将目的操作数减源操作数 结果送目的操作数 JMP 无条件转移指令 该程序段中 sub array di 20h 表示将输入字符的 ASCII 码减去 20 从而实现建 小写字母转换成大写 jmp next 无条件转移到 next 程序段 从而实现程序的循环 对 输入的字符串中的下一个字符进行判断 2 5 报警程序段 该程序段为调用程序 要求能够实现错误报警 当输入的字符为非大小写字母时能 够报警发声 此程序断可以根据字符的 ASCII 码来进行判断 此程序断可以用堆栈来进 行设计 程序设计如下 sound procproc push ax push dx mov dx cx in al 61h and al 11111100b 使第0 1位为0 trig xor al 2 使第1位翻转 PB的低两位为3 即使输出有 效 out 61h al mov cx bx delay loop delay dec dx jne trig pop dx pop ax ret 此文档收集于网络 如有侵权 请联系网站删除 精品文档 该程序段中的一些指令功能 PUSH 将源操作数内容压栈 同时自动修改栈顶指针 POP 从堆栈弹出数据 实现与 PUSH 相反的操作 LOOP 循环指令 每执行一次循环次数自动减一 IN 传送指令 从 I O 端口输入数据至 AL 或 AX OUT 传送指令 将 AL 或 AX 的内容输出至 I O 端口 2 6 总程序代码 从从键盘输入一串英文字符 若是小写字符则转换成大写字符在下一行输出 若是 大写字符则转换成小写字符在下一行输出 若不是英文字符则显声响报警 实现英文字母的大小写转换 codecode segmentsegment 代码段 assumeassume cs codecode ds codecode org 100h 从100h开始 startstart jmp begin 跳到begin p1 dbdb 100 p2 dbdb 0 array dbdb 100h dupdup 置100个字节的缓冲区存放数据 begin lea bx array 将array的首地址给bx mov ax cs 置cs ds mov ds ax mov dx offset p1 将p1的偏移量给dx mov ah 0ah 调用中断21的0a号功能从键盘接收字符 int 21h xor bx bx 将bx清零 此文档收集于网络 如有侵权 请联系网站删除 精品文档 mov bl p2 p2 bl mov array bx 送 至字符串尾 mov di 0ffffh 1 di next inc di di自加 cmp array di 比较 je exit 相等 则跳到exit执行 cmp array di 41h A Z 41h 5ah a z 61h 7ah 与A比较 jl exit1 小于 则跳 cmp array di 5ah 与Z比较 jg next1 大于 则跳 add array di 20h 加20h 大写转小写 jmp next next1 cmp array di 比较 je exit 相等 则跳到exit执行 cmp array di 61h A Z 41h 5ah a z 61h 7ah 与a比较 jl next 小于 则跳 cmp array di 7ah 与z比较 jg exit1 大于 则跳 sub array di 20h 减20h 小写转大写 jmp next disp loop next exit mov p1 0dh 回车换行 mov p2 0ah mov ah 09h int 21h 此文档收集于网络 如有侵权 请联系网站删除 精品文档 jmp begin exit1 mov p1 0dh mov p2 0ah call sound 调用发声子程序 call sound jmp begin mov ah 4ch 程序结束 int 21h sound procproc push ax push dx mov dx cx in al 61h and al 11111100b 使第0 1位为0 trig xor al 2 使第1位翻转 PB的低两位为3 即使输出有 效 out 61h al mov cx bx delay loop delay dec dx jne trig pop dx pop ax ret sound endpendp codecode endsends endend begin 此文档收集于网络 如有侵权 请联系网站删除 精品文档 3 运行结果分析 当输入字母串ABCDEFabcdef后 按回车键转换为abcdefABCDEF 结果如下图3 1所示 图3 1 运行结果 当输入非英文字母时 按下回车键后发出滴滴的报警声 无法转换大小写 光标指向 错误字符 结果如下图3 2所示 此文档收集于网络 如有侵权 请联系网站删除 精品文档 图3 2 错误运行结果 4 心得

温馨提示

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

评论

0/150

提交评论