汇编语言程序格式

合集下载

汇编语言程序设计

汇编语言程序设计

汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。

⼆、8086汇编语⾔程序的⼀个例⼦Pg90。

§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。

指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。

也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。

⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。

3.常量出现在汇编语⾔源程序中的固定值称为常量。

(1)数值常量①⼆进制:以字母B结束。

②⼗进制:以字母D或⽆字母结束。

③⼋进制:以字母Q(或O)结束。

④⼗六进制:以字母H结束。

(2)字符常量指⽤单引号或双引号引起的字符或字符串。

4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。

⼀个标识符不能超过31个字符,不能以数字开头。

5.保留字汇编语⾔中具有特殊意义的字符序列。

6.注释⼀⾏中分号以后的部分。

⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。

⼆、符号具有⼀定意义的字符序列。

1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。

1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。

汇编语言设计实践:第4部分 基本汇编语言

汇编语言设计实践:第4部分 基本汇编语言
第四章 基本汇编语言
4.1 汇编语言语句种类及其格式
汇编语言的程序格式
• 完整的汇编语言源程序由段组成,段由指令语句与 伪指令语句构成
• 一个汇编语言源程序可以包含若干个代码段、数据 段、附加段或堆栈段,段与段之间的顺序可随意排 列
• 需独立运行的程序必须包含一个代码段,并指示程 序执行的起始点,一个程序只有一个起始点
• 所有的指令语句必须位于某一个代码段内,伪指令 语句可根据需要位于任一段内或段外
汇编语言的语句可以分为指令语句和伪指令语句
•指令语句——产生使CPU产生动作、可供机器
执行的机器目标代码
•伪指令语句——不产生CPU动作、在程序执行
前由汇编程序处理的说明性语句,例如,数据说明、 变量定义等等
2
一、指令语句
每一条指令语句在汇编时都要产生一个可供CPU执 行的机器目标代码,它又叫可执行语句。
指令语句的一般格式为: 标号 : 操作码
, 操作数
; 注释
一条指令语句最多可以包含4个字段 例 L1:MOV AH,0A0H ;将0A0H放入AH
3
1.标号字段
标号是可选字段,它后面必须有“:”。标号是一条 指令的符号地址,代表了该指令的第一个字节存放 地址。
注释字段可以是一条指令的后面部分,也可以是 整个语句行。
例:
LABEL1: ADD AX,BX; 功能为AX<=(AX)+(BX)
;后面的程序段将完成两次对存储器的访问
MOV AX, W_VAR1
MOV W_VAR2, AX
7
二、伪指令语句
伪指令语句又叫命令语句。 伪指令本身并不产生对应的机器目标代码。它仅 仅是告诉汇编程序对其后面的指令语句和伪指令 语句的操作数应该如何处理。

汇编 第四章伪指令及汇编语言源程序结构

汇编 第四章伪指令及汇编语言源程序结构

MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆

第4章 汇编语言程序设计

第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.1.2 8086汇编语言源程序的格式
源程序的一般格式为: NAME1 SEGMENT
语句 语句 NAME1 ENDS NAME2 SEGMENT 语句 语句 NAME2 ENDS END <标号>
第四章 汇编语言 程序设计
4.2 语句的格式
第四章 汇编语言 程序设计
汇编语句分为指令语句和伪指令语句两类,一般都由分 隔符分成的 4 个部分组成。
HLT
;然后停机
NOT DONE : IN AL, PORT_VAL ;未超过时,输入下一字节
ADD SUM, AL
;与以前的结果累加
JMP CODE ENDS ;代码段结束
END START
;整个程序结束
可以看到,8086汇编的一个语句行是由4个部分组成,即
标号 操作码 操作数 ;注释(或名字)
普通高等学校计算机教育“十三五”
微机原理与接口技术
内容导航
CONTENTS
4.1 汇编语言的格式 4.2 语句的格式 4.3 伪指令语句 4.4 指令语句 4.5 汇编语言程序设计及举例
4.1 汇编语言的格式
4.1.1 8086汇编语言的一个例子
第四章 汇编语言 程序设计
MY_DATA SEGMENT ;定义数据段
SUM DB ?
;为符号 SUM 保留一个字节
MY_DATA ENDS
;定义数据段结束
MY_CODE SEGMENT ;定义码段
ASSUME CS :MY_CODE, DS :MY_DATA
;规定 CS 和 DS 的内容
PORT_VA1 EQU 3
;端口的符号名
START :MOV AX, MY_DATA ;DS 初始化为 MY_DATA

第四章 汇编语言程序格式

第四章 汇编语言程序格式

.model small .data …… .code start: mov ax, @data mov ds, ax …… mov ax, 4c00h int 21h end start
9
段组定义伪操作
dseg1 dseg1 dseg2 dseg2 segment …… ends segment …… ends word public ‘data’
DATA_BYTE DATA_WORD
DB DW
10,4,10H,? 100,100H,-5,?
14
ARRAY
DB DB DW
‘HELLO’ ‘AB’ ‘AB’
ARRAY
48H 45H 4CH
4CH
4FH 41H 42H 42H 41H
PAR1 PAR2 ADDR_TABLE
DW DW DW
100,200 300,400 PAR1,PAR2
.STARTUP .EXIT [ return_value ]
13
数据定义及存储器分配伪操作:
[变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释] 助记符:DB DW DD DF DQ DT
DATA_BYTE 0AH 04H
10H
DATA_WORD 64H 00H 00H 01H FBH FFH -
12 ; (bx)=0 ; (bx)=2 ; (bx)=2
?
datagroup group data1,data2
code segment assume cs:code, ds:datagroup
; (bx)=0
程序开始和结束伪操作:
TITLE text
NAME module_name

汇编语言及编程实例(电子教案)

汇编语言及编程实例(电子教案)

汇编语言及编程实例(电子教案)汇编语言程序设计2005第四章汇编语言程序设计回顾:8086的内部结构、寄存器功能和工作过程,指令格式、寻址方式和功能。

本讲重点:了解汇编的概念及其方法,掌握汇编程序的基本格式,常用运算符的使用方法,汇编的步骤。

4.1汇编语言的基本元素一、汇编语言的语句格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。

每个语句由1~4个部分组成,其格式是:[标号]指令助记符[操作数][;注解]其中用方括号括起来的部分,可以有也可以没有。

每部分之间用空格(至少一个)分开,一行最多可有132个字符。

1.标识符给指令或某一存储单元地址所起的名字。

可由下列字符组成:字母:A~z;数字:0~9;特殊字符:、·、@、一、$数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。

标识符最长为31个字符。

当标识符后跟冒号时,表示是标号。

它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。

2.指令助记符表示不同操作的指令,可以是8086的指令助记符,也可以是伪指令。

3.操作数指令执行的对象。

依指令的要求,可能有一个、两个或者没有,例如:RET;无操作数COUNT:INCC某;一个操作数如果是伪指令,则可能有多个操作数,例如:COSTDB3,4,5,6,7;5个操作数MOVA某,[BP+4];第二个操作数为表达式4.注解该项可有可无,是为源程序所加的注解,用于提高程序的可读性。

二、汇编语言的运算符1.算术运算符、逻辑运算符和关系运算符-1-汇编语言程序设计2005算术运算符可以应用于数字操作数,结果也是数字。

而应用于存储器操作数时,只有+、-运算符有意义。

2.取值运算符SEG、OFFSET、TYPE、SIZE和LENGTH·SEG和OFFSET分别给出一个变量或标号的段地址和偏移量。

例如,定义:SLOTDW25则:MOVA某,SLOT;从SLOT地址中取一个字送入A某MOVA某,SEGSLOT;将SLOT所在段的段地址送入A某MOVA某,OFFSETSLOT;将SLOT所在段的段内偏移地址送A某·TYPE操作符返回一个表示存储器操作数类型的数值。

第04章 汇编语言程序设计 39页 0.2M PPT版

第04章 汇编语言程序设计 39页 0.2M PPT版

MOV AL,10100000B OR 00000101B ;(AL)←10100101B
例4-4 关系运算符的应用
MOV AX,5 EQ 101B ;(AX)←0FFFFH
MOV BH,10H GT 16 ;(BH)←0
例4-5 数值返回运算符的应用
K1 DB 30H,31H,32H
K2 DW 4041H,4043H
(4)STACK
(5)MEMORY
(6)AT表达式
4. 类别名
返回
4.2.4 段寻址伪指令
格式:
ASSUME 段寄存器名:段名,段寄存器名:段名,……
例4-15 求从NUM开始的12个无符号字节数的和,结果放在SUM字单元中。
DATA SEGMENT NUM DB 95H,83H,36H,2DH DB 33H,22H,1AH,34H DB 62H,45H,75H,49H SUM DW ?
例4-13
STR1 DB ‘COMPUTER’ ;定义一个字符串,字符串的首地址为STR1 STR2 DW ‘AA’,‘BC’,‘DE’ ;给两个字符组成的字符串分配两个字节存储单元 DATA DW ?,?,? ;为DATA预留6个存储单元
例4-14
DATA1 DB 20 DUP(?) ;为变量DATA1分配20个字节的空间,初值为任意值 DATA2 DW ? ;为变量DATA2分配2个字节的空间,初值为任意值 DATA3 DB 20 DUP(30H) ;为变量DATA3分配20个字节的空间,初值均为30H
K3 DW 20H DUP(0)
K4 DD 50515253H
MOV AL,TYPE K1 ;等效于MOV AL,1
MOV AH,TYPE K2 ;等效于MOV AH,2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言程序格式
2.语句的格式
(1)执行性语句
– 标号:硬指令助记符 操作数,操作数 参数,参数…. ;注释 ;注释
(2)说明性语句
– 名字 伪指令助记符
汇编语言程序格式
二、完整段定义格式
8086按照逻辑段组织程序,具有代码段、数据段、 附加段和堆栈段
一个汇编语言源程序可以包括若干个代码段、数 据段或堆栈段
END
START
系统自动将START所在段的段地址送CS寄存器,将 START所在段内的偏移地址送IP寄存器。
汇编语言程序格式
(3) SS的装入 方法1:由系统自动装填。要求在定义堆栈段时,必须把 参数写全。这时,将程序装入内存,系统会自动地把堆 栈段地址和堆栈指针置入SS和SP中,因而可以不在代码 段中装入SS和SP的值。
格式:ASSUME 段寄存器名:段名[,段寄存器名:段名[……]] 例如:ASSUME CS:CODE,DS:DATA,SS:STACK
汇编语言程序格式
3.段寄存器的装入
ASSUME伪指令只是指出各段和段寄存器之间的关系,
但并未真正将段基地址装入相应的段寄存器中,所以在程
序的代码段开始处就应该先进行段基址的装入 数据段DS、附加段ES和堆栈段SS的段基址由用户程序
模式类型说明代码段、数据段在程序中如何安排;
代码、数据的寻址是近还是远。 根据它们的不同组合,模式类型可以有如下5种。
汇编语言程序格式
① Tiny模式:也叫微模式,所有数据及代码放入同一个物 理段内,该模式用于编写较小的源程序,这种模式的源程 序最终可以形成COM文件。 ② Small:也叫小模式,所有数据放入一个 64KB的段中,
汇编语言程序格式
三、简化段定义格式
简化的段定义书写简单,有利于实现汇编语言程序模块
与高级语言程序模块的连接,它可以由操作系统自动安排段
序,自动保证名字定义的一致性。
汇编语言程序格式
1.存储模式选择伪操作(﹒MODEL)
格式:﹒MODEL 功能: 本语句一般放在段定义之前,用来说明在存储器中 是如何安放各个段的。 模式类型
ASSUME START: MOV MOV MOV
AX,STACK1 SS,AX SP,OFFSET ┇ TOP ;堆栈段的段地址送SS ;堆栈段的栈顶地址送SP
TOP是该堆栈的初始栈顶部地址。
汇编语言程序格式
4.操作系统下可执行程序的正常结束
方法1(非标准方法): 在CODE ENDS之前增加如下语句:
格式:
段名 ┇ 段名
SEGMENT
[定位类型] [组合类型] [‘类别名’]
ENDS
注意: SEGMENT和ENDS总是成对出现
中间省略部分称为段体。对代码段来说,则主要是程序代码; 对其它段来说,一般用于变量、符号等的定义
方括号中的为可选项,当有可选项时各项顺序不能错,可选 项之间用空格隔开
汇编语言程序格式
④ STACK:表示该段是堆栈段的一部分。把所有相同 ‘类 别名’的具有STACK组合类型的段连接成一个连续段,该段 长度为各原有段的总和。将连续段首地址送SS,段内最大 偏移地址送SP(SP指向栈顶)。当定义了STACK属性后,在 主程序中可省略对SS和SP的初始化。
⑤ MEMORY:与PUBLIC同义。
×××× B ×××× B ×××× B
汇编语言程序格式
(3)
组合类型
当程序有多个段时,组合类型用来说明段与段之间是 怎样连接和定位的,共有6种组合类型:
① 不指定或称隐含方式:表示本段与其他模块中的同名 段无连接关系,它将作为一个独立的段运行。
② PUBLIC:本段与其他模块中说明为PUBLIC方式的同名 段顺序连接,组成一个大的逻辑段,它们共用同一个段起 始地址。 ③ COMMON:本段与其他模块中说明为COMMON方式的同名 段从同一地址开始重叠连接,段长是同名段中最长的段的 长度。
MOV
INT 方法2 (标准方法):
AX,4C00H
21H
MAIN
PROC
PUSH MOV PUSH DS
FAR
;保存原来的PSP段地址 ;0送AX ;0压栈
AX,0H AX ┇
RET MAIN ENDP
;返回DOS
汇编语言程序格式 完整段定义的源程序格式
DATA SEGMENT ;定义数据段DATA STRING DB ‘Hello,Everybody !’,0DH,0AH,’$’ DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段CODE ASSUME CS:CODE,DS:DATA ;确定CS、DS、SS指向的逻辑段 START:MOV AX,DATA ;设置数据段的段地址DS MOV DS,AX MOV DX,OFFSET STRING;利用功能调用显示信息 MOV AH,9 INT 21H MOV AH,4CH ;利用系统功能调用返回DOS INT 21H CODE ENDS ;代码段结束 END START ;汇编结束
汇编语言程序格式
汇编语言程序格式
汇编语言程序格式
一、汇编语句类型和格式
1.语句类型 –硬指令语句(指令性语句) 是指能产生目标代码,CPU可以执行的,能完成 特定功能的语句,它主要由CPU指令组成 –伪指令语句(指示性语句) 是一种不产生目标代码的语句,它仅仅在汇编过 程中告诉汇编程序应如何汇编 –宏指令语句 是一个指令序列,汇编时凡有宏指令语句的地方 都将用相应的指令序列的目标代码插入
汇编语言程序格式
2.数据段定义伪指令(.DATA)
格式:.DATA [名字]
定义一个数据段,如果有多个数据段,则用名字来 区别:只有一个数据段时,隐含段名为@DATA。 3.堆栈段定义伪指令(.STACK)
格式:.STACK
[长度]
定义一个堆栈段,并形成SS及SP的初值,SP的默认 值为1024,隐含段名为@STACK。可选的长度参数指定堆 栈段所占存储区练习
在数据段定义一字节变量,存储一个0-9之间的十进制数 (1)编写汇编语言源程序,将该十进制数显示到屏幕上 (2)用debug将汇编生成的可执行文件调入内存,查看 数据段的内容 (3)在内存中修改数据段中定义的十进制数,用t或g命
令显示运行结果
思考: (1)如何在屏幕上显示一个两位的十六进制数 (2)如何在屏幕上显示一个两位的十进制数
汇编语言程序格式
4.代码段定义伪指令(.CODE)
格式:.CODE [名字]
定义一个代码段,如果有多个代码段,则用名字来 区 别:只有一个代码段时,隐含段名为@CODE。 5.程序开始伪指令(.STARTUP)
格式:.STARTUP
产生程序开始执行的代码,同时还指定了程序开始执 行的起点。 在小模式下,可以省略将数据段基址装入DS的语句。
STACK1
DB STACK1
SEGMENT
50H DUP(?) ENDS
PARA
STACK
‘STACK’
汇编语言程序格式
方法2:手动装填
STACK1 DW TOP STACK1 CODE SEGMENT 50H LABEL ENDS SEGMENT CS:CODE,SS:STACK1 PARA
DUP(?) WORD ;TOP属性为WORD
代码装入
代码段CS在加载程序后由系统自动装入
汇编语言程序格式 (1) DS、ES的装入 MOV AX,DATA ;数据段段基地址送AX寄存器
MOV
或 MOV
DS,AX
AX,SEG X
;AX寄存器的内容送数据段寄存器DS
;变量X所在数据段的段基址送AX寄存器
MOV
DS,AX
汇编语言程序格式
(2) CS的装入 对CS和IP的装入方法是利用END后的标号来完成的。 如: START: ┇
汇编语言程序格式 简化段定义的源程序格式
.MODEL SMALL ;定义程序的存储模式 .STACK ;定义堆栈段 .DATA ;定义数据段 STRING DB ’Hello,Everybody !’,0DH,0AH,’$’ ;在数据段定义要显示的字符串 .CODE ;定义代码段 Start: MOV AX,@DATA MOV DS,A ;说明程序起始位置,并建立DS、SS内容 MOV DX,OFFSET STRING ;指定字符串在数据段的偏移地址 MOV AH,9 INT 21H ;利用DOS功能调用显示信息 MOV AH,4cH INT 21H ;程序结束点,返回DOS END start ;汇编结束
选择类型: ① BYTE:段的起始地址可以从任何地址开始。
段起始地址(20位):××××
××××
××××
××××
××××
B
② WORD:段的起始地址必须以偶地址开始 段起始地址(20位):×××× ×××× ×××× ×××0 ×××× B
汇编语言程序格式
③ DWORD:段的起始地址必须为4的倍数 段起始地址(20位):×××× ×××× ×××× ××0 0 ④ PARA:段的起始地址必须从小段边界开始 段起始地址(20位):×××× ×××× ×××× 0 0 0 0 ⑤ PAGE:段的起始地址必须从页的边界开始 段起始地址(20位):×××× ×××× 0 0 0 0 0 0 0 0 如未指定定位类型,则汇编程序默认为PARA。
段与段之间的顺序可以随意排列。
逻辑段用汇编语言源程序中的段定义伪指令来定 义
汇编语言程序格式
二、完整段定义格式
完整段定义伪指令 指定段寄存器伪指令
段寄存器的装入
可执行程序的正常结束
汇编语言程序格式
1.完整段定义伪指令(SEGMENT、ENDS)
作用:控制汇编程序和连接程序在内存中组织代码和数据的方式。
相关文档
最新文档