微型计算机汇编语言及汇编程序

上传人:go****ng 文档编号:247917792 上传时间:2024-10-21 格式:PPT 页数:36 大小:551KB
返回 下载 相关 举报
微型计算机汇编语言及汇编程序_第1页
第1页 / 共36页
微型计算机汇编语言及汇编程序_第2页
第2页 / 共36页
微型计算机汇编语言及汇编程序_第3页
第3页 / 共36页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第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时,结果:,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,10H,0AH,0BH,0CH,FFH,00H,34H,12H,78H,56H,78H,56H,34H,12H,(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段定义开始,BUF1DB 2DH,DATA,ENDS,;DATA段定义结束,EXTRA,SEGMENT,;EXTRA段定义开始,BUF2DB?,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 SEGMENTPUBLIC,VAR1 DB 5,DATA ENDS,CODE SEGMENTPUBLIC,ASSUME CS:CODE,DS:DATA,START:,MOV AX,DATA,MOV DS,AX,CODE ENDS,END START,格式:,PROC,NEAR/FAR,(缺省为NEAR),RET,ENDP,五、过程定义伪指令,六、,置汇编地址计数器伪指令ORG,DATASEGMENT,ORG10,;置值为10,VAR1,DW,1A0H,2FAH,ORG+5,;置的值为14+5,即为19,VAR2,DB,1,2,11,12,N,EQU,-VAR2;,()=23,DATAENDS,格式: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号调用),格式:MOVAH,1,INT21H,功能:,从键盘输入字符的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号调用),格式:,MOVDL,待打印字符的ASCII码,MOVAH,5,INT21H,功能:将DL寄存器中的字符送打印机打印。,4结束调用(4CH号调用),格式:,MOVAH,4CH,INT21H,5显示字符串(9号调用),格式:,LEADX,待显示字符串首偏移地址,MOVAH,9,INT21H,功能:,将当前数据区中以结尾的字符串送显示器显示。,MESSAGE DB CHARACTER COUNT,MOV DX ,SEG MESSAGE,MOV DS ,DX,MOV DX ,OFFSET MESSAGE,MOV AH ,9,INT 21H,功能:,从键盘上输入一字符串到用户定义的输入缓冲中,,并送显示器显示。,6字符串输入(10号调用),格式:,LEADX,缓冲区首偏移地址,MOV AH,10,INT21H,中断 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,CODESEGMENT,ASSUME DS:DATA,CS
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!