微机原理与应用第5章1节2012SGQ_第1页
微机原理与应用第5章1节2012SGQ_第2页
微机原理与应用第5章1节2012SGQ_第3页
微机原理与应用第5章1节2012SGQ_第4页
微机原理与应用第5章1节2012SGQ_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1复习n1、掌握基本指令:、掌握基本指令:MOVS指令用法和应用范指令用法和应用范围及对标志位的影响。围及对标志位的影响。n2、基本前缀:、基本前缀:REP、REPE、REPNE、LOOP。 2时间:时间:20119月月26日(第六周周一)日(第六周周一)1、为什么要学习汇编语言。、为什么要学习汇编语言。2、掌握、掌握汇编语言源程序的格式。汇编语言源程序的格式。3、掌握掌握汇编语言中伪指令的定义方法。汇编语言中伪指令的定义方法。4、 了解了解“$”、3第五章:汇编语言程序设计第五章:汇编语言程序设计51汇编语言汇编语言为什么要用汇编语言写程序?为什么要用汇编语言写程序?1、非常接近机器语言非常

2、接近机器语言。2、机器自检、系统初始化、机器自检、系统初始化、I/O操作操作仍由汇编语言完成。仍由汇编语言完成。3、效率高、效率高。一、汇编语言的定义与格式一、汇编语言的定义与格式1、汇编语言、汇编语言:助记符、符号地址、字母助记符、符号地址、字母等组成。等组成。面向机器的程序设计语言面向机器的程序设计语言。用一组字母、数字和符号来代替二进制编码。用一组字母、数字和符号来代替二进制编码。汇编语言用汇编语言用助记符助记符来表示来表示指令的操作码和操作数指令的操作码和操作数。用用标号或符号标号或符号代表代表地址、常量或变量。地址、常量或变量。4用高级语言用高级语言编写的程序编写的程序编译或解释编译

3、或解释程序程序目标程序目标程序用汇编语言用汇编语言编写的程序编写的程序汇编程序汇编程序目标程序目标程序汇编语言汇编语言源程序源程序 汇编程序汇编程序 译码译码机器码列表机器码列表文件文件把汇编语言程序翻译成机器语把汇编语言程序翻译成机器语言程序的过程称为言程序的过程称为汇编汇编。用汇编语言编写的程序用汇编语言编写的程序,叫叫汇编语言源程序汇编语言源程序,或简称或简称源程序源程序5 MOV CX, 5 MOV SI, OFFSET DAT1 MOV DI, OFFSET DAT2 CLC AGAIN:MOV AL, SI ADC DI, AL INC SI INC DI DECCX JNZAGA

4、IN HLT编制两个编制两个5字节十六进制数相加,分别存放在字节十六进制数相加,分别存放在DAT1和和DAT2单元,结果送回单元,结果送回DAT2单元单元2、汇编语言源程序的格式、汇编语言源程序的格式:以两个:以两个5字节十六进制数相加为例字节十六进制数相加为例DATASEGMENT DAT1DB0F8H, 60H, 0ACH, 74H, 3BH;被加数被加数 DAT2DB00H, 36H, 9EH, 0D5H, 20H;加数加数DATAENDSCODESEGMENT ASSUME CS:CODE, DS:DATASTART: MOVAX, DATA MOVDS, AX MOV CX, 5 M

5、OVSI, OFFSET DAT1 MOVDI, OFFSET DAT2 CLCAGAIN: MOVAL, SI ADC DI, AL INC SI INC DI DECCX JNZAGAIN MOV AH, 4CH INT21HCODEENDS END START数据段定义数据段定义代码段定义代码段定义返回返回DOS汇编语言源程序通常有几个段构成,每个汇编语言源程序通常有几个段构成,每个段以段以 SEGMENT语句语句开始开始,以,以ENDS语句语句结束结束,并分别有一个段名。,并分别有一个段名。 第一段是第一段是数据段数据段,段名,段名DATA,用来,用来定义变量,存放原始数据和运算结果。

6、第定义变量,存放原始数据和运算结果。第二段为二段为代码段代码段,段名为,段名为CODE,用来安排,用来安排执行代码,是用户编程实现各项功能的主执行代码,是用户编程实现各项功能的主要部分。要部分。 整个源程序必须用整个源程序必须用END语句结束语句结束,它,它通知汇编程序停止汇编,通知汇编程序停止汇编,END后面的标号后面的标号START指明该程序执行的启动地址。指明该程序执行的启动地址。 源程序中各段的名字可以任选,段的源程序中各段的名字可以任选,段的数目可以根据需要确定数目可以根据需要确定.如果用到堆栈段如果用到堆栈段和附加段,在段的定义的时候也要定义出和附加段,在段的定义的时候也要定义出来

7、。来。7DATASEGMENT;定义数据段;定义数据段DATA1 DB 0F8H,60H,0ACH,74H,3BH;被加数;被加数DATA2 DB 0C1H,36H,9EH,0D5H,20H ;加数;加数DATAENDS ;数据段结束;数据段结束CODE SEGMENT ;定义代码段;定义代码段ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AX ;初始化;初始化DS MOV CX,5 ;循环次数送;循环次数送CXMOV SI,0 ;置;置SI初值为初值为0 CLC ;清;清CF标志标志LOOPER:MOV AL,DATA2SI ;取一个字节加数;

8、取一个字节加数ADC DATA1SI,AL ;与被加数相加;与被加数相加 INC SI ;SI加加1 DEC CX ;CX减减1JNZ LOOPER ;若不等于;若不等于0, 转转LOOPER8MOV AH,4CH INT 21H;返回;返回DOSCODE ENDS ;代码段结束;代码段结束 END START ;源程序结束;源程序结束 9下面是一个源程序模块的典型段结构形式:下面是一个源程序模块的典型段结构形式: STACK SEGMENT ;定义堆栈段;定义堆栈段 STACK ENDS ;堆栈段结束;堆栈段结束DATA SEGMENT;定义数据段;定义数据段 DATA ENDS;数据段结束

9、;数据段结束 ESEG SEGMENT ;定义附加段;定义附加段 ESEG ENDS;附加段结束;附加段结束 CODE SEGMENT ;定义代码段;定义代码段ASSUME CS:CODE, DS:DATA,SS:STACK,ES:ESEG ;段的分配段的分配 START: ;指令性语句开始(我们第四章学习编写的;指令性语句开始(我们第四章学习编写的 程序)程序) MOV AH, 4CH INT21H; 返回返回DOS CODE ENDS ;代码段结束;代码段结束 END START ;整个程序结束;整个程序结束103、两类汇编语句、两类汇编语句(1 1)指令性语句:能产生目标代码,)指令性语

10、句:能产生目标代码,CPUCPU可以执行的能完可以执行的能完成特定功能的语句。成特定功能的语句。(2 2)指示性语句:不产生目标代码,仅在汇编过程中告诉)指示性语句:不产生目标代码,仅在汇编过程中告诉汇编程序应如何汇编。汇编程序应如何汇编。11指令性语句指令性语句标号标号: 指令指令助记符助记符 操作数,操作数操作数,操作数 ;注释;注释格式:格式:指示性语句(伪指令语句)指示性语句(伪指令语句)格式:格式:名字名字 伪指令伪指令指示符指示符 操作数,操作数操作数,操作数 ;注释;注释指令语句指令语句中,标号就是指令的符号地址,后面中,标号就是指令的符号地址,后面必须有冒号必须有冒号,可以是任

11、选的。,可以是任选的。指示性语句指示性语句中,名字与指令的地址无关,后面中,名字与指令的地址无关,后面没有冒号没有冒号,可能是强制的、任选的,可能是强制的、任选的或者禁止的。或者禁止的。12 伪指令伪指令语句没有对应的机器代码,并不像指令语语句没有对应的机器代码,并不像指令语句那样由句那样由CPU来执行,它是由汇编程序对源程序汇编来执行,它是由汇编程序对源程序汇编期间进行处理的。期间进行处理的。主要完成变量定义、内存分配、指主要完成变量定义、内存分配、指示程序开始和结束等。示程序开始和结束等。数据定义语句:数据定义语句:DB、DW、DD标号赋值语句:标号赋值语句:EQU、段定义语句:段定义语句

12、:SEGMENTENDS段分配语句:段分配语句:ASSUME程序开始、结束语句:程序开始、结束语句:START、END起始指令(用于定义偏移地址):起始指令(用于定义偏移地址):ORG强制转换强制转换 :PTR32伪指令伪指令13一、数据定义伪指令一、数据定义伪指令格式:变量名格式:变量名 助记符助记符 操作数操作数 操作数操作数 (符号地址)(符号地址)功能功能:定义数据存储区,其类型由所使用的数据定义伪指令指定。:定义数据存储区,其类型由所使用的数据定义伪指令指定。1、DB:定义定义字节字节 。格式:。格式:变量名变量名 DB 表达式表达式 2、DW:定义定义字。字。格式:格式:变量名变量

13、名 DW 表达式表达式 3、DD:定义:定义双字。双字。格式:格式:变量名变量名 DD 表达式表达式 演示演示演示演示演示演示数据都是以数据都是以16进制数进制数的形式存放,并且带符号数都按照的形式存放,并且带符号数都按照补码补码的形式存储。的形式存储。字和双字存放的时候保持字和双字存放的时候保持低位字节低位字节在在低位地址低位地址单元,单元,高位字节在高位地址高位字节在高位地址单元。单元。因此:因此:DW的演示的演示应该修改为应该修改为 54H 13H 不区分大小写,可以用不区分大小写,可以用db、dw、dd141、在数据定义语句中,操作数可以是、在数据定义语句中,操作数可以是常量常量或者或

14、者常量表达式常量表达式例例1 X DB 25,42,14H,0,30 Y DW 123H,8*10,3A60H Z DD 3750H,0FFADH,1525=19H42=2AH-30补码补码0E2H(+30 补码补码=00011110B, -30补码补码=11100001B+1 =11100010B=0E2H)123H=0123H8*10=80=50H=0050H3750H=00003750H0FFADH=0000FFADH15=0FH=0000000FHXYZ19H2AH14H00H0E2H23H01H50H00H60H3AH50H37H00H0FFH0ADH0FH00H00H00H00H0

15、0H00H假如是假如是X DD -30呢?呢?负数扩展,扩展符号位负数扩展,扩展符号位0FFFFFFE2H152、在数据定义语句中,伪指令可用操作数、在数据定义语句中,伪指令可用操作数“?”。作用:分配并保留存储空间,但不存入确定数据作用:分配并保留存储空间,但不存入确定数据例例 A DB 5, ? DB ?, ?, 10 B DW ?, 15AB05H0AH00H0FH3、在数据定义语句中,复制操作数、在数据定义语句中,复制操作数 n DUP () 功能:复制()的内容功能:复制()的内容n次次例例 Y1 DB 2 DUP (11,?,15) Y2 DW 3 DUP (0525H,?)Y1是

16、以是以DUP后括号内容重复后括号内容重复2次次Y2是以是以DUP后括号内容重复后括号内容重复3次次Y1Y20BH0FH0BH0FH25H05H25H05H25H05H16POWERS4、在数据定义语句中,可以定义一个、在数据定义语句中,可以定义一个表表或者一个或者一个字符串字符串例例 定义定义15的平方值表的平方值表POWERS DB 1,4,9,16,25例例 定义一个字符串定义一个字符串 Good STRING DB Good G=47Ho=6FHo=6FHd=64HSTRING01H04H09H10H19H47H6FH6FH64H字符串编译成对应的字符串编译成对应的ASCII码,为一个字

17、节码,为一个字节,串定义字符串,串定义字符串2个以上个以上必须用必须用DB一种是一种是分别定义,用逗号格开分别定义,用逗号格开;另一种是;另一种是字符串前后加字符串前后加单引号。单引号。171、EQU 等值定义语句等值定义语句(只允许定义一次只允许定义一次)语句格式语句格式 符号名符号名 EQU 表达式表达式例:例: PT1 EQU 124 (PT1=124) 用用PT1代替代替124,把,把124这个数值赋予这个数值赋予PT1但只能定义一次但只能定义一次二、符号定义语句二、符号定义语句2、“=”(可以重复定义)(可以重复定义)语句格式语句格式 变量名或标号变量名或标号 = 表达式表达式功能功

18、能 等号伪指令的功能与等号伪指令的功能与EQU基本相同,只是使用等号基本相同,只是使用等号“=”定义过的符号定义过的符号可以被重新定义,使其具有新的值。可以被重新定义,使其具有新的值。例:例: PT1=15 PT1=18;PT1被重新定义被重新定义 3、PURGE取消取消EQU定义后可以重新定义定义后可以重新定义PT1 EQU 124PURGE PT1PT1 EQU 345181、段定义伪指令一般格式、段定义伪指令一般格式 段名段名 SEGMENT (段的开始)(段的开始) 段名段名 ENDS (段的开始)(段的开始)例:定义段例:定义段DATADATA SEGMENTDAT1 DB 1,2,

19、3,4DATA ENDS段的开始和结束段的开始和结束段名要保持一致段名要保持一致三、段定义的伪指令三、段定义的伪指令2、段的分配、段的分配 ASSUME用来指明段名和段寄存器用来指明段名和段寄存器DS、 ES、 CS、 SS、的、的关系关系,即段名与哪个段,即段名与哪个段相对应要指出来。相对应要指出来。19例:例:DATA SEGMENTDATA ENDSESTG SEGMENTESTG ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUMEDS:DATA, ES:ESTG, SS:STACK, CS:CODESTART:MOVAX, DATA MOV DS

20、, AX MOV AX, ESTG MOV ES, AX MOV AX, STACK MOV SS, AX MOV AX, 1234HMOV AH,4CHINT 21H说明一个段,但如何将说明一个段,但如何将DATA段首地址(段基址)赋给段首地址(段基址)赋给DS呢呢将段基址赋给各段将段基址赋给各段而代码段而代码段CS不需要有指令为不需要有指令为其定义,由汇编编译器自动其定义,由汇编编译器自动生成生成CODE ENDSEND START201、ORG 起始指令起始指令,用于定义偏移地址,用于定义偏移地址例:例: DATA SEGMENT ORG2000H XDW0725H YDW1204H D

21、ATA ENDS四、常用伪指令四、常用伪指令若没有若没有ORG指令就默认为起始于指令就默认为起始于0000H25H07H04H12HXY2000H2002H21ORG0000HA0 DW1000H,1234H,80H,0FFHORG1000HA1 DB1,2,3,0AH,-1,0DFH,9,0DS:0000 00 10 34 12 80 00 FF 00DS:1000 01 02 03 0A FF DF 09 00222、强制转换、强制转换 PTR 变量变量/标号标号 改变类型改变类型例:例: MOVWORD PTRBX, 10HBX=0010H,将,将10H转化为一个字转化为一个字 MDW

22、1234H MOV AL, BYTE PTR MAL=34H23例:在地址偏移量为例:在地址偏移量为3000H的的ALF单元开始,存放两个单元开始,存放两个非压缩非压缩的的BCD码,将其转化为码,将其转化为ASCII码(码(38H,39H),存放在接下),存放在接下来的来的BLF开始的单元中。开始的单元中。DATA SEGMENTORG 3000HALF DB 08H,09HBLF DB 2 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX, DATA MOV DS, AX MOV AH,ALF MOV AL,ALF+

23、1 OR AX,3030H MOV BLF,AX MOV AH,4CH INT 21H CODE ENDS END START2425n从程序看出,汇编语言源程序通常有几个段构成,每从程序看出,汇编语言源程序通常有几个段构成,每个段以个段以 SEGMENT语句语句开始开始,以,以ENDS语句语句结束结束,并,并分别有一个段名。第一段是分别有一个段名。第一段是数据段数据段,段名,段名DATA,用,用来定义变量,存放原始数据和运算结果。第二段为来定义变量,存放原始数据和运算结果。第二段为代代码段码段,段名为,段名为CODE,用来安排执行代码,是用户编,用来安排执行代码,是用户编程实现各项功能的主要

24、部分。程实现各项功能的主要部分。n 整个源程序必须用整个源程序必须用END语句结束语句结束,它通知汇编,它通知汇编程序停止汇编,程序停止汇编,END后面的标号后面的标号START指明该程序执指明该程序执行的启动地址。源程序中各段的名字可以任选,段的行的启动地址。源程序中各段的名字可以任选,段的数目可以根据需要确定数目可以根据需要确定.如果用到堆栈段和附加段,在如果用到堆栈段和附加段,在段的定义的时候也要定义出来。段的定义的时候也要定义出来。1、汇编语言源程序的格式:、汇编语言源程序的格式:总结总结nDATA SEGMENT;定义数据段;定义数据段n n DATA ENDS;数据段结束;数据段结束n ESEG SEGMENT ;定义附加段;定义附加段n n ESEG ENDS;附加段结束;附加段结束n CODE SEGMENT ;定义代码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论