第4章8086汇编语言程序设计讲述.ppt

  1. 1、本文档共95页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章8086汇编语言程序设计讲述

4.3.2 BIOS功能调用(续) 键盘I/O程序以16H号中断处理程序的形式存在,它提供若干功能,每一个功能有一个编号。 在调用键盘I/O程序时,把功能编号置入AH寄存器,然后发出中断指令INT 16H。调用返回后,从有关寄存器中取得出口参数。 4.3.2 BIOS功能调用举例 例如: MOV AH,0 INT 16H 上面的程序段利用BIOS中断服务,实现从键盘读一个字符的功能。 3. LABEL伪指令 格式:变量/标号 LABEL 类型 变量的类型有:BYTE、WORD、DWORD、DQ、DT 标号的类型有:NEAR、FAR。 功能:定义变量或标号的类型,而变量或标号的段属性和偏移属性由该语句所处的位置确定。 LABEL使用举例 例如,利用LABEL使同一个数据区有一个以上的类型及相关属性。 AREAW LABEL WORD ;AREAW与AREAB指向相同的数据区, ;AREAW类型为字,AREAB类型为字节 AREAB DB 100 DUP(?) … MOV AX,2011H MOV AREAW,AX ;(AREAW)=2011H … MOV BL,AREAB ;BL=11H 4.2.3段定义伪指令 汇编源程序由段组成,每段大小不超过64KB,不同的段存放不同类型的数据。 段定义伪指令用于汇编源程序中段的定义。 相关指令有:SEGMENT、ENDS、ASSUME。 1.段定义伪指令SEGMENT、ENDS 格式: 段名 SEGMENT [定位类型] [组合类型] [类别名] … 段名 ENDS 功能:定义一个逻辑段。 SEGMENT和ENDS必须成对使用,它们前面的段名必须是相同的。 SEGMENT后面中括号中的内容为可选项,告诉汇编程序和连接程序如何确定段的边界、如何连接几个程序模块。 (1)定位类型 定位类型说明段的起始地址应有怎样的边界值,有以下4种。 ① BYTE:表示本段可以从任何地址开始,这种类型段间不留空隙,存储器利用率高。 ② WORD:表示本段的起始地址必须为偶地址。 ③ PARA:表示本段从节边界开始。8086规定每16字节为1小节。所以,定位类型为PARA的段,其起始地址必为16的倍数。这种类型简单,但是段间往往有空隙。定位类型的默认值为PARA。 ④ PAGE:表示本段从页边界开始。8086规定每256字节为1页,所以,定位类型为PAGE的段,其起始地址必为256的倍数。 (2)组合类型 组合类型说明链接不同模块中的同名段时采用的方式,有以下6种。 ① PUBLIC:本段与其他模块中说明为PUBLIC的同名同类别的段链接起来,公用一个段地址,形成一个新的逻辑段,所以偏移量调整为相对于新逻辑段起始地址的值。 ② STACK:本段与其他模块中说明为STACK的同名的堆栈段链接起来,公用一个段地址,形成一个新的逻辑段。同时,系统自动初始化SS及SP。 (2)组合类型(续) ③ COMMON:同名段从同一个内存地址开始装入。所以,各个逻辑段将发生覆盖。连接以后,该段长度取决于同名段中最长的那个,而内容有效的是最后装入的那个。 ④ MEMORY:与PUBLIC同义,只不过MEMORY定义的段装在所有同名段的最后。若连接时出现多个MEMORY,则最先遇到的段按组合类型MEMORY处理,其他段组合类型按PUBLIC处理。 (2)组合类型(续) ⑤ PRIVATE:不组合,该段与其他段逻辑上不发生关系,即使同名,各段拥有各自的段基值。组合类型的默认值为PRIVATE。 ⑥ AT exp:段地址为表达式exp的值(长度为16位)。此项不能用于代码段。例如:AT 0530H,表示本段从物理地址0530H开始。 (3)类别名 类别名必须用单引号括起来。 类别的作用是在连接时决定各逻辑段的装入顺序。 当几个程序模块进行连接时,其中具有相同类别名的段,按出现的先后顺序被装入连续的内存区。 没有类别名的段,与其他无类别名的段一起连续装入内存。 典型的类型名有:“STACK”,“CODE”,“DATA”。 2. ASSUME 格式:ASSUME 段寄存器名:段名[,段寄存器名:段名…] 段寄存器可以是:CS、DS、ES、SS。 段名为已定义的段。 凡是程序中使用的段,都应说明它与段寄存器之间的对应关系。 功能:用于明确段与段寄存器的关系。 ASSUME使用说明 ASSUME伪指令只是指示各逻辑段使用段寄存器的情况,并没有对段寄存器的内容进行赋值。 DS、ES的值必须在程序段中用指令语句进行赋值,而CS、SS由系统负责设置,程序中也可对SS

文档评论(0)

441113422 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档