微机原理第4章8086汇编语言程序设计.ppt

上传人:工**** 文档编号:567687406 上传时间:2024-07-22 格式:PPT 页数:54 大小:223.16KB
返回 下载 相关 举报
微机原理第4章8086汇编语言程序设计.ppt_第1页
第1页 / 共54页
微机原理第4章8086汇编语言程序设计.ppt_第2页
第2页 / 共54页
微机原理第4章8086汇编语言程序设计.ppt_第3页
第3页 / 共54页
微机原理第4章8086汇编语言程序设计.ppt_第4页
第4页 / 共54页
微机原理第4章8086汇编语言程序设计.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《微机原理第4章8086汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《微机原理第4章8086汇编语言程序设计.ppt(54页珍藏版)》请在金锄头文库上搜索。

1、第4章8086汇编语言程序设计n8086汇编语言的语句n8086汇编中的伪指令n8086汇编中的运算符n汇编语言程序设计n宏定义与宏调用n汇编语言程序设计实例1418086汇编语言的语句汇编语言由指令性语句和指令性语句组成n一、指令性语句格式标号:操作码操作数1,操作数2;注释n二、指示性语句格式标识符(名字)指示符(伪指令)表达式n三、有关属性存储器操作数的属性有三种:段值、段内偏移量和类型。2428086汇编中的伪指令n一、符号定义语句n1、等值语句格式:符号名EQU表达式例: PORT EQU1234BUFFEQUPORT58MEM EQUDS:BP20HCOUNTEQUCXABCEQU

2、AAA32、等号语句格式:NUM34NUM3414n二、变量定义语句格式:符号名DB/DW/DD表达式5n1、定义一组数据例1:BUFFDW1234H,0ABCDH,8EHDW79DH,7B6AHn2、定义一串字符例2:STRDBWelcome!n3、定义保留存储单元例3:SUMDW?,?6n4、复制操作复制操作符DUP(Duplication)可预置重复的数值例4:ALL_ZERODB0,0,0,0,0用复制操作可改为:ALL_ZERODB5DUP(0)n5、将已定义的地址存入内存单元例5:LITDDCYCCYC:MOVAX,BX7n三、段定义语句1、段定义语句格式:段名SEGMENT定位类

3、型组合类型类别段名ENDS82、段假设语句ASSUME段寄存器名:段名,3、ORG伪指令与地址计数器$ORG伪指令格式:ORG4、PUBLIC和EXTRN伪指令9n四、过程定义语句过程名PROCNEAR/FARRET过程名ENDP10438086汇编中的运算符一、常用运算符和操作符1、算术运算符(加加)、(减减)、*(乘乘)、/(除除)、MOD(求余)。求余)。2、逻辑运算符AND、OR、XOR、NOT113、关系运算符EQ(相等)、NE(不等、)LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。例:例:MOVDL,10HLT16例:例:ANDAX,555GT222124、分析操

4、作符1)SEG操作符例:例:MOVAX,SEGBUFF2)OFFSET操作符例:例:MOVBX,OFFSETBUFF133)TYPE操作符对于变量有对于变量有3种:种:1字节型;字节型;2字型;字型;4双字型双字型;对对于于标标号号有有2种种:1NEAR(段段内内),2FAR(段间)。段间)。4)LENGTH操作符5)SIZE操作符SIZETYPELENGTH145、综合运算符(合成操作符)1)PTR运算符格式:类型PTR表达式例:例:INCWORDPTRBX2)THIS操作符格式:THIS类型(或属性)例:例:FIRSTEQUTHISBYTE SECONDDW100DUP(?)1544汇编语

5、言程序设计常用的汇编语言程序框架:常用的汇编语言程序框架:DATASEGMENT;定义数据段定义数据段VAL1DB12H,8EH;定义变量定义变量DATAENDS;数据段结束数据段结束CODE SEGMENT;定义代码段定义代码段ASSUMEDS:DATA,CS:CODE;段属性说明段属性说明START:MOVAX,DATA;初始化初始化DSMOVDS,AXMOVAX,4C00H;返回返回DOSINT21HCODEENDS;代码段结束代码段结束ENDSTART ;源程序结束源程序结束16一、汇编语言程序设计基本步骤分析问题绘制流程图编写程序检查和调试二、汇编语言程序的基本结构171、顺序结构1

6、8n2、分支结构193、循环结构2021n4、子程序Call proc1ret2245宏定义与宏调用1、宏定义宏指令名MACROENDM2、宏调用宏指令名实元表23例例:MULTYMACROOPR1,OPR2,RESULT;宏定义宏定义PUSHAXMOVAL,OPR1MOVAH,OPR2IMULOPR2MOVRESULT,AXPOPAXENDMDATA SEGMENTXXDB12YYDB34ZZDW?MULTYXX,YY,ZZ;宏调用,实参替代虚参宏调用,实参替代虚参244.6汇编语言程序设计实例1、算术运算例题例1:在偏移首地址为ARRAY的内存储区,有100个字型数据,要求将数组的每个元素

7、加1,试编写汇编语言程序完成该要求。DATASEGMENTARRAYDW100DUP(?);定义100个字型随机数DATAEDNSCODE SEGMENTASSUMEDS:DATA,CS:CODE25LEABX,ARRAY;设设数数组组首首地地址址指指针针MOVCX,LENGTHARRAY;数数组组数数据据长长AA1:INCWORDPTRBX,1;指指定定为为字字型数加型数加1ADDBX,2;移动地址指针移动地址指针LOOPAA1;循环操作循环操作完整程序请参看教材完整程序请参看教材26例2:有两个无符号字节型数组,设数组元素个数相等,编程将数组中的对应元素相加,结果存入另一内存区。DATAS

8、EGMENTM1 DB20DUP(?)M2 DB20DUP(?)M3 DW20DUP(0)DATAENDSCODESEGMENT27LEASI,M1;设数组1的地址指针LEADI,M2;设数组2的地址指针LEABX,M3;设结果区的地址指针MOVCX,20AA1:MOVAL,SIADDAL,DIMOVBX,ALADCBYTEPTRBX+1,0;存结果的进位INCSIINCDIADDBX,2LOOPAA1282、逻辑处理题例1:将寄存器AL中高、低4位交换MOVAL,0ABHMOVCL,4ROLAL,CL;移出位补充移空位4次29例2:将AX中的内容按相反顺序存入BX中MOVAL,1234HMO

9、VCX,16AA1:SHLAX,1;移出的位进到CFRCRBX,1;AX中移出的位进入BXLOOPAA1303、代码转换例题例1:编程将以$结束的字符串中的小写字母改为大写字母。DATASEGMENTSTRDBheLLo,eveRyboBY!,$DATAENDS31LEABX,STRA1:MOVAL,BXCMPAL,$;是$符,则结束JEDONECMPAL,aJBNEXT;低于,则为大写字母CMPAL,zJANEXT;高于,则不是字母SUBAL,20H;将小写字母改为大写MOVBX,ALNEXT:INCBXJMPA132例2:十六进制数到十进制数的转换。除10取余法33 MOVAX,4B6CH

10、MOVCX,0;统计除法次数MOVBX,10;A1:MOVDX,0;被除数扩展为32位DIVBXPUSHDX;将转换好的数存入堆栈INCCXORAX,AX;转换直到商为0JNZA134n4、表格处理题、表格处理题例例1:编程序将:编程序将09的数字转换成所要求的密码的数字转换成所要求的密码明码和密码的映射关系为:明码和密码的映射关系为:01234567892716908345DATASEGMENTTABLEDB2,7,1,6,9,0,8,3,4,5;密码表密码表VAL1DB8,4,1,7,5;被加密码(明码)被加密码(明码)VAL2DB5DUP(?)DATAENDS35MOVSI,OFFSET

11、VAL1MOVDI,OFFSETVAL2MOVCX,5LEABX,TABLE;表格首地址指针A1:MOVAL,SI;取明码XLAT;转换为密码MOVDI,ALINCSIINCDILOOPA1366、按数据大小排序题例1:编程序实现,从一串带符号字型数据中找出最大值。DATASEGMENTBLOCKDW762EH,6A8BH,664AH,0B945H,85DHCOUNTEQU($BLOCK)2DATAENDS37LEASI,BLOCKMOVCX,COUNTMOVAX,SI;取第1个数DECCX;准备与下个数比较AA1:ADDSI,2CMPAX,SI;与下个数比较JGAA2;前一个数大,则保留下次

12、再比MOVAX,SI;否则,取后一个数下次再比AA2:LOOPAA1384.7DOS功能调用与子程序设计调用过程为:DOS功能调用号送AH寄存器;如果需要,按要求给定输入参数(有的不需要输入参数);写入中断指令INT21H。调用结束,按功能使用其输出参数。391、单字符输入1号 功能:从键盘输入1个字符输入参数:无输出参数:AL=ASCII码402、单字符输出2号功能:在屏幕上显示1个字符(ASCII码)输入参数:DL=ASCII码输出参数:无例:从键盘输入两个1位十进制数,求两数之和并在屏幕上显示结果。41MOVAH,1;DOS调用输入第一个数INT21HMOVBL,AL ;保存输入的第一个

13、数MOVAH,1INT21HADDAL,BL ;两个ASCII码相加AAA;调整加法结果为非压缩BCD数MOVDL,ALADDDL,30H;加法结果转换成ASCII码MOVAH,2 ;DOS调用输出到屏幕INT21H423、多字符输入0AH功能:多个字符输入到缓冲区输入参数:DS:DX=输入缓冲区首地址输出参数:DS:DX=输入字符串所在缓冲区地址434、多字符输出、多字符输出9号号功功能:多个字符输出到屏幕显示能:多个字符输出到屏幕显示输入参数:输入参数:DS:DX=输出字符缓冲区首地址输出字符缓冲区首地址输出参数:无输出参数:无例1:在屏幕上显示一串字符。DATASEGMENTBUFFDB

14、Howdoyoudo?,0DH,0AH,$DATAENDS44 CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,BUFFMOVAH,9INT21H455、单字符输入、单字符输入/输出输出6号号6号号DOS功能实际上是功能实际上是1号和号和2号功能号功能的组合,当的组合,当DL寄存器的内容为寄存器的内容为0FFH时,时,6号功能与号功能与1号功能同,即从键盘输入单号功能同,即从键盘输入单个字符;而当个字符;而当DL寄存器中放入字符的寄存器中放入字符的ASCII值,它就是值,它就是2号功能。号功能。466、过程终止、过程终

15、止4CH号号该调用的功能是结束当前程序,并返该调用的功能是结束当前程序,并返回调用它的程序,如在回调用它的程序,如在DEBUG状态下运状态下运行,则返回行,则返回DEBUG;如果在;如果在DOS下运行,下运行,则返回则返回DOS。在汇编语言程序结束处放。在汇编语言程序结束处放上上MOVAX,4C00H和和INT21H两条指两条指令,以利于程序执行完毕,返回操作系令,以利于程序执行完毕,返回操作系统控制。统控制。477、子程序设计设计子程序要提供以下信息:子程序的功能调用时需要的输入参数(入口参数)调用后提供的输出参数(出口参数)子程序中所使用的寄存器(以便调用前做必要的保护)48例1:编写一子

16、程序,完成一个2位十六进制数到对应的ASCII码的转换。子程序名:CONHA功能:将2位十六进制数转换成对应的ASCCII码输入参数:AL待转换的数输出参数:BX转换好的ASCII码使用寄存器:AL、AH、BX、CL49CONHAPROCFARMOVAH,AL;保存待转换的数ANDAL,0FH;处理十六进制数低位CMPAL,0AH;是16进制中的字母吗?JBASC1;否,转移ADDAL,07;是,先加7ASC1:ADDAL,30H;转换为ASCII码MOVBL,AL;保存转换好的低位MOVCL,4;移位控制SHRAH,CL;将原数右移,处理高位CMPAH,0AH;是16进制中的字母吗?JBAS

17、C2;否,转移ADDAH,07;是,先加7ASC2:ADDAH,30HMOVBH,AH;保存转换好的高位RETCONHAENDP50例例2:用子程序调用形式,编写从键盘输入:用子程序调用形式,编写从键盘输入4位位16进制数的程序。进制数的程序。n子程序名子程序名:ZHn功功能:检查键盘输入错误,将键入值转换成能:检查键盘输入错误,将键入值转换成16进制数进制数n输入参数:输入参数:ALn输出参数:输出参数:ALn使用寄存器:使用寄存器:BX,CX51CODESEGMENTASSUMECS:CODESTART:MOVCX,4;输入;输入4次次MOVDX,CX;转换转换4次次MOVBX,0;用;用

18、BX保存输入数保存输入数RE1:MOVAH,1;从键盘输入从键盘输入INT21HCALLZH;通过子程序转换;通过子程序转换SHLBX,CL;组合成;组合成16进制数进制数52ADDBL,ALDECDXJNZRE1;循环输入;循环输入4个数个数MOVAX,4C00HINT21H53ZHPROCCMPAL,9;将将ASCII码转换为码转换为16进制进制JBEA2;键入值键入值9(0-9)则减)则减30HCMPAL,a;键入值键入值a(A-F)则减则减37HJBA1SUBAL,20H;值在值在a-f则先减则先减20H,再减再减37HA1:SUBAL,7A2:SUBAL,30HRETZHENDPCODEENDSENDSTART54

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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