8086汇编语言程序设计实用教案

上传人:辰*** 文档编号:78257322 上传时间:2022-04-21 格式:PPT 页数:57 大小:771KB
返回 下载 相关 举报
8086汇编语言程序设计实用教案_第1页
第1页 / 共57页
8086汇编语言程序设计实用教案_第2页
第2页 / 共57页
8086汇编语言程序设计实用教案_第3页
第3页 / 共57页
点击查看更多>>
资源描述
几个(j )概念 汇编语言(hu bin y yn) 汇编语言(hu bin y yn)源程序 汇编 汇编程序第1页/共56页第一页,共57页。41 8086汇编语言(hu bin y yn)的语句 汇编语言由指令性语句和指令性语句组成一、指令性语句格式 标号: 操作码 操作数1, 操作数2 ;注释二、指示性语句格式标识符(名字(mng zi)) 指示符(伪指令) 表达式 三、有关属性 存储器操作数的属性有三种:段值、段内偏移量和类型。第2页/共56页第二页,共57页。42 8086汇编(hubin)中的伪指令 一、 符号(fho)定义语句 1、等值语句 格式:符号(fho)名 EQU 表达式例: PORT EQU 1234 BUFF EQU PORT58 MEM EQU DS:BP20H COUNT EQU CX ABC EQU AAA第3页/共56页第三页,共57页。2、等号语句(yj) 格式: NUM34 NUM341第4页/共56页第四页,共57页。二、变量定义(dngy)语句 格式: 符号名 DB/DW/DD 表达式第5页/共56页第五页,共57页。1、定义(dngy)一组数据 例1: BUFF DW 1234H, 0ABCDH, 8EH DW 79DH, 7B6AH2、定义(dngy)一串字符例2: STR DB Welcome !3、定义(dngy)保留存储单元 例3: SUM DW ? ,?第6页/共56页第六页,共57页。 4、复制操作(cozu)复制操作(cozu)符DUP(Duplication)可预置重复的数值例4: ALL_ZERO DB 0,0,0,0,0用复制操作(cozu)可改为:ALL_ZERO DB 5 DUP(0) 5、将已定义的地址存入内存单元 例5: LIT DD CYC CYC: MOV AX , BX第7页/共56页第七页,共57页。 三、段定义语句 1、 段定义语句格式: 段名 SEGMENT 定位类型 组合(zh)类型 类别 段名 ENDS 只需要掌握 段名 SEGMENT 段名 ENDS第8页/共56页第八页,共57页。2、段假设语句ASSUME 段寄存器名:段名,3、 ORG伪指令与地址(dzh)计数器 $ORG伪指令格式: ORG 4、PUBLIC和 EXTRN伪指令第9页/共56页第九页,共57页。 四、过程定义(dngy)语句 过程名 PROC NEAR/FAR RET 过程名 ENDP第10页/共56页第十页,共57页。43 8086汇编(hubin)中的运算符 一、常用(chn yn)运算符1、算术运算符 (加)、(减)、*(乘)、/(除)、MOD(求余)。2、逻辑运算符 AND、OR、XOR、NOT 第11页/共56页第十一页,共57页。3、关系运算符 EQ(相等(xingdng))、NE(不等、) LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 例: MOV DL , 10H LT 16 例: AND AX , 555 GT 222第12页/共56页第十二页,共57页。 二、 常用(chn yn)的操作符4、分析操作符1)SEG操作符例: MOV AX , SEG BUFF2)OFFSET操作符 例:MOV BX , OFFSET BUFF第13页/共56页第十三页,共57页。3)TYPE操作符 对于变量(binling)有3种: 1 字节型; 2 字型; 4 双字型; 对 于 标 号 有 2 种 : 1 NEAR(段内), 2 FAR(段间)。例: BUFF DB 20H MOV BX , OFFSET BUFF MOV BX,01第14页/共56页第十四页,共57页。4)LENGTH操作符5)SIZE操作符 SIZETYPELENGTH 例:BUFF DB 10DIP(?) MOV CX,LENGTH BUF MOV CX,10 MOV CX,SIZE BUF MOV CX,20第15页/共56页第十五页,共57页。5、综合运算符(合成(hchng)操作符)1)PTR运算符格式: 类型 PTR 表达式例:INC WORD PTR BX 2)THIS操作符格式: THIS 类型(或属性)例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?) 第16页/共56页第十六页,共57页。44汇编语言(hu bin y yn)程序设计 常用的汇编语言(hu bin y yn)程序框架: DATA SEGMENT;定义数据段VAL1 DB 12H , 8EH ;定义变量 DATA ENDS ;数据段结束 CODE SEGMENT;定义代码段 ASSUME DS:DATA , CS: CODE;段属性说明 START: MOV AX , DATA ;初始化DS MOV DS , AX MOV AX , 4C00H ;返回DOS INT 21H CODE ENDS ;代码段结束 END START ;源程序结束第17页/共56页第十七页,共57页。一、汇编语言程序设计(chn x sh j)基本步骤 分析问题 绘制流程图编写程序检查和调试 二、汇编语言程序的基本结构第18页/共56页第十八页,共57页。1、顺序(shnx)结构第19页/共56页第十九页,共57页。 2、分支(fnzh)结构 第20页/共56页第二十页,共57页。3、循环(xnhun)结构 第21页/共56页第二十一页,共57页。第22页/共56页第二十二页,共57页。 4、子程序 Call proc1ret第23页/共56页第二十三页,共57页。45 宏定义(dngy)与宏调用 1、宏定义宏指令名 MACRO ENDM2、宏调用宏指令名 实元表第24页/共56页第二十四页,共57页。例:MULTY MACRO OPR1,OPR2,RESULT;宏定义 PUSH AX MOV AL, OPR1 MOV AH, OPR2 IMUL OPR2 MOV RESULT , AX POP AX ENDM DATA SEGMENTXX DB 12YY DB 34 ZZ DW ? MULTY XX,YY,ZZ ;宏调用(dioyng),实参替代虚参 第25页/共56页第二十五页,共57页。4.6汇编语言(hu bin y yn)程序设计实例 1、算术运算(yn sun)例题 例1:在偏移首地址为ARRAY的内存储区,有100个字型数据,要求将数组的每个元素加1,试编写汇编语言程序完成该要求。 DATA SEGMENTARRAY DW 100 DUP (?) ;定义100个字型随机数DATA EDNSCODE SEGMENTASSUME DS:DATA,CS:CODE第26页/共56页第二十六页,共57页。 LEA BX , ARRAY ;设数组首地址指针(zhzhn) MOV CX , LENGTH ARRAY ;数组数据长AA1: INC WORD PTR BX , 1 ;指定为字型数加1 ADD BX , 2 ;移动地址指针(zhzhn) LOOP AA1 ;循环操作 完整程序请参看教材第27页/共56页第二十七页,共57页。例2: 有两个无符号字节型数组,设数组元素个数相等,编程将数组中的对应元素相加,结果存入(cn r)另一内存区。 DATA SEGMENTM1 DB 20 DUP (?)M2 DB 20 DUP(?)M3 DW 20 DUP (0)DATA ENDSCODE SEGMENT 第28页/共56页第二十八页,共57页。 LEA SI , M1 ; 设数组1的地址指针(zhzhn) LEA DI , M2 ;设数组2的地址指针(zhzhn) LEA BX , M3 ;设结果区的地址指针(zhzhn) MOV CX , 20AA1: MOV AL , SI ADD AL , DI MOV BX ,AL ADC BYTE PTRBX+1 ,0 ;存结果的进位 INC SI INC DI ADD BX , 2 LOOP AA1 第29页/共56页第二十九页,共57页。2、逻辑(lu j)处理题例1:将寄存器AL中高、低4位交换MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位补充移空位4次第30页/共56页第三十页,共57页。例2:将AX中的内容按相反顺序存入(cn r)BX中 MOV AL , 1234H MOV CX , 16AA1: SHL AX , 1 ;移出的位进到CF RCR BX , 1 ;AX中移出的位进入BX LOOP AA1第31页/共56页第三十一页,共57页。3、代码转换例题 例1:编程将以$结束( jish)的字符串中的小写字母改为大写字母。DATA SEGMENTSTR DB heLLo,eveRyboBY !,$DATA ENDS 第32页/共56页第三十二页,共57页。 LEA BX , STRA1: MOV AL ,BX CMP AL , $ ;是$符,则结束 JE DONE CMP AL , a JB NEXT ;低于,则为大写字母(zm) CMP AL ,z JA NEXT ;高于,则不是字母(zm) SUB AL , 20H ;将小写字母(zm)改为大写 MOV BX , ALNEXT: INC BX JMP A1第33页/共56页第三十三页,共57页。例2:十六进制(sh li jn zh)数到十进制数的转换。除10取余法 第34页/共56页第三十四页,共57页。 MOV AX , 4B6CH MOV CX , 0 ;统计除法次数 MOV BX , 10 ;A1: MOV DX , 0 ;被除数扩展(kuzhn)为32位 DIV BX PUSH DX ;将转换好的数存入堆栈 INC CX OR AX , AX ;转换直到商为0 JNZ A1 第35页/共56页第三十五页,共57页。4、表格处理题例1:编程序将09的数字转换成所要求的密码(m m) 明码和密码(m m)的映射关系为:0 1 2 3 4 5 6 7 8 92 7 1 6 9 0 8 3 4 5DATA SEGMENTTABLE DB 2,7, 1, 6 ,9, 0, 8, 3, 4, 5 ;密码(m m)表VAL1 DB 8, 4, 1, 7, 5 ; 被加密码(m m)(明码)VAL2 DB 5 DUP(?)DATA ENDS第36页/共56页第三十六页,共57页。 MOV SI , OFFSET VAL1 MOV DI , OFFSET VAL2 MOV CX , 5 LEA BX , TABLE ;表格首地址(dzh)指针A1: MOV AL ,SI ;取明码 XLAT ;转换为密码 MOV DI , AL INC SI INC DI LOOP A1 第37页/共56页第三十七页,共57页。6、按数据大小(dxio)排序题 例1:编程序实现,从一串带符号字型数据中找出最大值。DATA SEGMENTBLOCK DW 762EH,6A8BH,664AH,0B945H,85DHCOUNT EQU ($BLOCK)2DATA ENDS第38页/共56页第三十八页,共57页。 LEA SI , BLOCK MOV CX , COUNT MOV AX , SI;取第1个数 DEC CX ;准备与下个数比较AA1: ADD SI , 2 CMP AX , SI ;与下个数比较 JG AA2 ;前一个(y )数大,则保留下次再比 MOV AX , SI ;否则,取后一个(y )数下次再比 AA2: LOOP AA1 第39页/共56页第三十九页,共57页。4.7 DOS功能调用(dioyng)与子程序设计 调用过程为: DOS功能调用号送AH寄存器; 如果需要,按要求给定输入参数(有的不需要输入参数); 写入中断(zhngdun)指令INT 21H。调用结束,按功能使用其输出参数。第40页/共56页第四十页,共57页。1、单字符输入1号 功 能:从键盘输入1个字符输入参数(cnsh):无 输出参数(cnsh):AL=ASCII码第41页/共56页第四十一页,共57页。2、单字符输出2号 功 能:在屏幕(pngm)上显示1个字符(ASCII码) 输入参数:DL=ASCII码 输出参数:无例:从键盘输入两个1位十进制数,求两数之和并在屏幕(pngm)上显示结果。 第42页/共56页第四十二页,共57页。 MOV AH , 1 ;DOS调用输入第一个数 INT 21H MOV BL , AL ;保存输入的第一个数 MOV AH , 1 INT 21H ADD AL , BL ;两个ASCII码相加 AAA ; 调整加法结果( ji gu)为非压缩BCD数 MOV DL , AL ADD DL , 30H ;加法结果( ji gu)转换成ASCII码 MOV AH , 2 ;DOS调用输出到屏幕 INT 21H第43页/共56页第四十三页,共57页。3、多字符输入0AH 功 能: 多个字符输入到缓冲区 输入参数(cnsh):DS:DX=输入缓冲区首地址 输出参数(cnsh):DS:DX=输入字符串所在缓冲区 地址第44页/共56页第四十四页,共57页。 4、多字符输出9号 功 能:多个字符输出到屏幕(pngm)显示 输入参数:DS:DX=输出字符缓冲区首地址 输出参数:无例1:在屏幕(pngm)上显示一串字符 。 DATA SEGMENT BUFF DB How do you do?,0DH,0AH,$ DATA ENDS 第45页/共56页第四十五页,共57页。 CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX , DATA MOV DS , AX LEA DX , BUFF MOV AH , 9 INT 21H第46页/共56页第四十六页,共57页。5、单字符(z f)输入/输出6号 6号DOS功能实际上是1号和2号功能的组合,当DL寄存器的内容为0FFH时,6号功能与1号功能同,即从键盘输入单个字符(z f);而当DL寄存器中放入字符(z f)的ASCII值,它就是2号功能。 第47页/共56页第四十七页,共57页。6、过程终止4CH号 该调用的功能是结束当前程序,并返回调用它的程序,如在DEBUG状态下运行,则返回DEBUG;如果(rgu)在DOS下运行,则返回DOS。在汇编语言程序结束处放上MOV AX ,4C00H和INT 21H两条指令,以利于程序执行完毕,返回操作系统控制。 第48页/共56页第四十八页,共57页。7、子程序设计 设计子程序要提供以下信息:子程序的功能调用时需要(xyo)的输入参数(入口参数)调用后提供的输出参数(出口参数)子程序中所使用的寄存器(以便调用前做必要的保护)第49页/共56页第四十九页,共57页。例1:编写一子程序,完成一个(y )2位十六进 制数到对应的ASCII码的转换。 子程序名: CONHA 功 能: 将2位十六进制数转换成对应 的ASCCII码输入参数: AL待转换的数输出参数: BX转换好的ASCII码使用寄存器:AL、AH、BX、CL 第50页/共56页第五十页,共57页。CONHA PROC FARMOV AH , AL ;保存待转换的数AND AL , 0FH ;处理十六进制数低位CMP AL , 0AH ;是16进制中的字母吗?JB ASC1 ;否,转移ADD AL , 07 ;是,先加7ASC1: ADD AL , 30H ;转换为ASCII码 MOV BL , AL ;保存转换好的低位 MOV CL , 4 ;移位(y wi)控制 SHR AH , CL ;将原数右移,处理高位CMP AH , 0AH ;是16进制中的字母吗?JB ASC2 ;否,转移ADD AH , 07 ;是,先加7ASC2: ADD AH, 30H MOV BH , AH ;保存转换好的高位RETCONHA ENDP第51页/共56页第五十一页,共57页。例2:用子程序调用形式,编写从键盘输入4位16进制数的程序。子程序名: ZH功 能:检查键盘输入错误,将键入(jin r)值转换成16进制数输入参数:AL输出参数:AL 使用寄存器:BX,CX第52页/共56页第五十二页,共57页。 CODE SEGMENT ASSUME CS :CODE START: MOV CX , 4 ;输入(shr)4次 MOV DX , CX ; 转换4次 MOV BX , 0 ;用BX保存输入(shr)数 RE1: MOV AH , 1 ; 从键盘输入(shr) INT 21H CALL ZH ;通过子程序转换 SHL BX , CL ;组合成16进制数第53页/共56页第五十三页,共57页。 ADD BL , AL DEC DX JNZ RE1 ;循环(xnhun)输入4个数 MOV AX , 4C00H INT 21H第54页/共56页第五十四页,共57页。ZH PROC CMP AL , 9 ;将ASCII码转换(zhunhun)为16进制 JBE A2 ;键入值9(0-9)则减30H CMP AL, a ;键入值a(A-F) 则减37H JB A1 SUB AL , 20H ;值在a -f则先减20H,再减37HA1: SUB AL , 7A2: SUB AL , 30H RETZH ENDPCODE ENDS END START第55页/共56页第五十五页,共57页。谢谢大家(dji)观赏!第56页/共56页第五十六页,共57页。NoImage内容(nirng)总结几个概念。汇编语言由指令性语句和指令性语句组成。1、 段定义语句格式:。ASSUME 段寄存器名:段名,。43 8086汇编中的运算符。例:BUFF DB 10DIP(。45 宏定义与宏调用。例2:将AX中的内容按相反顺序存入BX中。4.7 DOS功能调用与子程序设计。如果(rgu)在DOS下运行,则返回DOS。谢谢大家观赏第五十七页,共57页。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!