位的概念:位是计算机信息的最小表示单位,用小写字母b表示。一个二进制可以描述一个开关的状态,称为开关量。
字节的概念:字节是计算机内信息读写和处理的基本单位,由8位二进制数构成,用大写字母B表示。字节中的最低位称为最低有效位LSB,最高位称为最高有效位MSB。
字和双字的概念:字和双字分别由16位和32位组成。字中的后八位称为低位字节,前八位称为高位字节。双字中也有类似的划分:低位字节、次低位字节、次高位字节和高位字节。
无符号数的扩展方式:无符号数在进行位数扩展时采用的是0扩展方法,也就是在左侧添加若干个零。
有符号数的扩展方式:有符号数在进行位数扩展时采用的是符号扩展方法,也就是用它的符号位来填充新增加的高位。
BCD码的概念:BCD码是一种用二进制表示的十进制数编码方式。BCD码可以分为压缩BCD码和非压缩BCD码:压缩BCD码用一个字节的高低四位分别存储两位十进制数;非压缩BCD码则只使用一个字节的低四位存储一位十进制数,对高四位没有要求。
汇编语言编写的基本单位:汇编语言以段为基本单位进行编写。在一般情况下,数据定义在数据段中,程序定义在代码段中。不能在一个段的内部定义另一个段,不同的段相互独立。程序员应该按照段的含义给每一个段取一个清晰的名字,名字要用字母或下划线开头。
段的定义语法:
段名 SEGMENT ;SEGMENT语句是一条伪指令
....(段的内容)....
段名 ENDS ;END语句也是一条伪指令
伪指令与伪操作:伪指令是指只是进行标注,但是经过汇编后不会产生任何机器指令代码的指令语句,其对应的操作称为伪操作。
汇编语言书写的一般规范:
①汇编语言对大小写字母不进行区分;
②汇编语言中一行只能写一条指令或一条伪指令;
汇编语言的注释:汇编语言后用分号表示注释,分号后的内容即为注释内容。
数据定义的概念:数据定义就是对给出的数据分配存储单元,把它们用标准的格式存储到数据段中。
字节定义的语法:参考下面的数据定义段。
DATA SEGMENT
X DB -1,255,'A',3+2,?
DB "ABC",0FFH,11001010B
Y DB 3 DUP(?)
DATA ENDS
①第一行表示DATA数据定义段的开始。
②第二行定义了一个变量X。所谓变量,就是在程序里数据可以改变的一组数据,变量名其实就是变量后第一个数据的地址。
③DB伪操作表示接下来定义一组字节类型数据。DB后接着可以定义一组不同类型的数据,将按照定义的先后顺序逐一存储到数据段中,数据之间用逗号分隔。
④用 ?表示暂时不确定值的数据。
⑤如果数据过多以至于一行定义不下,则可以转到下一行继续定义。不用重写变量名,但是需要重写伪命令DB。
⑥可以用单引号括起一个单字符,用双引号括起一个字符串(会被拆分为单个字符进行存储)。
⑦可以使用DUP进行重复定义。具体语法如下。
N DUP(X)
该语句表示将数据X重复定义N次。
定义字数据、双字数据:分别使用DW和DD伪指令即可定义字数据和双字数据,其使用方法和DB指令完全相同。但是需要注意的是,无论是字数据还是双字数据,都是把数据的高位存放在地址较大的单元中。除此之外,还可以用DQ伪指令和DT伪指令来定义八字节和十字节的数据。
汇编语言的语句分类:汇编语言的语句可以分为指令语句、伪指令语句和注释行三类。
①指令语句:包含与一条机器指令相对应的符号指令,汇编以后可以获得这条机器指令的二进制代码,这个二进制代码称为目标。
②伪指令语句:一条起说明性作用的语句。有的伪指令汇编后没有结果(SEGMENT),而有些伪指令汇编后会产生目标(如DB)。
③注释行:书写说明性文字的内容,不进行汇编也不产生目标。
指令语句的一般格式:指令语句的一般格式如下
[标号:] 操作码 [操作数] [;注释]
①标号:标号是程序员给这一行指令取的名字,标号后必须加上冒号。大多数行都不需要进行标号。标号名用字母开头。
②操作码:操作码指出指令所需完成的操作,用指令助记符表示。操作码本身都是保留字。
③操作数:操作数表示指令操作的对象。可以有0-3个操作数,彼此之间使用逗号进行分隔(大多数指令有2个操作数)。操作数可以分为源操作数和目的操作数。
④注释:注释用于对指令进行一些说明。
操作数的分类:操作数可以分为寄存器操作数、立即数操作数和存储器操作数。
①寄存器操作数:寄存器包括段寄存器、通用数据寄存器、通用地址寄存器。在所有寄存器中,寄存器IP和寄存器FLAGS不能作为操作数出现在指令中。
②立即数操作数:所有可以求出值的表达式、字符和符号等都可以用作立即数操作数。但是立即数操作数不能用作目的操作数。
③存储器操作数:
1.对存储器的一个单元进行访问时需要给出这个单元的段基址和偏移地址。
2.大多数情况下,指令自动将DS寄存器中的内容作为操作数的段基址,因此,在编写汇编语言源程序时首先需要将数据段的段基址存入DS寄存器中。
3.存储器操作的偏移地址可以由几个部分进行组合得到,合成后得到的偏移地址称为有效地址。可以通过直接或间接的方式给出偏移地址。
直接偏移地址:直接偏移地址是指在指令中直接给出存储单元的偏移地址。例如
MOV AL, [1200H] ;以1200H作为偏移地址读取一个字节,送到AL寄存器中
MOV AX, [1200H] ;以1200H作为偏移地址读取一个字,送到AX寄存器中
这种方式虽然一目了然,但是一般情况下都不知道具体的偏移地址,因此容易导致错误,且降低了可读性。