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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORG伪指令格式: ORG伪指令格式: ORG <表达式> <表达式>
4、PUBLIC和 EXTRN伪指令 PUBLIC和 EXTRN伪指令
四、过程定义语句
过程名 PROC NEAR/FAR …… RET 过程名 ENDP
4.3 8086汇编中的运算符
一、常用运算符 1、算术运算符
+(加)、-(减)、*(乘)、/ MOD(求余) (除)、MOD(求余)。
…… MOV SI , OFFSET VAL1 VAL1 MOV DI , OFFSET VAL2 VAL2 MOV CX , 5 LEA BX , TABLE ;表格首地址指针 A1: MOV AL ,[SI ] ;取明码 XLAT ;转换为密码 MOV [DI] , AL INC SI INC DI LOOP A1 ……
汇编语言由指令性语句和指令性语句组成 一、指令性语句格式
[标号:] 操作码 [操作数1,] [操作数2] ;[注释] 标号:] 操作数1 [操作数2] 注释]
二、指示性语句格式
[标识符(名字)] 指示符(伪指令) 表达式 标识符(名字) 指示符(伪指令)
三、有关属性
存储器操作数的属性有三种:段值、 存储器操作数的属性有三种:段值 、 段内偏移量 和类型。 和类型。
二、 常用的操作符 4、分析操作符 1)SEG操作符 SEG操作符
例: MOV AX , SEG BUFF
2)OFFSET操作符 OFFSET操作符
例:MOV BX , OFFSET BUFF
3)TYPE操作符 TYPE操作符
对于变量有3 对于变量有3种: 1 字节型; 字节型; 字型; 2 字型; 4 双字型; 双字型; 对于标号有2 :-1 对于标号有2种:-1 NEAR(段内) NEAR(段内), FAR(段间) FAR(段间)。 -2 20H 例: BUFF DB 20H MOV BX , OFFSET BUFF ⇒ MOV BX,01 BX,01
;段属性说明
一、汇编语言程序设计基本步骤 分析问题-> 绘制流程图-> 分析问题-> 绘制流程图->编写程 序-> 序->检查和调试 二、汇编语言程序的基本结构
1、顺序结构
2、分支结构
3、循环结构
4、子程序
Call proc1 ret
4.5 宏定义与宏调用
1、宏定义 宏指令名 MACRO <形式参量表> 形式参量表> … … ENDM 2、宏调用 宏指令名 实元表
……
LEA SI , BLOCK MOV CX , COUNT MOV AX , [SI] DEC CX AA1: ADD SI , 2 AA1 CMP AX , [SI] JG AA2 AA2 MOV AX , [SI] AA2: LOOP AA1 AA2 AA1 ……
;取第1个数 取第1 ;准备与下个数比较 ;与下个数比较 ;前一个数大,则保留下次再比 前一个数大, ;否则,取后一个数下次再比 否则,
2、逻辑运算符
AND、OR、XOR、 AND、OR、XOR、NOT
3、关系运算符
EQ(相等)、NE(不等、) EQ(相等) NE(不等、 LT(小于)、GT(大于)、 LT(小于) GT(大于) LE(小于等于)、GE(大于等于)。 LE(小于等于) GE(大于等于) 例: MOV DL , 10H LT 16 10H 例: AND AX , 555 GT 222
例2: 有两个无符号字节型数组,设数组元素个 数相等,编程将数组中的对应元素相加,结 果存入另一内存区。
DATA M1 M2 M3 DATA CODE SEGMENT DB 20 DUP (?) DB 20 DUP(?) DW 20 DUP (0) ENDS SEGMENT ……
…… LEA SI , M1 ; 设数组1的地址指针 设数组1 LEA DI , M2 ;设数组2的地址指针 设数组2 LEA BX , M3 ;设结果区的地址指针 MOV CX , 20 AA1: MOV AL , [SI] AA1 ADD AL , [DI] MOV [BX] ,AL ADC BYTE PTR[BX+1] ,0 ;存结果的进位 PTR[BX+1 INC SI INC DI ADD BX , 2 LOOP AA1 AA1
1)PTR运算符 PTR运算符 格式: 类型 PTR 表达式
例:INC WORD PTR [BX]
2)THIS操作符 THIS操作符 格式: THIS 类型(或属性) 类型(或属性)
例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?)
4.4汇编语言程序设计
常用的汇编语言程序框架: 常用的汇编语言程序框架:
三、段定义语句
1、 段定义语句格式:
段名 SEGMENT [定位类型] [组合类型] [‘类别’] [定位类型] [组合类型] [‘类别’] …… 段名 ENDS
只需要掌握
段名 SEGMENT …… 段名 ENDS
2、段假设语句
ASSUME 段寄存器名:段名[,…] 段寄存器名:段名[,…]
3、 ORG伪指令与地址计数器 $ ORG伪指令与地址计数器
例2:十六进制数到十进制数的转换。 :十六进制数到十进制数的转换。 除10取余法 10取余法
…… MOV AX , 4B6CH MOV CX , 0 ;统计除法次数 MOV BX , 10 ; A1: MOV DX , 0 ;被除数扩展为32位 被除数扩展为32位 DIV BX PUSH DX ;将转换好的数存入堆栈 INC CX OR AX , AX ;转换直到商为0 转换直到商为0 JNZ A1 ……
SEGMENT ;定义数据段 DB 12H , 8EH 12H ;定义变量 …… DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUME DS:DATA , CS: CODE DS: CS: START: START: MOV AX , DATA ;初始化DS 初始化DS MOV DS , AX …… MOV AX , 4C00H 00H 返回DOS ;返回DOS INT 21H 21H CODE ENDS ;代码段结束 END START ;源程序结束 DATA VAL1 VAL1
4)LENGTH操作符 LENGTH操作符 5)SIZE操作符 SIZE操作符 SIZE=TYPE× SIZE=TYPE×LENGTH 例:BUFF DB 10DIP(?) MOV CX,LENGTH BUF ⇒ MOV CX,10 MOV CX,SIZE BUF ⇒ MOV CX,20
5、综合运算符(合成操作符) 综合运算符(合成操作符)
6、按数据大小排序题
例1:编程序实现,从一串带符号字 :编程序实现, 型数据中找出最大值。 型数据中找出最大值。
DATA SEGMENT BLOCK DW 762EH,6A8BH,-664AH,0B945H, 762EH, BH, 664AH, 945H -85DH 85DH COUNT EQU ($-BLOCK)/2 BLOCK) DATA ENDS
第4章 8086汇编语言程序设计
几个概念 8086汇编语言的语句 8086汇编语言的语句 8086汇编中的伪指令 8086汇编中的伪指令 8086汇编中的运算符 8086汇编中的运算符 汇编语言程序设计 宏定义与宏调用 汇编语言程序设计实例
几个概念
汇编语言 汇编语言源程序 汇编 汇编程序
4.1 8086汇编语言的语句
例: MULTY MACRO OPR1,OPR2,RESULT OPR1 OPR2 PUSH AX MOV AL, OPR1 OPR1 MOV AH, OPR2 OPR2 IMUL OPR2 OPR2 MOV RESULT , AX POP AX ENDM
;宏定义
……
DATA XX YY SEGMENT DB 12 DB 34 ZZ DW ? …… MULTY XX,YY,ZZ XX,YY, ……
……
2、逻辑处理题
例1:将寄存器AL中高、低4位交换 :将寄存器AL中高、 ……
MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位补充移空位4次 移出位补充移空位4 ……
例2:将AX中的内容按相反顺序存入BX :将AX中的内容按相反顺序存入BX 中
…… MOV AL , 1234H 1234H MOV CX , 16 SHL AX , 1 ;移出的位进到CF 移出的位进到CF RCR BX , 1 ;AX中移出的位进入BX AX中移出的位进入BX LOOP AA1 AA1 ……
AA1 AA1:
3、代码转换例题
例1 :编程将以$ 结束的字符串中的小写 :编程将以$ 字母改为大写字母。 字母改为大写字母。
DATA STR DATA SEGMENT DB ‘heLLo,eveRyboBY !’,’$’ !’,’$ ENDS ……
A1:
NEXT: NEXT:
LEA BX , STR MOV AL ,[BX] CMP AL , ‘$’ ;是$符,则结束 JE DONE CMP AL , ‘a’ JB NEXT ;低于,则为大写字母 低于, CMP AL ,’z’ JA NEXT ;高于,则不是字母 高于, SUB AL , 20H ;将小写字母改为大写 20H MOV [BX] , AL INC BX JMP A1 ……
4.2 8086汇编中的伪指令
一、 符号定义语句
1、等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234 ⑵ BUFF EQU PORT+58 PORT+ ⑶ MEM EQU DS:[BP+20H] DS:[BP+ ⑷ COUNT EQU CX ⑸ ABC EQU AAA
2、等号语句 格式: NUM= NUM=34 …… NUM=34+ NUM=34+1
二、变量定义语句
格式: Biblioteka Baidu号名 DB/DW/DD 表达式
1、定义一组数据
例1: BUFF DW 1234H, 0ABCDH, 8EH 1234H, DW –79DH, 7B6AH 79DH,
2、定义一串字符
例2: STR DB ‘ Welcome !’
3、定义保留存储单元
例3: SUM DW ? , ?
……
LEA BX , ARRAY MOV CX , LENGTH ARRAY AA1: INC WORD PTR [BX] , 1 AA1 ADD BX , 2 LOOP AA1 AA1 ……
;设数组首地址指针 ;数组数据长 ;指定为字型数加1 指定为字型数加1 ;移动地址指针 ;循环操作
完整程序请参看教材
4、复制操作
复制操作符DUP(Duplication) 复制操作符DUP(Duplication)可预置重复的数值 例4: ALL_ZERO DB 0,0,0,0,0 0, 用复制操作可改为: ALL_ZERO DB 5 DUP(0) DUP(
5、将已定义的地址存入内存单元
例5: LIT DD CYC … CYC: MOV AX , BX
4、表格处理题
例1:编程序将0-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 VAL1 VAL2 VAL2 DATA …… SEGMENT DB 2,7, 1, 6 ,9, 0, 8, 3, 4, 5 DB 8, 4, 1, 7, 5 DB 5 DUP(?) ENDS ;密码表 ; 被加密码(明码) 被加密码(明码)
;宏调用,实参替代虚参 宏调用,
4.6汇编语言程序设计实例
1、算术运算例题
例1:在偏移首地址为ARRAY的内存储区,有 :在偏移首地址为ARRAY的内存储区,有 100个字型数据,要求将数组的每个元素加1 100个字型数据,要求将数组的每个元素加1, 试编写汇编语言程序完成该要求。
DATA ARRAY DATA CODE SEGMENT DW 100 DUP (?) ;定义100个字型随机数 定义100个字型随机数 EDNS SEGMENT ASSUME DS:DATA,CS:CODE DS:DATA,CS:
相关文档
最新文档