1 / 56

第 4 章 8086汇编语言程序设计

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

astin
Download Presentation

第 4 章 8086汇编语言程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章 8086汇编语言程序设计 • 几个概念 • 8086汇编语言的语句 • 8086汇编中的伪指令 • 8086汇编中的运算符 • 汇编语言程序设计 • 宏定义与宏调用 • 汇编语言程序设计实例

  2. 几个概念 • 汇编语言 • 汇编语言源程序 • 汇编 • 汇编程序

  3. 4.1 8086汇编语言的语句 汇编语言由指令性语句和指令性语句组成 • 一、指令性语句格式 [标号:] 操作码 [操作数1,] [操作数2] ;[注释] • 二、指示性语句格式 [标识符(名字)] 指示符(伪指令) 表达式 • 三、有关属性 存储器操作数的属性有三种:段值、段内偏移量和类型。

  4. 4.2 8086汇编中的伪指令 • 一、 符号定义语句 • 1、等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234 ⑵ BUFF EQU PORT+58 ⑶ MEM EQU DS:[BP+20H] ⑷ COUNT EQU CX ⑸ ABC EQU AAA

  5. 2、等号语句 格式: NUM=34 …… NUM=34+1

  6. 二、变量定义语句 格式: 符号名 DB/DW/DD 表达式

  7. 1、定义一组数据 例1: BUFF DW 1234H, 0ABCDH, 8EH DW –79DH, 7B6AH • 2、定义一串字符 例2: STR DB ‘ Welcome !’ • 3、定义保留存储单元 例3: SUM DW ? , ?

  8. 4、复制操作 复制操作符DUP(Duplication)可预置重复的数值 例4: ALL_ZERO DB 0,0,0,0,0 用复制操作可改为: ALL_ZERO DB 5 DUP(0) • 5、将已定义的地址存入内存单元 例5: LIT DD CYC … CYC: MOV AX , BX

  9. 三、段定义语句 • 1、 段定义语句格式: 段名 SEGMENT [定位类型] [组合类型] [‘类别’] …… 段名 ENDS 只需要掌握 段名 SEGMENT …… 段名 ENDS

  10. 2、段假设语句 ASSUME 段寄存器名:段名[,…] • 3、ORG伪指令与地址计数器 $ ORG伪指令格式: ORG <表达式> • 4、PUBLIC和 EXTRN伪指令

  11. 四、过程定义语句 过程名 PROC NEAR/FAR …… RET 过程名 ENDP

  12. 4.3 8086汇编中的运算符 一、常用运算符 1、算术运算符 +(加)、-(减)、*(乘)、/(除)、MOD(求余)。 2、逻辑运算符 AND、OR、XOR、NOT

  13. 3、关系运算符 EQ(相等)、NE(不等、) LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 例: MOV DL , 10H LT 16 例: AND AX , 555 GT 222

  14. 二、 常用的操作符 4、分析操作符 1)SEG操作符 例: MOV AX , SEG BUFF 2)OFFSET操作符 例:MOV BX , OFFSET BUFF

  15. 3)TYPE操作符 对于变量有3种: 1字节型; 2字型; 4 双字型; 对于标号有2种:-1NEAR(段内), -2 FAR(段间)。 例: BUFF DB 20H MOV BX , OFFSET BUFF  MOV BX,01

  16. 4)LENGTH操作符 5)SIZE操作符 SIZE=TYPE×LENGTH 例:BUFF DB 10DIP(?) MOV CX,LENGTH BUF  MOV CX,10 MOV CX,SIZE BUF  MOV CX,20

  17. 5、综合运算符(合成操作符) 1)PTR运算符 格式: 类型 PTR 表达式 例:INC WORD PTR [BX] 2)THIS操作符 格式: THIS 类型(或属性) 例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?)

  18. 4.4汇编语言程序设计 常用的汇编语言程序框架: 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 ;源程序结束

  19. 一、汇编语言程序设计基本步骤 分析问题-> 绘制流程图->编写程序->检查和调试 二、汇编语言程序的基本结构

  20. 1、顺序结构

  21. 2、分支结构

  22. 3、循环结构

  23. 4、子程序 Call proc1 ret

  24. 4.5 宏定义与宏调用 1、宏定义 宏指令名 MACRO <形式参量表> … … ENDM 2、宏调用 宏指令名 实元表

  25. 例: MULTY MACRO OPR1,OPR2,RESULT ;宏定义 PUSH AX MOV AL, OPR1 MOV AH, OPR2 IMUL OPR2 MOV RESULT , AX POP AX ENDM …… DATA SEGMENT XX DB 12 YY DB 34 ZZ DW ? …… MULTY XX,YY,ZZ ;宏调用,实参替代虚参 ……

  26. 4.6汇编语言程序设计实例 1、算术运算例题 例1:在偏移首地址为ARRAY的内存储区,有100个字型数据,要求将数组的每个元素加1,试编写汇编语言程序完成该要求。 DATA SEGMENT ARRAY DW 100 DUP (?) ;定义100个字型随机数 DATA EDNS CODE SEGMENT ASSUME DS:DATA,CS:CODE ……

  27. LEA BX , ARRAY ;设数组首地址指针 MOV CX , LENGTH ARRAY ;数组数据长 AA1: INC WORD PTR [BX] , 1 ;指定为字型数加1 ADD BX , 2 ;移动地址指针 LOOP AA1 ;循环操作 …… 完整程序请参看教材

  28. 例2: 有两个无符号字节型数组,设数组元素个数相等,编程将数组中的对应元素相加,结果存入另一内存区。 DATA SEGMENT M1 DB 20 DUP (?) M2 DB 20 DUP(?) M3 DW 20 DUP (0) DATA ENDS CODE SEGMENT ……

  29. …… LEA SI , M1 ; 设数组1的地址指针 LEA DI , M2 ;设数组2的地址指针 LEA BX , M3 ;设结果区的地址指针 MOV CX , 20 AA1: MOV AL , [SI] ADD AL , [DI] MOV [BX] ,AL ADC BYTE PTR[BX+1] ,0 ;存结果的进位 INC SI INC DI ADD BX , 2 LOOP AA1 ……

  30. 2、逻辑处理题 例1:将寄存器AL中高、低4位交换 …… MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位补充移空位4次 ……

  31. 例2:将AX中的内容按相反顺序存入BX中 …… MOV AL , 1234H MOV CX , 16 AA1: SHL AX , 1 ;移出的位进到CF RCR BX , 1 ;AX中移出的位进入BX LOOP AA1 ……

  32. 3、代码转换例题 例1:编程将以$结束的字符串中的小写字母改为大写字母。 DATA SEGMENT STR DB ‘heLLo,eveRyboBY !’,’$’ DATA ENDS ……

  33. LEA BX , STR A1: MOV AL ,[BX] CMP AL , ‘$’ ;是$符,则结束 JE DONE CMP AL , ‘a’ JB NEXT ;低于,则为大写字母 CMP AL ,’z’ JA NEXT ;高于,则不是字母 SUB AL , 20H ;将小写字母改为大写 MOV [BX] , AL NEXT: INC BX JMP A1 ……

  34. 例2:十六进制数到十进制数的转换。 除10取余法

  35. …… MOV AX , 4B6CH MOV CX , 0 ;统计除法次数 MOV BX , 10 ; A1: MOV DX , 0 ;被除数扩展为32位 DIV BX PUSH DX ;将转换好的数存入堆栈 INC CX OR AX , AX ;转换直到商为0 JNZ A1 ……

  36. 4、表格处理题 例1:编程序将0-9的数字转换成所要求的密码 明码和密码的映射关系为: 01 2 3 4 5 6 7 8 9 27 1 6 9 0 8 3 4 5 DATA SEGMENT TABLE DB 2,7, 1, 6 ,9, 0, 8, 3, 4, 5 ;密码表 VAL1 DB 8, 4, 1, 7, 5 ; 被加密码(明码) VAL2 DB 5 DUP(?) DATA ENDS ……

  37. …… 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 ……

  38. 6、按数据大小排序题 例1:编程序实现,从一串带符号字型数据中找出最大值。 DATA SEGMENT BLOCK DW 762EH,6A8BH,-664AH,0B945H,-85DH COUNT EQU ($-BLOCK)/2 DATA ENDS ……

  39. 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 ……

  40. 4.7 DOS功能调用与子程序设计 调用过程为: ⑴ DOS功能调用号送AH寄存器; ⑵ 如果需要,按要求给定输入参数(有的不需要输入参数); ⑶ 写入中断指令INT 21H。 调用结束,按功能使用其输出参数。

  41. 1、单字符输入-1号 功 能:从键盘输入1个字符 输入参数:无 输出参数:AL=ASCII码

  42. 2、单字符输出-2号 功 能:在屏幕上显示1个字符(ASCII码) 输入参数:DL=ASCII码 输出参数:无 例:从键盘输入两个1位十进制数,求两数之和并在屏幕上显示结果。

  43. 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

  44. 3、多字符输入-0AH 功 能: 多个字符输入到缓冲区 输入参数:DS:DX=输入缓冲区首地址 输出参数:DS:DX=输入字符串所在缓冲区 地址

  45. 4、多字符输出-9号 功 能:多个字符输出到屏幕显示 输入参数:DS:DX=输出字符缓冲区首地址 输出参数:无 例1:在屏幕上显示一串字符 。 DATA SEGMENT BUFF DB ‘How do you do?’,0DH,0AH,’$’ DATA ENDS

  46. CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX , DATA MOV DS , AX LEA DX , BUFF MOV AH , 9 INT 21H ……

  47. 5、单字符输入/输出-6号 6号DOS功能实际上是1号和2号功能的组合,当DL寄存器的内容为0FFH时,6号功能与1号功能同,即从键盘输入单个字符;而当DL寄存器中放入字符的ASCII值,它就是2号功能。

  48. 6、过程终止-4CH号 该调用的功能是结束当前程序,并返回调用它的程序,如在DEBUG状态下运行,则返回DEBUG;如果在DOS下运行,则返回DOS。在汇编语言程序结束处放上MOV AX ,4C00H和INT 21H两条指令,以利于程序执行完毕,返回操作系统控制。

  49. 7、子程序设计 设计子程序要提供以下信息: ⑴子程序的功能 ⑵调用时需要的输入参数(入口参数) ⑶调用后提供的输出参数(出口参数) ⑷子程序中所使用的寄存器(以便调用前做必要的保护)

More Related