《微机原理与接口技术第2版第04章8086汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术第2版第04章8086汇编语言程序设计.ppt(48页珍藏版)》请在三一办公上搜索。
1、第四章 8086汇编语言程序设计,几个概念8086汇编语言的语句8086汇编中的伪指令8086汇编中的运算符汇编语言程序设计宏定义与宏调用系统调用,几个概念,汇编语言汇编语言源程序汇编汇编程序,41 8086汇编语言的语句,汇编语言由指令性语句和指令性语句组成一、指令性语句格式 标号:操作码 操作数1,操作数2;注释二、指示性语句格式标识符(名字)指示符(伪指令)表达式 三、有关属性 存储器操作数的属性有三种:段值、段内偏移量和类型。,42 8086汇编中的伪指令,一、符号定义语句 1、等值语句 格式:符号名 EQU 表达式例:PORT EQU 1234 BUFF EQU PORT58 MEM
2、 EQU DS:BP20H COUNT EQU CX ABC EQU AAA,2、等号语句 格式:NUM34 NUM341,二、变量定义语句 格式:符号名 DB/DW/DD 表达式,1、定义一组数据 例1:BUFF DW 1234H,0ABCDH,8EH DW 79DH,7B6AH2、定义一串字符例2:STR DB Welcome!3、定义保留存储单元 例3:SUM DW?,?,4、复制操作复制操作符DUP(Duplication)可预置重复的数值例4:ALL_ZERO DB 0,0,0,0,0用复制操作可改为:ALL_ZERO DB 5 DUP(0)5、将已定义的地址存入内存单元 例5:LI
3、T DD CYC CYC:MOV AX,BX,三、段定义语句1、段定义语句格式:段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS只需要掌握 段名 SEGMENT 段名 ENDS,2、段假设语句ASSUME 段寄存器名:段名,3、ORG伪指令、地址计数器$ORG伪指令格式:ORG 4、END 表示源代码结束 格式为:END 常数或表达式.,四、过程定义语句 过程名 PROC NEAR/FAR RET 过程名 ENDP,43 8086汇编中的运算符,一、常用运算符1、算术运算符(加)、(减)、*(乘)、/(除)、MOD(求余)。2、逻辑运算符 AND、OR、XOR、NOT,3、关系运
4、算符 EQ(相等)、NE(不等、)LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。关系成立,全1关系不成立,全0 例:MOV DL,10H LT 16 MOV DL,0 例:AND AX,555 GT 222 AND AX,0FFFFH,二、常用的操作符4、分析操作符1)SEG操作符例:MOV AX,SEG BUFF2)OFFSET操作符 例:MOV BX,OFFSET BUFF,3)TYPE操作符 对于变量有3种:1 字节型;2 字型;4 双字型;对于标号有2种:1 NEAR(段内),2 FAR(段间)。例:BUFF DB 20H MOV BX,TYPE BUFF MOV B
5、X,01,4)LENGTH操作符5)SIZE操作符 SIZETYPELENGTH 例:BUFF DB 10DIP(?)MOV CX,LENGTH BUF MOV CX,10 MOV CX,SIZE BUF MOV CX,20,5、综合运算符(合成操作符)功能:1、由已有的操作数建立新的操作数;2、新操作数和已有的操作数类型不一样1)PTR运算符格式:类型 PTR 表达式例:INC WORD PTR BX wxdw 1234hmov al,byte ptr wxmov ah,byte ptr wx+12)THIS操作符格式:THIS 类型(或属性)例:FIRST EQU THIS BYTE SE
6、COND DW 100 DUP(?),44汇编语言程序设计,常用的汇编语言程序框架: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;源程序结束,特点程序分段语句由指令性和指示性语句组成两种程序框架,框架一:DATA SEGMENT;定义数据段VAL1 DB 12H,8
7、EH;定义变量 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;源程序结束,框架二:DATA SEGMENT;定义数据段VAL1 DB 12H,8EH;定义变量 DATA ENDS;数据段结束 CODE SEGMENT;定义代码段MAIN PROC FAR ASSUME DS:DATA,CS:CODE;段属性说明 START:PUSH
8、 DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX;填写代码 RETMAIN ENDP CODE ENDS;代码段结束 END START;源程序结束,一、汇编语言程序设计基本步骤 分析问题,确定模型 确定算法 绘制流程图 编写程序 检查和调试 二、汇编语言程序的基本结构,1、顺序结构,举例,把al内容除2,并四舍五入 完成x1*x2x3 x1:byte x2:word x3 34bit,2、分支结构,举例,实现,用查表法确定分支a、对8种产品进行编号0,1,7 b、每一个编号对应一个入口地址 proc0,proc1,proc7 步骤:a、把入口地址放在Tab
9、le开始的内存单元;b、根据key内容进行查表实现分支转移,3、循环结构,举例,例1、计算y0241998 ydxax查找数组中是否由关键字,有:变量dd11;dd2关键字偏移量 无:变量dd10方法一、用loop指令方法二、用loopnz(loopne)指令,Call proc1,ret,实现方法主程序有调用指令call子程序有返回指令ret特点Call指令与ret缺一不可现场保护入口出口参数设置,举例编写AX*10AX子程序,子程序编写1、子程序组成使用说明a、子程序功能b、使用寄存器情况c、入口出口参数程序体入口出口参数传递现场保护功能程序段,;这是一个乘10子程序;使用寄存器AX;入口
10、:AX,出口:AXmul10proc farpush bx;保护现场pushfadd ax,ax;2axmov bx,ax;2axbxadd ax,ax;4axadd ax,ax;8axadd ax,bx;10axpopf;恢复现场pop bxretmul10endp,功能程序段,2、现场保护和入口出口参数传递(1)、现场保护方案一:在子程序中保护灵活,不方便方案二:在主程序中保护方便,不灵活(2)、参数传递寄存器传递变量传递堆栈传递,举例1、数组元素求和,2、计算 N!(1)如果AL0,则结果为1;(2)如果AL!0,在堆栈中形成n,n1,n2,1;(3)从堆栈中推出1,2,n1,n2,计算
11、n!,4.4 系统调用,一、PCDOS执行流程,BIOS,IBMBIO,IBMDOS,键盘命令,命令处理程序,文件管理,基本输入/输出,BIOS,用户程序,用户程序,ROM,IBMBIO,IBMDOS,二、DOS系统子程序功能1、磁盘管理2、内存管理3、系统输入/输出共87个子程序,三、系统功能调用对87个子程序进行编号,根据编号进行相关处理格式1、入口参数2、编号ah3、INT 21H,编号ahINT 21,ah=11号调用,ah=22号调用,常用的系统调用1、1号调用键盘输入2、8号调用键盘输入3、6号调用显示及输入4、9号调用输出字符5、10号调用输入字符串,4.5 宏定义与宏调用,一、宏定义和宏调用1、格式 宏指令名macro 参数表;宏定义体endm2、优点缩短源程序长度,但不减少代码长度;程序易读,3、参数可以是多种形式二、宏定义取消伪操作格式 purge 宏命令名1,宏命令名2,三、重复伪操作格式 rept;重复块endm,四、条件汇编格式 if 表达式elseendif,