《汇编语言程序设计及上机指导5汇编语言语法.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计及上机指导5汇编语言语法.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022/12/311重点大学计算机专业系列教材重点大学计算机专业系列教材重点大学计算机专业系列教材重点大学计算机专业系列教材第第5 5章章 汇编语言语法汇编语言语法 【本章提要本章提要本章提要本章提要】本章以本章以本章以本章以IntelIntelIntelIntel系列微处理器的指令系统和宏汇编工具系列微处理器的指令系统和宏汇编工具系列微处理器的指令系统和宏汇编工具系列微处理器的指令系统和宏汇编工具MASM6.MASM6.MASM6.MASM6.X X X X为主体,介绍汇编语言的基本语法和伪指令,实现简单的为主体,介绍汇编语言的基本语法和伪指令,实现简单的为主体,介绍汇编语言的基本语法和伪
2、指令,实现简单的为主体,介绍汇编语言的基本语法和伪指令,实现简单的汇编语言程序设计。汇编语言程序设计。汇编语言程序设计。汇编语言程序设计。【学习目标学习目标学习目标学习目标】熟练掌握进行汇编语言程序设计的基本语法熟练掌握进行汇编语言程序设计的基本语法熟练掌握进行汇编语言程序设计的基本语法熟练掌握进行汇编语言程序设计的基本语法 熟练掌握伪指令以及宏结构的应用熟练掌握伪指令以及宏结构的应用熟练掌握伪指令以及宏结构的应用熟练掌握伪指令以及宏结构的应用 熟练掌握利用熟练掌握利用熟练掌握利用熟练掌握利用MASM6.XMASM6.XMASM6.XMASM6.X工具对程序进行汇编的工具对程序进行汇编的工具对
3、程序进行汇编的工具对程序进行汇编的具体方法具体方法具体方法具体方法2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回2oo指令指令指令指令:是可执行的,汇编后由相应的机器代码所取代是可执行的,汇编后由相应的机器代码所取代是可执行的,汇编后由相应的机器代码所取代是可执行的,汇编后由相应的机器代码所取代;oo伪指令伪指令伪指令伪指令:是不可执行的,只是在源程序汇编期间由汇编程序处理是不可执行的,只是在源程序汇编期间由汇编程序处理是不可执行的,只是在源程序汇编期间由汇编程序处理是不可执行的,只是在源程序汇编期间由汇编程序处理的命令,指示汇编程序为数据分配内存空
4、间,或者提供段定义的命令,指示汇编程序为数据分配内存空间,或者提供段定义的命令,指示汇编程序为数据分配内存空间,或者提供段定义的命令,指示汇编程序为数据分配内存空间,或者提供段定义等信息,不产生任何机器代码等信息,不产生任何机器代码等信息,不产生任何机器代码等信息,不产生任何机器代码 源程序源程序可执行文件可执行文件目标模块目标模块文本编辑器文本编辑器汇编程序汇编程序连接程序连接程序调试程序调试程序机器语言机器语言:计算机能够直接识别与执行计算机能够直接识别与执行 高级语言高级语言:是完全独立于机器的通用语言,效率低:是完全独立于机器的通用语言,效率低,面向面向 过程、面向对象,必须译成机器语
5、言。过程、面向对象,必须译成机器语言。汇编语言汇编语言:符号化语言。用指令的助记符、符号地址、标:符号化语言。用指令的助记符、符号地址、标 号等编写程序的语言号等编写程序的语言。5.1 5.1 概述概述2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回35.1.1 5.1.1 汇编语言程序的基本概念汇编语言程序的基本概念 指令与伪指令的集合构成汇编语言语句指令与伪指令的集合构成汇编语言语句指令与伪指令的集合构成汇编语言语句指令与伪指令的集合构成汇编语言语句.MODEL SMALL .MODEL SMALL .MODEL SMALL .MODEL SMAL
6、L ;定义内存工作模式为小模式定义内存工作模式为小模式定义内存工作模式为小模式定义内存工作模式为小模式 .386 ;.386 ;.386 ;.386 ;定义指令系统为定义指令系统为定义指令系统为定义指令系统为80386803868038680386指令集指令集指令集指令集 .STACK .STACK .STACK .STACK ;定义定义定义定义1K1K1K1K个字节的堆栈段个字节的堆栈段个字节的堆栈段个字节的堆栈段 .DATA .DATA .DATA .DATA ;数据段开始数据段开始数据段开始数据段开始DATA1 DD 12340000H DATA1 DD 12340000H DATA1
7、DD 12340000H DATA1 DD 12340000H ;定义第一个定义第一个定义第一个定义第一个32323232位数据的值为位数据的值为位数据的值为位数据的值为12340000H 12340000H 12340000H 12340000H DATA2 DD 5678H DATA2 DD 5678H DATA2 DD 5678H DATA2 DD 5678H ;定义第二个定义第二个定义第二个定义第二个32323232位数据的值为位数据的值为位数据的值为位数据的值为5678H 5678H 5678H 5678H SUM DD SUM DD SUM DD SUM DD?;定义用来存放前两个
8、数据之和的第三个数据定义用来存放前两个数据之和的第三个数据定义用来存放前两个数据之和的第三个数据定义用来存放前两个数据之和的第三个数据 .CODE ;.CODE ;.CODE ;.CODE ;代码段开始代码段开始代码段开始代码段开始,数据段结束数据段结束数据段结束数据段结束 .STARTUP .STARTUP .STARTUP .STARTUP ;程序开始程序开始程序开始程序开始 MOV EAX,DATA1 MOV EAX,DATA1 MOV EAX,DATA1 MOV EAX,DATA1 ;取第一个数到取第一个数到取第一个数到取第一个数到EAXEAXEAXEAX ADD EAX,DATA2
9、ADD EAX,DATA2 ADD EAX,DATA2 ADD EAX,DATA2 ;求和求和求和求和 MOV SUM,EAX MOV SUM,EAX MOV SUM,EAX MOV SUM,EAX ;保存结果保存结果保存结果保存结果(12345678H)(12345678H)(12345678H)(12345678H)至至至至SUMSUMSUMSUM .EXIT 0 .EXIT 0 .EXIT 0 .EXIT 0 ;程序结束程序结束程序结束程序结束,正常返回到操作系统正常返回到操作系统正常返回到操作系统正常返回到操作系统 END END END END ;结束汇编结束汇编结束汇编结束汇编20
10、22/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回45.1.2 5.1.2 5.1.2 5.1.2 汇编语言的基本语法汇编语言的基本语法汇编语言的基本语法汇编语言的基本语法一、字符集一、字符集一、字符集一、字符集oo英文字符:英文字符:英文字符:英文字符:A A A AZ Z Z Z z z z zoo数字字符:数字字符:数字字符:数字字符:0 0 0 09 9 9 9oo算术运算符:算术运算符:算术运算符:算术运算符:/oo关系运算符:关系运算符:关系运算符:关系运算符:oo分隔符:分隔符:分隔符:分隔符:,(,(,(,(逗号逗号逗号逗号);();();(
11、);(分号分号分号分号)()()()()()()()(括号括号括号括号)()()()(引号引号引号引号)(空格(空格(空格(空格)TAB()TAB()TAB()TAB(制表符制表符制表符制表符)oo控制符:控制符:控制符:控制符:CRCRCRCR(回车)(回车)(回车)(回车)LFLFLFLF(换行)(换行)(换行)(换行)FFFFFFFF(换页)(换页)(换页)(换页)oo其它字符:其它字符:其它字符:其它字符:$&_$&_$&_$&_(下划线)(下划线)(下划线)(下划线)?%?%?%?%!二、标识符二、标识符二、标识符二、标识符1 1 1 1)标识符的第一个字符必须是字母、问号)标识符的
12、第一个字符必须是字母、问号)标识符的第一个字符必须是字母、问号)标识符的第一个字符必须是字母、问号“?”?”?”?”、“”符、或下划线符、或下划线符、或下划线符、或下划线“_”;_”;_”;_”;2 2 2 2)从第二个字符开始可以是字母、数字、或)从第二个字符开始可以是字母、数字、或)从第二个字符开始可以是字母、数字、或)从第二个字符开始可以是字母、数字、或“?”?”?”?”、“”、“_”_”_”_”;3 3 3 3)一个标识符的长短可以由)一个标识符的长短可以由)一个标识符的长短可以由)一个标识符的长短可以由1 1 1 131313131个字符组成。个字符组成。个字符组成。个字符组成。例如
13、:例如:例如:例如:X,GAM_31X,GAM_31X,GAM_31X,GAM_31,?JACK5?JACK5?JACK5?JACK5是正确的;而是正确的;而是正确的;而是正确的;而8P,DATA 88P,DATA 88P,DATA 88P,DATA 8是不正确的。是不正确的。是不正确的。是不正确的。2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回5三、保留字三、保留字pp寄存器名、指令助记符、伪操作命令、表达式运算寄存器名、指令助记符、伪操作命令、表达式运算寄存器名、指令助记符、伪操作命令、表达式运算寄存器名、指令助记符、伪操作命令、表达式运算符,以
14、及属性操作符等都是系统专用的保留字。这符,以及属性操作符等都是系统专用的保留字。这符,以及属性操作符等都是系统专用的保留字。这符,以及属性操作符等都是系统专用的保留字。这些保留字是不能用作标识符的。些保留字是不能用作标识符的。些保留字是不能用作标识符的。些保留字是不能用作标识符的。四、语句四、语句oo一条语句一般只占一行,超过一行时必须用续行符一条语句一般只占一行,超过一行时必须用续行符一条语句一般只占一行,超过一行时必须用续行符一条语句一般只占一行,超过一行时必须用续行符号号号号“”指示指示指示指示oo两条语句不能写在同一行。两条语句不能写在同一行。两条语句不能写在同一行。两条语句不能写在同
15、一行。oo语句可以有注释,一般写在语句之后或单独占一行,语句可以有注释,一般写在语句之后或单独占一行,语句可以有注释,一般写在语句之后或单独占一行,语句可以有注释,一般写在语句之后或单独占一行,是以是以是以是以“;”开始的字符串。开始的字符串。开始的字符串。开始的字符串。2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回65.2 5.2 汇编语言的数据和表达式汇编语言的数据和表达式oo汇编语言能识别的数据是常量、变量和标号。汇编语言能识别的数据是常量、变量和标号。汇编语言能识别的数据是常量、变量和标号。汇编语言能识别的数据是常量、变量和标号。5.2.1
16、5.2.1 5.2.1 5.2.1 常量常量常量常量oo常量是汇编时已经确定的值,主要用于伪指令中给变量赋值,常量是汇编时已经确定的值,主要用于伪指令中给变量赋值,常量是汇编时已经确定的值,主要用于伪指令中给变量赋值,常量是汇编时已经确定的值,主要用于伪指令中给变量赋值,或作为指令语句中的立即数或存储器操作数的组成部分。或作为指令语句中的立即数或存储器操作数的组成部分。或作为指令语句中的立即数或存储器操作数的组成部分。或作为指令语句中的立即数或存储器操作数的组成部分。一常量的类型一常量的类型一常量的类型一常量的类型数据形式数据形式数据形式数据形式格格格格 式式式式 取取取取值值值值范范范范围围
17、围围举举举举例例例例注注注注 释释释释二二二二进进进进制数制数制数制数BB0 01 110010011B10010011B二二二二进进进进制数以制数以制数以制数以B B结结结结尾尾尾尾八八八八进进进进制数制数制数制数QQ0 07 7123Q123Q八八八八进进进进制数以制数以制数以制数以QQ结结结结尾尾尾尾十十十十进进进进制数制数制数制数DD0 09 9256D256D,34583458十十十十进进进进制数以制数以制数以制数以D D结结结结尾或者缺省尾或者缺省尾或者缺省尾或者缺省十六十六十六十六进进进进制数制数制数制数HH0 09 9 A AF F0A3H0A3H,12345H12345H十六
18、十六十六十六进进进进制数以制数以制数以制数以HH结结结结尾,尾,尾,尾,最前面必最前面必最前面必最前面必须须须须是是是是0 09 9字符或字符串字符或字符串字符或字符串字符或字符串ASCIIASCII字符字符字符字符ABCABC两端必两端必两端必两端必须须须须加加加加 或或或或”2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回7二符号定义伪指令二符号定义伪指令二符号定义伪指令二符号定义伪指令 用于给程序中多次出现的同一个常量或表达式赋一个符号名,也可以为其它符号用于给程序中多次出现的同一个常量或表达式赋一个符号名,也可以为其它符号用于给程序中多次出现的
19、同一个常量或表达式赋一个符号名,也可以为其它符号用于给程序中多次出现的同一个常量或表达式赋一个符号名,也可以为其它符号名取一个新名字,并赋给新的类型属性。名取一个新名字,并赋给新的类型属性。名取一个新名字,并赋给新的类型属性。名取一个新名字,并赋给新的类型属性。(1 1 1 1)EQUEQUEQUEQU伪指令伪指令伪指令伪指令例:例:例:例:FIRST EQU 1 FIRST EQU 1 FIRST EQU 1 FIRST EQU 1 ;定义常数;定义常数;定义常数;定义常数 SECOND EQU FIRST*3+8 SECOND EQU FIRST*3+8 SECOND EQU FIRST*
20、3+8 SECOND EQU FIRST*3+8 ;定义数值表达式;定义数值表达式;定义数值表达式;定义数值表达式 ADDR1 EQU DS:ADDR1 EQU DS:ADDR1 EQU DS:ADDR1 EQU DS:EBP+4EBP+4EBP+4EBP+4 ;定义地址表达式;定义地址表达式;定义地址表达式;定义地址表达式 DWORDS EQU THIS DWORD DWORDS EQU THIS DWORD DWORDS EQU THIS DWORD DWORDS EQU THIS DWORD ;定义下面的字节变量为双字类型;定义下面的字节变量为双字类型;定义下面的字节变量为双字类型;定义
21、下面的字节变量为双字类型 BYTES DB 10 DUP(0)BYTES DB 10 DUP(0)BYTES DB 10 DUP(0)BYTES DB 10 DUP(0)ADDR2 EQU WORD PTR BYTES ADDR2 EQU WORD PTR BYTES ADDR2 EQU WORD PTR BYTES ADDR2 EQU WORD PTR BYTES ;重新定义变量;重新定义变量;重新定义变量;重新定义变量BYTESBYTESBYTESBYTES的名字和属性的名字和属性的名字和属性的名字和属性 START:MOV EAXSTART:MOV EAXSTART:MOV EAXSTA
22、RT:MOV EAX,EBXEBXEBXEBX GOON EQU FAR PTR START GOON EQU FAR PTR START GOON EQU FAR PTR START GOON EQU FAR PTR START ;重新定义标号;重新定义标号;重新定义标号;重新定义标号STARTSTARTSTARTSTART的名字和属性的名字和属性的名字和属性的名字和属性 COUNT EQU ECX COUNT EQU ECX COUNT EQU ECX COUNT EQU ECX ;为;为;为;为ECXECXECXECX重新取名重新取名重新取名重新取名注意:注意:注意:注意:该等值语句只作
23、为符号定义用,不产生任何目标代码,也不占用存储单元,并该等值语句只作为符号定义用,不产生任何目标代码,也不占用存储单元,并该等值语句只作为符号定义用,不产生任何目标代码,也不占用存储单元,并该等值语句只作为符号定义用,不产生任何目标代码,也不占用存储单元,并且不能是程序中曾经定义过的符号名。且不能是程序中曾经定义过的符号名。且不能是程序中曾经定义过的符号名。且不能是程序中曾经定义过的符号名。2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回8(2 2)“”伪指令伪指令“”伪操作命令与伪操作命令与伪操作命令与伪操作命令与EQUEQUEQUEQU具有相同的功
24、能,但它定义的具有相同的功能,但它定义的具有相同的功能,但它定义的具有相同的功能,但它定义的符号符号符号符号允许重新定义允许重新定义允许重新定义允许重新定义。例:例:例:例:PERSON=10 PERSON=10 PERSON=10 PERSON=10 ;定义;定义;定义;定义PERSONPERSONPERSONPERSON等于等于等于等于10101010 PERSON=PERSON+5 PERSON=PERSON+5 PERSON=PERSON+5 PERSON=PERSON+5 ;重新定义;重新定义;重新定义;重新定义PERSONPERSONPERSONPERSON等于等于等于等于1515
25、15152022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回95.2.2 5.2.2 变量变量变量的值可以在程序运行过程中可随时修改,变量名是存放数据变量的值可以在程序运行过程中可随时修改,变量名是存放数据变量的值可以在程序运行过程中可随时修改,变量名是存放数据变量的值可以在程序运行过程中可随时修改,变量名是存放数据的存储单元符号地址,变量的值为对应存储单元的内容。的存储单元符号地址,变量的值为对应存储单元的内容。的存储单元符号地址,变量的值为对应存储单元的内容。的存储单元符号地址,变量的值为对应存储单元的内容。一变量的属性一变量的属性一变量的属性一变量的
26、属性 段属性段属性段属性段属性(SEG)(SEG)(SEG)(SEG),指变量所在段的段基址。,指变量所在段的段基址。,指变量所在段的段基址。,指变量所在段的段基址。偏移地址属性偏移地址属性偏移地址属性偏移地址属性(OFFSET)(OFFSET)(OFFSET)(OFFSET),指变量所在段中的偏移地址,即变量,指变量所在段中的偏移地址,即变量,指变量所在段中的偏移地址,即变量,指变量所在段中的偏移地址,即变量所在地址与段基址之间的字节距离。所在地址与段基址之间的字节距离。所在地址与段基址之间的字节距离。所在地址与段基址之间的字节距离。类型属性类型属性类型属性类型属性(TYPE)(TYPE)(
27、TYPE)(TYPE),指变量占用存储单元的字节数。,指变量占用存储单元的字节数。,指变量占用存储单元的字节数。,指变量占用存储单元的字节数。n n若占用若占用若占用若占用一一一一个字节,称为字节变量,其类型为个字节,称为字节变量,其类型为个字节,称为字节变量,其类型为个字节,称为字节变量,其类型为BYTEBYTEBYTEBYTE;n n若占用若占用若占用若占用两两两两个字节,称为字变量,其类型为个字节,称为字变量,其类型为个字节,称为字变量,其类型为个字节,称为字变量,其类型为WORDWORDWORDWORD;n n若占用若占用若占用若占用四四四四个字节,称为双字变量,其类型为个字节,称为双
28、字变量,其类型为个字节,称为双字变量,其类型为个字节,称为双字变量,其类型为DWORDDWORDDWORDDWORD;n n若占用若占用若占用若占用六六六六字节,其类型为字节,其类型为字节,其类型为字节,其类型为FWORDFWORDFWORDFWORD;n n若占用若占用若占用若占用八八八八字节,其类型为字节,其类型为字节,其类型为字节,其类型为QWORDQWORDQWORDQWORD;n n若占用若占用若占用若占用十十十十字节,其类型为字节,其类型为字节,其类型为字节,其类型为TBYTETBYTETBYTETBYTE。2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第
29、第5章章返回返回10二变量定义伪指令二变量定义伪指令二变量定义伪指令二变量定义伪指令就是为数据分配存储单元,且对这个存储单元取一个名字,即变量名。就是为数据分配存储单元,且对这个存储单元取一个名字,即变量名。就是为数据分配存储单元,且对这个存储单元取一个名字,即变量名。就是为数据分配存储单元,且对这个存储单元取一个名字,即变量名。语句的格式如下:语句的格式如下:语句的格式如下:语句的格式如下:变量名变量名变量名变量名 DB/DW/DD/DF/DQ/DT DB/DW/DD/DF/DQ/DT DB/DW/DD/DF/DQ/DT DB/DW/DD/DF/DQ/DT 表达式表达式表达式表达式1 1 1
30、 1,表达式,表达式,表达式,表达式2 2 2 2,变量名是可选的,变量名是可选的,变量名是可选的,变量名是可选的,DB/DW/DD/DF/DQ/DTDB/DW/DD/DF/DQ/DTDB/DW/DD/DF/DQ/DTDB/DW/DD/DF/DQ/DT是伪操作命令必须选用一是伪操作命令必须选用一是伪操作命令必须选用一是伪操作命令必须选用一种,表达式是赋给变量的初值,常见的有如下几种:种,表达式是赋给变量的初值,常见的有如下几种:种,表达式是赋给变量的初值,常见的有如下几种:种,表达式是赋给变量的初值,常见的有如下几种:(1 1 1 1)数值变量定义语句)数值变量定义语句)数值变量定义语句)数值
31、变量定义语句例:例:例:例:D_BYTE D_BYTE D_BYTE D_BYTE DBDBDBDB 30H,40H 30H,40H 30H,40H 30H,40H DB 50H DB 50H DB 50H DB 50HD_WORD D_WORD D_WORD D_WORD DW DW DW DW 1234H,5678H 1234H,5678H 1234H,5678H 1234H,5678HD_DWORD D_DWORD D_DWORD D_DWORD DDDDDDDD D_DWORD D_DWORD D_DWORD D_DWORDD_TBYTE D_TBYTE D_TBYTE D_TBYTE
32、 DTDTDTDT?D_FWORD D_FWORD D_FWORD D_FWORD DFDFDFDF 1234567890ABH 1234567890ABH 1234567890ABH 1234567890ABHD_QWORD D_QWORD D_QWORD D_QWORD DQDQDQDQ2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回11(2 2)字符串变量定义语句)字符串变量定义语句可以用可以用可以用可以用DBDBDBDB来实现来实现来实现来实现,即为串中的每一个字符分配一个字节存储单元。,即为串中的每一个字符分配一个字节存储单元。,即为串中的每
33、一个字符分配一个字节存储单元。,即为串中的每一个字符分配一个字节存储单元。字符串必须用引号括起来,并且字符串必须用引号括起来,并且字符串必须用引号括起来,并且字符串必须用引号括起来,并且不超过不超过不超过不超过256256256256个字符,它们在内存个字符,它们在内存个字符,它们在内存个字符,它们在内存中自左至右把字符的中自左至右把字符的中自左至右把字符的中自左至右把字符的ASCIIASCIIASCIIASCII码按地址递增顺序依次存放。码按地址递增顺序依次存放。码按地址递增顺序依次存放。码按地址递增顺序依次存放。例:例:例:例:STRING1 DB ABCDEFGSTRING1 DB AB
34、CDEFGSTRING1 DB ABCDEFGSTRING1 DB ABCDEFG用用用用DWDWDWDW也可以定义也可以定义也可以定义也可以定义字符串变量,即给两个字符组成的字符串分配两个字符串变量,即给两个字符组成的字符串分配两个字符串变量,即给两个字符组成的字符串分配两个字符串变量,即给两个字符组成的字符串分配两个字节存储单元,它们在内存中的顺序是前一个字符为高字节,存字节存储单元,它们在内存中的顺序是前一个字符为高字节,存字节存储单元,它们在内存中的顺序是前一个字符为高字节,存字节存储单元,它们在内存中的顺序是前一个字符为高字节,存放在高地址,后一个字符为低字节,存放在低地址。放在高地
35、址,后一个字符为低字节,存放在低地址。放在高地址,后一个字符为低字节,存放在低地址。放在高地址,后一个字符为低字节,存放在低地址。例:例:例:例:STRING2 DW AB,CD,EFSTRING2 DW AB,CD,EFSTRING2 DW AB,CD,EFSTRING2 DW AB,CD,EF2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回12(3 3 3 3)?语句)?语句)?语句)?语句存储单元中不预置确定的值,常用来预留存储单元,存放程序的中间结果或最存储单元中不预置确定的值,常用来预留存储单元,存放程序的中间结果或最存储单元中不预置确定的值
36、,常用来预留存储单元,存放程序的中间结果或最存储单元中不预置确定的值,常用来预留存储单元,存放程序的中间结果或最终结果。终结果。终结果。终结果。例:例:例:例:FIRST DB?FIRST DB?FIRST DB?FIRST DB?;分配一个字节单元;分配一个字节单元;分配一个字节单元;分配一个字节单元 SECOND DD?,?,?SECOND DD?,?,?SECOND DD?,?,?SECOND DD?,?,?;分配三个双字单元;分配三个双字单元;分配三个双字单元;分配三个双字单元(4 4 4 4)带)带)带)带DUPDUPDUPDUP的变量定义语句的变量定义语句的变量定义语句的变量定义语
37、句DUP DUP DUP DUP 是重复数据定义操作符,可以为若干重复数据分配存储单元,并赋给相是重复数据定义操作符,可以为若干重复数据分配存储单元,并赋给相是重复数据定义操作符,可以为若干重复数据分配存储单元,并赋给相是重复数据定义操作符,可以为若干重复数据分配存储单元,并赋给相应的变量名。应的变量名。应的变量名。应的变量名。例:例:例:例:D1 DB 5 DUP(0)D1 DB 5 DUP(0)D1 DB 5 DUP(0)D1 DB 5 DUP(0)D2 DW 10H DUP(5678H)D2 DW 10H DUP(5678H)D2 DW 10H DUP(5678H)D2 DW 10H D
38、UP(5678H)D3 DD 20H DUP(?)D3 DD 20H DUP(?)D3 DD 20H DUP(?)D3 DD 20H DUP(?)oo第一条语句为变量第一条语句为变量第一条语句为变量第一条语句为变量D1D1D1D1分配分配分配分配5 5 5 5个字节单元个字节单元个字节单元个字节单元,每个单元初始值都为每个单元初始值都为每个单元初始值都为每个单元初始值都为0;0;0;0;oo第二条语句为变量第二条语句为变量第二条语句为变量第二条语句为变量D2D2D2D2重复分配重复分配重复分配重复分配10H10H10H10H个字单元,每个单元初始值都为个字单元,每个单元初始值都为个字单元,每个
39、单元初始值都为个字单元,每个单元初始值都为5678H5678H5678H5678H,共占有,共占有,共占有,共占有20H20H20H20H个字节;个字节;个字节;个字节;oo第三条语句为变量第三条语句为变量第三条语句为变量第三条语句为变量D3D3D3D3保留保留保留保留20H20H20H20H个双字单元,没有定义初始值。个双字单元,没有定义初始值。个双字单元,没有定义初始值。个双字单元,没有定义初始值。D4 DB 200 DUP(4 DUP(6),8)D4 DB 200 DUP(4 DUP(6),8)D4 DB 200 DUP(4 DUP(6),8)D4 DB 200 DUP(4 DUP(6)
40、,8)oo表示为变量表示为变量表示为变量表示为变量D4D4D4D4重复分配重复分配重复分配重复分配200200200200个数据序列个数据序列个数据序列个数据序列6666,6 6 6 6,6 6 6 6,6 6 6 6,8888,共占有,共占有,共占有,共占有1000100010001000个字节单元。个字节单元。个字节单元。个字节单元。2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回13三内存定位和定义数制伪指令三内存定位和定义数制伪指令(1 1 1 1)ORGORGORGORG伪指令和当前位置计数器伪指令和当前位置计数器伪指令和当前位置计数器伪指令
41、和当前位置计数器汇编时将段名填入段表,同时为该段配备一个初值为汇编时将段名填入段表,同时为该段配备一个初值为汇编时将段名填入段表,同时为该段配备一个初值为汇编时将段名填入段表,同时为该段配备一个初值为0 0 0 0的位置计数器的位置计数器的位置计数器的位置计数器$。计。计。计。计数器依次累计段内语句被汇编后生成的目标代码字节个数。可用数器依次累计段内语句被汇编后生成的目标代码字节个数。可用数器依次累计段内语句被汇编后生成的目标代码字节个数。可用数器依次累计段内语句被汇编后生成的目标代码字节个数。可用ORGORGORGORG伪伪伪伪指令把位置计数器指令把位置计数器指令把位置计数器指令把位置计数器
42、的值设置成需要的值。的值设置成需要的值。的值设置成需要的值。的值设置成需要的值。oo在数据段中,在数据段中,在数据段中,在数据段中,ORGORGORGORG后面的数据定义伪指令就从指定位置进行分配单元;后面的数据定义伪指令就从指定位置进行分配单元;后面的数据定义伪指令就从指定位置进行分配单元;后面的数据定义伪指令就从指定位置进行分配单元;oo在代码段中,在代码段中,在代码段中,在代码段中,ORGORGORGORG后面的一条指令语句就从指定位置生成目标代码;后面的一条指令语句就从指定位置生成目标代码;后面的一条指令语句就从指定位置生成目标代码;后面的一条指令语句就从指定位置生成目标代码;oo表达
43、式的值应该是非负的整数。表达式的值应该是非负的整数。表达式的值应该是非负的整数。表达式的值应该是非负的整数。例:例:例:例:ORG 0F0H ORG 0F0H ORG 0F0H ORG 0F0H ;从;从;从;从0F0H0F0H0F0H0F0H开始安排数据开始安排数据开始安排数据开始安排数据 ORG$+10H ORG$+10H ORG$+10H ORG$+10H ;跳过;跳过;跳过;跳过10H10H10H10H个字节后安排数据个字节后安排数据个字节后安排数据个字节后安排数据 DW 1,$+4,$+4DW 1,$+4,$+4DW 1,$+4,$+4DW 1,$+4,$+4 ;100H100H10
44、0H100H单元的字值为单元的字值为单元的字值为单元的字值为1,102H1,102H1,102H1,102H单元的字值单元的字值单元的字值单元的字值 ;为;为;为;为106H,104H106H,104H106H,104H106H,104H单元的字值为单元的字值为单元的字值为单元的字值为108H108H108H108H ARRAY DB 12,34,56,5 DUP(?)ARRAY DB 12,34,56,5 DUP(?)ARRAY DB 12,34,56,5 DUP(?)ARRAY DB 12,34,56,5 DUP(?);定义字节数组;定义字节数组;定义字节数组;定义字节数组LEN EQU
45、LEN EQU LEN EQU LEN EQU$-ARRAY$-ARRAY$-ARRAY$-ARRAY ;LENLENLENLEN的值为的值为的值为的值为ARRAYARRAYARRAYARRAY变量所占的字节数变量所占的字节数变量所占的字节数变量所占的字节数8 8 8 82022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回14(2 2 2 2)EVENEVENEVENEVEN伪指令伪指令伪指令伪指令 用来把段内位置计数器的值置为偶数地址边界对齐,如果遇到用来把段内位置计数器的值置为偶数地址边界对齐,如果遇到用来把段内位置计数器的值置为偶数地址边界对齐,如果
46、遇到用来把段内位置计数器的值置为偶数地址边界对齐,如果遇到EVENEVENEVENEVEN时时时时计数器计数器计数器计数器$值非偶数,则汇编程序自动插入值非偶数,则汇编程序自动插入值非偶数,则汇编程序自动插入值非偶数,则汇编程序自动插入NOPNOPNOPNOP指令指令指令指令(在代码段中在代码段中在代码段中在代码段中),使其为偶数;或者将使其为偶数;或者将使其为偶数;或者将使其为偶数;或者将$的值加的值加的值加的值加1(1(1(1(数据段中数据段中数据段中数据段中)。(3 3 3 3).RADIX.RADIX.RADIX.RADIX伪指令伪指令伪指令伪指令 宏汇编默认常量基数都是十进制数,可用
47、宏汇编默认常量基数都是十进制数,可用宏汇编默认常量基数都是十进制数,可用宏汇编默认常量基数都是十进制数,可用.RADIX.RADIX.RADIX.RADIX伪命令把缺省基数伪命令把缺省基数伪命令把缺省基数伪命令把缺省基数改为改为改为改为216216216216范围内的任意基数:范围内的任意基数:范围内的任意基数:范围内的任意基数:.RADIX.RADIX.RADIX.RADIX 其中,表达式与当前基数无关,其中,表达式与当前基数无关,其中,表达式与当前基数无关,其中,表达式与当前基数无关,一定是十进制数一定是十进制数一定是十进制数一定是十进制数。例:例:例:例:MOV AX,0FFHMOV A
48、X,0FFHMOV AX,0FFHMOV AX,0FFH MOV BX MOV BX MOV BX MOV BX,20202020 .RADIX 16 .RADIX 16 .RADIX 16 .RADIX 16 MOV CX,0FF MOV CX,0FF MOV CX,0FF MOV CX,0FF MOV DX,20D MOV DX,20D MOV DX,20D MOV DX,20D其中其中其中其中AXAXAXAX和和和和CXCXCXCX寄存器的内容相同,寄存器的内容相同,寄存器的内容相同,寄存器的内容相同,BXBXBXBX和和和和DXDXDXDX寄存器内容相同。寄存器内容相同。寄存器内容相同
49、。寄存器内容相同。2022/12/31汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第5章章返回返回155.2.3 5.2.3 标号标号标号之后必须有一个冒号标号之后必须有一个冒号标号之后必须有一个冒号标号之后必须有一个冒号(:)(:)(:)(:),标号也可以单占一行。,标号也可以单占一行。,标号也可以单占一行。,标号也可以单占一行。一标号的属性一标号的属性一标号的属性一标号的属性 段属性段属性段属性段属性(SEG)(SEG)(SEG)(SEG),指标号所在段的段基址。,指标号所在段的段基址。,指标号所在段的段基址。,指标号所在段的段基址。偏移地址属性偏移地址属性偏移地址属性偏移地址属
50、性(OFFSET)(OFFSET)(OFFSET)(OFFSET),指标号所在段中的偏移地址,即标号所在地址与段基址之间的字,指标号所在段中的偏移地址,即标号所在地址与段基址之间的字,指标号所在段中的偏移地址,即标号所在地址与段基址之间的字,指标号所在段中的偏移地址,即标号所在地址与段基址之间的字节距离。节距离。节距离。节距离。距离属性或类型属性距离属性或类型属性距离属性或类型属性距离属性或类型属性(TYPE)(TYPE)(TYPE)(TYPE),标号可作为转移和调用指令的目标地址,也可作为过程定义,标号可作为转移和调用指令的目标地址,也可作为过程定义,标号可作为转移和调用指令的目标地址,也可