微机原理第4章 8086汇编语言程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
……
25
LEA BX , ARRAY 针 MOV CX , LENGTH ARRAY 长 AA1: INC WORD PTR [BX] , 1 字型数加1 字型数加 ADD BX , 2 LOOP AA1 ……
; 设数组首地址指 ;数组数据 数组数据 ;指定为 ;移动地址指针 移动地址指针 ;循环操作
13
3)TYPE操作符
对于变量有3种 对于变量有 种: 1 2 4 对于标号有2种:-1 对于标号有 种:- FAR(段间)。 -2 (段间) 4)LENGTH操作符 5)SIZE操作符
SIZE=TYPE×LENGTH
14
字节型; 字节型; 字型; 字型; 双字型; 双字型 NEAR(段内), (段内)
44
CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX , DATA MOV DS , AX LEA DX , BUFF MOV AH , 9 INT 21H ……
45
5、单字符输入/输出-6号 、单字符输入 输出 输出- 号
6号DOS功能实际上是 号和 号功能 号 功能实际上是1号和 功能实际上是 号和2号功能 的组合, DL寄存器的内容为 寄存器的内容为0FFH时 的组合,当DL寄存器的内容为0FFH时, 6号功能与 号功能同,即从键盘输入单 号功能与1号功能同 号功能与 号功能同, 个字符;而当DL寄存器中放入字符的 个字符;而当 寄存器中放入字符的 ASCII值,它就是 号功能。 号功能。 值 它就是2号功能
43
4、多字符输出-9号 、多字符输出- 号
功 能:多个字符输出到屏幕显示 输入参数: 输入参数:DS:DX=输出字符缓冲区首地址 输出字符缓冲区首地址 输出参数: 输出参数:无 例1:在屏幕上显示一串字符 。 DATA SEGMENT BUFF DB ‘How do you do?’,0DH,0AH,’$’ DATA ENDS
7
三、段定义语句
1、 段定义语句格式:
段名 SEGMENT [定位类型] [组合类型] [‘类别’] …… 段名 ENDS
8
2、段假设语句
ASSUME 段寄存器名:段名[,…]
3、 ORG伪指令与地址计数器 $
ORG伪指令格式: ORG <表达式>
4、PUBLIC和 EXTRN伪指令
9
四、过程定义语句
39
1、单字符输入-1号
功 能:从键盘输入1个字符 输入参数:无 输出参数:AL=ASCII码
40
2、单字符输出-2号
功 能:在屏幕上显示1个字符(ASCII码) 输入参数:DL=ASCII码 输出参数:无
例:从键盘输入两个1位十进制数,求两数之和 并在屏幕上显示结果。
41
MOV AH , 1 INT 21H MOV BL , AL MOV AH , 1 INT 21H ADD AL , BL AAA MOV DL , AL ADD DL , 30H MOV AH , 2 INT 21H
BX , STR AL ,[BX] AL , ‘$’ ;是$符,则结束 DONE AL , ‘a’ NEXT ;低于,则为大写字母 AL ,’z’ NEXT ;高于,则不是字母 AL , 20H ;将小写字母改为大写 [BX] , AL BX A1
32
例2:十六进制数到十进制数的转换。 除10取余法
第ቤተ መጻሕፍቲ ባይዱ章 8086汇编语言程序设计
8086汇编语言的语句 8086汇编中的伪指令 8086汇编中的运算符 汇编语言程序设计 宏定义与宏调用 汇编语言程序设计实例
1
4.1 8086汇编语言的语句
汇编语言由指令性语句和指令性语句组成 一、指令性语句格式
[标号:] 操作码 [操作数1,] [操作数2] ;[注 释]
35
…… 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 ……
;表格首地址指针 ;取明码 ;转换为密码
过程名 PROC NEAR/FAR …… RET 过程名 ENDP
10
4.3 8086汇编中的运算符
一、常用运算符和操作符
1、算术运算符
+ ( 加 ) 、 - ( 减 ) 、 *( 乘 ) 、 /( 除 ) 、 ( ( MOD(求余)。 (求余)
2、逻辑运算符 AND、OR、XOR、NOT
11
3、关系运算符
例3: SUM DW ? , ?
6
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
36
6、按数据大小排序题 例1:编程序实现,从一串带符号字型数 据中找出最大值。
DATA SEGMENT BLOCK DW 762EH,6A8BH,-664AH,0B945H, -85DH COUNT EQU ($-BLOCK)/2 DATA ENDS
……
37
LEA SI , BLOCK MOV CX , COUNT MOV AX , [SI] DEC CX AA1: ADD SI , 2 CMP AX , [SI] JG AA2 MOV AX , [SI] AA2: LOOP AA1 ……
AA1:
30
3、代码转换例题
例1:编程将以$结束的字符串中的小写字母 改为大写字母。
DATA STR DATA SEGMENT DB ‘heLLo,eveRyboBY !’,’$’ ENDS ……
31
A1:
NEXT:
LEA MOV CMP JE CMP JB CMP JA SUB MOV INC JMP ……
16
一、汇编语言程序设计基本步骤
分析问题-> 绘制流程图->编写程序 ->检查和调试
二、汇编语言程序的基本结构
17
1、顺序结构
18
2、分支结构
19
3、循环结构
20
21
4、子程序
Call proc1 ret
22
4.5 宏定义与宏调用
1、宏定义 宏指令名 MACRO <形式参量表> … … ENDM 2、宏调用 宏指令名 实元表
二、指示性语句格式
[标识符(名字)] 指示符(伪指令) 表达式
三、有关属性
存储器操作数的属性有三种:段值、段内偏移量 和类型。
2
4.2 8086汇编中的伪指令
一、 符号定义语句
1、等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234 ⑵ BUFF EQU PORT+58 ⑶ MEM EQU DS:[BP+20H] ⑷ COUNT EQU CX ⑸ ABC EQU AAA
EQ(相等)、NE(不等、) LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 例: MOV DL , 10H LT 16 例: AND AX , 555 GT 222
12
4、分析操作符
1)SEG操作符 例: MOV AX , SEG BUFF 2)OFFSET操作符 例:MOV BX , OFFSET BUFF
3
2、等号语句
格式: NUM=34 …… NUM=34+1
4
二、变量定义语句
格式: 符号名 DB/DW/DD 表达式
5
1、定义一组数据
例1: BUFF DW 1234H, 0ABCDH, 8EH DW –79DH, 7B6AH
2、定义一串字符
例2: STR DB ‘ Welcome !’
3、定义保留存储单元
;DOS调用输入第一个数 ;保存输入的第一个数
;两个ASCII码相加 ; 调整加法结果为非压缩BCD数 ;加法结果转换成ASCII码 ;DOS调用输出到屏幕
42
3、多字符输入-0AH
功 能: 多个字符输入到缓冲区 输入参数:DS:DX=输入缓冲区首地址 输出参数:DS:DX=输入字符串所在缓冲区 地址
27
…… 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
例1:编程序将 -9的数字转换成所要求的密码 :编程序将0- 的数字转换成所要求的密码 明码和密码的映射关系为: 明码和密码的映射关系为: 0 1 2 3 4 5 6 7 8 9 2 7 1 6 9 0 8 3 4 5
DATA TABLE VAL1 VAL2 DATA …… SEGMENT DB 2,7, 1, 6 ,9, 0, 8, 3, 4, 5 DB 8, 4, 1, 7, 5 DB 5 DUP(?) ENDS ;密码表 ; 被加密码 ( 明码 ) 被加密码(明码)
DATA VAL1 SEGMENT ;定义数据段 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 ;源程序结束
……
28
2、逻辑处理题
例1:将寄存器AL中高、低4位交换 ……
MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位补充移空位4次 ……
29
例2:将AX中的内容按相反顺序存入BX 中
…… MOV AL , 1234H MOV CX , 16 SHL AX , 1 ;移出的位进到CF RCR BX , 1 ;AX中移出的位进入BX LOOP AA1 ……
33
A1:
…… MOV AX , 4B6CH MOV CX , 0 ;统计除法次数 MOV BX , 10 ; MOV DX , 0 ;被除数扩展为32位 DIV BX PUSH DX ;将转换好的数存入堆栈 INC CX OR AX , AX ;转换直到商为0 JNZ A1 ……
34
4、表格处理题 、
;取第1个数 ;准备与下个数比较 ;与下个数比较 ;前一个数大,则保留下次再比 ;否则,取后一个数下次再比
38
4.7 DOS功能调用与子程序设计
调用过程为:
⑴ DOS功能调用号送AH寄存器; ⑵ 如果需要,按要求给定输入参数(有的不需 要输入参数); ⑶ 写入中断指令INT 21H。 调用结束,按功能使用其输出参数。
完整程序请参看教材
26
例2: 有两个无符号字节型数组,设数组元素个数相等, 编程将数组中的对应元素相加,结果存入另一内存 区。
DATA M1 M2 M3 DATA CODE SEGMENT DB 20 DUP (?) DB 20 DUP(?) DW 20 DUP (0) ENDS SEGMENT ……
5、综合运算符(合成操作符)
1)PTR运算符 格式: 类型 PTR 表达式
例:INC WORD PTR [BX]
2)THIS操作符 格式: THIS 类型(或属性)
例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?) )
15
4.4汇编语言程序设计
常用的汇编语言程序框架: 常用的汇编语言程序框架:
23
例: 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 ……
;宏调用,实参替代虚参 宏调用, 宏调用
24
4.6汇编语言程序设计实例
1、算术运算例题
例1:在偏移首地址为ARRAY的内存储区,有 100个字型数据,要求将数组的每个元素加1, 试编写汇编语言程序完成该要求。
DATA SEGMENT ARRAY DW 100 DUP (?) ;定义100个字型随机数 DATA EDNS CODE SEGMENT ASSUME DS:DATA,CS:CODE