汇编语言语法和功能调用

上传人:宝路 文档编号:52746071 上传时间:2018-08-25 格式:PPT 页数:71 大小:322.78KB
返回 下载 相关 举报
汇编语言语法和功能调用_第1页
第1页 / 共71页
汇编语言语法和功能调用_第2页
第2页 / 共71页
汇编语言语法和功能调用_第3页
第3页 / 共71页
汇编语言语法和功能调用_第4页
第4页 / 共71页
汇编语言语法和功能调用_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《汇编语言语法和功能调用》由会员分享,可在线阅读,更多相关《汇编语言语法和功能调用(71页珍藏版)》请在金锄头文库上搜索。

1、第4章 汇编语言语法和DOS功能调用,4.1 汇编语言源程序1.机器语言用二进制数来表示指令和数据. 例如:B0 642.汇编语言用助记符,符号地址以及标号等符号书写的程序。例如:MOV AL,64H ;用汇编语言编写的程序叫源程序。 3.高级语言接近自然语言、习惯的教学语言来描述具体的算法。,三种语言的比较,为什么还要学习和使用汇编语言呢? 主要有三点原因: 程序设计人员能更充分地利用机器硬件的全部功能,发挥机器长处。 底层的一些功能仍然靠汇编语言程序来实现。 汇编语言程序比高级语言程序的目标代码短且运行速度快。在要求节省内存空间和提高程序运行速度的重要场合(如实时控制等)常用汇编语言来编制

2、。,用汇编语言编写的程序不能由机器直接执行,而必须经汇编程序翻译成机器语言程序。汇编语言指令与翻译成的机器语言指令之间基本是一一对应的关系。 汇编过程示意:,汇编语言程序的建立及汇编过程,汇编示意图,4.1 汇编语言程序格式 示例程序,DATA SEGMENT ;数据段 NUM DW 0011101000000111BNOTES DB The result is : , $ DATA ENDS CODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATABEGIN: MOV AX, DATA MOV DS,AXMOV DX,OFFSET NOTES ;显示提示信息MOV AH

3、,9HINT 21HMOV BX,NUM ;将数装入BXMOV CH,4 ;CH作循环计数器,示例程序(续),ROTATE : DISPLAY: MOV CL, 4 ;CL中放移位位数 MOV DL, AL ;显示16进制数ROL BX,CL MOV AH,2 MOV AL,BL INT 21H AND AL,0FH ;AL中为一位16进制数 DEC CHADD AL,30H ;转换为ASCII码值 JNZ ROTATECMP AL,9 ;是09的数码? MOV AX,4C00H;返回DOSJLE DISPLAY INT 21HADD AL,07H ;在AF之间 CODE ENDS ;代码段结

4、束END BEGIN ;模块结束,堆栈段定义格式,STACK SEGMENT STACKSTA DB 50 DUP (?)TOP EQU LENGTH STA STACK ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS, AXMOV SP,TOP: CODE ENDSEND START,汇编语言程序的格式可以归结为以下几点:,(1) 段的结构 段名1 SEGMENT语句1语句i段名1 ENDS段名2 SEGMENT语句1语句j段名2 ENDS,段名n SE

5、GMENT语句1语句k 段名n ENDSEND 标号,(2)语句的结构3种基本语句类型:指令语句伪指令语句宏指令语句,指令语句格式标号: 指令助记符 操作数 ;注释标号字段:是一个任选字段,性质为符号便移量,一般用于标记跳转指令的目的地址在汇编过程中标号会被替换为一个位的数值偏移量标号必须位于语句开头,结尾必须使用冒号。 指令助记符和操作数:这两个字段组成汇编指令本身,指令助记符是必不可少的,操作数则根据指令助记符来确定在汇编过程中,也只有这两个字段会被替换为确定的机器指令代码。 注释字段:是一个任选字段,用于说明程序片段或指令的功能,汇编过程中不处理这样的字段,它只是用于提高源程序的可读性注

6、释必须使用分号作为开始。例子:教材138 例1,伪指令语句格式伪指令语句:这种语句用于指示汇编程序(翻译程序)如何汇编源程序和指令语句不同,汇编程序处理它时不会产生机器指令代码,只对伪指令提出的要求进行解释并立即完成要求的操作伪指令的功能大致有分配存储单元、计算表达式、定义常量等等。,4. 2 汇编语言中的基本数据 1、标识符 标识符-由程序员自由建立起来的,有特定意义的字符序列。 标识符的组成规则如下: 必须由字母、数字(0,9)及特殊符号(?, ,)组成,且必须以字母打头。 字符总数限制在31个以内。 不能使用属于系统专用保留字(保留的字)。,2、常数常数-语句中出现的那些固定值,除了自身

7、的值以外, 没有其它任何属性。常数分为两类(1)数值常数(2)字符串常数,(1)数值常数(2)字符串常数字符串常数是用单引号引起来的一个或多个字符。字符串常数是以各字符的ASC码表示的。如A用41H 表示,字符串A1B2用41H,41H,42H,42H表示。,3、变量 变量-存放在存储器单元中的操作数,它的值是可以改变 的,在程序中出现的是存储器单元地址的符号,即 与某一数据项第一字节相对应的标识符。 变量的3个属性: 段地址:变量所在段的段地址; 偏移地址:变量所在段内的偏移地址; 类型:所定义的每个变量所占据的字节数。 4、标号 标号-可执行指令语句地址的符号表示,即用标识符来表示地址。

8、标号的3个属性: 段地址:与标号对应的指令首字节所在的段地址。 偏移地址:与标号对应的指令首字节所在的偏移地址。 类型:标号的类型属性有两种:NEAR和FAR类型。,1、数据定义伪指令语句 共有五条:DB、DW、DD、DQ和DT,分别用来定义字节、字、双字、8字节和10字节。 指令格式: 变量名 助记符 操作数1,操作数2,操作数n ;注释 变量名 助记符 n DUP(操作数1,操作数2,操作数n) ;注释注:操作数可以是常数或表达式,变量名,注释可有可无。,例4.2 操作数是常数、表达式、字符串数据的定义DATA1 DB 10H,52H DATA2 DW 1122H,34HDATA3 DD

9、5*20H,0FFEEHDATA4 DB HELLO,例4.3 操作数用“?”定义不确定值的 变量,用DUP来定义重复变量,不确定 值的变量一般用作保留存储空间,以 便存放运算结果。DATA1 DB ?DATA2 DW 0D55H, ?DATA3 DB 5 DUP(0)DATA4 DW 10 DUP(?) DATA5 DB 4 DUP(1,2 DUP(20),例4.4 BUFFER DW 3,4,$+3 设BUFFER的偏移地址为0088H,则汇编后如下图所示:,2、标识符赋值与解除伪指令语句 共有4条:等值伪指令语句EQU等号伪指令语句“=”解除伪指令语句PURGE别名定义伪指令语句LABE

10、L (1)等值伪指令EQU语句指令格式:标识符 EQU 操作数例4.5DATA EQU 100DATA1 EQU DATA2CI EQU ADD,(2)等号伪指令语句“=” 指令格式: 标识符=操作数例4.6DATA =100DATA1 = DATA +10SOURCE=BXSIMOV AX,SOURCESOURCE=BXMOV CX,SOURCE 注:“” 允许重复定义,而 EQU一经定义不再重新定义。,(3)解除伪指令语句PURGE 指令格式: PURGE 标识符1,标识符2,标识符n(4)别名定义伪指令语句格式:别名 LABEL 类型属性LABEL:伪指令助记符,不可缺省。例4.7 定义

11、变量的别名 DATAB LABEL BYTEDATAW DW 1234H,5678HDISF LABEL FARDISN: MOV AX,SI,3、段定义伪指令语句,因8086/8088 CPU的存储器是分段的,这就需要有段定语 句。 与段有关的伪指令有:SEGMENT、ENDS和ASSUME,含义分 别是段开始、段结束、指定段寄存器。(1)段结构定义伪指令格式: 段名 SEGMENT定位类型组合类型类别段名 ENDS 从段名代表的段基值开始定义一个段。其中的定位类型、组合类型和类别一般都可省略,若不省略时各项的顺序不能变。, 定位类型: 连接时用于指定该段应开始于什么样的物理地址。可选择下列

12、4种之一: BYTE: 从当前可用的字节地址XXXX XXXX XXXX XXXX XXXX(任一地址)开始;WORD: 从当前可用的字地址XXXX XXXX XXXX XXXX XXX0(偶数地址)开始;PARA(缺省): 从当前可用的节地址XXXX XXXX XXXX XXXX 0000(16的倍数)开始;PAGE: 从当前可用的页地址XXXX XXXX XXXX 0000 0000(256的倍数)开始。其中,1节(paragraph) 为16字节,1页为16节即256字节。, 组合类型: 连接时用于指定同名的各段之间的组合方式。可选择下列6种之一:PUBLICSTACKCOMMONMEM

13、ORYAT表达式NONE(缺省)若省略组合类型或说明为NONE类型,则表示各个段不组合,各有自己的段基值。对堆栈段,必须用STACK类型说明,不能省略。, 类别: 是要将组合后的各段按类别分类存放,同类别的段 将被相邻地放在一起。类别是由用户定义的、用一对引号括起来的 长度不超过40个字符的名字(标识符)。,SEGMENT和ENDS这两个伪指令总是成对出现,二者前面的段名一致。二者之间的删节部分,对数据段、附加段及堆栈段,一般是符号、变量定义等伪指令。对于代码段则是指令及伪指令。此外,还必须明确段和段寄存器的关系,这可由ASSUME语句来实现。,(2) 段分配伪指令ASSUME该语句必须出现在

14、有关的变量及标号使用之前,定义当前有效的4个逻辑段,用于指定程序中所定义的段与各段寄存器之间的对应关系,指示汇编程序在汇编过程中如何确定指令隐含使用的段寄存器。指定某段(用段名标识)中的变量、标号等数据项由哪个段寄存器寻址。ASSUME语句是伪指令,它不能给段寄存器传送段基值,只能指定段与段寄存器之间的对应关系。该伪指令的作用时间也是在汇编阶段,不是在程序的执行阶段。,在程序设计中,一般ASSUME语句在代码段中位于所有指令语句之前。注意:把段基值装入段寄存器这一个过程是在程序执行阶段完成的。即便程序中使用了ASSUME语句,如果在程序执行阶段各段寄存器没有装入正确的段基值,那么仍然不能正确的访问内存中的数据。,段寄存器的装入(1)CS段寄存器的装入CS段寄存器和IP指令指针的初始化是由操作系统来完成的。当用户向操作系统提交一个程序时,操作系统会自动把程序中第一条指令的逻辑地址装入到CS和IP中。在这之后,CPU就会从这条指令开始执行,并且不断修改IP中的内容使它指向下一条指令。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号