8086汇编语言语句的类型和格式共30页文档
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;定义一个字节数据
DA2 DD 0FEDCBA90H ;定义一个双字数据
DA3 DW 5678H
;定义一个字数据
DATA ENDS
第5章 汇编语言程序设计
2) 助记符
汇编语言语句中的第二个组成部分是助记符(Memonic)。 在指令语句中的第二部分是CPU指令系统中指令的助记符, 例如:MOV ADC等等。助记符约有90多种,在第四章中已经 进行了详细的讨论。 在伪指令语句中的第二部分是伪指令的定义符,例如:DB、 SEGMENT、 ENDS 、 END等都是伪指令定义符。它们在程序 中的作用是定义变量的类型、定义段以及告诉汇编程序结束汇 编等。
– DSEG SEGMENT
;定义数据段
– DATA1 DW 1234H
;定义被加数
– DATA2 DW 5678H
;定义加数
– DSEG ENDS
;数据段结束
– ESEG SEGMENT
;定义附加段
– SUM DW 2 DUP(?) ;定义存放结果区
– ESEG ENDS
;附加段结束
– CSEG SEGMENT
第5章 汇编语言程序设计
(3)宏指令语句是以一个宏名定义的一段指令序列,在汇编中 凡是出现宏指令语句的地方,都会有相应的指令语句序列的目标 代码插入。 2. 语句的格式
指令语句与伪指令语句的格式是类似的。一般情况下,汇编 语言的语句可以由1~4部分构成:
[名字] 助记符 [操作数] [;注释] 其中带方括号的部分表示任选项,既可以有,也可以没有。例 5.1中有如下语句:
② 变量的偏移量属性是该变量所在段的起始地址与变量的地 址之间的字节数。
③ 变 量 的 类 型 属 性 wk.baidu.com BYTE ( 字 节 ) 、 WORD ( 字 ) 、 DWORD (双字)、 QWORD (四字)、TBYTE(十字)等, 表示数据区中存取操作对象的大小。
第5章 汇编语言程序设计
• 例 1编写一个两字相加的程序。
第5章 汇编语言程序设计
3) 操作数 汇编语言语句中的第三个组成部分是操作数。在指令语句
中是指令的操作数,可能有单操作数或双操作数,也可能无操 作数;而在伪指令中可能有更多个操作数。当操作数不止一个 时,相互之间应该用逗号隔开。
可以作为操作数的有:常数、寄存器、标号、变量和表达式 等。
第5章 汇编语言程序设计
(1) 常数。常数就是指令中出现的那些固定值,可以分为数 值常数和字符串常数两类。例如,立即数寻址时所有的立即数、 直接寻址时所有的地址、ASCII字符串等都是常数。常数是除了 自身的值以外,没有其他属性的数值。在源程序中,数值常数按 其基数的不同,可有二进制数、八进制数、十进制数、十六进制 数等几种不同表示形式。汇编语言用不同的后缀加以区别。
;存放结果的偏移地址送SI
–
MOV AX,DATA1
;取被加数
–
ADD AX,DATA2
;两数相加
–
MOV ES:[SI],AX
;和送附加段的SUM单元中
–
HLT
– CSEG ENDS
;代码段结束
–
END START
;源程序结束
第5章 汇编语言程序设计
DATA SEGMENT
DA1 DB 12H
标号有三种属性:段、偏移量和类型。 ① 标号的段属性是定义标号在程序段的段地址,当程序中引 用一个标号时,该标号的段值应在CS寄存器中。 ② 标号的偏移量属性表示标号所在段的起始地址到定义该标 号的地址之间的字节数。偏移量是一个16位无符号数。 ③ 标号的类型属性有两种:NEAR和FAR。前一种标号可以 在段内被引用;后一种标号可以在其它段被引用。如果定义一 个标号时后跟冒号,则汇编程序确认其类型为NEAR。
很多情况下伪指令语句中的名字是变量名,变量名代表存储 器中一个数据区的名字,例如例5.1中的DATA1、DATA2就是变 量名。
第5章 汇编语言程序设计
变量也有三种属性:段、偏移量和类型。 ① 变量的段属性是变量所代表的数据区所在段的段地址。由
于数据区一般在存储器的数据段中,因此变量的段地址常常在 DS和ES寄存器中。
第5章 汇编语言程序设计 1) 名字
汇编语言语句的第一个组成部分是名字(Name)。在指令 语句中,这个名字是一个标号。指令语句中的标号实质上是指 “ :” 后 面 指 令 所 在 的 存 储 地 址 ( 逻 辑 地 址 ) 。 供 JMP 、 CALL 和 LOOP等指令作操作数使用,以寻找转移目标地址。并非每条 指令语句必须有标号,但如果一条指令前面有一标号,则程序 中 其 它 地 方 就 可 以 引 用 这 个 标 号 。 在 例 5.1 中 , START 、 LOOPER就是标号。标号后面有一个冒号。
第5章 汇编语言程序设计
(2) 寄存器
8086/8088CPU的寄存器可以作为指令的操作数。 (3) 标号 由于标号代表一条指令的符号地址,因此可以作为转移(无 条件转移或条件转移)、过程调用CALL以及循环控制LOOP指 令的操作数。 (4) 变量 因为变量是存储器中某个数据区的名字,因此在指令中可以 作为存储器操作数。 (5) 表达式 汇编语言语句中的表达式,按其性质可分为两种:数值表达 式和地址表达式。数值表达式产生一个数值结果,只有大小, 没有属性。地址表达式的结果不是一个单纯的数值,而是一个 表示存储器地址的变量或标号,它有三种属性:段、偏移量和 类型。
第5章 汇编语言程序设计
伪指令语句中的名字可以是变量名、段名、过程名。与指令 语句中的标号不同,这些伪指令语句中的名字并不总是任选的, 有些伪指令规定前面必须有名字,有些则不允许有名字,也有一 些伪指令的名字是任选的。即不同的伪指令对于是否有名字有不 同的规定。伪指令语句的名字后面通常不跟冒号,这是它和标号 的一个明显区别。
;定义代码段
– ;下面的语句说明程序中定义的各段分别用哪个段寄存器寻址
–
ASSUME CS:CSEG,DS:DSEG,ES:ESEG
– START: MOV AX,DSEG
;START为程序开始执行的启动标号
–
MOV DS,AX
;初始化DS
–
MOV AX,ESEG
–
MOV ES,AX
;初始化ES
–
LEA SI,SUM
LOOPER: MOV AL,DATA2[SI] ;取一个字节加数
DATA1 DB 0F8H,60H,0ACH,74H,3BH ;被加数
第一条语句是指令语句,其中“LOOPER:”是名字,“MOV” 是指令助记符,“AL,DATA2[SI]”是操作数,“;”后面是注 释 部 分 ; 第 二 条 语 句 是 伪 指 令 语 句 , 其 中 “ DATA1” 是 名 字 , “DB”是伪指令定义符,“0F8H,60H,0ACH,74H,3BH”是 操作数,“;”后面是注释部分。