第3章基本指令与简单程序设计.pptVIP

  1. 1、本文档共93页,可阅读全部内容。
  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文档。上传文档
查看更多
3.3.2 DOS的2号子功能──单字符输出   【功能】 在屏幕上光标当前所在位置显示一个字符,并把光标向后移一格。   【入口参数】 AH中放子功能号2,DL中放待输出字符的ASCII值。?   【出口参数】 无。 【说明】   (1) 该子功能在执行时不论DL中数据的来源如何,都当做是一个ASCII值,经过内部转换变成相应字符的形状显示在屏幕上。   (2) 该子功能调用会改变寄存器AL的值,所以必要时可把AL的值放在另一寄存器或内存中临时保存,其它寄存器的值都不受影响。   (3) 有些特殊的ASCII值可以控制计算机产生特定的效果。比如,当DL中放7并调用该子功能时,计算机的扬声器会发出“嘀”的一声响,而屏幕上并没有任何字符输出。部分特殊效果与ASCII值的对应关系见表3.1。 表3.1 特殊输出效果相应的ASCII值 MOV AL,buf[BX][SI] MOV AL,buf[BP+DI] MOV AL,[BX][SI+30] MOV AL,-30[BP][SI]   与基址变址类似,相对基址变址在书写时也可以用两个方括号把基址寄存器和变址寄存器括起来,并且不写加号“+”。下面是相对基址变址寻址方式在书写上的几种变形。   相对基址变址最典型的应用是对二维数组元素的访问,它具有类似双下标的书写形式,但与高级语言的双下标又有很大的区别。在C语言中,若定义了一个二维数组变量buf存放m行n列的矩阵,可以直接用行列坐标的形式buf[i][j]表示第i行第j列的元素(以左上角为第0行第0列)。若要逐个取某一行元素,可以固定i的值不变,让j依次取值0、1、…、n-1;若要逐个取某一列元素,可以固定j的值不变,让i依次取值0、1、…、m-1。这种方式简洁明了,充分体现了高级语言的优势。在汇编语言中,buf[BX][SI]的含义完全不同,它代表了[buf+BX+SI],这里BX和SI的值不代表矩阵的行与列。如果想用buf[BX][SI]表示出第i行第j列元素的偏移地址,则需要让BX和SI分别取如下值: BX = i × n × k SI = j × k 其中n是矩阵的列数,k是每个矩阵元素占据的内存字节数,在编写程序时,n和k都是常量。若要逐个取某一行元素,可以固定BX的值不变,让SI先取初值0,然后每次加k;若要逐个取某一列元素,可以固定SI的值不变,让BX先取初值0,然后每次加n×k。实际上,汇编语言要求编程人员自己根据数据在内存中的存放情况考虑基址寄存器和变址寄存器的变化。 3.1.4 外设型寻址方式   给操作对象逐个编号是计算机的基本处理方法。在8088系统中把内存的每个字节进行编号,形成内存的物理地址,类似地也把控制各种外部设备的接口中的各部件编排号码,每个号码对应的一个外设部件称为一个外设端口,号码本身就是外设地址,又称外设端口号。外设是多种多样的,各自的接口也不同,但接口中的各个部件却有一个共同特点,就是能够以1字节为基本单位存放来自系统总线的数据,或者向系统总线提供数据。从这一特点上看,接口中的每个基本部件与内存的一个字节在操作方式上并没有什么差别。于是有些计算机在设计上把内存与外设端口综合在一起,统一地编排一套地址,以地址本身来区分操作对象是内存还是外设,这种地址编排方式称为统一编址或混合编址。   8088采取的是另一种地址编排方式,把外设端口与内存分开来,各编各的地址,这种编址方法称为独立编址。前面已经介绍了8088内存地址的有效范围是1 MB,而它的外设地址有效范围是64 KB。那么,如果写出一个地址,比如300H,如何判断操作对象是内存还是外设呢?这个问题从地址本身是无法解决的,8088系统以指令来区分操作对象的种类。用于内存操作的指令很多,MOV指令就是其中一个,但用于外设操作的指令就只有两条:IN和OUT。输入输出指令的具体用法在第8章中加以说明,这里只是用它们作例子解释外设寻址方式。   外设寻址方式比较简单。一种是把外设地址直接写在指令中,类似于对内存的直接寻址方式,但是不加方括号,比如: IN AL,61H ;第2个操作数表示61H号外设端口 OUT 43H,AL ;第1个操作数表示43H号外设端口   这种寻址方式要求外设地址不超过255。另一种方式是把外设地址放在寄存器DX中,类似于内存型的寄存器间接寻址方式,但是也不加方括号,比如: IN AL,DX OUT DX,AL 3.2 基 本 指 令 3.2.1 MOV指令  【指令格式】 MOV d1,d2  【功能】 取d2操作数的值,放到d1操作数指定的位置。   这是一种典型的双操作数指令,d1称为目的操作数,d2称为源操作数。这条指令一般用于

文档评论(0)

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

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

1亿VIP精品文档

相关文档