网站大量收购闲置独家精品文档,联系QQ:2885784924

单片机汇编语言讲解.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机汇编语言讲解

80X86 汇编语言快速入门 80X86 汇编语言...指令集和段定义 注意: 当你以编译器汇编你设计的程序时,常会发生打字错误、标识符名称拼错、 十六进制 数少了h、 逻辑错误等。 汇编老手常给新人的忠告是: 最好料到自己所写的程序一定会有些 错误(别人告诉我的) ;如果第一次执行程序后,就得到期望的结果,你最好还是在检查一 遍,因为它可能是错的。原则上,只要大体的逻辑架构正确,查找程序中错误的过程,与写 程序本身相比甚至更有意思。 写大程序时, 最好能分成许多模块, 如此可使程序本身的目的 较单纯, 易于撰写与查错, 另外也可让程序中不同部份之间的界限较清楚, 节省编译的时间。 如果读程序有读不懂的地方最好用纸笔记下有关寄存器、 内存等内容, 在纸上慢慢比划, 就 豁然开朗了。 下面我们将写一个能从键盘取得一个十进制的数值, 并将其转换成十六进制数值而显示于屏 幕上的 “大程序” 。前言: 要让 8086 执行这样的功能,我们必须先将此问题分解成一连串的 步骤,称为程序规划。首先,以流程图的方式,来确保整个程序在逻辑上没有问题(不用说 了吧!什么语言都要有此步骤) 。这种模块化的规划方式,称之为“由上而下的程序规划” 。 而在真正写程序时,却是从最小的单位模块(子程序)开始,当每个模块都完成之后,再合 并成大程序;这种大处著眼,小处著手的方式称为“由下而上的程序设计” 。 我们的第一个模块是 BINIHEX ,其主要用途是从 8086 的 BX 寄存器中取出二进制数,并以 十六进制方式显示在屏幕上。注意:子程序如不能独立运行,实属正常。 binihex segment assume cs:binihex mov ch,4 记录转换后的十六进制位数(四位) rotate: mov cl,4 利用 CL 当计数器,记录寄存器数位移动次数 rol bx,cl 循环寄存器 BX 的内容,以便依序处理 4 个十六进制数 mov al,bl 把 bx 低八位 bl 内数据转移至 al and al,0fh 把无用位清零 add al,30h 把 AL 内数据加 30H ,并存入 al cmp al,3ah 与 3ah 比较 jl printit 小于 3ah 则转移 add al,7h 把 AL 内数据加 30H ,并存入 al printit:mov dl,al 把 ASCII 码装入 DL mov ah,2 int 21h dec ch ch 减一,减到零时,零标志置 1 jnz rotate JNZ :当零标志未置 1 ,则跳到指定地址。即:不等,则转移 int 20h 从子程序退回主程序 binihex ends end 利用循环左移指令 ROL 循环寄存器 BX(BX 内容将由第二个子程序提供 ) 的内容,以便依序 处理 4 个十六进制数 :1. 利用 CL 当计数器, 记录寄存器移位的次数。 2. 将 BX 的第一个十六 进制值移到最右边。利用 AND (逻辑“与”运算:对应位都为1时,其结果为1,其余 情况为零)把不要的部份清零,得到结果:先将 BL 值存入 AL 中,再利用 AND 以 0Fh ()将 AL 的左边四位清零。由于0到9的 ASCII 码为 30h 到 39h ,而A到F之 ASCII 码为 41h 到 46h ,间断了 7h ,所以得到结果:若 AL 之内容小于 3Ah ,则 AL 值只加 30h , 否则 AL 再加 7h 。 ADD 指令会将两个表达式相加,其结果存于左边表达式内。 标志寄 存器( Flag Register )是一个单独的十六位寄存器,有 9 个标志位,某些汇编指令(大部份 是涉及比较、算术或逻辑运算的指令)执行时,会将相关标志位置 1 或清 0 , 常碰到的标 志位有零标志( ZF ) 、符号标志( SF ) 、溢出标志( OF )和进位标志( CF ) 。 标志位保存了 某个指令执行后对它的影响,可用其他相关指令,查出标志的状态,根据状态产生动作。 CMP 指令很像减法,是将两个表达式的值相减,但寄存器或内存的内容并未改变,只是相 对的标志位发生改变而已:若 AL 值小于 3Ah ,则正负号标志位会置 0 ,反之则置 1 。 JL 指令可解释为:小于就转移到指定位置,大于、等于则向下执行。 CMP 和 JG 、 JL 等条件 转移指令一起使用,可以形成程序的分支结构,是写汇编程序常用技巧。 第二个模块 DECIBIN 用来接收键盘打入的十进制数, 并将它转换成二进制数放于 BX 寄存 器中,供模块 1 BINIHEX 使用。 decibin segment assume cs:decibin mov

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档