第4章.8086语言程序设计_第1页
第4章.8086语言程序设计_第2页
第4章.8086语言程序设计_第3页
第4章.8086语言程序设计_第4页
第4章.8086语言程序设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

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

2、U 1234 BUFF EQU PORT58 MEM EQU DS:BP20H COUNT EQU CX ABC EQU AAA2、等号语句 格式: NUM34 NUM341n二、变量定义语句 格式: 符号名 DB/DW/DD 表达式n1、定义一组数据 例1: BUFF DW 1234H, 0ABCDH, 8EH DW 79DH, 7B6AHn2、定义一串字符例2: STR DB Welcome !n3、定义保留存储单元 例3: SUM DW ? , ?n4、复制操作复制操作符DUP(Duplication)可预置重复的数值例4: ALL_ZERO DB 0,0,0,0,0用复制操作可改为:A

3、LL_ZERO DB 5 DUP(0)n5、将已定义的地址存入内存单元 例5: LIT DD CYC CYC: MOV AX , BXn三、段定义语句n1、 段定义语句格式:段名 SEGMENT 段名 ENDSn2、段假设语句ASSUME 段寄存器名:段名,n3、 ORG伪指令与地址计数器 $ORG伪指令格式: ORG n四、过程定义语句 过程名 PROC NEAR/FAR RET 过程名 ENDP43 8086汇编中的运算符 一、常用运算符1、算术运算符 (加)、(减)、(加)、(减)、*(乘)、(乘)、/(除)(除)、MOD(求余)。求余)。2、逻辑运算符 AND、OR、XOR、NOT 3

4、、关系运算符 EQ(相等)、NE(不等)、 LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 例:例: MOV DL , 10H LT 16 例:例: AND AX , 555 GT 222 4、常用解析运算符1)SEG操作符例:例: MOV AX , SEG BUFF2)OFFSET操作符 例:例:MOV BX , OFFSET BUFF3)TYPE操作符 对于变量有对于变量有3种:种: 1 字节型;字节型; 2 字型;字型; 4 双字型双字型; 对于标号有对于标号有2种:种:1 NEAR(段内)段内), 2 FAR(段间)。段间)。4)LENGTH操作符5)SIZE操作符

5、 SIZETYPELENGTH 例:例:BUF DW 10DUP(?) MOV CX,LENGTH BUF MOV CX,10 MOV CX,SIZE BUF MOV CX,205、综合运算符(合成操作符)1)PTR运算符格式: 类型 PTR 表达式例:例:INC WORD PTR BX 2)THIS操作符格式: THIS 类型(或属性)例:例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?) 44汇编语言程序设计 常用的汇编语言程序框架:常用的汇编语言程序框架: DATA SEGMENT;定义数据段定义数据段VAL1 DB 12H , 8EH ;定义变量定义

6、变量 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 ;源程序结束源程序结束一、汇编语言程序设计基本步骤 分析问题 绘制流程图编写程序检查和调试 二、汇编语言程序的基本结构1、顺序结构n2、分支结构 3、循环结构 n4、子程序 Call proc1ret45 宏定义与宏调

7、用 1、宏定义宏指令名 MACRO ENDM2、宏调用宏指令名 实元表例例: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 ZZDW ? MULTY XX,YY,ZZ ;宏调用,实参替代虚参宏调用,实参替代虚参 4.6汇编语言程序设计实例 1、算术运算例题 例1:在偏移首地址为ARRAY的内存储区,有100个字型数据,要求将数组的每个元素加1,试编写汇编语言程序完成该要求

8、。 DATA SEGMENTARRAY DW 100 DUP (?) ;定义100个字型随机数DATA EDNSCODE SEGMENTASSUME DS:DATA,CS:CODE LEA BX , ARRAY ;设数组首地址指针设数组首地址指针 MOV CX , LENGTH ARRAY ;数组数据长数组数据长AA1: INC WORD PTR BX ;指定为字型数加指定为字型数加1 ADD BX , 2 ;移动地址指针移动地址指针 LOOP AA1 ;循环操作循环操作例2: 有两个无符号字节型数组,设数组元素个数相等,编程将数组中的对应元素相加,结果存入另一内存区。 DATA SEGMEN

9、TM1 DB 20 DUP (?)M2 DB 20 DUP(?)M3 DW 20 DUP (0)DATA ENDSCODE SEGMENT LEA SI , M1 ; 设数组设数组1的地址指针的地址指针 LEA DI , M2 ;设数组设数组2的地址指针的地址指针 LEA BX , M3 ;设结果区的地址指针设结果区的地址指针 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 2、位操作类例题、位操作类例题例

10、例1:将寄存器:将寄存器AL中高、低中高、低4位交换位交换MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位补充移空位移出位补充移空位4次次例例2:将:将AX中的内容按相反顺序存入中的内容按相反顺序存入BX中中 MOV AX , 1234H MOV CX , 16AA1: SHL AX , 1 ;移出的位进到移出的位进到CF RCR BX , 1 ;AX中移出的位进入中移出的位进入BX LOOP AA13、跳转类例题、跳转类例题 例例1:编程将以:编程将以$结束的字符串中的小写字母结束的字符串中的小写字母改为大写字母。改为大写字母。DATA SEGMENTSTR

11、 DB heLLo,eveRyboBY !,$DATA ENDS LEA BX , STRA1: MOV AL ,BX CMP AL , $ ;是是$符,则结束符,则结束 JE DONE CMP AL , a JB NEXT ;低于,则为大写字母低于,则为大写字母 CMP AL ,z JA NEXT ;高于,则不是字母高于,则不是字母 SUB AL , 20H ;将小写字母改为大写将小写字母改为大写 MOV BX , ALNEXT: INC BX JMP A1例例2:十六进制数到十进制数的转换。:十六进制数到十进制数的转换。(除(除10取余法)取余法) MOV AX , 4B6CH MOV C

12、X , 0 ;统计除法次数统计除法次数 MOV BX , 10 ;A1: MOV DX , 0 ;被除数扩展为被除数扩展为32位位 DIV BX PUSH DX ;将转换好的数存入堆栈将转换好的数存入堆栈 INC CX OR AX , AX ;转换直到商为转换直到商为0 JNZ A1 n4、表格处理题、表格处理题例例1:编程序将:编程序将09的数字转换成所要求的密码的数字转换成所要求的密码 明码和密码的映射关系为:明码和密码的映射关系为: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,

13、 3, 4, 5 ;密码表密码表VAL1 DB 8, 4, 1, 7, 5 ; 被加密码(明码)被加密码(明码)VAL2 DB 5 DUP(?)DATA ENDS MOV SI , OFFSET VAL1 MOV DI , OFFSET VAL2 MOV CX , 5 LEA BX , TABLE ;表格首地址指针表格首地址指针A1: MOV AL ,SI ;取明码取明码 XLAT ;转换为密码转换为密码 MOV DI , AL INC SI INC DI LOOP A1 5、按数据大小排序题、按数据大小排序题 例例1:编程序实现,从一串带符号:编程序实现,从一串带符号字型数据中找出最大值。字

14、型数据中找出最大值。DATA SEGMENTBLOCK DW 762EH,6A8BH,664AH,0B945H,85DHCOUNT EQU ($BLOCK)2DATA ENDS LEA SI , BLOCK MOV CX , COUNT MOV AX , SI ;取第取第1个数个数 DEC CX ;准备与下个数比较准备与下个数比较AA1: ADD SI , 2 CMP AX , SI ;与下个数比较与下个数比较 JG AA2 ;前一个数大,则保留下次再前一个数大,则保留下次再比比 MOV AX , SI ;否则,取后一个数下次再比否则,取后一个数下次再比 AA2: LOOP AA1 4.7 D

15、OS功能调用与子程序设计功能调用与子程序设计 调用过程为:调用过程为: DOS功能调用号送功能调用号送AH寄存器;寄存器; 如果需要,按要求给定输入参数(有的不如果需要,按要求给定输入参数(有的不需要输入参数);需要输入参数); 写入中断指令写入中断指令INT 21H。调用结束,按功能使用其输出参数。调用结束,按功能使用其输出参数。1、单字符输入、单字符输入1号号 功功 能:从键盘输入能:从键盘输入1个字符个字符输入参数:无输入参数:无 输出参数:输出参数:AL=ASCII码码2、单字符输出、单字符输出2号号 功能:在屏幕上显示功能:在屏幕上显示1个字符(个字符(ASCII码)码) 输入参数:

16、输入参数:DL=ASCII码码 输出参数:无输出参数:无 MOV AH , 1 ;DOS调用输入第一个数调用输入第一个数 INT 21H MOV BL , AL ;保存输入的第一个数保存输入的第一个数 MOV AH , 1 INT 21H ADD AL , BL ;两个两个ASCII码相加码相加 AAA ; 调整加法结果为非压缩调整加法结果为非压缩BCD数数 MOV DL , AL ADD DL , 30H ;加法结果转换成加法结果转换成ASCII码码 MOV AH , 2 ;DOS调用输出到屏幕调用输出到屏幕 INT 21H例例:从键盘输入两个从键盘输入两个1位十进制数,求两数之和并在位十进

17、制数,求两数之和并在屏幕上显示结果。屏幕上显示结果。 3、多字符输入、多字符输入0AH 功功 能:能: 多个字符输入到缓冲区多个字符输入到缓冲区 输入参数:输入参数:DS:DX=输入缓冲区首地址输入缓冲区首地址 输出参数:输出参数:DS:DX=输入字符串所在缓冲区地址输入字符串所在缓冲区地址 4、多字符输出、多字符输出9号号 功功 能:多个字符输出到屏幕显示能:多个字符输出到屏幕显示 输入参数:输入参数:DS:DX=输出字符缓冲区首地址输出字符缓冲区首地址 输出参数:无输出参数:无 例例1:在屏幕上显示一串字符:在屏幕上显示一串字符 DATA SEGMENT B U F F D B H o w

18、 d o y o u do?,0DH,0AH,$ DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX , DATA MOV DS , AX LEA DX , BUFF MOV AH , 9 INT 21H5、单字符输入、单字符输入/输出输出6号号 6号号DOS功能实际上是功能实际上是1号和号和2号功能号功能的组合,当的组合,当DL寄存器的内容为寄存器的内容为0FFH时时,6号功能与号功能与1号功能同,即从键盘输入号功能同,即从键盘输入单个字符;而当单个字符;而当DL寄存器中放入字符的寄存器中放入字符的ASCII值,它就是值,它

19、就是2号功能。号功能。 6、过程终止、过程终止4CH号号 该调用的功能是结束当前程序,并返回该调用的功能是结束当前程序,并返回调用它的程序,如在调用它的程序,如在DEBUG状态下运行,状态下运行,则返回则返回DEBUG;如果在;如果在DOS下运行,则返下运行,则返回回DOS。在汇编语言程序结束处放上在汇编语言程序结束处放上MOV AX ,4C00H和和INT 21H两条指令,以利于程两条指令,以利于程序执行完毕,返回操作系统控制。序执行完毕,返回操作系统控制。 7、子程序设计、子程序设计 设计子程序要提供以下信息:设计子程序要提供以下信息:子程序的功能子程序的功能调用时需要的输入参数(入口参数

20、)调用时需要的输入参数(入口参数)调用后提供的输出参数(出口参数)调用后提供的输出参数(出口参数)子程序中所使用的寄存器(以便调用前做子程序中所使用的寄存器(以便调用前做必要的保护)必要的保护)例例1:编写一子程序,完成一个:编写一子程序,完成一个2位十六进位十六进 制数到对应的制数到对应的ASCII码的转换。码的转换。 子程序名子程序名: CONHA 功功 能:能: 将将2位十六进制数转换成对应位十六进制数转换成对应 的的ASCCII码码输入参数:输入参数: AL待转换的数待转换的数输出参数:输出参数: BX转换好的转换好的ASCII码码使用寄存器:使用寄存器:AL、AH、BX、CL CON

21、HA 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 ;移位控制移位控制 SHR AH , CL ;将原数右移将原数右移,处理高位处理高位CMP AH , 0AH ;是是16进制中的字母吗?进制中的字母吗?JB ASC2 ;否,转移否,转移ADD AH , 07 ;是,先加是,先加7ASC2: ADD AH, 30H MOV BH , AH ;保存转换好的高位保存转换好的高位RETCONHA ENDP例例2:用子程序调用形式,编写从键盘输:用子程序调用形式,编写从键盘输入入4位位16进制数的程序。进制数的程序。n子程序名子程序名: ZHn功功 能:检查键盘输入

温馨提示

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

评论

0/150

提交评论