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

下载本文档

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

文档简介

复习1、掌握基本指令:MOVS指令用法和应用范围及对标志位的影响。2、基本前缀:REP、REPE、REPNE、LOOP。

1时间:2011—9月26日(第六周周一)1、为什么要学习汇编语言。2、掌握汇编语言源程序的格式。3、掌握汇编语言中伪指令的定义方法。4、了解“$”、算术运算符、逻辑运算符、关系运算符。2第五章:汇编语言程序设计§5-1汇编语言为什么要用汇编语言写程序?1、非常接近机器语言。2、机器自检、系统初始化、I/O操作仍由汇编语言完成。3、效率高。一、汇编语言的定义与格式1、汇编语言:助记符、符号地址、字母等组成。面向机器的程序设计语言。用一组字母、数字和符号来代替二进制编码。汇编语言用助记符来表示指令的操作码和操作数。用标号或符号代表地址、常量或变量。3用高级语言编写的程序编译或解释程序目标程序用汇编语言编写的程序汇编程序目标程序汇编语言源程序

汇编程序

译码机器码列表文件把汇编语言程序翻译成机器语言程序的过程称为汇编。用汇编语言编写的程序,叫汇编语言源程序,或简称源程序4

MOVCX,5

MOV SI,OFFSETDAT1

MOV DI,OFFSETDAT2

CLC

AGAIN:MOV AL,[SI]

ADC [DI],AL

INC SI

INCDI

DEC CX

JNZ AGAIN

HLT编制两个5字节十六进制数相加,分别存放在DAT1和DAT2单元,结果送回DAT2单元52、汇编语言源程序的格式:以两个5字节十六进制数相加为例

DATA SEGMENT

DAT1 DB 0F8H,60H,0ACH,74H,3BH ;被加数

DAT2 DB 00H,36H,9EH,0D5H,20H ;加数

DATA ENDS

CODE SEGMENT

ASSUMECS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV CX,5

MOV SI,OFFSETDAT1

MOV DI,OFFSETDAT2

CLC

AGAIN: MOV AL,[SI]

ADC [DI],AL

INC SI

INCDI

DEC CX

JNZ AGAIN

MOV AH,4CH

INT 21H

CODE ENDS

END START数据段定义代码段定义返回DOS汇编语言源程序通常有几个段构成,每个段以SEGMENT语句开始,以ENDS语句结束,并分别有一个段名。第一段是数据段,段名DATA,用来定义变量,存放原始数据和运算结果。第二段为代码段,段名为CODE,用来安排执行代码,是用户编程实现各项功能的主要部分。整个源程序必须用END语句结束,它通知汇编程序停止汇编,END后面的标号START指明该程序执行的启动地址。源程序中各段的名字可以任选,段的数目可以根据需要确定.如果用到堆栈段和附加段,在段的定义的时候也要定义出来。6DATA SEGMENT ;定义数据段 DATA1DB0F8H,60H,0ACH,74H,3BH ;被加数 DATA2DB0C1H,36H,9EH,0D5H,20H ;加数DATA ENDS ;数据段结束CODESEGMENT ;定义代码段 ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX ;初始化DS MOV CX,5 ;循环次数送CX MOV SI,0 ;置SI初值为0 CLC ;清CF标志LOOPER: MOV AL,DATA2[SI] ;取一个字节加数 ADC DATA1[SI],AL ;与被加数相加

INC SI ;SI加1 DEC CX ;CX减1 JNZ LOOPER ;若不等于0,转LOOPER

7

MOV AH,4CH INT 21H ;返回DOSCODE ENDS ;代码段结束 END START ;源程序结束

8下面是一个源程序模块的典型段结构形式:STACKSEGMENT ;定义堆栈段

STACKENDS ;堆栈段结束…DATASEGMENT ;定义数据段

DATAENDS ;数据段结束ESEGSEGMENT ;定义附加段

ESEGENDS ;附加段结束CODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATA,SS:STACK,ES:ESEG;段的分配START: ;指令性语句开始(我们第四章学习编写的程序)MOV AH,4CH

INT 21H;返回DOSCODEENDS ;代码段结束ENDSTART ;整个程序结束………93、两类汇编语句(1)指令性语句:能产生目标代码,CPU可以执行的能完成特定功能的语句。(2)指示性语句:不产生目标代码,仅在汇编过程中告诉汇编程序应如何汇编。10指令性语句标号:

指令助记符操作数,操作数;注释格式:指示性语句(伪指令语句)格式:名字伪指令指示符操作数,操作数;注释指令语句中,标号就是指令的符号地址,后面必须有冒号,可以是任选的。指示性语句中,名字与指令的地址无关,后面没有冒号,可能是强制的、任选的或者禁止的。11

伪指令语句没有对应的机器代码,并不像指令语句那样由CPU来执行,它是由汇编程序对源程序汇编期间进行处理的。主要完成变量定义、内存分配、指示程序开始和结束等。数据定义语句:DB、DW、DD标号赋值语句:EQU、=段定义语句:SEGMENT…ENDS段分配语句:ASSUME程序开始、结束语句:START、END起始指令(用于定义偏移地址):ORG强制转换:PTR§3-2伪指令12一、数据定义伪指令格式:变量名助记符操作数…操作数(符号地址)功能:定义数据存储区,其类型由所使用的数据定义伪指令指定。1、DB:定义字节。格式:变量名DB表达式

2、DW:定义字。格式:变量名DW表达式

3、DD:定义双字。格式:变量名DD表达式

演示演示演示数据都是以16进制数的形式存放,并且带符号数都按照补码的形式存储。字和双字存放的时候保持低位字节在低位地址单元,高位字节在高位地址单元。因此:DW的演示应该修改为54H13H

不区分大小写,可以用db、dw、dd131、在数据定义语句中,操作数可以是常量或者常量表达式例1XDB25,42,14H,0,-30YDW123H,8*10,3A60HZDD3750H,0FFADH,1525=19H42=2AH[-30]补码=0E2H([+30]补码=00011110B,[-30]补码=11100001B+1=11100010B=0E2H)123H=0123H8*10=80=50H=0050H3750H=00003750H0FFADH=0000FFADH15=0FH=0000000FHXYZ19H2AH14H00H0E2H23H01H50H00H60H3AH50H37H00H0FFH0ADH0FH00H00H00H00H00H00H假如是XDD-30呢??负数扩展,扩展符号位=0FFFFFFE2H142、在数据定义语句中,伪指令可用操作数“?”。作用:分配并保留存储空间,但不存入确定数据例ADB5,?DB?,?,10BDW?,15AB05H-----0AH00H0FH-3、在数据定义语句中,复制操作数nDUP()功能:复制()的内容n次例Y1DB2DUP(11,?,15)Y2DW3DUP(0525H,?)Y1是以DUP后括号内容重复2次Y2是以DUP后括号内容重复3次Y1Y20BH0FH-0BH0FH25H05H--25H05H--25H05H--15POWERS4、在数据定义语句中,可以定义一个表或者一个字符串例定义1~5的平方值表POWERSDB1,4,9,16,25例定义一个字符串‘Good’STRINGDB‘Good’G=47Ho=6FHo=6FHd=64HSTRING01H04H09H10H19H47H6FH6FH64H字符串编译成对应的ASCII码,为一个字节,串定义字符串2个以上必须用DB一种是分别定义,用逗号格开;另一种是字符串前后加单引号。161、EQU等值定义语句(只允许定义一次)语句格式符号名

EQU

表达式例:PT1EQU124(PT1=124)用PT1代替124,把124这个数值赋予PT1但只能定义一次二、符号定义语句2、“=”(可以重复定义)语句格式变量名或标号

=

表达式功能

等号伪指令的功能与EQU基本相同,只是使用等号“=”定义过的符号可以被重新定义,使其具有新的值。例:PT1=15PT1=18;PT1被重新定义

3、PURGE取消EQU定义后可以重新定义PT1EQU124PURGEPT1PT1EQU345171、段定义伪指令一般格式

段名SEGMENT(段的开始)……

段名ENDS(段的开始)例:定义段DATADATA SEGMENTDAT1 DB1,2,3,4DATA ENDS段的开始和结束段名要保持一致三、段定义的伪指令2、段的分配ASSUME用来指明段名和段寄存器DS、ES、CS、SS、的关系,即段名与哪个段相对应要指出来。18例:DATASEGMENT……DATAENDSESTG SEGMENT……ESTG ENDSSTACKSEGMENT……STACKENDSCODESEGMENT ASSUME DS:DATA,ES:ESTG,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXMOVAX,ESTGMOV ES,AXMOV AX,STACKMOV SS,AX

MOV AX,1234H……MOVAH,4CHINT21H说明一个段,但如何将DATA段首地址(段基址)赋给DS呢将段基址赋给各段而代码段CS不需要有指令为其定义,由汇编编译器自动生成CODEENDS ENDSTART191、ORG起始指令,用于定义偏移地址例:DATA SEGMENT

ORG 2000HX DW 0725HY DW 1204HDATA ENDS四、常用伪指令若没有ORG指令就默认为起始于0000H25H07H04H12HXY2000H2002H20

ORG 0000HA0 DW 1000H,1234H,80H,0FFH ORG 1000HA1 DB 1,2,3,0AH,-1,0DFH,9,0 DS:0000001034128000FF00 ……DS:10000102030AFFDF0900212、强制转换PTR变量/标号改变类型例:MOV WORDPTR[BX],10H[BX]=0010H,将10H转化为一个字M DW1234HMOV AL,BYTEPTRMAL=34H22例:在地址偏移量为3000H的ALF单元开始,存放两个非压缩的BCD码,将其转化为ASCII码(38H,39H),存放在接下来的BLF开始的单元中。DATASEGMENTORG3000HALFDB08H,09HBLFDB2DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAH,ALFMOVAL,ALF+1

ORAX,3030HMOVBLF,AXMOVAH,4CHINT21HCODEENDSENDSTART2324从程序看出,汇编语言源程序通常有几个段构成,每个段以SEGMENT语句开始,以ENDS语句结束,并分别有一个段名。第一段是数据段,段名DATA,用来定义变量,存放原始数据和运算结果。第二段为代码段,段名为CODE,用来安排执行代码,是用户编程实现各项功能的主要部分。整个源程序必须用END语句结束,它通知汇编程序停止汇编,END后面的标号START指明该程序执行的启动地址。源程序中各段的名字可以任选,段的数目可以根据需要确定.如果用到堆栈段和附加段,在段的定义的时候也要定义出来。1、汇编语言源程序的格式:总结25DATASEGMENT ;定义数据段

DATAENDS ;数据段结束ES

温馨提示

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

评论

0/150

提交评论