DAI DB' This is a sample progran,i数据段 DATA SEGMENT DB ODH,OAH, 'S 回车和换行符以及结束符 DATA ENDS STACK SEGMENT ;堆栈段 STI DB 100 DUP() STACK ENDS CODE SEGMENT ;代码段 MAIN PROC FAR ASSUME CS:CODE,DS:DATA, SS: STACK;段分配 START:MOⅤAX, STACK ;送堆栈段地址 MOV SS.AX PUSH DS ;返回DOS MOVAX,O PUSHAX MOVAXDATA 送数据段地址 MOV DS.AX MOVAH.9 ;DOS9号功能调用,显示字符串 MOV DXOFFSET DAI INT 21H RET MAIN ENDP CODE ENDS END START
DATA SEGMENT ;数据段 DA1 DB 'This is a sample program.' DB 0DH,0AH,‘$‘ ;回车和换行符以及结束符 DATA ENDS STACK SEGMENT ;堆栈段 ST1 DB 100 DUP(?) STACK ENDS CODE SEGMENT ;代码段 MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK ;段分配 START: MOV AX,STACK ;送堆栈段地址 MOV SS,AX PUSH DS ;返回DOS MOV AX,0 PUSH AX MOV AX,DATA ;送数据段地址 MOV DS,AX MOV AH,9 ;DOS 9号功能调用,显示字符串 MOV DX,OFFSET DA1 INT 21H RET MAIN ENDP CODE ENDS END START
第四章汇编语言程序设计 汇编语言:利用指令助记符、符号地址、标号来编写的计算机语 言。是机器语言的符号表示,是面向机器的语言,是较低级的语 利用汇编语言编写的程序称为源程序,需要通过汇编程序翻 译成二进制代码的目标程序,再经过与库文件的连接,最后得到 可执行文件程序,才能在机器上直接运行。 41汇编语言程序格式 4.1.1.汇编语言的格式 1.指令性语句 指令性语句是指汇编程序可将其汇编成目标代码,能被机器 执行的语句
第四章 汇编语言程序设计 汇编语言:利用指令助记符、符号地址、标号来编写的计算机语 言。是机器语言的符号表示,是面向机器的语言,是较低级的语 言。 利用汇编语言编写的程序称为源程序,需要通过汇编程序翻 译成二进制代码的目标程序,再经过与库文件的连接,最后得到 可执行文件程序,才能在机器上直接运行。 4.1 汇编语言程序格式 4.1.1.汇编语言的格式 1. 指令性语句 指令性语句是指汇编程序可将其汇编成目标代码,能被机器 执行的语句
格式如下: 标号:]指令助记符[操作数;注解] 其中:用方括号括起来的部分,可以有也可以没有,是可选项。 每部分之间用空格(至少一个)分开,一行最多可有132个字符。 标号:是给指令或某一存储单元地址所起的名字。可由字母:A Z;数字:0~9;特殊字符:?、·、@、一、S等字符组成。 数字不能作标识符的第一个字符,而圆点仅能用作第一个字符 标识符最长为31个字符。当标识符后跟冒号时,表示是标号。 它代表该行指令的起始地址;当标识符后不带冒号时,表示变 量;伪指令前的标识符不加冒号。 指令助记符:表示不同操作的指令,可以是8086的指令助记符, 也可以是伪指令。 操作数:是指令执行的对象。根据指令的要求,可能有一个 两个或者没有,如果一条指令有多个操作数,则操作数之间必 须用“,”分隔
格式如下: [标号:] 指令助记符 [操作数][;注解] 其中:用方括号括起来的部分,可以有也可以没有,是可选项。 每部分之间用空格(至少一个)分开,一行最多可有132个字符。 标号:是给指令或某一存储单元地址所起的名字。可由字母:A ~ z ; 数字:0 ~ 9 ; 特殊字符:?、·、@、—、$等字符组成。 数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。 标识符最长为31个字符。当标识符后跟冒号时,表示是标号。 它代表该行指令的起始地址;当标识符后不带冒号时,表示变 量;伪指令前的标识符不加冒号。 指令助记符:表示不同操作的指令,可以是8086的指令助记符, 也可以是伪指令。 操作数:是指令执行的对象。根据指令的要求,可能有一个、 两个或者没有,如果一条指令有多个操作数,则操作数之间必 须用“ , ”分隔
例如:RET;无操作数 COUNT: INC CX;一个操作数 如果是伪指令,则可能有多个操作数,例如: COST DB3,4,5,6,7;5个操作数 MOV AX,[BP十4;第二个操作数为表达式 注释:该项是可选项,可有可无,是为源程序所加的注解,用于提 高程序的可读性。注释前必须用分号。 2.伪指令语句 伪指令用于对汇编程序进行控制,它不像机器指令(指令性语 句)那样是在程序运行期间由计算机来执行的,它是在汇编程序对 源程序汇编期间由汇编程序处理的操作,可以完成如数据定义、分 配存储区、指示程序结束等功能。其格式和汇编指令一样,但一般 不产生目的代码,即不直接命令CPU去执行什么操作。 格式:名字伪指令指示符操作数[,操作数][;注释]
例如:RET ;无操作数 COUNT:INC CX ;一个操作数 如果是伪指令,则可能有多个操作数,例如: COST DB 3,4,5,6,7 ;5个操作数 MOV AX,[BP十4] ;第二个操作数为表达式 注释:该项是可选项,可有可无,是为源程序所加的注解,用于提 高程序的可读性。注释前必须用分号。 2. 伪指令语句 伪指令用于对汇编程序进行控制,它不像机器指令(指令性语 句)那样是在程序运行期间由计算机来执行的,它是在汇编程序对 源程序汇编期间由汇编程序处理的操作,可以完成如数据定义、分 配存储区、指示程序结束等功能。其格式和汇编指令一样,但一般 不产生目的代码,即不直接命令CPU去执行什么操作。 格式: 名字 伪指令指示符 操作数[,操作数] [;注释]
名字:是给伪指令取的名称,它用符号地址表示,名字后不允 许带冒号”:”,名字可以省略,伪指令中名字通常是变量名、 段名、过程名、符号名等 伪指令指示符:是汇编程序MASM规定的符号,常用的有变量 定义语句 OBDW),符号定义语句(EQU=),段定义语句 ( SEGMENT…ENDS),段分配语句( ASSUME),结构定义语句 ( STURO,ENDS),过程定义语句(PROC…ENDP)等。 操作数:是由伪指令具体要求的,有的伪指令不允许带操作数, 有的伪指令要求带多个操作数,多个操作数之间必须用逗号隔 开。操作数可以是常数、变量、字符串、表达式等 注释的功能和使用与指令性语句相同
名字:是给伪指令取的名称,它用符号地址表示,名字后不允 许带冒号”:”,名字可以省略,伪指令中名字通常是变量名、 段名、过程名、符号名等。 伪指令指示符:是汇编程序MASM规定的符号,常用的有变量 定义语句(DB DW),符号定义语句(EQU =),段定义语句 (SEGMENT …ENDS),段分配语句(ASSUME),结构定义语句 (STURC …ENDS),过程定义语句(PROC …ENDP)等。 操作数:是由伪指令具体要求的,有的伪指令不允许带操作数, 有的伪指令要求带多个操作数,多个操作数之间必须用逗号隔 开。操作数可以是常数、变量、字符串、表达式等。 注释的功能和使用与指令性语句相同
3表达式 表达式是由运算符和操作数组成的序列,汇编语言中的表达式 在汇编时计算,在运行时已经是常数了。在汇编时产生一个确定的 值。这个值可以仅表示一个常量,也可以表示一个存储单元的偏移 地址,相应的表达式称为常量表达式和地址表达式。表达式可出现 在常数的地方。 (1)常数 汇编语言语句中出现的常数有5种: ①二进制数:后面加B,如0100000B ②八进制数:后面加字母Q或O,如202Q或2020。 ③十进制数:后跟D或不跟字母,如85D或85。 ④十六进制数:在后面加H,若是字母开始,前面要加0,以示 和变量的区别。 ⑤字符和字符串字符串用单引号)或双引号(“)引起来
3 表达式 表达式是由运算符和操作数组成的序列,汇编语言中的表达式 在汇编时计算,在运行时已经是常数了。在汇编时产生一个确定的 值。这个值可以仅表示一个常量,也可以表示一个存储单元的偏移 地址,相应的表达式称为常量表达式和地址表达式。表达式可出现 在常数的地方。 (1)常数 汇编语言语句中出现的常数有5种: ① 二进制数:后面加B,如01000001B。 ② 八进制数:后面加字母Q或O,如202Q或202O。 ③ 十进制数:后跟D或不跟字母,如85D或85。 ④ 十六进制数:在后面加H,若是字母开始,前面要加0,以示 和变量的区别。 ⑤字符和字符串字符串用单引号(‘)或双引号(“)引起来
(2)常量操作数 常量操作数是一个数值操作数,一般是常量或者是表示常量的 标识符。可以为数字常量操作数或字符串常量操作数。前者可采用 二进制、八进制、十进制或十六进制等计数形式;而后者则为相应 字符的ASCI码。 (3)存储器操作数 存储器操作数是一个地址操作数,代表一个存储单元的地址, 通常以标识符的形式出现。 存储器操作数可以分为变量及标号两种类型,如果存储器操作 数所代表的是某个数据在数据段、附加段或堆栈段中的地址,那么 这个存储器操作数就称为变量;如果存储器操作数所代表的是某条 指令代码在码段中的地址,那么这个存储器操作数称为标号。变量 所对应的存储单元内容在程序的运行过程中是可以改变的,标号通 常作为转移指令或调用指令的目标操作数,在程序运行过程中不能 改变
(2)常量操作数 常量操作数是一个数值操作数,一般是常量或者是表示常量的 标识符。可以为数字常量操作数或字符串常量操作数。前者可采用 二进制、八进制、十进制或十六进制等计数形式;而后者则为相应 字符的ASCII码。 (3)存储器操作数 存储器操作数是一个地址操作数,代表一个存储单元的地址, 通常以标识符的形式出现。 存储器操作数可以分为变量及标号两种类型,如果存储器操作 数所代表的是某个数据在数据段、附加段或堆栈段中的地址,那么 这个存储器操作数就称为变量;如果存储器操作数所代表的是某条 指令代码在码段中的地址,那么这个存储器操作数称为标号。变量 所对应的存储单元内容在程序的运行过程中是可以改变的,标号通 常作为转移指令或调用指令的目标操作数,在程序运行过程中不能 改变
存储器操作数有三个方面的属性: (1)段地址:即存储器操作数所对应的存储单元所在段的段地 址 (2)偏移地址:即存储器操作数所对应的存储单元在所在段内 的偏移地址; (3)类型:变量的类型是相应存储单元所存放的数据项的字节 数;而标号的类型则反映了相应存储单元地址在作为转移或调 用指令的目标操作数时的寻址方式,可有两种情况,即NEAR (-1)和FAR(一2)。 (4)常量表达式 由常量操作数及运算符构成,在汇编时产生一个常量。 如PORT、VAL+1、 OFFSET SUM、 SEG SUM、TYPE CYCLE等
存储器操作数有三个方面的属性: (1) 段地址:即存储器操作数所对应的存储单元所在段的段地 址; (2) 偏移地址:即存储器操作数所对应的存储单元在所在段内 的偏移地址; (3) 类型:变量的类型是相应存储单元所存放的数据项的字节 数;而标号的类型则反映了相应存储单元地址在作为转移或调 用指令的目标操作数时的寻址方式,可有两种情况,即NEAR ( -1 )和FAR( -2 )。 (4)常量表达式 由常量操作数及运算符构成,在汇编时产生一个常量。 如 PORT、 VAL + 1、 OFFSET SUM 、 SEG SUM 、 TYPE CYCLE等
(5)地址表达式 由存储器操作数与运算符构成,必须有明确的物理意义 例如SUM+2、 CYCLE-5 表达式SUM十2、 CYCLE-5的值仍然是一个存储器操作数, 该存储器操作数的段地址与类型属性分别与存储器操作数SUM及 CYCLE相同,但偏移地址分别比SUM及 CYCLE大2或小5。表达式 是在汇编时计算的,而变量单元的内容在程序的运行过程中可以改 变
(5)地址表达式 由存储器操作数与运算符构成,必须有明确的物理意义。 例如 SUM+2、CYCLE-5 表达式SUM+2、CYCLE-5的值仍然是一个存储器操作数, 该存储器操作数的段地址与类型属性分别与存储器操作数SUM及 CYCLE相同,但偏移地址分别比SUM及CYCLE大2或小5。表达式 是在汇编时计算的,而变量单元的内容在程序的运行过程中可以改 变
412汇编语言的运算符(P128-136) 算术运算符、逻辑运算符和关系运算符 运算符有: 算术运算:十、一、×、÷、mod、SHL、SHR 逻辑运算:and、or、xor、not 关系运算: EQNNE/LT/GT/LE/GE(相等不等/小于/大于小于 或等于/大于或等于),结果为真,则返回0 FFFFH,假则为0 2.数值返回运算符SEG、 OFFSET、TYPE、SLE和 LENGTH (P131) 加在变量或标号前,返回运算对象的某个参数值(如:段地 址值、偏移地址值、类型属性、变量包含的单元数等)
4.1.2 汇编语言的运算符(P128--136) 1.算术运算符、逻辑运算符和关系运算符 运算符有: 算术运算:+、-、×、÷、mod、SHL、SHR 逻辑运算:and、or、xor、not 关系运算:EQ/NE/LT/GT/LE/GE(相等/不等/小于/大于/小于 或等于/大于或等于),结果为真,则返回0FFFFH,假则为0。 2. 数值返回运算符SEG、OFFSET、TYPE、SIZE和LENGTH (P131) 加在变量或标号前,返回运算对象的某个参数值(如:段地 址值、偏移地址值、类型属性、变量包含的单元数等)