2015第四章 8086汇编语言程序设计
合集下载
第4章8086汇编语言程序设计

定义数据段 定义附加段
定义代码段
程序结束
汇编伪指令语句 1.段定义伪指令 段定义伪指令(segment与ends) 段定义伪指令 与
格式: 格式 : 别’] 段名 segment [定位 组合 段字 类 定位][组合 段字][‘类 定位 组合][段字
…. 段名 ends 段的起始地址 段间关系
定位默认para,段起始地址低4位是0 定位默认para,段起始地址低4位是0,所以默认 para,段起始地址低 情况下数据段的偏移地址从0 情况下数据段的偏移地址从0开始 初学者暂不考虑后面的参数,会定义段就可以了 初学者暂不考虑后面的参数 会定义段就可以了
汇编伪指令语句 4.模块通信伪指令 模块通信伪指令
(1)格式:public 符号 格式: 符号[,…] 格式 功能: 功能:当一个符号允许被其他模块调用应该用 public声明。 声明。 声明 这里的符号可以是常量、变量、标号、 这里的符号可以是常量、变量、标号、过程名 (2)格式:extrn 符号 类型 格式: 符号:类型 类型[,…] 格式 功能:指明符号是由其他模块用public定义 功能:指明符号是由其他模块用 定义 该符号在本模块中被引用。 的,该符号在本模块中被引用。 该符号在本模块中被引用 p83 例4.11
第四章 8086汇编语言程序设计
1 2 3 4
汇编语言格式 汇编伪指令语句 汇编语言中的数据 汇编程序的执行过程
汇编语言的语句类型 指令语句 执行,可产生机器代码 由CPU执行 可产生机器代码 执行 可产生机器代码,CPU根据这些 根据这些 代码才能执行相应的操作。 代码才能执行相应的操作。 伪指令语句 由编译器处理,为编译和连接提供控制信息 为编译和连接提供控制信息, 由编译器处理 为编译和连接提供控制信息 不产生机器代码。 不产生机器代码。 宏指令语句 以一个宏名定义的一段指令序列,在汇编中 以一个宏名定义的一段指令序列 在汇编中 凡是出现宏指令语句的地方,都会有相应的 凡是出现宏指令语句的地方 都会有相应的 指令语句序列的目标代码插入。 指令语句序列的目标代码插入。
《微机原理》第04章 习题

习题1 习题
1.编写 编写8086汇编语言程序 , 将寄存器 的高 位传 汇编语言程序, 的高8位传 编写 汇编语言程序 将寄存器AX的高 送到寄存器BL, 位传送到寄存器DL 送到寄存器 ,低8位传送到寄存器 位传送到寄存器
习题2 习题
2.将寄存器 的内容从低到高位的顺序分成 组 , 将寄存器DX的内容从低到高位的顺序分成 将寄存器 的内容从低到高位的顺序分成4组 并将各组数分别送到寄存器AL,BL,CL和 DL( 如 并将各组数分别送到寄存器 和 ( DX=6D82H,分成:06H、0DH、08H、02H)。 ,分成: 、 、 、 )
MOV AX,MEN MOV BX,AX SHR AX,1 JC PO_1 MOV MEMB,BX JMP DONE PO_1: MOV MEMA,BX : DONE:
习题4 习题
4.试统计 个数中偶数的个数,并将结果在屏幕显示 试统计9个数中偶数的个数 试统计 个数中偶数的个数,
SI BUFF 3BH 47H 8DH -75 0A4H 69H -2EH 0CCH 200 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H
逻辑左移
CF
0 1 XXX XXXX 0 XXX XXXX
SHL AL,1 ADC DL,0
ADC指令实现 指令实现DL+CF+0 指令实现 如果是负数, 为 , 个数记录加1 如果是负数,CF为1,则DL个数记录加 个数记录加
DATA SEGMENT BUFF DW 6700H,9E00H,-6A00H,0A0BH,6D00H NUM DB $-BUFF MEM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA , START:MOV AX,DATA MOV DS,AX MOV CX,NUM LEA BX,BUFF
(微机原理)第4章8086汇编语言程序设计

逻辑运算指令的编写与使用
逻辑操作
包括与、或、异或、非等运算。
测试指令
对某一位或某一组存储单元进行 运算和测试。
字符串操作
适合处理字符串拼接、截取等操 作。位操作指令的编写与使用 Nhomakorabea1
设置指令
包括STC、STD等,可设置标志寄存器中
输入输出
2
相应的位。
指令IN、OUT等,可实现从外部设备的输
入和输出。
堆栈是一种重要的存储结构,在程序中 起到了重要的作用。
寄存器的种类及其功能
通用寄存器
8个通用寄存器,用于存储数据 或内存地址。
计数器与时序寄存器
用于计数和处理时间信息。
状态标志寄存器
记录程序的运行状态,如进位标 志、零标志、符号标志等。
数据传输指令的编写与使用
MOV
用于数据传输,是汇编程序常用的一种指令。
3
控制指令
HLT、WAIT等控制指令,可控制程序的执 行。
转移指令的编写与使用
JMP
无条件转移指令,直接跳转到指定的地址。
JE
条件转移指令,按指定条件进行转移操作。
CALL
过程调用指令,可将参数传递给被调用的程序。
RET
过程返回指令,将跳转到调用指令后面的位置。
输入输出指令的编写与使用
IN 指令
从设备或端口读入数据到指定的 操作数中。
O U T指令
将指定的操作数中的数据送到设 备或端口中。
PUS H /PO P指令
将寄存器的值压入堆栈或从堆栈 中取出数据。
堆栈操作的编写与使用
1
PUSHA/POPA
将16个通用寄存器的值一次性入栈或出栈。
2
第04章 8086汇编语言程序设计A

•一条语句可以写成多行,续行符使用&。
4.2 伪 指 令(书P87)
•伪操作又称为伪指令,它们不像机器指令那样是在程 序运行期间由计算机来执行的,而是在汇编程序对源
程序汇编期间由汇编程序处理的。
•它们可以完成如处理器选择、定义程序模式、定义数 据、分配存储区、指示程序结束等功能。 •伪指令形式上与一般指令相似,但伪指令只是为汇编 程序提供有关信息,不产生相应的机器代码。
CONSTANT DATA ALPHA BETA ADDR B P8 EQU EQU EQU EQU EQU EQU
EQU
256 ;将数256赋以符号名CONSTANT ;HEIGHT为一标号,地址表达式赋以符号名DATA
HEIGHT+12 7
ALPHA-2 ;这是一组赋值伪操作,把7-2=5赋以符号名BETA VAR + BETA [BP+8] DS:[BP+8] ;将VAR+5赋以符号名ADDR ;变址引用赋以符号名B ;加段前缀的变址引用赋以符号名P8
4.1.1
汇编语言源程序的框架结构
• 按逻辑段组织源程序,每段由伪指令SEGMENT开始、 由ENDS结束。 • 包括: • 代码段(必不可少) • 堆栈段 • 建立一个堆栈区,以存放中断时的断点地址, 子程序调用时断点地址及子程序间传递参数。 • 数据段等。 用来在内存中建立一个适当容量的工作区用以 存放数据。
英文字母(A~Z,a~z); (2) 数字(0~9); (3) 特殊符号(?、@、_等)。
(1)
•名字的定义要满足如下规则: (1) 数字不能作为名字的第一个符号; (2) 单独的问号(?)不能作为名字; (3) 一个名字的最大有效长度为31位,超过31位 的部分计算机不再识别; (4) 汇编语言中有特定含义的保留字(如操作码、 寄存器名等),不能作为名字使用。 • 为了便于记忆,名字的定义应该做到见名知义,如 用BUFFER表示缓冲区、SUM表示累加和等。
4.2 伪 指 令(书P87)
•伪操作又称为伪指令,它们不像机器指令那样是在程 序运行期间由计算机来执行的,而是在汇编程序对源
程序汇编期间由汇编程序处理的。
•它们可以完成如处理器选择、定义程序模式、定义数 据、分配存储区、指示程序结束等功能。 •伪指令形式上与一般指令相似,但伪指令只是为汇编 程序提供有关信息,不产生相应的机器代码。
CONSTANT DATA ALPHA BETA ADDR B P8 EQU EQU EQU EQU EQU EQU
EQU
256 ;将数256赋以符号名CONSTANT ;HEIGHT为一标号,地址表达式赋以符号名DATA
HEIGHT+12 7
ALPHA-2 ;这是一组赋值伪操作,把7-2=5赋以符号名BETA VAR + BETA [BP+8] DS:[BP+8] ;将VAR+5赋以符号名ADDR ;变址引用赋以符号名B ;加段前缀的变址引用赋以符号名P8
4.1.1
汇编语言源程序的框架结构
• 按逻辑段组织源程序,每段由伪指令SEGMENT开始、 由ENDS结束。 • 包括: • 代码段(必不可少) • 堆栈段 • 建立一个堆栈区,以存放中断时的断点地址, 子程序调用时断点地址及子程序间传递参数。 • 数据段等。 用来在内存中建立一个适当容量的工作区用以 存放数据。
英文字母(A~Z,a~z); (2) 数字(0~9); (3) 特殊符号(?、@、_等)。
(1)
•名字的定义要满足如下规则: (1) 数字不能作为名字的第一个符号; (2) 单独的问号(?)不能作为名字; (3) 一个名字的最大有效长度为31位,超过31位 的部分计算机不再识别; (4) 汇编语言中有特定含义的保留字(如操作码、 寄存器名等),不能作为名字使用。 • 为了便于记忆,名字的定义应该做到见名知义,如 用BUFFER表示缓冲区、SUM表示累加和等。
《微机原理》第04章 8086汇编语言程 课件序设计

;定义数据段 ;定义变量 ;数据段结束
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 ;源程序结束
关系运算符例
例: AND AX,((NUMB LT 5)AND 30 ) OR((NUMB GE 5)AND 20) ,
当NUMB<5时,指令含意为 时 指令含意为AND AX,30; , 当NUMB≥5时,指令含意为 时 指令含意为AND AX,20。 , 。 此例中,操作符 与操作数表达式中的AND具有 此例中,操作符AND与操作数表达式中的 与操作数表达式中的 具有 不同的含意,前者是助记符,后者是伪运算。 不同的含意,前者是助记符,后者是伪运算。
4.2.3 段定义语句 段定义语句按段来组织程序和使用寄存器 1. 段定义语句格式: 段定义语句格式: 段名 SEGMENT [定位类型 [组合类型 [‘类别 定位类型] 组合类型] 定位类型 组合类型 ‘ ’] …… 段名 ENDS 说明: (1)SEGMENT和ENDS必须成对出现 说明: ) 和 必须成对出现 (2)段名可以是包括下划线在内的字母、数字串, )段名可以是包括下划线在内的字母、数字串, 前后必须一致。 前后必须一致。
4.分析操作符 分析操作符 (1)SEG操作符 ) 操作符 例: MOV AX , SEG BUFF (2)OFFSET操作符 ) 操作符 例:MOV BX , OFFSET BUFF =LEA BX,BUFF
5.综合运算符(合成操作符) 综合运算符(合成操作符) 综合运算符 功能: 功能: 由已有的操作数建立新的操作数; 由已有的操作数建立新的操作数; 新操作数和已有的操作数类型不一样 (1)PTR运算符 ) 运算符 格式: 格式: 类型 PTR 表达式 例:INC WORD PTR [BX] BUFF DW 1234H MOV AL,BYTE PTR BUFF MOV AH,BYTE PTR BUFF+1
第4章 汇编语言程序设计

因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)
第4章8086,8088微机汇编语言程序设计

2)段内偏移量(Offset) 它是标号与段起始地址之间相距的字节数,为一16位 无符号数。 3)类型(Type) 类型表示该标号所代表的指令的转移范围,分NEA R(近)与FAR(远)两种。NEAR类型的标号仅在 同一段内使用,用2字节指针给出转移的偏移量属性(即 只改变IP值,不改变CS值);而FAR类型的标号无此限 制,必须用4字节指针指出转移的段地址与段内偏移量。 当标号用作JMP或CALL等指令的目标操作数时,若 为段内转移或调用则采用NEAR类型;若为段间转移或 调用则应当采用FAR类型。 JMP FAR PTR LINE
第4章 8086/8088汇编语言程序设计
汇编语言程序设计是开发微机系统软件的基本 功,在程序设计中占有十分重要的地位。
由于汇编语言具有执行速度快和易于实现对硬件的控 制等独特的优点,所以至今它仍然是用户使用得较多的程 序设计语言。特别是在对于程序的空间和时间要求很高的 场合,以及需要直接控制设备的应用场合,汇编语言更是必 不可少了。 由于汇编语言本身的特点,本章将选择目前国内广泛 使用的IBM PC机作为基础机型,着重讨论8086/8088汇编 语言的基本语法规则和程序设计的基本方法,以掌握一般 汇编语言程序设计的初步技术。
(1)立即操作数 立即操作数在指令中直接给出,不需要使用 寄存器,也不涉及访问数据区的操作,只能作为 源操作数。立即操作数是整数,可以是1字节或 2字节。在汇编语言中,立即操作数用常量(包 括数值常量和符号常量)以及由常量与有关运算 符组成的数值表达式表示。 如:MOV BX,1000+5*3 (2)寄存器操作数 通用寄存器AX、BX、CX、DX、BP、 SP、DI、SI以及段寄存器CS、SS、D S、ES都可以作为操作数。如:MOV BX,AX
第4章 计算机 8086汇编语言程序设计

段假设伪指令即是用来告诉汇编程序当前使用的各 个段的段地址将要存放在哪个段寄存器中。
格式:
ASSUME 段寄存器:段名,段寄存器:段名,… 例: ASSUME CS:CODE,DS:DATA
由于ASSUME伪指令只是指定某个段分配给哪一个 段寄存器,它并不能把段地址装入段寄存器中,所 以在代码段中,还必须把段地址装入相应的段寄存 器中: mov ax, data mov ds, ax
数据定义及存储器分配伪操作的操作数
4. 操作数字段用复制操作符DUP
[例 ] ARRAY1
ARRAY2
ARRAY1
00H ----
DB
DB
2 DUP(0,?)
100 DUP(?)
ARRAY2
00H -------------
ARRAY1的语句可等价于: ARRAY1 DB 0,?,0,?
100个字节单元
伪指令又称为伪操作,它是在对源程序汇编期间由汇编 程序(如MASM、TASM)处理的操作,它们可以完成如处理 器选择、定义程序模式、定义数据、分配存储区、指示程序结 束等功能。
伪指令和指令的区别在于,每一条指令必须生成机器代 码,然后在程序运行期间由CPU来执行其操作;而伪指令是在 汇编期间由汇编程序执行的操作命令,除了数据定义及存储器 分配伪指令分配存储器空间外,其它伪指令不生成目标码。
第4章 8086汇编语言程序设计
8086 汇编语言的语句
8086 汇编语言中的伪指令 汇编语言程序设计 汇编语言程序实例与上机调试
几个概念
汇编语言:汇编语言(Assembly Language)是用 助记符、符号地址、标号等编写程序的语言,是 机器语言的一种符号表示, 汇编语言源程序:用汇编语言编写的程序叫做汇 编语言源程序(简称源程序) 汇编:将汇编语言源程序翻译成机器语言程序的 过程叫汇编
格式:
ASSUME 段寄存器:段名,段寄存器:段名,… 例: ASSUME CS:CODE,DS:DATA
由于ASSUME伪指令只是指定某个段分配给哪一个 段寄存器,它并不能把段地址装入段寄存器中,所 以在代码段中,还必须把段地址装入相应的段寄存 器中: mov ax, data mov ds, ax
数据定义及存储器分配伪操作的操作数
4. 操作数字段用复制操作符DUP
[例 ] ARRAY1
ARRAY2
ARRAY1
00H ----
DB
DB
2 DUP(0,?)
100 DUP(?)
ARRAY2
00H -------------
ARRAY1的语句可等价于: ARRAY1 DB 0,?,0,?
100个字节单元
伪指令又称为伪操作,它是在对源程序汇编期间由汇编 程序(如MASM、TASM)处理的操作,它们可以完成如处理 器选择、定义程序模式、定义数据、分配存储区、指示程序结 束等功能。
伪指令和指令的区别在于,每一条指令必须生成机器代 码,然后在程序运行期间由CPU来执行其操作;而伪指令是在 汇编期间由汇编程序执行的操作命令,除了数据定义及存储器 分配伪指令分配存储器空间外,其它伪指令不生成目标码。
第4章 8086汇编语言程序设计
8086 汇编语言的语句
8086 汇编语言中的伪指令 汇编语言程序设计 汇编语言程序实例与上机调试
几个概念
汇编语言:汇编语言(Assembly Language)是用 助记符、符号地址、标号等编写程序的语言,是 机器语言的一种符号表示, 汇编语言源程序:用汇编语言编写的程序叫做汇 编语言源程序(简称源程序) 汇编:将汇编语言源程序翻译成机器语言程序的 过程叫汇编
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LOOP NEXT MOV MEM , DL
例4-5:在BLOCK 存储区有一字符串,统计“%” 之前的字符个数
BLOCK COUNT MEM DB ‘FHJLIO689%yyuo’ EQU $-BLOCK DB 0
MOV SI,OFFSET BLOCK
MOV CX,COUNT
LOOP1:MOV AL, [SI] CMP AL, ‘%’ JE INC INC DONE MEM SI
4.2.4 过程定义语句
过程名 PROC NEAR/FAR …… RET 过程名 ENDP …… CALL 过程名
4.3 8086汇编中的运算符
4.3.1 常用运算符
1、算术运算符 +(加)、-(减)、*(乘)、/(除)、MOD (求余) 2、逻辑运算符 AND、OR、XOR、NOT
3、关系运算符
popf pop bx ret endp
;2ax ;2axbx ;4ax ;8ax ;10ax
;恢复现场
功 能 程 序 段
mul10
MOV AX, XX CALL MUL10 MOV YY, AX
4.6 汇编语言程序设计与上机调试
4.6.1 程序设计实例
4.6.2 DOS功能调用与子程序设计
循环控制方法
1) 循环次数已知, 用计数控制循环 2) 用条件控制循环 无法确定循环次数时,可用某种条件来确定是否结束 循环。程序要是寻找控制条件以及对控制条件的检测。 。
例4-3: 编程统计BUFF为首地址的缓冲区 中负数的个数。
BUFF DB 67H,9EH, -6AH,0ABH,6DH MEM DB ?
;定义数据段 ;被加数
DATA2 DB 0C1H
DATA ENDS
;加数
;数据段结束
CODE START:
SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX MOV SI,0 ;初始化DS ;置SI初值为0
MOV AL,DATA2[SI]
ASSUME DS:DATA , CS: CODE START: MOV AX , DATA
MOV DS , AX
…… MOV AX , 4C00H
INT 21H
CODE ENDS END START
框架二:
DATA VAL1
DATA
SEGMENT DB 12H , 8EH …… ENDS
;定义数据段 ;ห้องสมุดไป่ตู้义变量
4.4 汇编语言程序设计
常用的汇编语言程序框架:
DATA VAL1 DATA CODE SEGMENT DB 12H , 8EH …… ENDS ;定义数据段 ;定义变量 ;数据段结束
SEGMENT ;定义代码段 ASSUME DS:DATA , CS: CODE START: MOV AX , DATA ;初始化DS MOV DS , AX …… MOV AX , 4C00H ;返回DOS INT 21H CODE ENDS ;代码段结束 END START ;源程序结束
4.2.2 变量定义语句 格式: 符号名 DB/DW/DD [操作数1,] [操作数2] … 1、定义一组数据 例1: BUFF1 DW 1234H, 0ABCDH, 8EH BUFF2 DB -1DH, 6AH ……. MOV AX, BUFF1 MOV BX, BUFF1+2 MOV CL, BUFF2
XOR
LEA
DL,DL
BX,BUFF
;DL←0
;BX←缓冲区首址
MOV
CX,5
;CX←缓冲区长度
;取一个数据到AL ;使数据影响状态标志位 ;不为负,转AA1 ;为负DL+1 ;移动指针 ;循环控制 ;保存统计结果
NEXT:MOV AL, [BX] ADD AL,0 JNS INC AA1: INC AA1 DL BX
4)LENGTH
已用DUP说明的变量,则用LENGTH 可得到 这个变量的个数。否则得到1
5)SIZE
SIZE=TYPE×LENGTH 例: BUFF DW 10 DUP(?) MOV CX, LENGTH BUF MOV CX,10 MOV CX,SIZE BUF MOV CX,20
5、综合运算符(合成操作符)
;段属性说明
4.4.1 汇编语言程序设计基本步骤
分析问题,建立模型,确定算法
绘制流程图
确定变量与工作单元,编写程序
检查和调试
4.4.2 汇编语言程序的基本结构
1、顺序结构
例4-1
DATA SEGMENT ;定义数据段 BLOCK DW 0ABCDH ;定义变量 BUFF DD ? DATA ENDS ;数据段结束
1)PTR运算符
格式: 类型 PTR 表达式 例:INC WORD PTR [BX] wx dw 1234h
mov al, byte ptr wx mov ah, byte ptr wx+1
2)THIS操作符
格式: THIS 类型(或属性) 例:FIRST EQU THIS BYTE
SECOND DW 100 DUP (?)
CODE
相关代码:
MOV DX, BLOCK
MOV AX , DX
AND AX, 0F0FH AND DX, 0F0FH
MOV CL,4
SHR DX,CL LEA BX, BUFF
MOV [BX], AL
MOV [BX+1], DL MOV [BX+2], AHL MOV [BX+3], DH
2、分支结构
2、现场保护和入口出口参数传递
现场保护
方案一:在子程序中保护
方案二:在主程序中保护
参数传递 • 寄存器传递 • 变量传递 • 堆栈传递
;这是一个乘10子程序
;使用寄存器AX ;入口:AX,出口:AX proc push bx ;保护现场 pushf
mul10
add ax,ax mov bx,ax add ax,ax add ax,ax add ax,bx
NEXT1: JE NEXT2 MOV JMP AL,1 DONE
;为0时转NEXT2 ;否则将1送入AL
NEXT2:MOV
DONE: MOV
AL,0
MEMD,AL
;将0送入AL
(二)
MOV CMP MOV JL MOV JG MOV
AL,MEMS AL,0 AL,-1 DONE AL,1 DONE AL,0 MEMD,AL
LOOP LOOP1 DONE: MOV …… AH,4CH
4、子程序
Call proc1 ret
实现方法
主程序有调用指令call 子程序有返回指令ret
特点
Call指令与ret缺一不可
现场保护 入口出口参数设置
例4-6:
编写AX*10AX子程序
子程序编写 1、子程序组成 使用说明 a、子程序功能 b、使用寄存器情况 c、入口出口参数 程序体 入口出口参数传递 现场保护 功能程序段
⑵ BUFF
⑶ MEM ⑸ ABC
EQU PORT+58
EQU DS:[BP+20H] EQU AAA
⑷ COUNT EQU CX
等号语句 格式: 符号名 EQU 表达式
例:
NUM=34 MOV CX,NUM …… NUM=34+1
与 EQU 伪指令基本相同,主要区别在于它可 以对同一个名字重复定义。
例4-2
实现
1 x 0 y0 x0 1 x0
≥
实现符号函数程序的流程图
MEMS
DB 8
MEMD
……
DB ?
(一)
MOV CMP JGE MOV JMP
AL,MEMS AL,0 NEXT1 AL,-1 DONE
;AL←MEMS
;x≥0时转NEXT1 ;否则将−1送入AL
DONE:
MOV
3、循环结构
(1) 初始化部分:如设置地址指针、计数器、其他循环参数的 起始值等。 (2) 工作部分:循环所要完成的具体操作。它可以是一个顺序 程序、一个分支程序或另一个循环程序。 (3) 修改部分:如修改地址指针、其他循环参数等。 (4) 循环结束判断部分 (5) 结束处理部分:如存储结果等。可以没有这部分。
MOV AX , SEG BUFF
2)OFFSET
例: MOV BX , OFFSET BUFF MOV DX , BUFF
3)TYPE
对于变量有3种: 1 字节型; 2 字型; 4 双字型; 对于标号有2种:-1 NEAR(段内), -2 FAR(段间)。 例: BUFF DB 20H MOV BX ,TYPE BUFF MOV BX,01
属性 标号有三种属性:段、偏移量和类型
4.1 8086汇编语言的语句
指示性语句格式
[名字] 伪指令 [操作数1,] [操作数2] ;[注释] DATA1 DB 0F8H,60H,3BH;被加数
属性
存储器操作数的属性有三种:段值、段内偏移量
和类型。
4.2 8086汇编中的伪指令
4.2.1 符号定义语句 等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234
…
CYC: MOV AX , BX
4.2.3 段定义语句
1、 段定义语句格式:
段名 SEGMENT [定位类型] [组合类型] [‘类别’]
…… 段名 ENDS
只需要掌握
段名 SEGMENT
……
段名 ENDS