汇编语言的基本语法讲课文档
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关系操作符的两个操作数必须都是数字或是 同一段内的两个存储器地址。计算的结果应为逻 辑值:结果为真,表示为0FFFFH;结果为假,则 表示为0。
第二十五页,共83页。
例如: MOV BX,((PORT_VAL LT 5) AND 20) OR
((PORT_VAL GE 5) AND 30) 则当PORT_VAL < 5时,汇编结果应该是: MOV BX, 20 否则,汇编结果应该是: MOV BX, 30
MOV BX,OFFSET ARRAY MOV CX,COUNT ADD AL,[BX] ADC AH,0
INC BX LOOP LOP
MOV [DI],AX MOV AH,4CH
INT 21H
ENDS
END START
第三页,共83页。
汇编语言源程序格式的特点是: 1 .分段结构 2 .语句行
汇编语言程序的语句有两类:
第三十七页,共83页。
举例:已有数据定义如下: TWO_BYTE DW ?
可以用以下语句对这两个字节赋予另一种类 型定义: ONE_BYTE EQU BYTE PTR TWO_BYTE
这里ONE_BYTE和TWO_BYTE两个符号地 址具有相同的段地址和偏移地址,但是它们的类 型属性不同,前者为1,后者为2。
第二十三页,共83页。
例: OUT PORT_VAL AND 0FEH, AL 上例中PORT_VAL为端口号,OUT指
令中的表达式说明只为偶数号端口输出数据。
第二十四页,共83页。
(3) 关系操作符 关系操作符有:EQ(相等)、NE(不等)、
LT(小于)、GT(大于)、LE(小于或等于)、 GE(大于或等于)。
第二十八页,共83页。
举例: ARRAY DW 1, 2, 3
则对于指令ADD SI, TYPE ARRAY 汇编程序将其形成为: ADD SI, 2
第二十九页,共83页。
·LENGTH 格式为:LENGTH 变量 对于变量中使用DUP的情况,汇编程序
将回送分配给该变量的单元数,而对于其他 情况则送1。
(4) 注释项 注释项用来说明一段程序、一条或几条指令的 功能。对于汇编语言程序来说,注释项的作用是 很明显的,它可以使程序容易被读懂,因此汇编 语言程序必须写好注释。注释应该写出本条(或 本段)指令在程序中的功能和作用,而不应该只 写指令的动作。读者在有机会阅读程序例子时, 应注意学习注释的写法,在编制程序时,更应学 会写好注释。
( 1 ) 指令性语句 ( 2 ) 指示性语句
第四页,共83页。
汇编语言源程序语句的格式
汇编语言源程序中的每个语句可以由四项组成,格式 如下:
[名字] 操作 操作数 [ ;注释] 其中: 名字项是指一个标号或变量。 操作项是一个操作码的助记符,它可以是指令、伪指
令或宏指令名。
第五页,共83页。
操作数项由一个或多个表达式组成, 它提供为执行所要求的操作而需要的信 息。操作数项可以是常数、寄存器、标 号、变量或由表达式组成。
注释项用来说明程序或语句的功能。 ";"为识别注释项的开始。";"也可以 从一行的第一个字符开始,此时整行都 是注释,常用来说明下面一段程序的功 能。
第六页,共83页。
上面四项中带方括号的两项是可选项。各 项之间必须用"空格"(space)或"水平制表 "(Tab)符隔开。
(1) 名字项 (2) 操作项 (3) 操作数项 (4) 注释项
第十七页,共83页。
三、表达式
表达式是常数、标号、变量与一些操作符相 组合的序列,可以有数字表达式和地址表达式 两种。在汇编期间,汇编程序按照一定的优先 规则对表达式进行计算后可得到一个数值或一 个地址。 常用的表达式操作符介绍如下:
第十八页,共83页。
(1) 算术操作符 算术操作符有+、-、*、/ 和MOD。 MOD是指除法运算后得到的余数,如19/7
汇编语言的基本语法
第一页,共83页。
1.1. 汇编语言源程序的格式
DATA
ARRAY
SEGMENT AT 2000H
DB a1,a2,a3,…a10(a1~a10为立即数)
COUNT EQU $ - ARRAY
SUM
DW ?
DATA
ENDS
STACK SEGMENT PARA STACK ‘STACK’
第十页,共83页。
(3) 操作数项
操作数项由一个或多个表达式组成,多个 操作数项之间一般用逗号分开。对于指令,操 作数项一般给出操作数地址,它们可能有一个, 或二个,或三个,或一个也没有。对于伪操作 或宏指令,则给出它们所要求的参数。
操作数项可以是常数、寄存器、标号、变 量或由表达式组成。
第十一页,共83页。
其值是该字符的ASCII代码值
第十五页,共83页。
( 3 ) 符号常量是用标识符定义的常量。 例如,采用符号定义语句 PORTA EQU 80H,
则指令 MOV AL,PORTA 与指令 MOV AL,80H 等价。 二、标识符 在编程时建立的有特定意义的字符序列,标识符可 用作符号常量、名字、变量和标号等。
·PTR 格式为:类型 PTR 符号地址 PTR用来给已分配的存储地址(用符号
地址表示)赋予另一种属性,使该地址具有 另一种类型。
类型可有BYTE、WORD、DWORD、 FWORD、QWORD、TBYTE、NEAR和 FAR等几种,所以PTR也可以用来建立字、 双字、四字或段内及段间的指令单元等。
例如:
MOV CX, SIZE FEES
将形成为 MOV CX, 200
又例如: MOV CX, SIZE ARRAY
将形成为 MOV CX, 2
又例如: MOV CX, SIZE TABLE
将形成为 MOV CX, 1。
第三十四页,共83页。
·OFFSET 格式为:OFFSET 变量或标号 汇编程序将回送变量或标号的偏移地址值。
的商是2,而19 MOD 7则为5(余数)。
第十九页,共83页。
算术操作符可以用于数字表达式或地址 表达式中,但当它用于地址表达式时,只有 当其结果有明确的物理意义时才是有效的结 果。例如两个地址相乘或相除是无意义的。 在地址表达式中,可以使用 + 或 - ,但也必 须注意其物理意义。
第二十页,共83页。
举例:如果DATA_SEG是从存储器的05000H地址开始的 一个数据段的段名,OPER1是该段中的一个变量名,则
MOV BX, SEபைடு நூலகம் OPER1
将把0500H作为立即数插入指令。实际上,由于 段地址是由连接程序分配的,所以该立即数是连接时 插入的。执行期间则使BX寄存器的内容成为0500H。
第三十六页,共83页。
STAK
DB 10 DUP (?)
TOP
EQU LENGTH STAK
STACK
ENDS
第二页,共83页。
CODE ASSUME
START:
LOP:
CODE
SEGMENT CS:CODE, DS:DATA, SS:STACK
MOV AX,DATA MOV DS,AX
MOV AX,0
MOV DI,OFFSET SUM
例如把两个不同段的地址相加也是无意义的。经常使 用的是地址 ± 数字量,它是有意义的。例如SUM +1是指 SUM字节单元的下一个字节单元的地址(注意:不是指 SUM单元的内容加1),而SUM-1则是指SUM字节单元的 前一个字节单元的地址。
例: 如果要求把首地址为BLOCK的字数组的第6个字 传送到DX寄存器,可用指令如下:
第七页,共83页。
(1) 名字项
源程序中用下列字符来表示名字: 字母A~Z 数字0~9 专用字符 ?、·、@ 、-、$
除数字外,所有字符都可以放在源语句的 第一个位置。名字中如果用到·则必须是第一个 字符。可以用很多字符来说明名字,但只有前 面的31个字符能被汇编程序所识别。
第八页,共83页。
一般说来,名字项可以是标号或变量。它们 都用来表示本语句的符号地址,都是可有可无的, 只有当需要用符号地址来访问该语句时它才需要 出现。
·标号:标号在代码段中定义,后面跟着冒 号:,此外,它还可以作为过程名定义。
·变量:变量在数据段或附加数据段中定义, 后面不跟冒号。 变量经常在操作数字段出现。
第九页,共83页。
(2)操作项 操作项可以是指令、伪指令或宏指令
的助记符。对于指令,汇编程序将其翻 译为机器语言指令。对于伪指令,汇编 程序将根据其所要求的功能进行处理。 对于宏指令,则将根据其定义展开。
命令指示汇编程序进行某种汇编操作,
参数是有关的数据,
名字是段名、符号名等标识符,变量用变量名表示。
第十四页,共83页。
常量、标识符和表达式
一、常量
其值在程序中不能改变的量, 在汇编语言源程序中的常量有: 数字常量、字符常量和符号常量 ( 1 ) 数字常量可以是二进制数、八进制数、十进制数 或十六进制数表示 ( 2 ) 字符常量是用单引号‘ ’括起来的ASCII字符,
汇编程序在汇编期间将计算出表达式的值而形 成指令:
MOV CX, 7
第二十二页,共83页。
(2) 逻辑操作符 逻辑操作符有:AND(与)、OR(或)、XOR (异或)、NOT(非)。 逻辑操作符都是按位操作的,只能用于数字表 达式中。逻辑操作符要求汇编程序对其前后两个操 作数(或表达式)作指定的逻辑操作。
组成标识符有如下规定:
第十六页,共83页。
( 1 ) 组成标识符的字符有: 英文大写字母:A~Z;
英文小写字母: a-z; 数字0~9;
字符?、@、_ 、$;
( 2 )字符长度不超过3l个;
( 3 ) 首字符不能是数字; ( 4 ) ? 不能单独作为一个标识符; ( 5 ) 不能把保留字用作标识符,保留字包括助记符、寄 存器名等。
MOV DX, BLOCK+ (6-1) * 2
第二十一页,共83页。
例: 如数组ARRAY定义如下,写出把数组长 度(字数)存入CX寄存器的指令。
ARRAY DW 1, 2, 3, 4, 5, 6, 7 ARYEND DW ?
其中ARYEND是为计算数组长度而建立的符号 地址,所需指令如下:
MOV CX, (ARYEND-ARRAY)/2
第二十六页,共83页。
(4) 数值回送操作符 数值回送操作符有:TYPE、
LENGTH、SIZE、OFFSET、SEG等。 数值回送操作符把一些特征或存储
器地址的一部分作为数值回送。
第二十七页,共83页。
·TYPE 格式为:TYPE 表达式 如果表达式是变量,则汇编程序将回送
该变量的以字节数表示的类型:DB为1, DW为2,DD为4,DF为6,DQ为8,DT为 10。如果表达式是标号,则汇编程序将回送 代表该标号类型的数值:NEAR为 -1,FAR 为 -2。如果表达式为常数,则应回送0。
举例3: TABLE DB ‘ABCD’ 对于指令MOV CX, LENGTH TABLE 汇编程序将使其形成为: MOV CX, 1
第三十二页,共83页。
·SIZE 格式为:SIZE 变量 汇编程序应回送分配给该变量的字节数。
但是,此值是LENGTH值和TYPE值的乘积。
第三十三页,共83页。
第十二页,共83页。
指令性语句 格式为:
[ 标号 ]: 操作码 [ 操作数 ] [; 注释 ] 带方括号的为任选项, 标号是指令的符号地址, 操作码和操作数是用汇编语言指令表示的指令部分, 注释是对该语句在本程序中的功能的说明。
第十三页,共83页。
指示性语句 格式为:
[ 名字 / 变量 ] 命令 [参数] [; 注释 ]
举例: MOV BX, OFFSET OPER_ONE
汇编程序将OPER_ONE的偏移地址作为立 即数回送给指令,而在执行时则将该偏移地址装 入BX寄存器中。所以这条指令的功能与指令
LEA BX, OPER_ONE 是等价的。
第三十五页,共83页。
·SEG 格式为:SEG 变量或标号 汇编程序将回送变量或标号的段地址值。
第三十页,共83页。
举例1: FEES DW 100 DUP (0)
对于指令MOV CX, LENGTH FEES 汇编程序将使其形成为:
MOV CX, 100 举例2:
ARRAY DW 1, 2, 3 对于指令MOV CX, LENGTH ARRAY
汇编程序将使其形成为:
MOV CX, 1
第三十一页,共83页。
第三十八页,共83页。
此外,有时指令要求使用PTR操作符。例 如用 MOV [BX], 5
指令把立即数存入BX寄存器内容指 定的存储单元中,但汇编程序不能分清 是存入字单元还是字节单元,此时必须 用PTR操作符来说明属性,应该写明:
第二十五页,共83页。
例如: MOV BX,((PORT_VAL LT 5) AND 20) OR
((PORT_VAL GE 5) AND 30) 则当PORT_VAL < 5时,汇编结果应该是: MOV BX, 20 否则,汇编结果应该是: MOV BX, 30
MOV BX,OFFSET ARRAY MOV CX,COUNT ADD AL,[BX] ADC AH,0
INC BX LOOP LOP
MOV [DI],AX MOV AH,4CH
INT 21H
ENDS
END START
第三页,共83页。
汇编语言源程序格式的特点是: 1 .分段结构 2 .语句行
汇编语言程序的语句有两类:
第三十七页,共83页。
举例:已有数据定义如下: TWO_BYTE DW ?
可以用以下语句对这两个字节赋予另一种类 型定义: ONE_BYTE EQU BYTE PTR TWO_BYTE
这里ONE_BYTE和TWO_BYTE两个符号地 址具有相同的段地址和偏移地址,但是它们的类 型属性不同,前者为1,后者为2。
第二十三页,共83页。
例: OUT PORT_VAL AND 0FEH, AL 上例中PORT_VAL为端口号,OUT指
令中的表达式说明只为偶数号端口输出数据。
第二十四页,共83页。
(3) 关系操作符 关系操作符有:EQ(相等)、NE(不等)、
LT(小于)、GT(大于)、LE(小于或等于)、 GE(大于或等于)。
第二十八页,共83页。
举例: ARRAY DW 1, 2, 3
则对于指令ADD SI, TYPE ARRAY 汇编程序将其形成为: ADD SI, 2
第二十九页,共83页。
·LENGTH 格式为:LENGTH 变量 对于变量中使用DUP的情况,汇编程序
将回送分配给该变量的单元数,而对于其他 情况则送1。
(4) 注释项 注释项用来说明一段程序、一条或几条指令的 功能。对于汇编语言程序来说,注释项的作用是 很明显的,它可以使程序容易被读懂,因此汇编 语言程序必须写好注释。注释应该写出本条(或 本段)指令在程序中的功能和作用,而不应该只 写指令的动作。读者在有机会阅读程序例子时, 应注意学习注释的写法,在编制程序时,更应学 会写好注释。
( 1 ) 指令性语句 ( 2 ) 指示性语句
第四页,共83页。
汇编语言源程序语句的格式
汇编语言源程序中的每个语句可以由四项组成,格式 如下:
[名字] 操作 操作数 [ ;注释] 其中: 名字项是指一个标号或变量。 操作项是一个操作码的助记符,它可以是指令、伪指
令或宏指令名。
第五页,共83页。
操作数项由一个或多个表达式组成, 它提供为执行所要求的操作而需要的信 息。操作数项可以是常数、寄存器、标 号、变量或由表达式组成。
注释项用来说明程序或语句的功能。 ";"为识别注释项的开始。";"也可以 从一行的第一个字符开始,此时整行都 是注释,常用来说明下面一段程序的功 能。
第六页,共83页。
上面四项中带方括号的两项是可选项。各 项之间必须用"空格"(space)或"水平制表 "(Tab)符隔开。
(1) 名字项 (2) 操作项 (3) 操作数项 (4) 注释项
第十七页,共83页。
三、表达式
表达式是常数、标号、变量与一些操作符相 组合的序列,可以有数字表达式和地址表达式 两种。在汇编期间,汇编程序按照一定的优先 规则对表达式进行计算后可得到一个数值或一 个地址。 常用的表达式操作符介绍如下:
第十八页,共83页。
(1) 算术操作符 算术操作符有+、-、*、/ 和MOD。 MOD是指除法运算后得到的余数,如19/7
汇编语言的基本语法
第一页,共83页。
1.1. 汇编语言源程序的格式
DATA
ARRAY
SEGMENT AT 2000H
DB a1,a2,a3,…a10(a1~a10为立即数)
COUNT EQU $ - ARRAY
SUM
DW ?
DATA
ENDS
STACK SEGMENT PARA STACK ‘STACK’
第十页,共83页。
(3) 操作数项
操作数项由一个或多个表达式组成,多个 操作数项之间一般用逗号分开。对于指令,操 作数项一般给出操作数地址,它们可能有一个, 或二个,或三个,或一个也没有。对于伪操作 或宏指令,则给出它们所要求的参数。
操作数项可以是常数、寄存器、标号、变 量或由表达式组成。
第十一页,共83页。
其值是该字符的ASCII代码值
第十五页,共83页。
( 3 ) 符号常量是用标识符定义的常量。 例如,采用符号定义语句 PORTA EQU 80H,
则指令 MOV AL,PORTA 与指令 MOV AL,80H 等价。 二、标识符 在编程时建立的有特定意义的字符序列,标识符可 用作符号常量、名字、变量和标号等。
·PTR 格式为:类型 PTR 符号地址 PTR用来给已分配的存储地址(用符号
地址表示)赋予另一种属性,使该地址具有 另一种类型。
类型可有BYTE、WORD、DWORD、 FWORD、QWORD、TBYTE、NEAR和 FAR等几种,所以PTR也可以用来建立字、 双字、四字或段内及段间的指令单元等。
例如:
MOV CX, SIZE FEES
将形成为 MOV CX, 200
又例如: MOV CX, SIZE ARRAY
将形成为 MOV CX, 2
又例如: MOV CX, SIZE TABLE
将形成为 MOV CX, 1。
第三十四页,共83页。
·OFFSET 格式为:OFFSET 变量或标号 汇编程序将回送变量或标号的偏移地址值。
的商是2,而19 MOD 7则为5(余数)。
第十九页,共83页。
算术操作符可以用于数字表达式或地址 表达式中,但当它用于地址表达式时,只有 当其结果有明确的物理意义时才是有效的结 果。例如两个地址相乘或相除是无意义的。 在地址表达式中,可以使用 + 或 - ,但也必 须注意其物理意义。
第二十页,共83页。
举例:如果DATA_SEG是从存储器的05000H地址开始的 一个数据段的段名,OPER1是该段中的一个变量名,则
MOV BX, SEபைடு நூலகம் OPER1
将把0500H作为立即数插入指令。实际上,由于 段地址是由连接程序分配的,所以该立即数是连接时 插入的。执行期间则使BX寄存器的内容成为0500H。
第三十六页,共83页。
STAK
DB 10 DUP (?)
TOP
EQU LENGTH STAK
STACK
ENDS
第二页,共83页。
CODE ASSUME
START:
LOP:
CODE
SEGMENT CS:CODE, DS:DATA, SS:STACK
MOV AX,DATA MOV DS,AX
MOV AX,0
MOV DI,OFFSET SUM
例如把两个不同段的地址相加也是无意义的。经常使 用的是地址 ± 数字量,它是有意义的。例如SUM +1是指 SUM字节单元的下一个字节单元的地址(注意:不是指 SUM单元的内容加1),而SUM-1则是指SUM字节单元的 前一个字节单元的地址。
例: 如果要求把首地址为BLOCK的字数组的第6个字 传送到DX寄存器,可用指令如下:
第七页,共83页。
(1) 名字项
源程序中用下列字符来表示名字: 字母A~Z 数字0~9 专用字符 ?、·、@ 、-、$
除数字外,所有字符都可以放在源语句的 第一个位置。名字中如果用到·则必须是第一个 字符。可以用很多字符来说明名字,但只有前 面的31个字符能被汇编程序所识别。
第八页,共83页。
一般说来,名字项可以是标号或变量。它们 都用来表示本语句的符号地址,都是可有可无的, 只有当需要用符号地址来访问该语句时它才需要 出现。
·标号:标号在代码段中定义,后面跟着冒 号:,此外,它还可以作为过程名定义。
·变量:变量在数据段或附加数据段中定义, 后面不跟冒号。 变量经常在操作数字段出现。
第九页,共83页。
(2)操作项 操作项可以是指令、伪指令或宏指令
的助记符。对于指令,汇编程序将其翻 译为机器语言指令。对于伪指令,汇编 程序将根据其所要求的功能进行处理。 对于宏指令,则将根据其定义展开。
命令指示汇编程序进行某种汇编操作,
参数是有关的数据,
名字是段名、符号名等标识符,变量用变量名表示。
第十四页,共83页。
常量、标识符和表达式
一、常量
其值在程序中不能改变的量, 在汇编语言源程序中的常量有: 数字常量、字符常量和符号常量 ( 1 ) 数字常量可以是二进制数、八进制数、十进制数 或十六进制数表示 ( 2 ) 字符常量是用单引号‘ ’括起来的ASCII字符,
汇编程序在汇编期间将计算出表达式的值而形 成指令:
MOV CX, 7
第二十二页,共83页。
(2) 逻辑操作符 逻辑操作符有:AND(与)、OR(或)、XOR (异或)、NOT(非)。 逻辑操作符都是按位操作的,只能用于数字表 达式中。逻辑操作符要求汇编程序对其前后两个操 作数(或表达式)作指定的逻辑操作。
组成标识符有如下规定:
第十六页,共83页。
( 1 ) 组成标识符的字符有: 英文大写字母:A~Z;
英文小写字母: a-z; 数字0~9;
字符?、@、_ 、$;
( 2 )字符长度不超过3l个;
( 3 ) 首字符不能是数字; ( 4 ) ? 不能单独作为一个标识符; ( 5 ) 不能把保留字用作标识符,保留字包括助记符、寄 存器名等。
MOV DX, BLOCK+ (6-1) * 2
第二十一页,共83页。
例: 如数组ARRAY定义如下,写出把数组长 度(字数)存入CX寄存器的指令。
ARRAY DW 1, 2, 3, 4, 5, 6, 7 ARYEND DW ?
其中ARYEND是为计算数组长度而建立的符号 地址,所需指令如下:
MOV CX, (ARYEND-ARRAY)/2
第二十六页,共83页。
(4) 数值回送操作符 数值回送操作符有:TYPE、
LENGTH、SIZE、OFFSET、SEG等。 数值回送操作符把一些特征或存储
器地址的一部分作为数值回送。
第二十七页,共83页。
·TYPE 格式为:TYPE 表达式 如果表达式是变量,则汇编程序将回送
该变量的以字节数表示的类型:DB为1, DW为2,DD为4,DF为6,DQ为8,DT为 10。如果表达式是标号,则汇编程序将回送 代表该标号类型的数值:NEAR为 -1,FAR 为 -2。如果表达式为常数,则应回送0。
举例3: TABLE DB ‘ABCD’ 对于指令MOV CX, LENGTH TABLE 汇编程序将使其形成为: MOV CX, 1
第三十二页,共83页。
·SIZE 格式为:SIZE 变量 汇编程序应回送分配给该变量的字节数。
但是,此值是LENGTH值和TYPE值的乘积。
第三十三页,共83页。
第十二页,共83页。
指令性语句 格式为:
[ 标号 ]: 操作码 [ 操作数 ] [; 注释 ] 带方括号的为任选项, 标号是指令的符号地址, 操作码和操作数是用汇编语言指令表示的指令部分, 注释是对该语句在本程序中的功能的说明。
第十三页,共83页。
指示性语句 格式为:
[ 名字 / 变量 ] 命令 [参数] [; 注释 ]
举例: MOV BX, OFFSET OPER_ONE
汇编程序将OPER_ONE的偏移地址作为立 即数回送给指令,而在执行时则将该偏移地址装 入BX寄存器中。所以这条指令的功能与指令
LEA BX, OPER_ONE 是等价的。
第三十五页,共83页。
·SEG 格式为:SEG 变量或标号 汇编程序将回送变量或标号的段地址值。
第三十页,共83页。
举例1: FEES DW 100 DUP (0)
对于指令MOV CX, LENGTH FEES 汇编程序将使其形成为:
MOV CX, 100 举例2:
ARRAY DW 1, 2, 3 对于指令MOV CX, LENGTH ARRAY
汇编程序将使其形成为:
MOV CX, 1
第三十一页,共83页。
第三十八页,共83页。
此外,有时指令要求使用PTR操作符。例 如用 MOV [BX], 5
指令把立即数存入BX寄存器内容指 定的存储单元中,但汇编程序不能分清 是存入字单元还是字节单元,此时必须 用PTR操作符来说明属性,应该写明: