微型计算机汇编语言及汇编程序.ppt_第1页
微型计算机汇编语言及汇编程序.ppt_第2页
微型计算机汇编语言及汇编程序.ppt_第3页
微型计算机汇编语言及汇编程序.ppt_第4页
微型计算机汇编语言及汇编程序.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章 微型计算机汇编语言及汇编程序,7.1 宏汇编语言的基本语法,7.2 伪指令,7.3 宏指令,7.4 系统功能调用,汇编语言 源程序,目的程序,汇编程序,汇编,7.5 综合举例,7.6 汇编语言程序设计,7.1 宏汇编语言的基本语法,一、伪指令语句格式,标号名,伪指令,操作数,;注释,,,DATA1 DB 17H,DB 78H,DATA2 DW 617H , 0A345H , 89H,说明:,标号名可以是常量名、变量名、过程名、结构名、记录名等,二、常数、变量和标号,1. 常数,8086/8088宏汇编中允许如下几种常数:,二、八、十、十六进制常数,十进制科学表示法表示的实数,如:12.35E-2,字符串常数,如AB值是4142H,ABCD 41H,42H,43H,44H,2.变量,是代表存放在内存单元中的变化的数据。,(1) 变量的定义与预置:,DATASEG SEGMENT DATA1 DB 17H DATA2 DW 8976H DATA3 DD 45673212H DATASEG ENDS,段属性,偏移量属性,类型属性,标号是一条指令语句的符号地址。标号可作为转移类指令的操作数,即转移地址。,标号:在代码段中定义,后跟冒号,位于指令语句左边 。,3. 标号,【例】符号地址表示。,NEXT:MOV AL, SI DEC CX JNE NEXT,段属性:定义标号的段起始地址,标号的段属性总是在CS寄存器中。,偏移地址:代表从代码段起始地址到标号位置之间的字节数。,类型属性:分NEAR和FAR两类,NEAR表示在同一代码段内引用,FAR表示在段外引用。,标号有段、偏移及类型三种属性。,表达式是由常数、寄存器、标号、变量和操作符组合而成。,1、算术操作符,三、表达式和运算符,算术运算符可用于数值表达式和地址表达式中,,例如: MOV AL,10*5+4 ;数值表达式 MOV SI,OFFSET BUF+12 ;地址表达式 MOV CX,NUM2-NUM1 ;两地址差送CX MOV CX,NUM2+NUM1 ;无意义,汇编语言程序使用的操作符有:,有+、-、*、/和MOD(取余),在使用地址表达式时要注意地址表达式的物理意义。,2、逻辑操作符,有AND、OR、NOT和XOR四个。只用于数值表达式中。,3、关系运算符,有EQ(相等) ,GT(大于) , LT(小于) NE(不等) ,GE(大于或等于) , LE(小于或等于),例如:AND AL,78H AND 0FH,等价于:AND AL,08H,OR AL,3 AND 47H,等价于:OR AL,3,逻辑运算的结果为:,为真时,结果取0FFFFH,为假时,结果取0,注:关系操作符的两个操作数必须是数字或同一段内的地址,若val5时, 结果:,MOV BX,0,MOV BX,0FFFFH,MOV BX,20,MOV BX,30,如: MOV BX,32 EQ 54,等价于:,如:MOV BX,66 GT 44,等价于:,MOV BX,(val LT 5)AND 20) OR(val GT 5)AND 30),若val5时, 结果:,4.2、伪指令,汇编的一些伪指令用于定义符号,定义数据,分配内存单元, 伪指令只向汇编语言提供有关信息,不产生机器代码。,一、符号定义伪指令,1、等值伪指令EQU,EQU不能给一个符号重复定义,格式:符号名 EQU 表达式,功能:给符号名定义一个值、别的符号名、表达式或助记符。,CONS EQU 128,DAT1 EQU CONS+128,B EQU MUL,AB EQU BXSI,二、数据定义伪指令,格式:变量 操作符 操作数 ;注释 功能:给变量定义存储单元。 操作符有:DB ,DW,DD,DF,DQ,DT 注:用DT定义的十进制数要加后缀D,否则默认为BCD数。,2、等号伪指令 =,与EQU类似,但在同一个程序中,=可以对一个符号重新定义。,DATA SEGMENT VAR1 DB 10H VAR2 DB 10,11,12 DB 0FFH,0 BUF1 DW 1234H,5678H BUF2 DD 12345678H DATA ENDS,(a)、操作数是常数或表达式,例:DATA数据段中定义了字节、字和双字变量,(b)、操作数是?,此时,只分配存储单元,不定义初值。,例: NUM1 DB 5,?,7 NUM2 DW ?,?,VAR1,DATA,VAR2,BUF1,BUF2,(c)、操作数是字符串,当定义的字符串中多于2个字符时,只能用DB定义。,注: STR2 DB AB STR2 DW BA STR2 DW AB,等价,BUF2 DW 1,2,3 DUP(6) 等价于:BUF2 DW 1,2,6,6,6 ARB1 DB 10 DUP(2) ARB2 DB 10H DUP(ABC) ARB3 DW 20 DUP(?),(d)、带DUP的表达式,变量名,DB,DW,DD,表达式1 DUP(表达式2),如: STR1 DW ABCD ,三、段定义伪指令,格式: 段名 SEGMENT 定位 组合类型段长度 ;段体 段名 ENDS,段定义伪指令应用举例,DATA SEGMENT ;DATA段定义开始 BUF1 DB 2DH DATA ENDS ;DATA段定义结束,EXTRA SEGMENT ;EXTRA段定义开始 BUF2 DB ? EXTRA ENDS ;EXTRA段定义结束,STAK SEGMENT ;STAK段定义开始 TOP DW 50 DUP(?) STAK ENDS ;STAK段定义,四、段寻址伪指令,运行程序时,需要通过段寄存器访问存储单元,ASSUME指令就是用来建立段寄存器与段之间关系,但不能用来设置段寄存器的内容。,三点说明,格式:ASSUME 段寄存器:段名,段寄存器:段名,功能:指示相关的段寄存器访问哪个逻辑段。,例如:ASSUME CS:CODE,DS:DATA,ASSUME通常放在代码段的第一个语句,ASSUME并没有给段寄存器赋值,CS的值由DOS自动给加载的可执行文件赋的,其他段寄存器的值需要通过MOV指令来设置,程序段1:,DATA SEGMENT PUBLIC VAR1 DB 5 DATA ENDS,CODE SEGMENT PUBLIC ASSUME CS:CODE,DS:DATA START: MOV AX , DATA MOV DS , AX CODE ENDS,END START,格式: PROC NEAR/FAR (缺省为NEAR) RET ENDP,五、过程定义伪指令,六、置汇编地址计数器伪指令ORG,DATA SEGMENT ORG 10 ; 置值为10 VAR1 DW 1A0H,2FAH ORG +5 ; 置的值为14+5,即为19 VAR2 DB 1,2, 11,12 N EQU -VAR2 ; ()=23 DATA ENDS,格式:ORG 数值表达式,功能:将数值表达式的值赋给汇编地址计数器。数值表达式的值须为065535之间的非负整数。,【例】给汇编地址计数器赋值。,返回本章,7.3 宏指令,宏定义:,宏定义用一组伪操作实现:,宏名 MACRO 形参列表 (宏体) ENDM,SHRT MACRO MOV CL,3 SAR DL,CL ENDM,例:用宏指令实现将DL寄存器右移3位,注意:宏定义可出现在源程序的任何位置,但必须出现在宏调用之前,也就是必须先定义后调用。,宏调用的格式是:,宏展开,宏展开就是用宏替代源程序中的宏名,用实参取代宏定义中的形参。,宏调用,经过宏定义后,宏指令就可以在源程序中调用,即宏调用。,宏名 实参1,实参2,实参3,,例:用宏指令定义两个字节数据相加,并存放到一个单元中 ,并作宏调用和宏展开。,ADDB MACRO AD1,AD2,RESULT ;宏定义 PUSH AX MOV AL,AD1 ADD AL,AD2 MOV RESULT,AL POP AX ENDM, ADDB 5CH,43H,DL ;宏调用 ,1 PUSH AX ;宏展开 1 MOV AL,5CH 1 ADD AL,43H 1 MOV DL,AL 1 POP AX ,返回本章,7.4 系统功能调用,功能:将DL寄存器中的字符送显示器显示,如果DL中为CTRL+BREAK的ASCII码,则退出。,1单字符输入(1号调用),格式:MOV AH,1 INT 21H,功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。,2单字符显示(2号调用),格式:MOV DL,待显示字符的ASCII码 MOV AH,2 INT 21H,开始,初始化循环计数值,BX循环左移一个数位,把最右面的数位 转换为ASCII,是ASCII AF,加上7,显示一个字符,循环计数值=0,N,Y,Y,N,MOV CH , 4,ROTATE: MOV CL , 4,ROL BX , CL,MOV AL , BL,AND AL , 0FH,ADD AL , 30H,CMP AL , 3AH,JL PRINTIT,ADD AL , 7H,PRINTIT: MOV DL , AL,MOV AH , 2,INT 21H,DEC CH,JNZ ROTATE,RET,MOV BX ,0AB78H,结束,例1 接收键盘输入并对其进行测试,GET_KEY: MOV AH , 1 INT 21H,CMP AL , Y JE YES,CMP AL , N JE NO,JNE GET_KEY,例2 检测键盘输入的字符是否是回车键,GET_KEY: MOV AH ,1 INT 21H,CMP AL , 0DH,JNE GET_KEY,例3 检测键盘输入的功能键,MOV AH , 1 INT 21H,CMP AL , 0 JE GET_EC,JMP ERROR,GET_EC: MOV AH , 1 INT 21H,CMP AL , 3BH JE OPTION1,CMP AL , 3CH JE OPTION2,CMP AL , 3DH JE OPTION3,JMP ERROR,功能:终止当前程序并返回调用程序。,3打印输出(5号调用),格式:MOV DL,待打印字符的ASCII码 MOV AH,5 INT 21H,功能:将DL寄存器中的字符送打印机打印。,4结束调用(4CH号调用),格式:MOV AH,4CH INT 21H,5显示字符串(9号调用),格式:LEA DX,待显示字符串首偏移地址 MOV AH,9 INT 21H,功能:将当前数据区中以结尾的字符串送显示器显示。,MESSAGE DB CHARACTER COUNT,MOV DX , SEG MESSAGE MOV DS , DX MOV DX , OFFSET MESSAGE,MOV AH , 9,INT 21H,功能:从键盘上输入一字符串到用户定义的输入缓冲中, 并送显示器显示。,6字符串输入(10号调用),格式:LEA DX,缓冲区首偏移地址 MOV AH,10 INT 21H,中断 21H 的功能 A 能从键盘读入一串字符并把它存入用户定义的缓冲区中.,MAXLEN DB 32 ACTLEN DB ? STRING DB 32 DUP( ? ),在数据区定义的字符缓冲区如下:,输入字符串的指令如下:,LEA DX , MAXLEN MOV AH , 0AH INT 21H,字符串开始,实际输入的字符数,最大字符数,DATA SEGMENT,STR DB 50, 0,50 DUP(?),CODE SEGMENT,READ_KEYS PROC FAR,MOV AX , DATA MOV DS , AX,LEA DX , STR MOV AH , 0AH INT 21H,SUB CH , CH MOV CL , STR+1 ADD DX , 2,EXIT: MOV AX , 4C00H INT 21H,READ_KEYS ENDP,20 8 C O M P U T E R 0D,RETURN,DATA ENDS,ASSUME CS:CODE,DS:DATA,CODE ENDS,END,CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK,【例若要在屏幕上显示字符串“Example of string display!”,DATA SEGMENT STR DB 0DH,0AH,Example of string display! DATA ENDS,STACK SEGMENT STACK DB 100 DUP(0) STACK ENDS,程序如下:,BEGIN:MOV AX ,DATA MOV DS,AX LEA DX,STR MOV AH ,9 INT 21H,MOV AH,4CH INT 21H CODE ENDS END BEGIN,返回本章,综合举例,请画出该数据段数据存储的形式。,【例】已知一数据段中的数据为:,DATA SEGMENT A DW M BUF DB AB,0DH,0AH C EQU 500H B DW 0FFAAH D DD BUF M DB 2 DUP(1), 2 DUP(2,B) DATA ENDS,A,BUF,B,D,M,【例】阅读下列程序,指出此程序所完成的功能以及在显示器上显示的内容。,DATA SEGMENT NUM DB 01000101B BUF DB 0DH,0AH,(NUM)= STR DB 4 DUP(?) DATA ENDS,STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS,MOV AX,DATA MOV DS,AX LEA DI,STR MOV AL,NUM MOV CL,4 SHR AL,CL OR AL,30H MOV DI,AL INC DI MOV AL,NUM AND AL,0FH OR AL,30H MOV DI,AL,START:,INC DI MOV BYTE PTR DI,H INC DI MOV BYTE PTR DI, LEA DX,BUF MOV AH,9 INT 21H MOV AH,4CH INT 21H,CODE ENDS END START,CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论