汇编语言的格式

合集下载

汇编语言 第三版

汇编语言  第三版

·汇编语言是一种符号编程语言,这些符号构成汇编指令或伪指令,汇编语言程序就是由指令和伪指令构成的。

·汇编语言指令的一般格式:[名字][操作码][操作码][操作数][注释]·CPU:CPU是执行程序的部件。

·内存:RAM是存储程序和数据的部件。

·CS,DS,ES,SS寄存器的功能:段寻址寄存器。

·子程序的作用:把多次引用的相同程序段编成一个独立的程序段,当需要执行这个程序段的时候,可以用Call指令调用。

·BIOS屏幕控制、键盘控制、鼠标控制的中断调用分别是:int 10h int 16h int 33h。

·DOS int 21提示一个字符串:AH=09H。

·打开和关闭扬声器的指令:MOV AL,11B OUT 61H,AL和MOV AL,00 OUT 61H,AL.入栈和出栈的指令格式:PUSH ...16位寄存器和pop (16)位寄存器·数据总线的多少取决于内存单元的大小,地址总线的多少取决于内存单元的多少。

·如果在汇编语言源程序中需要多次用到同一段程序,则可以将这段程序定义成一条指令,称为宏指令,一个宏定义包含3个部分,宏名、宏伪指令和宏体,宏是汇编语言的一个特点,避免了代码的重复,并使源程序简洁易读。

①DATA SEGMENTBUF DB 'HelloWorld ! This is ASM program.$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUF MOV AH,09 INT 21HMOV AH,4CHINT 21H CODE ENDS END START②line macro x1,y1,x2,y2,color local xian1,l1,l2mov cx,x1mov dx,y1mov ah,0chmov al,color;0fhmov bh,0xian1:int 10hpush cxmov cx,9999loop $pop cxcmp cx,x2je l1inc cxcmp cx,x2jne xian1l1:cmp dx,y2je l2inc dxcmp dx,y2jne xian1l2:inc dxendmcodes segmentstart:mov ah,0mov al,12hint 10hmov ah,0bhmov bh,0mov bl,3int 10h;---------------line 200,20,400,50,0fh ;-------------------line 400,20,400,250,0fh ;-------------------line 200,250,400,250,0fh ;--------------------- line 200,20,200,250,0fh mov ah,07hint 21hmov ah,4chint 21hcodes endsend start。

MIPS汇编

MIPS汇编
ehb (执行遇险防护-当你需要保证上面指令的任何协处理器0 的副作用在随后的指令执行之前已经完成的时候所用的指令)
ext d,s,shf,sz 从32位寄存器提取位域。Shf是位域在s中的移位到 第0位所需要的位移量,sz是位域包含的位的个数。 mask=(2**sz-1)<<shf,d=(s&mask)>>shf
/p-141124298.html (MIPS指令与汇编)
or d,s,t
d=s | t
ori d,s,j 作OR
d=s|(unsigned)j,跟一个常数执行“或”操
sllv d,t,s d=t<<(s%32) (shift left logic by variable)
sll d,s,shf d=s<<shf;sll d,t,s,d=t<<(s%32)
sra d,s,shf d=(signed)s>>shf,shift-right arithmetic,算术右移, 最高位填充,适用于有符号数,sra d,s,t,d=(signed)s>>(t%32)
srav d,s,t sra d,s,t
srl d,s,shf d=(unsigned)s>>shf ,shift-right logical,逻辑右移, 类似C的无符号量的移位
.data伪指令
定义程序的数据段,程序的变量需要在该伪指令 下定义,汇编程序会分配和初始化变量的存储空间
.text伪指令
定义程序的代码段
.global伪指令
声明一个符号位全局的,全局符号可以被其他的 文件引用,用该伪指令声明一个程序的main过程
寻址
➢ 直接寻址

项目2:知识点2汇编语言

项目2:知识点2汇编语言

DATA6
54 48 49 53 20 49 53 20 41 20 45 58 41 4D 50 4C 45
T H I S I S
A
E X A M P L E
DS
(3) 段定义语句
在段定义中,SEGMENT和ENDS总是成对使用的,它们将数据和程序
分为多个段,如数据段、栈段和代码段。 ASSUME是汇编时进行操作的,它用于在汇编时告诉汇编器,哪个是数 据段,哪个是代码段,哪个是栈段。 ORG用于指定目标程序存放单元的起始偏移地址,通常写在第一条源 程序的前面,用于指定这段程序的首地址。如使用了: ORG 100 则程序执行时就从CS:100处开始执行其后面的程序。
运算符包括算术、逻辑、关系、分析、综合五类运算符。
① 算术运算符 包括 + 、-、*、/ 、MOD 参加运算的内容可以是数据,也可以是地址,但在一个算术运算符
的两边不能都是地址。
② 逻辑运算符 包括 AND、OR、NOT、XOR ③ 关系运算符 包括 相等 :EQ 大于:GT
不等:NE
小于:LT
小于或等于:LE
汇编语言
一、汇编语言程序格式 二、汇编语言程序设计基础
三பைடு நூலகம்直线程序
四、分支程序 五、循环程序 六、码转换程序设计 七、有关序列的操作 八、DOS 功能调用 九、子程序设计
一、 汇编语言程序格式
my_data segment again: Mov al,[si]
CS
array1 db 05,a2H,00,10H,85H
2000:1500
DS
DW 100 DUP (?) AX=2
定义了100个字单元,则 MOV AX, TYPE DATA1

汇编语言指令

汇编语言指令

汇编语言指令集数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。

第四章 汇编语言程序设计

第四章 汇编语言程序设计

一、算术运算符
包括:+,-,*,/(取商),MOD(取余),SHL,SHR 特点:①运算对象及结果均为整数 ②地址只能加减 例: DA1 DA2 MOV MOV MOV MOV DB 1,2,3,4 DB 20 AX,30*5 汇编时 AL,31MOD5 AL,31/5 AL,DA2-DA1
MOV MOV MOV MOV
如:加法:1001、1D、2B……
特点:计算机能够直接识别,执行速度快;
但不方便记忆和编程
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件, 执行速度较快;多用于编制系统程序、实时控制和通 信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法:+,输出:Printf… 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
类型 返回值 1 2 4 类型 返回值 -1 [FFH] -2 [FEH] DB DW DD
变量
标号
NEAR FAR
数值返回运算符(续)
LENGTH:
•对于一般变量,返回1; •对于DUP定义的变量,返回单元数(直接返回第一
个DUP前的N值); 说明:DUP为复制操作符,格式:N DUP(表达式); N表示复制次数,表达式为复制内容 例:2 DUP(1,2) 等价于 1,2,1,2
则:COUNT的值为5
COUNT表示:DA1,DA2占的字节总数(长度之和) 七、优先级(P136 表4-3)
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。

第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)

汇编语言

汇编语言

注: NAME 、TITLE 操作不是必须的。 END 则必不可少。
汇编语言程序格式
源程序的每条语句可表示为:
[名字]
标号 变量
操作项
指令 伪指令 宏指令
操作数
寄存器 标号 变量 常数 表达式
[; 注释]
说明程序或语句 的功能
标号/变量:段值、偏移量、类型三种属性 表达式:数字表达式 地址表达式
一、名字项
(2) 逻辑和移位操作符: AND、OR、XOR、NOT
SHL、SHR
(3) 关系操作符: EQ、NE、LT、LE、GT、GE (4) 数值回送操作符: OFFSET、SEG、TYPE、
LENGTH、SIZE
(5) 属性操作符: PTR、段操作符、SHORT、
THIS、HIGH、LOW、 HIGHWORD、LOWWORD
• 产生目标文件(.obj)和列表文件(.lst)。 • 展开宏指令。
汇编语言程序的开发过程
文本编辑器,如
编 辑
错误
源程序:文件名.asm 汇编程序,如 MASM.EXE
汇 编
目标模块:文件名.obj 连接程序,如 LINK.EXE
错误
连 接
可执行文件:文件名.exe
错误
调试程序,如 DEBUG.EXE
程序运行时将多条语句展开。
●宏调用指令与子程序调用有些相似,但实
际上有许多不同。
2ቤተ መጻሕፍቲ ባይዱ宏的定义和使用
宏指令的使用要经过以下三个步骤:
my_code ends end begin
●由上例可看出,汇编语言源程序除了实现具
体功能的指令外,还有一些涉及数据定义、
程序格式的伪指令,是汇编语言源程序的必

MASM汇编语言基础

MASM汇编语言基础

§4.3.4 数值返回运算符
数值返回运算符有5个,分别是:SEG、OFFSET、TYPE、 LENGTH和SIZE。这种运算符旳对象必须是存储器操作数,即 变量名或标号,经过运算后返回旳是一种数值。下面分别阐明各 运算符旳功能。
1.SEG
格式:SEG 变量名或标号
当运算符SEG加在一种变量名或标号前面时,汇编程序回送 旳运算成果是这个变量或标号所在旳段旳段基址;
③ 对于DD伪指令,仅可给两个字符构成旳字符串分配4个字节旳单元, 且这两个ASCII码是存储在两个低字节(存储顺序与DW伪指令相同)中, 两个高字节均存储00H。相当于定义一种双字。
(4)带DUP体现式:DUP是定义反复数据操作符,在操作数 部分旳格式为:
反复次数 DUP(反复旳内容)
DUP能够嵌套使用
图4.1 指令语句旳格式
一条指令语句有如下4个字段:
1.标号字段
这是一种可选字段。标号必须以“:”作为结束符。一种标号是 一条指令旳符号地址,它代表该指令旳第一种字节旳地址。
2.指令助记符字段
这是一条指令中不可缺乏旳主要成份。它表达这条语句要求 CPU完毕什么操作。
3.操作数字段
参加操作旳数据或地址。指令语句能够有一种操作数、两个操 作数或无操作数。
§4.4 程序旳段构造
§4.4.1 段定义伪指令 格式: 段名 SEGMENT
…… 段名 ENDS 一种完整旳汇编源程序中能够定义多种段,但同步起作用旳 最多只有4个。每一种段都是由伪指令SEGMENT开始,由ENDS 结束,SEGMENT和ENDS必须成对出现,而且在SEGMENT和 ENDS旳前面都必须有同一种段名;SEGMENT和ENDS语句之 间旳省略号部分,对于代码段来说,主要是指令,也能够有伪指 令;对于数据段、附加段和堆栈段来说,一般是存储单元旳定义、 分配等伪操作。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.2 汇编语言源程序的格式在第四章介绍指令系统时曾给出若干程序举例,但是,它们仅仅是一些程序片段,并不是完整规范的汇编语言源程序。

下而给出一个比较简单,然而比较规范的汇编语言源程序。

例5.1要求将两个五字节16进制数相加,可以编写出以下汇编语言源程序。

DATA SEGMENT ;定义数据段DATA1 DB 0F8H,60H,0ACH,74H,3BH ;被加数DATA2 DB 0C1H,36H,9EH,0D5H,20H ;加数DATA ENDS ;数据段结束CODE SEGMMENT ;定义代码段ASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AX ;初始化DSMOV CX,5 ;循环次数送CXMOV SI,0;置SI初值为0CLC;清CF标志LOOPER:MOV AL,DATA2[SI];取一个字节加数ADC DA TA1[SI],AL;与被加数相加INC SI;SI加1DEC CX;CX减1JNZ LOOPER;若不等于0,转LOOPERMOV AH,4CHINT21H;返回DOS CODE END;代码段结束END START;源程序结束5.2.1 分段结构由上面的例子可以看出,汇编语言源程序的结构是分段结构形式,一个汇编语言源程序由若干段(SEGMENT)组成,每个段以SEGMENT语句开始,以ENDS语句结束。

整个源程序的结尾是END语句。

这里所说的汇编语言源程序中的段与前面讨论的CPU管理的存储器的段,既有联系,又在概念上有所区别。

我们已经知道,微处理器对存储器的管理是分段的,因而,在汇编语言程序中也要求分段组织指令、数据和堆栈,以便将源程序汇编成为目标程序后,可以分别装入存储器的相应段中。

但是,以8086/8088 CPU为例,它有四个段寄存器(CS,ES,SS和DS),因此CPU对存储器按照四个物理段进行管理,即数据段,附加段,堆栈段和代码段。

任何时侯CPU只能访问四个物理段。

而在汇编语言源程序中,设置段的自由度比较大。

例如一个源程序中可以有多个数据段或多个代码段等等。

一般来说,汇编语言源程序中段的数目可以根据实际需要而设定。

为了和CPU管理的存储器物理段相区别,我们将汇编语言程序中的段称为逻辑段。

在不致发生混淆的地方,有时简称为段。

在上面的简单源程序中只有两个逻辑段,一个逻辑段的名字是DATA,其中存放着与程序有关的数据,称为逻辑数据段;另一个逻辑段的名字是CODE,其中包含着程序的指令,称为逻辑代码段。

每个段内均有若干行语句(STA TEMENT),因此,可以说一个汇编源程序是由一行一行的语句组成的。

下面我们来讨论汇编语言语句的类型和组成。

5.2.2 汇编语言语句的类型和格式一.语句的类型汇编语言源程序中的语句可以分为两种类型:指令语句,伪指令语句。

⒈指令语句:它是能产生目标代码,CPU 可以执行的能完成特定功能的语句。

⒉伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。

例如,告诉汇编程序已写出的汇编语言源程序有几个段,段的名字是什么;定义变量,定义过程,给变量分配存储单元,给数字或表达式命名等。

所以伪指令语句是为汇编程序在汇编时用的。

二.语句的格式指令语句与伪指令语句的格式是类似的。

一般情况下,汇编语言的语句可以由1~4部分构成:[名字]? 助记符? [操作数]? [;注释]其中带方括号的部分表示任选项,既可以有,也可以没有。

例5.1中有如下语句:LOOPER:MOV AL,DATA2[SI];取一个字节加数DA TA1DB0F8H,60H,0ACH,74H,3BH;被加数第一条语句是指令语句,其中“LOOP ER:”是名字,“MOV”是指令助记符,“AL,DA TA2[SI]”是操作数,“;”后面是注释部分;第二条语句是伪指令语句,其中“DATA1”是名字,“DB”是伪指令定义符,“0F8H,60H,0ACH,74H,3BH”是操作数,“;”后面是注释部分。

下面对汇编语言中的各个组成部分进行讨论。

⒈名字汇编语言语句的第一个组成部分是名字(Name)。

在指令语句中,这个名字是一个标号。

指令语句中的标号实质上是指令的符号地址。

并非每条指令语句必须有标号,但如果一条指令前面有一标号,则程序中其它地方就可以引用这个标号。

在例5.1中,START、LOOPER 就是标号。

标号后面通常有一个冒号。

标号有三种属性:段、偏移量和类型。

①标号的段属性是定义标号在程序段的段地址,当程序中引用一个标号时,该标号的段值应在CS寄存器中。

②标号的偏移量属性表示标号所在段的起始地址到定义该标号的地址之间的字节数。

偏移量是一个16位无符号数。

③标号的类型属性有两种:NEAR和FAR。

前一种标号可以在段内被引用,地址指针为2个字节;后一种标号可以在其它段被引用,地址指针为4字节。

如果定义一个标号时后跟冒号,则汇编程序确认其类型为NEAR。

伪指令语句中的名字可以是变量名、段名、过程名。

与指令语句中的标号不同,这些伪指令语句中的名字并不总是任选的,有些伪指令规定前面必须有名字,有些则不允许有名字,也有一些伪指令的名字是任选的。

即不同的伪指令对于是否有名字有不同的规定。

伪指令语句的名字后面通常不跟冒号,这是它和标号的一个明显区别。

很多情况下伪指令语句中的名字是变量名,变量名代表存储器中一个数据区的名字,例如例5.1中的DATA1、DA TA2就是变量名。

变量也有三种属性:段、偏移量和类型。

①变量的段属性是变量所代表的数据区所在段的段地址。

由于数据区一般在存储器的数据段中,因此变量的段地址常常在DS和ES寄存器中。

②变量的偏移量属性是该变量所在段的起始地址与变量的地址之间的字节数。

③变量的类型属性有BYTE(字节)、WORD(字)、DWORD (双字)、QWORD (四字)、TBYTE(十字)等,表示数据区中存取操作对象的大小。

⒉助记符汇编语言语句中的第二个组成部分是助记符(Memonic)。

在指令语句中的第二部分是CPU指令系统中指令的助记符,例如:MOV ADC等等。

助记符约有90多种,在第四章中已经进行了详细的讨论。

在伪指令语句中的第二部分是伪指令的定义符,例如:DB、SEGMENT、ENDS 、END 等都是伪指令定义符。

它们在程序中的作用是定义变量的类型、定义段以及告诉汇编程序结束汇编等。

关于伪指令的作用和使用方法,将在本章第三节进行讨论。

⒊操作数汇编语言语句中的第三个组成部分是操作数。

在指令语句中是指令的操作数,可能有单操作数或双操作数,也可能无操作数;而在伪指令中可能有更多个操作数。

当操作数不止一个时,相互之间应该用逗号隔开。

可以作为操作数的有:常数、寄存器、标号、变量和表达式等。

⑴常数常数就是指令中出现的哪些固定值,可以分为数值常数和字符串常数两类。

例如,立即数寻址时所有的立即数,直接寻址时所有的地址,ASCII字符串都是常数,常数是除了自身的值以外,没有其它属性的数值。

在源程序中,数值常数按其基数的不同,可有二进制数,八进制数,十进制数,十六进制数等几种不同表示形式。

汇编语言用不同的后缀加以区别。

还应指出,汇编语言中的数值常数的第一位必须是数字,否则汇编时将被看成是标识符,如常数B7H应写成0B7H,FFH应写成0FFH。

字符串常数是由单引号括起来的一串字符。

例如…ABCDEFG‟和…179‟。

单引号内的字符在汇编时都以ASCII的代码形式存放在存储单元中。

如上述两字符串的ASCII代码为41H,42H,43H,44H,…,48H和31H,37H,39H。

字符串最长允许有255个字符。

⑵寄存器8086/8088CPU的寄存器可以作为指令的操作数。

⑶标号由于标号代表一条指令的符号地址,因此可以作为转移(无条件转移或条件转移)、过程调用CALL以及循环控制LOOP指令的操作数。

⑷变量因为变量是存储器中某个数据区的名字,因此在指令中可以作为存储器操作数。

⑸表达式汇编语言语句中的表达式,按其性质可分为两种:数值表达式和地址表达式。

数值表达式产生一个数值结果,只有大小,没有属性。

地址表达式的结果不是一个单纯的数值,而是一个表示存储器地址的变量或标号,它有三种属性:段、偏移量和类型。

表达式中常用的运算符有以下几种:1) 算术运算符常用的算术运算符有:+(加),-(减),*(乘),/(除)和MOD(模除,即两个整数相除后取余数)等。

以上算术运算符可用于数值表达式,运算结果是一个数值。

在地址表达式中通常只使用其中的+和-(加和减)两种运算符。

2) 逻辑运算符逻辑运算符有:AND(逻辑“与”),OR(逻辑“或”)、XOR(逻辑“异或”)和NOT(逻辑“非”)。

逻辑运算符只用于数值表达式中对数值进行按位逻辑运算,并得到一个数值结果。

对地址进行逻辑运算是没有意义的。

3) 关系运算符关系运算符有:EQ(等于),NE(不等),LT(小于),GT(大于),LE(小于或等于),GE(大于或等于)等。

参与关系运算的必须是两个数值或同一段中的两个存储单元地址,但运算结果只可能是两个特定的数值之一:当关系不成立(假)时,结果为0(全0);当关系成立(真)时,结果为0FFFFH(全1)。

例如:MOV AX,4 EQ 3 ;关系不成立,故(AX)←0MOV AX,4 NE 3 ;关系成立,故(AX)←0FFFFH4) 分析运算符分析运算符用于分析一个存储器操作数的属性,如段值,偏移量和类型等,或取得它所定义的存储空间的大小。

分析运算符有SEG、OFFSET、TYPE、SIZE和LENGTH等。

① SEG运算符利用运算符SEG可以得到一个标号或变量所在段的段地址。

例如下面两条指令将变量ARRAY的段地址送DS寄存器。

MOV AX,SEG ARRAYMOV DS,AX② OFFSET运算符利用运算符OFFSET可以得到一个标号或变量的偏移地址,例如:MOV DI,OFFSET DA TA1③ TYPE运算符运算符TYPE的运算结果是一个数值,这个数值与存储器操作数类型属性的对应关系见表5.1。

下面是使用TYPE运算符的例子:V AR DW;变量V AR的类型为字ARRAY DD10 DUP(?);变量ARRAY的类型为双字STR DB'THIS IS TEST';变量STR的类型为字节…MOV AX,TYPE V AR;(AX)←2MOV BX,TYPE ARRAY;(BX)←4MOV CX,TYPE STR;(CX)←1…其中的DW、DD、DB等为伪指令定义符,这将在第三节中介绍。

表5.1TYPE返回值与类型的关系TYPE返回值存储器操作数的类型1 BYTE2 WORD4 DWORD6 FWORD8 QWORD10 TBYTE-1 NEAR-2 FAR④ LENGTH运算符如果一个变量已用重复操作符DUP说明其变量的个数,则利用LENGTH 运算符可得到这个变量的个数。

相关文档
最新文档