《汇编语言》讲稿 16.pptVIP

  1. 1、本文档共57页,可阅读全部内容。
  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文档。上传文档
查看更多
《汇编语言》讲稿 16

16.3 直接定址表 数值0~9和字符“0”~“9”之间的映射关系是很明显的,即: 数值+30h=对应字符的ASCII值: 0+30h=“0”的ASCII值 1+30h=“1”的ASCII值 2+30h=“2”的ASCII值 : 16.3 直接定址表 但是,10~15和“A”~“F”之间的映射关系是: 数值+37h=对应字符的ASCII值: 10+37h=“A”的ASCII值 11+37h=“B”的ASCII值 12+37h=“C”的ASCII值 : 16.3 直接定址表 可见,我们可以利用数值和字符之间的这种原本存在的映射关系,通过高 4 位和低4 位值得到对应的字符码。 但是由于映射关系的不同,我们在程序中必须进行一些比较,对于大于 9 的数值,我们要用不同的计算方法。 16.3 直接定址表 这样做,虽然使程序得到了简化。但是,如果我们希望用更简捷的算法,就要考虑用同一种映射关系从数值得到字符码。 所以,我们就不能利用0~9和“0”~“9” 之间与 10~15 和 “A” ~“F ” 之间原有的映射关系。 16.3 直接定址表 因为数值0~15 和字符“0”~“F ”之间没有一致的映射关系存在,所以,我们应该在它们之间建立新的映射关系。 具体的做法是,我们建立一张表,表中依次存储字符“0”~“F”,我们可以通过数值0~15直接查找到对应的字符。 子程序代码 16.3 直接定址表 可以看出,在子程序中,我们在数值0~15和字符“0”~“F ” 之间建立的映射关系为: 以数值N为table 表中的偏移,可以找到对应的字符。 16.3 直接定址表 利用表,在两个数据集合之间建立一种映射关系,使我们可以用查表的方法根据给出的数据得到其在另一集合中的对应数据。 这样做的目的一般来说有三个: (1)为了算法的清晰和简洁。 (2)为了加快运算速度。 (3)为了使程序易于扩充。 16.3 直接定址表 在上面的子程序中,我们更多的是为了算法的清晰和简洁,而采用了查表的方法。 下面我们来看一下,为了加快运算速度而采用查表的方法的情况。 16.3 直接定址表 编写一个子程序,计算sin(x),x∈{0°,30°,60°,90°,120°,150°,180°},并在屏幕中间显示计算结果。 比如sin(30)的结果显示为“0.5”。 16.3 直接定址表 我们可以利用麦克劳林公式来计算sin(x)。 x 为角度,麦克劳林公式中需要代入弧度,则: y=x/180*3.1415926 16.3 直接定址表 可以看出,计算sin(x)需要进行多次乘法和除法。 乘除是非常费时的运算,它们的执行时间大约是加法、比较等指令的5倍。 如何才能够不做乘除而计算sin(x)呢? 我们看一下需要计算的sin(x)的结果 16.3 直接定址表 需要计算的sin(x)的结果: sin(0)=0 sin(30)=0.5 sin(60)=0.866 sin(90)=1 sin(120)=0.866 sin(150)=0.5 sin(180)=0 16.3 直接定址表 我们可以看出,其实用不着计算,可以占用一些内存空间来换取运算的速度。 将所要计算的sin(x) 的结果都存储到一张表中;然后用角度值来查表,找到对应的sin(x)的值。 我们用ax向子程序传递角度 程序代码 16.3 直接定址表 在上面的子程序中,我们在角度值x和表示 sin(x) 的字符串集合table 之间建立的映射关系为: 以 角度值/30 为table 表中的偏移,可以找到对应的字符串的首地址。 16.3 直接定址表 编程的时候要注意程序的容错性,即对于错误的输入要有处理能力。 在上面的子程序中,我们还应该在加上对提供的角度值是否超范围的检测。 16.3 直接定址表 如果提供的角度值不在合法的集合中,程序将定位不到正确的字符串,出现错误。 对于角度值的检测,请读者自行完成。 16.3 直接定址表 上面的两个子程序中,我们将通过给出的数据进行计算或比较而得到结果的问题,转化为用给出的数据作为查表的依据,通过查表得到结果的问题。 具体的查表方法 ,是用查表的依据数据 ,直接计算出所要查找的元素在表中的位置。 16.3 直接定址表 像这种可以通过依据数据,直接计算出所要找的元素的位置的表,我们称其为: 直接定址表。 我们可以在直接定址表中存储子程序的地址,从而方便地实现不同子程序的调用。 16.4 程序入口地址的直接定址表 我们看下面的问题: 实现一个子程序setscreen ,为显示输出

文档评论(0)

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

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

1亿VIP精品文档

相关文档