《汇编语言基础伪指令.ppt》由会员分享,可在线阅读,更多相关《汇编语言基础伪指令.ppt(35页珍藏版)》请在三一办公上搜索。
1、1,3.3 汇编语言基础(P111),西安电子科技大学 冯育长,序言计算机语言发展简介 一常量及其数制二、汇编语言语句格式三、伪指令*(重点难点),2,硬 件,机器语言,汇编语言,高级语言,继 续,计算机语言发展简介,3,返 回,硬件是所有数字系统的基础没有软件的硬件系统毫无意义诺依曼原理:程序存储+程序控制,4,机器语言:用二进制代码表示的一种语言。如,8086/8088的的机器代码 B034H 代表(AL)34H优点:机器语言是机器唯一能识别的语言,是人机之间的接口界面。执行速度最快,执行效率最高。缺点:可读性差,表达的意义不直观,编写、阅读、调试较困难。面向机器每一种微处理器都有自己的机
2、器语言,不能通用,返 回,5,汇编语言:是一种符号语言,使用助记符表示相应的操作如,8086/8088的机器代码B034H写成汇编语言MOV AL,34H;(AL)34H比机器语言更易于为人们所理解,可读性强。与机器语言一一对应,是面向机器的语言必须遵循一定的语法规则。(如指令的书写格式等)可有效地访问、控制计算机的各种硬件设备,如磁盘、存储 器、CPU、I/O端口等。70%以上的系统软件是用汇编语言编写的。,返 回,6,高级语言:面向人的语言,与机器无关BASICPASCALC/C+JAVA 便于阅读,易学易用,不涉及硬件,具有通用性。但目标代码冗长,占用内存多,从而执行时间长,效率不高不能
3、直接对某些硬件进行操作。经常与汇编语言配合使用,应用十分广泛。,返 回,7,汇编语言与机器语言的关系,用汇编语言编写的程序称为汇编语言源程序,MASM.EXE 系统软件,汇编程序,汇编语言源程序.ASM,机器语言目标程序,汇编语言的两种语句类型,1.CPU指令 CPU执行的语句,如 MOV,ADD 等 能够生成目标代码2.伪指令(指示性语句)CPU不执行,而由汇编程序执行的语句,不生成目标代码.定义逻辑段、指示程序开始和结束等.,8,一、汇编语言的常量及其数制,B 二进制数D(或缺省)十进制数H 十六进制数A 单引号表示ASCII码(字符串常量),用后缀表示常数的数制,等价,如:MOV AL,
4、0110 0100B MOV AL,64H MOV AL,100 MOV AL,1;(AL)=31H MOV AL,0ABH,以AF开头的数,加前导0,9,允许使用一些简单的常量表达式,等价,如:MOV AL,3+5 MOV AL,16/2 MOV AL,8,10,二、汇编语言语句格式,标号:助记符 操作数,操作数;注释,表示可选项指令的符号地址,标号后要有冒号,注释前加分号,根据不同的指令可有可无,可多可少,操作码不可缺省,1.CPU指令语句格式:,如 L1:MOV AL,BL;数据传送,11,标号由下列字符组成:AZ 或 az?_.09 但09不能作为第一个字符,L1:MOV AL,BL,
5、字母数字串,大小写不分,不要用保留字,合法的标号L1:L21:NEXT:LOOP2:EXITagain:,非法的标号1L:21L:$NEXT:LOOP:,12,变量名 助记符 操作数,操作数;注释,变量的符号地址,后无冒号,伪指令助记符 不可缺省,2.伪指令语句格式:,指示汇编程序要完成的操作。用来定义变量,分配存储单元,指示程序开始和结束等,MASM.EXE,1.CPU指令语句格式:,13,三、伪指令,CPU不执行,而由汇编程序执行的语句,指示汇编程序(MASM.EXE)要完成的操作。用于定义变量、分配存储区、定义逻辑段、指示程序开始和结束等,14,1、定义段的伪指令2、定义数据的伪指令 3
6、、变量的属性及属性操作符4、定义字符串5、问号?及DUP在DB和DW的应用,重点掌握:伪指令的格式及实现的操作伪指令的应用,15,1、定义段的伪指令,段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS,说明段的起始位置,缺省,则起始地址为 0H(段的起始地址能被16 整除),说明不同模块中同名段的连接方式缺省,不组合(同名段在逻辑上相互独立),说明 段的结束,类别相同者,组合时连续存放,不组合时应缺省,16,2、定义数据的伪指令,用于定义数据区中变量的类型 DB 定义字节数据 Defin Byte 指令格式:变量名 DB 数1,数2;注释,可省略,可选,可有多个数据项,17,定义数
7、据段DATA,其中包含3个变量M,N和SUM,DATA SEGMENT MDB 10H NDB 25HSUM DB 0DATA ENDS,例1,由系统自动为段分配内存,且起始地址一定为0H,DATA 是程序员指定的数据段段名;SEGMENT 段的定义伪指令段名可以是:DATA2 D1 D2 等,定义字节变量,ENDS 数据段结束,数据由此开始!,1FFFFH,20000H,20001H,20002H,18,定义数据段DATA,其中包含3个变量M,N和SUM,DATA SEGMENT MDB 10H NDB 25HSUM DB 0DATA ENDS,例1,由系统自动为段分配内存空间,且起始地址一
8、定为0H,M,10H,N,25H,SUM,00H,段的起始地址能被16整除 每个段最大为64KB 最小视需要而定,要点:,19,CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,M ADD AL,N MOV SUM,AL CODE ENDS END START,定义代码段CODE,实现 M+NSUM,DATA SEGMENT MDB 10H NDB 25HSUM DB 0DATA ENDS,数据段由此开始,CODE 是程序员指定的代码段段名;SEGMENT 段的定义伪指令,在代码段开头必须用ASSUME
9、指定各段的段寄存器:CS 代码段段寄存器,DS 数据段段寄存器,ES 附加段段寄存器,SS 堆栈段段寄存器,注意语法格式,ENDS 代码段结束END 源程序结束一般在END之后是第一条指令的标号,段名DATA代表数据段的段地址值,用户应完成DS的初始化,方法固定。,变量名表征变量的偏移地址引用变量名访问变量直接寻址方式,20,CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,M ADD AL,N MOV SUM,AL CODE ENDS END START,定义代码段CODE,实现 M+NSUM,DAT
10、A SEGMENT MDB 10H NDB 25HSUM DB 0DATA ENDS,数据段由此开始,CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,2000H MOV DS,AX MOV AL,0000H ADD AL,0001H MOV 0002H,AL CODE ENDS END START,设已知地址如图示,则等价于:,由于地址是由系统自动分配的,故:一律用段名代表段地址值,完成DS的初始化用变量名访问变量直接寻址方式,21,CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MO
11、V DS,AX MOV AL,M ADD AL,N MOV SUM,AL CODE ENDS END START,定义代码段CODE,实现 M+NSUM,DATA SEGMENT MDB 10H NDB 25HSUM DB 0DATA ENDS,请问:,数据段由此开始,代码段的起始地址?,CS:IP 会自动初始化2001H:0000H,22,35H,分析程序的运行结果?,DATA SEGMENT MDB 10H NDB 25HSUM DB 0DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV
12、 AL,M ADD AL,N MOV SUM,AL CODE ENDS END START,SUM=?,23,1、定义段的伪指令,段名 SEGMENT 段名 ENDS,要点归纳:,定义段的伪指令,必须成对出现必须有段名,ASSUME CS:CODE,DS:DATA,;用在代码段首行,指定段寄存器,段的起始地址由系统自动安排段的起始地址能被16整除(段的起始地址一定为0H)CS:IP 会自动初始化用户应完成其它段寄存器和偏移地址寄存器的初始化,24,2、定义数据的伪指令,DB 定义字节数据 Defin Byte,归纳:,一般格式:,DB 定义字节数据 Defin Byte,一个数据占1个字节DW
13、 定义字数据 Defin Word,一个数据占2个字节DD 定义双字数据 Defin Double word,一个数据占4个字节DQ 定义的数据为4字型(8字节)DT 定义的数据为10字节型,变量名 DB 数1,数2,;注释,其它几个定义数据的伪指令:,25,画出变量在内存中的存放示意图,D1 SEGMENT M1DB 1,2 M2DW 3456H,7D1 ENDS,例2,M1,不再关心段地址的具体数值,01,M2,02,56H,34H,07H,00H,第一个变量的偏移地址一定是0000H其他数据按顺序分配内存,26,画出变量在内存中的存放示意图,D1 SEGMENT M1DB 1,2 M2D
14、W 3456H,7D1 ENDS,例2,M1,不再关心段地址的具体数值,01,M2,02,56H,34H,07H,00H,请问:变量M1的字节长度=?,2,设DS已初始化,写出指令把M1的第一个数据元素存入AL,MOV AL,M1,;直接寻址方式,写出指令把M1的第二个数据元素存入BH,MOV BH,M1+1,;直接寻址,M1+1 称为地址表达式,27,画出变量在内存中的存放示意图,D1 SEGMENT M1DB 1,2 M2DW 3456H,7D1 ENDS,例2,M1,不再关心段地址的具体数值,01,M2,02,56H,34H,07H,00H,请问:变量M2的字节长度=?,4,写出指令把M
15、2的第一个数据元素存入AX,MOV AX,M2,;直接寻址方式,写出指令把M2的第二个数据元素存入BX,MOV BX,M2+2,;直接寻址,M2+2 称为地址表达式,28,画出变量在内存中的存放示意图,D1 SEGMENT M1DB 1,2 M2DW 3456H,7D1 ENDS,M1,不再关心段地址的具体数值,01,M2,02,56H,34H,07H,00H,写出指令把DL的中的数据存入M1的首单元,MOV M1,DL,写出指令把DX中的数据存入M2的首单元,MOV M2,DX,DL,DL,DH,29,画出下列变量占用内存空间的示意图。,D1 SEGMENT DATA_BYTE DB 10,
16、10H,2*16,255 DATA_WORD DW 100,250HD1 ENDS,课堂作业1,30,画出下列变量占用内存空间的示意图。,D1 SEGMENT DATA_BYTE DB 10,10H,2*16,255 DATA_WORD DW 100,250HD1 ENDS,DATA_BYTE,0AH,10H,20H,FFH,DATA_WORD,64H,00H,50H,02H,课堂作业1,31,分析程序的功能,课堂作业2,DATA SEGMENT X DB 5,1,6,3,4,5,6,0,8,9DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART:
17、MOV AX,DATAMOV DS,AXMOV AL,0 MOV CX,10MOV BX,0000HL1:ADD AL,BX;(AL)(AL)+(BX)INC BX;(BX)(BX)+1DEC CX;(CX)(CX)-1JNZ L1;若(CX)0则转向L1HLT;暂停,(AL)=X0+X1+X9,32,数据段的段名为D2,该段中字节变量VAR1中的数据为 5,10,-2,11。该段中字变量VAR2中的数据为 5678H,100。请写出数据段的程序代码。,D2 SEGMENT VAR1 DB 5,10,-2,11 VAR2 DW 5678H,100D2 ENDS,课堂作业3,;或D2 SEGME
18、NT VAR1 DB 5,10 DB-2,11 VAR2 DW 5678H DW 100D2 ENDS,33,编程,把VAR1的第一个数据存入AL,把VAR2的第一个数据存入BX。请写出代码段。,CODE SEGMENT ASSUME CS:CODE,DS:D2START:MOV AX,D2MOV DS,AXMOV AL,VAR1MOV BX,VAR2CODE ENDS,课堂作业4,D2 SEGMENT VAR1 DB 5,10,-2,11 VAR2 DW 5678H,100D2 ENDS,请问:如果把此句去掉,执行 MOV AL,VAR1 后AL=?,34,第三章 作业题307308307.画出变量在内存中的存放示意图。DATA SEGMENTVAR1 DB 12VAR2 DB-5VAR3 DB 0DATA ENDS308.编程,把上题中VAR1和VAR2单元中的数据相加,结果存入VAR3单元。,