当前位置:文档之家› 第4章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根据这些 根据这些 代码才能执行相应的操作。 代码才能执行相应的操作。 伪指令语句 由编译器处理,为编译和连接提供控制信息 为编译和连接提供控制信息, 由编译器处理 为编译和连接提供控制信息 不产生机器代码。 不产生机器代码。 宏指令语句 以一个宏名定义的一段指令序列,在汇编中 以一个宏名定义的一段指令序列 在汇编中 凡是出现宏指令语句的地方,都会有相应的 凡是出现宏指令语句的地方 都会有相应的 指令语句序列的目标代码插入。 指令语句序列的目标代码插入。
汇编伪指令语句 (2) ORG伪指令 伪指令(origin起始 起始) 伪指令 起始 格式: 格式: ORG n 功能: 功能:设置当前地址计数器的值 例:DATA SEGMENT A DW 66 ORG 30H C DB 2,4,6 DATA ENDS 这个时候,C的偏移地址就不再是 的偏移地址就不再是0002H, 这个时候 的偏移地址就不再是 而是0030H。 即从偏移地址 而是 。 即从偏移地址0030H开始存 开始存 放2,4,6
汇编伪指令语句
5.数据定义伪指令 定义变量 数据定义伪指令(定义变量 数据定义伪指令 定义变量)
格式: 变量名 变量名] 格式:[变量名 DB/DW/DD 初值表 功能:定义一个变量,并给它赋初值 并给它赋初值。 功能:定义一个变量 并给它赋初值。 例如: 例如:DATA SEGMENT A DB 0,?,3 B DW 100,1200H,-5 重复次数 C DB ‘A’, ‘XY’ 重复分配操作符 D DW ‘XY’ E DW 3,4466H,2DUP(1,0) 重复数据列表 DW 1123H,0015H 相当于1 相当于1,0,1,0 F DW C DATA ENDS
DATA SEGMENT ;定义数据段 定义数据段 DATA1 DW 1234H ;定义被加数 定义被加数 DATA2 DW 5678H ;定义加数 定义加数 DATA ENDS ;数据段结束 数据段结束 ESEG SEGMENT ;定义附加段 定义附加段 SUM DW 2 DUP(?) ;定义存放结果区 定义存放结果区 ESEG ENDS ;附加段结束 附加段结束 CODE SEGMENT ;定义代码段 定义代码段 ASSUME CS:CODE,DS:DATA,ES:ESEG START: MOV AX,DATA ;START为程序的启动标号 为程序的启动标号 MOV DS,AX ;初始化 初始化DS 初始化 MOV AX,ESEG MOV ES,AX ;初始化 初始化ES 初始化 LEA SI,SUM ;存放结果的偏移地址送 存放结果的偏移地址送SI 存放结果的偏移地址送 MOV AX,DATA1 ;取被加数 取被加数 ADD AX,DATA2 ;两数相加 两数相加 MOV ES:[SI],AX ;和送附加段的 和送附加段的SUM单元中 和送附加段的 单元中 MOV AH,4CH INT 21H CODE ENDS ;代码段结束 代码段结束 END START ;源程序结束 源程序结束
汇编语言中的数据
1.常量 . 数值常量、字符串常量、 数值常量、字符串常量、符号常量 2.变量 . 用数据定义伪指令DB、 例:用数据定义伪指令 、DW、DD定义变量 用数据定义伪指令 、 定义变量 DATA SEGMENT DA1 DB 12H ;定义一个字节数据 定义一个字节数据 DA2 DD 0FEDCBA90H ;定义一个双字数据 定义一个双字数据 DA3 DW 5678H ;定义一个字数据 定义一个字数据 DATA ENDS 3.标号 . 标号是一条指令的符号地址。 在无条件转移指令、 标号是一条指令的符号地址 。 在无条件转移指令 、 条 件转移指令、循环指令和子程序调用指令的操作数位置上, 件转移指令、循环指令和子程序调用指令的操作数位置上 通常用标号作为程序转移指令的目标地址。 通常用标号作为程序转移指令的目标地址。
汇编伪指令语句
6.符号定义伪指令 符号定义伪指令
格式: 表达式(常量 变量.标号 寄存器.内存单元 常量.变量 标号.寄存器 内存单元) 格式:符号名 EQU 表达式 常量 变量 标号 寄存器 内存单元 表达式(数值 数值) 符号名 = 表达式 数值 功能: 作用等同于EQU。 功能:“=”作用等同于 作用等同于 。 ①“=”的表达式只能是数值表达式 ①“ 的表达式只能是数值表达式 ②用=,EQU定义的不占内存空间 定义的不占内存空间 例如: 例如:DATA SEGMENT A DB 0,?,3 B =1 C EQU B+1 D EQU [SI+2] E EQU 25 DATA ENDS
汇编伪指令语句 7.地址计数器和 地址计数器和ORG伪指令 地址计数器和 伪指令
(1)地址计数器 表示当前地址计数器的值 地址计数器($表示当前地址计数器的值 地址计数器 表示当前地址计数器的值) 例:DATA SEGMENT A DW 66 B DB 18 DUP(?) C EQU $-A DATA ENDS 定位默认para,A的偏移地址为 的偏移地址为0,$=0014H 定位默认 的偏移地址为 所以,C=0014H-0000H=14H=20D 所以 实际上,就是计算 就是计算C到 内存单位的个数 实际上 就是计算 到A内存单位的个数 如果换成 C EQU $-B 则 C=18D
段寄存器的装入
伪指令assume cs:code,ds:data,ss:stack只 伪指令 只 是将cs、 、 和 相连, 是将 、ds、ss和code、data、stack相连 、 、 相连 并没有给cs、ds、ss赋相应的段地址 并没有给 、 、 赋相应的段地址 CS的装入 的装入
源程序结束定义伪指令:END 标号 每个源程序都必须以END伪指令结束 例如:start:… end start
段寄存器的装入 的装入(类似于 的方法) 第(2)种:SS的装入 类似于 种 的装入 类似于DS/ES的方法 的方法 STACK1 SEGMENT DW 40H DUP(0) TOP LABEL WORD STACK1 ENDS …… CODE SEGEMNT ASSUME CS:CODE,SS:STACK1 …… MOV AX,STACK1 MOV SS,AX MOV SP,OFFSET TOP ;SP=80H ……
伪指令语句
[名字 伪指令助记符 参数 参数 [;注释 名字] 参数,参数 参数… 注释 注释] 名字 例如: 数据定义伪指令DB,在内存中定义 例如: data1 db 0,1,2 ;数据定义伪指令 数据定义伪指令 在内存中定义 ;3个连续的字节单元 初值是0,1,2 个连续的字节单元,初值是 个连续的字节单元 初值是 ;data1表示第一个数据 的偏移地址 表示第一个数据0的偏移地址 表示第一个数据
汇编语言格式
指令语句
[标号 指令助记符 [操作数 操作数 [;注释 标号:] 操作数,操作数 注释] 标号 操作数 操作数] 注释 例如: mov cx,8 ;2操作数指令 例如: 操作数指令 s:nop ;0操作数指令 操作数指令(nop空操作 空操作) : 操作数指令 空操作 loop s ;1操作数指令 操作数指令
汇编伪指令语句
3.过程定义伪指令 过程定义伪指令(proc和endp) 过程定义伪指令 和 格式: 格式: 过程名 proc near/far …. ret 过程名 endp 功能:定义过程(子程序 子程序)段供其他程序调用 功能:定义过程 子程序 段供其他程序调用 near可以被同一代码段中的其他程序调用 可以被同一代码段中的其他程序调用, 可以被同一代码段中的其他程序调用 far可以被不用代码段中的程序调用 可以被不用代码段中的程序调用, 可以被不用代码段中的程序调用 缺省为near 缺省为 把具有独立功能的程序段定义为子程序, 把具有独立功能的程序段定义为子程序 便于程序的阅读和调试。 便于程序的阅读和调试。p82,例4.10 例
PAGE NONE(默认 默认) NONE(默认) PARA(默认 默认) PARA(默认) PUBLIC WORD STACK 在程序中, 在程序中,段名就代表段地址 BYTE
多个’类别’ 多个’类别’ 连续存放
STACK CODE DATA
汇编伪指令语句 2.指定段寄存器伪指令 指定段寄存器伪指令(assume) 指定段寄存器伪指令
汇编伪指令语句
8.源程序结束伪指令 源程序结束伪指令END 源程序结束伪指令 格式: 格式:END 标号 功能:该语句标志整个程序的结束, 功能:该语句标志整个程序的结束 是源程序的最后一条语句。 是源程序的最后一条语句。
相关主题