您好,欢迎访问三七文档
当前位置:首页 > 幼儿/小学教育 > 小学教育 > 基于8086的微机原理3b
基于8086的微机原理补充课件参考教材微型计算机原理与接口技术(第四版)(中国科技大学-周荷琴吴秀清主编)第2章8086系统结构第3章8086的寻址方式和指令系统第4章汇编语言程序设计第4章汇编语言程序设计汇编语言程序设计格式1伪指令语句2DOS功能调用和BIOS中断调用3程序设计方法4宏汇编和条件汇编51.汇编语言的基本概念(1)机器语言:由0、1代码所组成的语言。面向机器,同一组代码对不同的计算机表示不同的含义。(2)汇编语言:由助记符表示的语言。面向机器。(3)高级语言:用一些接近人们书写习惯的英语和数学表达式形式的句子编写程序。这种语言不面向机器,而是面向过程、面向对象。4.1汇编语言程序格式2.汇编语言程序的结构形式(1)完全段结构程序例:在屏幕上显示字符串“GoodMorning!”①标准结构DATASEGMENTMESDB'GoodMorning!'DB0DH,0AH,'$'DATAENDSSTKSEGMENTSTACKST1DW128DUP(?)TOSLABELWORDSTKENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,SS:STKSTART:MOVAX,STKMOVSS,AXMOVSP,OFFSETTOSPUSHDSMOVAX,0;PSP(ProgramSegmentPrefix)PUSHAXMOVAX,DATAMOVDS,AXMOVDX,OFFSETMESMOVAH,9INT21HRETMAINENDPCODEENDSENDSTART②非标准结构CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STKSTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESMOVAH,9INT21HMOVAH,4CHINT21HCODEENDS其余部分与前面相同。说明:用连接程序对目标程序(OBJ文件)进行连接和定位时,操作系统为每个程序建立了一个程序段前缀PSP,其长度为256字节。主要用于存放所要执行程序的有关信息,同时也提供了程序与操作系统的接口。在PSP的开始处(偏移地址0000H)安排了一条指令INT20H。执行该指令即可返回到DOS。DOS在建立了程序段前缀PSP后,就将要执行的程序从磁盘装入内存。在定位时,代码段在PSP之后,然后是数据段、堆栈段。在程序开始时,DS指向PSP所在段。ES也不指向用户的附加段,因此,在程序开始处,用指令将DS、ES、SS等指向用户所设计的段。(其中SS段可省略)(2)简化段程序结构DOSSEG.MODELSMALL.STACK100H.DATAMESDB'Thisisaexampleprogram.'DB0DH,0AH,'$'.CODESTART:MOVAX,@DATAMOVDS,AXMOVDX,OFFSETMESMOVAH,9INT21HMOVAH,4CHINT21HENDSTART也可以用标准方式返回DOS。3、汇编语言的数据类型(1)指令性语句是执行语句,以机器指令作基础,与机器指令相对应。汇编程序可将它翻译成目标代码(机器指令)。CPU可以执行。指令性语句只能出现在代码段中。语句格式:标号:指令助记符操作数,操作数;注释(2)伪指令语句是说明性语句。它没有对应的目标代码。汇编程序汇编源程序时对伪指令语句进行处理。它完成对数据的定义、段块定义、存储区分配等操作,完成汇编控制。语句格式:名字伪指令助记符操作数,操作数;注释补充:汇编语言基本语法1.语法基础(1)字符集汇编语言程序中允许出现的字符为:英文字母:A~Z,a~z数字字符:0~9其它字符:+-*/()?…[]@<>.(2)保留字保留字是由系统规定的,有特定含义的专用名字。汇编语言中的保留字有:•寄存器的名字:AX、BX、CX、DX、SP、BP、SI、DI、IP、CS、DS、ES、SS•指令助记符:MOV、PUSH、POP、ADD、SUB、MUL、…•伪指令符:DB、DW、ASSUEM、EQU、LABEL、PROC等•一些特殊的运算符与操作符:LT、EQ、OR、HIGH、SEG、OFFSET、PTR等2.语句格式一般形式:[标识符]助记符[操作数1,操作数理2][:注释]例:START:MOVAX,DATAXDB1,2(1)助记符助记符是语句的主体,对指令语句它是机器指令的助记符(指令的符号),对于伪指令它是伪指令符。(2)标识符①标号:用于指令语句中,代表相应语句的符号地址。位于代码段内,它具有三个属性:•段值(SEGMENT):标号所在的段的段基址。•段内偏移地址(OFFSET):标号地址与所在段的段首地址之间的偏移地址的字节数。•类型(TYPE):指在转移指令中标号可转移的距离。NEAR:近标,本段内引用,地址指针为2字节;•FAR:远标,可在其它段内引用,地址指针为4字节。如果定义一个标号紧跟冒号,则表示此标号为近标。②变量变量是存储区中数据区的名字,一方面代表所表示的值,另一方面代表相应的存储空间的地址。用作存储器操作数,直接寻址。它位于DS、ES段内。也具有三种属性:•段值(SEGMENT):标号所在的段的段基址。•段内偏移地址(OFFSET):变量地址与所在段的段首地址之间的偏移地址的字节数。•类型(TYPE):指变量中每个元素所包含的字节数。类型有:字节(BYTE)、字(WORD)以及双字(DWORD)等。③常量常量在汇编时已有确定的值。它没有属性。常量在程序中可以直接出现。二进制常量以B结尾八进制以Q结尾十六进制数以H结尾十进制以D结尾(一般不写)字符串常量用单引号表示。对于经常使用的常量,可以定义为符号常量。如PIEQU3PORT=218H(3)操作数操作数是第三章所讲的寻址方式中所允许的数据类型。包括:常量、变量、标号、寄存器名以及表达式等。(4)注释以分号表示,用来说明一条指令或一段程序的功能,它可以省略。汇编程序对分号后的内容不汇编。加注释是为了让程序容易读懂。3、表达式表达式由运算对象及运算符所组成,在汇编时由汇编程序对它进行运算。运算的结果作为一个语句的操作数去使用。运算对象可以是常数、变量或标号,运算结果可以是一个常数字,也可以是一个存储器的地址,在此地址中存放了数据(称为变量)或指令(称为标号)。MASM中使用了6类运算符•算术运算符•逻辑运算符•关系运算符•数值返回运算符•修改属性运算符•其它运算符(1)算术运算符主要的算术运算有:+、-、*、/、MOD、SHL、SHR例:源程序指令格式如下:DAEQU300MOVAX,DA-80MOVBX,DAMOD100MOVCX,DA/100MOVDH,01100100BSHR2汇编时,计算表达式形成指令为:DAEQU300MOVAX,220MOVBX,0MOVCX,3MOVDH,19H(2)逻辑运算符逻辑运算有AND(与)、OR(或)、XOR(异或)、NOT(非)4种。逻辑运算符与逻辑运算指令一样,也是按位运算,它只能对常数进行运算,得到的结果也是常数。逻辑运算符作为操作数,处理是在汇编期间完成的。而逻辑指令作为指令助记符,它是在程序执行期间完成的。例:MOVAL,56HANDAL,34HAND12H(3)关系运算符关系运算符有:EQ(等于)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。关系运算符的两个操作数必须是数据,或是同一段内的两个存储单元的地址。进行关系运算的比较操作后,结果是一个数值,若结果为真,输出全是1,即0FFH或0FFFFH。若结果为假,输出全是0。关系运算符一般与逻辑运算符组合起来使用。例:MOVAX,10HGT16ADDBL,6EQ0100B相当于:MOVAX,0ADDBL,0FFH以上三种运算符也叫做数值表达式。(4)数值返回运算符(分析运算符)用于分析一个存储器操作数的属性,并返回某个参数值。①SEG:获取变量或标号的段地址(段基值)。如:MOVAX,SEGDATA1MOVDS,AX等价于:MOVAX,DATAMOVDS,AX其中DATA1为DATA段内定义的一个变量名。②OFFSET:返回变量或标号的偏移地址。如:MOVBX,OFFSETDA1等价于:LEABX,DA1在DOS的9号功能调用中经常用到此运算符。③TYPE:取变量或标号的类型属性值。其值与变量或标号的类型关系为:变量或标号返回值变量或标号返回值BYTE1QWORD8WORD2TWORD10DWORD3NEAR-1(0FFH)FWORD4FAR-2(0FEH)④LENGTH:取变量相同类型的个数。依据数据定义伪指令后第一个表达式的形式而定。为NDUP(?)时,取N;否则取1⑤SIZE:取变量所包含的总字节数。SIZE=LENGTH*TYPE例:某数据段定义如下:ADW100DUP(?),1200HBDB1,2,3,100DUP(0)CDB‘ABCD’指令:MOVAL,TYPEAMOVBL,TYPEBMOVCL,TYPECMOVAH,LENGTHAMOVBH,LENGTHBMOVCH,LENGTHCMOVDX,SIZEAMOVSI,SIZEBMOVDI,SIZEC执行后,AX=BX=CX=DX=SI=DI=(5)修改属性运算符修改属性运算符也叫综合运算符、合成运算符、属性定义符等。①段操作符:用来临时给一个存储器操作数指定一个段属性(段超越)例:MOVAX,ES:[BX]②PTR:用来临时指定或修改存储器操作数的类型。PTR本身不分配存储单元,仅给已分配的存储单元赋予新的属性。以保证运算时操作数类型的匹配。常与类型BYTE、WORD、NEAR、FAR等连用。例:N1DB15H,36HN2DW1122H,3344HLO:MOVAX,WORDPTRN1MOVBL,BYTEPTRN2执行结果:AX=3645H,BL=22H例:MOV[BX],10H此指令将立即数10H送入BX间址指定的存储单元,但由于10H既可以是10H,也可以是0010H,所以汇编时认为错误。一般用BYTE或WORD指定:MOV[BX],BYTEPTR10HMOVWORDPTR[BX],10H③THIS:与PTR类似,用来指明类型。且常与EQU连用。例:FIRSTEQUTHISBYTETABLEDW1234H,5678HFIRST的偏移地址与TABLE的偏移地址相同,区别在于FIRST为字节类型,而TABLE为字类型。执行下列指令后,AX=1234H,BL=34HMOVAX,TABLEMOVBL,FIRST④SHORT:用来说明转移类指令中转向地址的属性,指出转向的目标地址与本指令之间的距离在﹣128~+127之间,即限制在短转移范围内。短标号可以用在条件转移指令中,使用短标号的指令比使用近标号的指令少一个字节。⑤HIGH和LOW字节分离符,对一个数或地址表达式,HIGH从中分离出高位字节,LOW从中分离出低位字节。例:K1EQU0ABCDHK2EQU1234HMOVAH,HIGHK1MOVBL,LOWK2等价于:MOVAH,0ABHMOVBL,34H(6)其它运算符其它运算符有(),[],<>,·,MASK和WIDTH等6种。圆括号用来改变运算符的优先级别,()中的运算符具有最高优先级。余下的几种运算符由于用得不多,这里不作介绍。(7)运算符的优先级如果一个表达式同时具有多个运算符,则按以下规则运算:①优先级高的先运算,优先级低的后运算。②优先级相同时按表达式中从左到右的顺序运算。③括号可以提高运算符的优先级,括号内的运算总是在相邻的运算之前进行。各种运算符的优先级如下表:(数字越小,优先级越高)运算符优先级次序表优先级运算符1()[]〈〉·LENGTH,WIDTH,SIZE,MASK2PTR,OFFSET,SEG,TYPE,THIS,CS:,DS:,ES:,SS:3HIGH,LOW4*,/,MOD,SHL,SHR5+,-6EQ,NE,LT,LE,GT,GE7NOT8AND9OR,XOR10SHORT4.2伪指令语句1、数据定义伪指令格式1:变量
本文标题:基于8086的微机原理3b
链接地址:https://www.777doc.com/doc-2567951 .html