版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6.4
8086微处理器汇编程序设计程序设计语言按照形式与功能的不同可分为三种,即机器语言、汇编语言和高级语言。汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫汇编。
——高级语言中称该过程为“解释”或“编译”。执行翻译的程序称为“汇编程序”。.ASM.OBJ.EXE编译连接汇编(编译)程序:MASM.EXE2014/066§6.4.1
8086微处理器汇编伪指令1、伪指令的语句格式1)标号
目标名后面不能用冒号“:”,标号名可以是常量名、变量名、过程名、结构名、记录名等。标号名表示一个常量或存储器地址。2014/0662)伪指令
如定义数据伪指令DB,DW,DD;段定义伪指令SEGMENT;定义过程伪指令PROC;…。它们是伪指令语句要求汇编程序完成的具体操作命令。3)操作数
操作数可以是一个常数(二进制、十进制、十六进制等)、字符串、常量名、变量名、标号、一些专用的符号(如BYTE,FAR,PARA等)。4)注释
必须以分号为开始,它的作用与指令语句的注释字段相同。2014/0662、常数、变量和标号1)常数
常数是没有任何属性的纯数值。2)变量
变量是代表存放在某些存储单元的数据,常以变量名的形式出现在程序中,它可以认为是存放数据的存储单元地址。3)标号
标号是一条指令目标代码的地址,它常作为转移指令(含子程序调用指令)的操作数。2014/0663、运算符1)SEG
功能是求符号名所在段的段基址。2)OFFSET
功能是求符号名所在段的偏移地址。3)TYPE
功能是获得符号名类型值。4)SIZE功能是获得为符号名分配的字节数。5)PTR
功能是定义符号名为新类型。2014/066名字EQU
表达式名字=
表达式给名字定义一个值或其他符号名或一条可执行语句,凡是出现该名字的地方就用定义的数据替代。用EQU赋值的名字不能重新赋值,但可用PURGE释放后重新定义。例:TIMESEQU50BUFDBTIMESDUP(?)
ALPHAEQU256BETA=ALPHA-21)等价定义伪指令4、伪指令2014/0661.DB:定义字节,其后的每个操作数占有一个字节单元,连续存放。BUFFERDB2,3,505H03H02HBUFFER2.DW:定义字,其后的每个操作数占有两个字节;BUFDW2,3,505H00H00H03H00H02HBUF2)内存数据定义伪指令2014/0663.DD:
定义双字,其后每个操作数占4个字节。4.
若仅保留单元,不初始化,用?代替初值;若数据重复,用n
DUP()代替,n为重复次数。STRINGDD
2,3,5ARRAYDB100DUP(?)保留100个字节,首地址为ARRAY,不初始化,即100个字节内均为随机值。2014/0663)段定义伪指令
<段名>SEGMENT
[定位][组合][‘类别’][属性]┆;段体
<段名>ENDS注意:1.完整段定义由SEGMENT和ENDS这一对伪指令实现2.指令后的4个关键字用于确定段的各种属性3.如不指定,则采用默认参数;用途:在汇编语言程序中定义逻辑段,指定段的名称和范围,并指明段的定位类型、组合类型及类别。1.
段定义SEGMENT/ENDS2014/066定位类型:规定逻辑段的起始地址要求。方式PARA:逻辑段地址从段边界开始BYTE:逻辑段地址从字节边界开始WORD:逻辑段地址从字边界开始PAGE:逻辑段地址从页边界开始以上4种边界如下所示:××××××××××××00000000PAGE××××××××××××××××0000PARA×××××××××××××××××××0WORD××××××××××××××××××××BYTE2014/066组合类型:规定本段与其他段的关系NONE:与其他段在逻辑上没有关系。PUBLIC:与其它同名、同类别的段相邻地连在一起。STACK:此段为堆栈段,连接方式与PUBLIC相同。类别:
需用单引号括起来,凡是类型名相同的段在连接时均按先后顺序连接起来。属性类型:规定16位段或32位段。注意:大多数MASM程序使用‘code’、‘data’和‘stack’来分别指名代码段、数据段和堆栈段。2014/066ASSUME<段寄存器名>:NOTHING
;取消段性质的规定。4)指定段址伪指令ASSUME
ASSUME
<段寄存器名>:<段名>[,<段寄存器名>:<段名>…]功能:告诉汇编程序在汇编时,段寄存器CS:DS:SS:和ES:应具有的符号段基址,但是段寄存器实际值(CS除外)还要有传送指令在执行程序时赋值。
ASSUME
CS:CODE,DS:DATA,SS:STACK
2014/066
过程名
PROC
[NEAR/FAR]┆RET┆
过程名
ENDP
功能:把具有独立功能的程序段定义为过程,供其它程序调用。对过程的调用要使用CALL语句,如:
CALL过程名
如果在过程定义中没有写明是NEAR过程或FAR过程,则汇编器将这个过程默认为NEAR过程。5)过程定义伪指令2014/0666)模块定义伪指令1.模块开始伪指令格式:NAME
模块名功能:指明程序模块的开始,并指出模块名,一般取源程序文件名为模块名。2.
模块结束伪指令格式:END
[启动标号或过程名]功能:告诉汇编程序源文件结束,并给出执行程序的入口位置。2014/066例:MYDARASEGMENT ;定义数据段起始语句
……
;定义数据MYDATAENDS ;定义数据段终止语句MYCODESEGMENT ;定义代码段起始语句 ASSUMECS:MYCODE,DS:MYDATA;约定段寄存器和段的关系 START: MOVAX,MYDATA ;装填相应的段寄存器 MOVDS,AX …… ;完成所需功能的程序段MYCODEENDS ;定义代码段终止语句ENDSTART ;程序结束2014/0661.定位伪指令格式:ORG<表达式>功能:把以下语句定义的内存数据或程序,从表达式指定的起点(偏移地址)开始连续存放,直至遇到新的ORG指令。表达式值是一个无符号数2.列表伪指令格式:PAGE行数,行字数功能:为列表文件定义每页行数(10~255)和每行字符数(60~132),默认值是66行,80列7)其它伪指令2014/066在汇编程序中,如果用户程序要与输入输出设备打交道,就要调用现成的程序,这些程序是DOS系统的一部分,随着DOS系统驻留内存,用户需要按照这些程序要求的接口格式调用。返回操作的用DOS系统调用中断指令:INT21H,在用户程序结束时,用下面两条指令:
MOVAH,4CHINT21H§6.4.2
DOS系统功能调用2014/066
8086指令系统中,每执行一条软中断指令INTn,就调用一个相应的中断服务程序。当n=5~1FH时,调用BIOS中的服务程序,当n=20~3FH时,调用DOS中的服务程序。其中,INT21H是一个具有多种功能的服务程序,一般称之为DOS系统功能调用。1、DOS软中断
DOS软中断功能见表6-16,矢量号为20H~27H。2014/0662014/066在汇编程序中最常用的是INT21H中断入口,也称为DOS系统功能调用。这个中断入口中有许多小程序,每个小程序都被编上号,固定完成某一种功能,调用时有一定的格式,因为对某一个小程序而言,输入条件(入口参数)和输出结果(出口参数)的格式都是固定的。用户在使用时,既要给出小程序的编号(AH),又要按照其提供的格式进行调用,才能正确完成操作。2、DOS系统功能调用(INT21H)2014/0661)在显示器上显示单个字符(2号功能)功能:在屏幕的光标处显示单个字符入口参数:要显示字符的ASCII码放在DL中出口参数:无MOVDL,‘A’MOVAH,2INT21H;提供调用功能号;系统功能调用;在屏幕光标处显示字符A运行至此,屏幕上当前光标处显示字符A2014/0662)在屏幕上显示字符串(9号功能)功能:在屏幕上当前光标处输出存储在内存数据段的一串字符串,该字符串以‘$’结束。入口参数:DS:DX指向欲显示字符串的首址出口参数:无DATASEGMENTSTRINGDB‘Iamastudent.$’DATAENDS……MOVDX,OFFSETSTRINGMOVAH,9INT21H;指向字符串首址;提供调用功能号;系统功能调用2014/0663)带显示的键盘输入(1号功能)功能:等待键盘输入,直到按下一个键。入口参数:无出口参数:键入键的ASCII码放在AL中,并在屏幕上显示该键。MOVAH,1INT21HMOV[2000H],AL……;提供调用功能号;系统功能调用程序运行到此停下,等待用户键盘输入.用户从键盘键入的键的ASCII码进入AL中.2014/0664)不带显示的键盘输入(7号功能)功能:等待键盘输入,直到按下一个键。入口参数:无出口参数:键入键的ASCII码放在AL中,但在屏幕上没有显示,常用于输入密码。MOVAH,7INT21HMOV[2000H],AL……;提供调用功能号;系统功能调用程序运行到此停下,等待用户键盘输入用户从键盘键入的键的ASCII码进入AL中该功能与1号功能类似,只是输入的字符不在屏幕上显示。2014/0665)字符串输入(10号功能)功能:等待从键盘输入一串字符到存储区的数据段,直到按下回车结束输入。入口参数:DS:DX指向接收字符串的内存地址的首址,该地址的第一个字节是由用户设置的可输入字符串的最大字符数(含回车)出口参数:存放输入字符串存储区的第二个字节是实际输入的字符数(不含回车),实际输入的字符串从该存储区的第三个字节处开始存放。2014/066DATASEGMENTBUFDB20,20DUP(?)DATAENDS……LEADX,BUFMOVAH,0AHINT21H程序运行到此停下,等待用户键盘输入若输入ABCD<CR>后BUFDX实际字符个数开始存放2014/0666)程序结束,返回DOS(4C号功能)功能:将控制权移交DOS。入口参数:无出口参数:无MOVAH,4CHINT21H2014/066在屏幕上显示What’syourname?,用户输入自己的名字###后显示:Welcome###。DATASEGMENTMEGDB‘What’syourname?’,10,13,’$’MEG1DB'Welcome$'BUFDB30,?,30DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXLEADX,MEGMOVAH,9INT21HLEADX,BUFMOVAH,10INT21HLEADX,MEG1MOVAH,9INT21HXORBH,BHMOVBL,BUF+1MOV[BX+BUF+2],‘$’LEADX,BUF+2MOVAH,9INT21HMOVAH,4CHINT21HMAINENDPCODEENDSENDSTART;输出字符串;接受姓名;输出Welcome;输出姓名;返回DOS输入缓冲区以‘$’结尾显示字符串后回车换行2014/066
例:编程实现多字节加法,如S=3B74AC60F8H+20D59E36C1HF8H60HACH74H3BHC1H36H9EHD5H20H被加数、和加数DATA1DATA2……2014/066CODESEGMENT
ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX
MOVCX,5MOVSI,0CLCLOOPER:MOVAL,DATA2[SI]ADCDATA1[SI],ALINCSIDECCXJNZLOOPERMOVAH,4CHINT21HCODEENDS
ENDSTARTDATASEGMENTDATA1DB0F8H,60H,0ACH,74H,3BHDATA2DB0C1H,36H,9EH,0D5H,20HDATAENDS2014/066特点:计算机执行程序的方式是“从头到尾”逐条执行指令语句,直至程序结束。1、顺序结构程序设计例:
内存10050H单元的内容拆成两段,每段4位,并将它们分别存入内存10051H和10052H单元;即10050H单元中的低4位放入10051H单元的低4位,10050H单元中的高4位放入10052H单元的低4位,而10051H和10052H单元的高4位均为零。§6.4.3
8086微处理器汇编程序设计2014/066流程图:2014/066程序:DATASEGMENT ORG50HData1DB7AHData2DB?Data3DB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATACODEENDSEND START?2014/066程序:START:MOV AX,DATAMOV DS,AXMOV SI,Data1 ;需拆字节的指针(SI)=50HMOV AL,[SI] ;取一个字节→(AL)MOV BL,AL ;(BL)←(AL),内容备份AND AL,0FH ;(AL)的前4位清0MOV SI,Data2 ;(SI)=51HMOV [SI],AL ;把得到的后4位→(10051H)MOV AL,BL ;再取出需拆字节→(AL)MOV CL,4SHR AL,CL ;逻辑右移4次,前4位补0MOV SI,Data3 ;(SI)=52HMOV [SI],AL ;(10052H)←(AL)2014/066
利用条件转移指令,使程序执行到某一指令后,根据条件(即上面运算的情况)是否满足,改变程序执行的次序。特点:先用比较指令、数据操作、位测指令等改变标志寄存器各个标志位,然后用条件转移指令进行分支。例:求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存2800H单元中。
2、分支程序设计2014/066流程图:2014/066CODESEGMENTASSUMECS:CODE,DS:DATA
MOVAX,DATAMOVDS,AXCODEENDS
END CLC
MOV CX,AX SUB AX,BX JC AA MOV DI,2800H MOV [DI],AXLP:JMP LP AA:SUB BX,CX MOV DI,2800H MOV [DI],BX;清除CF;AX←(AX-BX),影响CF;CF=1转AA去执行(AX<BX);结果指针DI=2800H;结果送到2800H和2801H单元;暂停;BX←(BX-CX)2014/066例:编制程序从外设71H端口中取一个数M,判断其值是否在10和20之间,即10≤M<20。如果M≥20,则送0FFH给外设73H端口;如果M<10,则送00H给外设73H;如果10≤M<20,则送88H给外设73H
。开始暂停输出BL值到73号外设去输入71号外设的值AL令BL=88H令BL=00H令BL=0FFHAL值≥
20AL值≥
10是是否否LP1LP22014/066START:IN AL,71H
;将71H端口的字节读入AL CLC ;清除CF CMPAL,10 ;AL←AL-10 JC Lw10 ;小于10转LP1 CMPAL,20 ;AL←AL-20 JC L10to20 ;10≤AL<20转LP2 MOVBL,0FFH
;将FFH送入BL寄存器
JMP LOutLw10:MOVBL,00H JMP LoutL10to20:MOVBL,88HLOut:MOVAL,BL
OUT
73H,AL;将结果的标志数据输出到73H端口
HLT ;暂停2014/066强制CPU重复执行某一指令系列(程序段)的一种程序结构形式。组成:初始化循环体循环控制循环结束例:求两个多字节数之和。两个数位于内存数据段,其偏移量为0050H地址,连续存放,低位在小地址一端,结果放在这两个数之后。设这两个多字节数均为8个字节长。3、循环程序设计2014/066DATASEGMENT ORG0050HLopDat1DB23H,56H,45H,63H,78H,66H,90H,42HLopDat2DB13H,44H,86H,80H,24H,64H,56H,60HDatSumDB8DUP(?)
DATAENDS
CODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARMOVAX,DATAMOVDS,AX2014/066MOV SI,LopDat1 MOV DI,LopDat2MOV BX,DatSum MOV CX,4
CLC
Ad:MOV AX,[SI] ADC AX,[DI] MOV [BX],AX
ADD SI,2 ADD DI,2 ADD BX,2
LOOP Ad
STARTENDP
END;指针(SI)=0050H;指针(DI)=0058H;指针(BX)=0060H;循环(CX)=4;清进位CF=0;(AX)←((SI)),取一个字;(AX)←(AX)+((DI))+CF;存一个字到((BX));(SI)←(SI)+2;(DI)←(DI)+2;(BX)←(BX)+2;(CX)←(CX)-1,若(CX)≠0转Ad2014/066CALLRET4、子程序设计
1)子程序调用与返回2014/0662)子程序设计注意问题(1)现场保护和恢复为避免冲突,应在进入过程时,将该过程所用到的寄存器内容保护起来,称为保护现场。而从过程返回主程序前,再将这些寄存器的内容恢复,称为恢复现场。保护现场和恢复现场通常分别用堆栈压入指令和弹出指令来实现。例如:2014/066SUBPRPROCFAR PUSHAX PUSHBX PUSHCX PUSHDX POPDX POPCX POPBX POPAX RETSUBPRENDP…(2)参数传递:①寄存器传递②存储单元(参数表)传递③堆栈传递2014/066例:AX寄存器中存放着4位十六进制数,将这4位十六进制数分别转换为相应的ASCII码,并依次存放到RESULT数组的4个字节中,要求子程序方法实现。
DATASEGMENT DA1DW3D7EH RESULTDB4DUP(?) DATAENDS
CODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX2014/066
MOV CX,4 LEA SI,DA1 LEA DI,RESULT MOV BX,[SI]NEXT:MOVAX,BX AND AL,0FH
CALL ASC MOV [DI],AL INC DI PUSHCX MOV CX,4 SHRBX,CL POP CX
LOOPNEXT十六进制转换成ASCII码子程序
ASCPROC
CMP AL,0AH JB PL30 ADD AL,07HPL30:ADD AL,30H RET
ASCENDP2014/066
LEA SI,RESULT+3 MOV CX,4 STDLOOP1:LODSB MOV DL,AL MOV AH,02H INT 21H LOOP LOOP1 MOV DL,'H' MOV AH,02H INT 21H MOV AH,4CH INT 21HCODE ENDS END START2014/066例:从自然数1开始累加,直到累加和大于1000为止,统计被累加的自然数的个数,并把统计的个数送入n单元,把累加和送入sum单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 货车租赁协议书样书
- 公租房协议范本
- 机器设备融资租赁合同范本
- 六年级数学上册3分数除法1倒数的认识教案新人教版
- 六年级英语上册Unit2Waystogotoschool第五课时教案人教PEP版
- 第8课 革命先行者孙中山
- 2024招聘临时工聘用条款合同版B版
- 2025年连云港道路货运运输从业资格证模拟考试
- 2025年昆明货运从业资格仿真考题
- 2024庭院房购置合同范本:庭院房产购置合同及后续服务3篇
- 湖北省武汉市青山区2022-2023学年五年级上学期数学期末试卷(含答案)
- 《入侵检测与防御原理及实践(微课版)》全套教学课件
- IT企业安全生产管理制度范本
- 工业传感器行业市场调研分析报告
- 小学生心理健康讲座5
- 上海市市辖区(2024年-2025年小学五年级语文)部编版期末考试((上下)学期)试卷及答案
- 国家职业技术技能标准 X2-10-07-18 陶瓷工艺师(试行)劳社厅发200633号
- 人教版八年级上册生物全册教案(完整版)教学设计含教学反思
- 2024年银行考试-银行间本币市场交易员资格考试近5年真题附答案
- 人教版小学四年级数学上册期末复习解答题应用题大全50题及答案
- 冀教版五年级上册脱式计算题100道及答案
评论
0/150
提交评论