收藏 分享(赏)

主要内容:宏汇编语言的语法汇编程序与上机过程表达式语句伪指令.ppt

上传人:hwpkd79526 文档编号:8085168 上传时间:2019-06-08 格式:PPT 页数:67 大小:356KB
下载 相关 举报
主要内容:宏汇编语言的语法汇编程序与上机过程表达式语句伪指令.ppt_第1页
第1页 / 共67页
主要内容:宏汇编语言的语法汇编程序与上机过程表达式语句伪指令.ppt_第2页
第2页 / 共67页
主要内容:宏汇编语言的语法汇编程序与上机过程表达式语句伪指令.ppt_第3页
第3页 / 共67页
主要内容:宏汇编语言的语法汇编程序与上机过程表达式语句伪指令.ppt_第4页
第4页 / 共67页
主要内容:宏汇编语言的语法汇编程序与上机过程表达式语句伪指令.ppt_第5页
第5页 / 共67页
点击查看更多>>
资源描述

1、主要内容: 宏汇编语言的语法 汇编程序与上机过程 表达式 语句 伪指令,第五章 汇编语言及 汇编程序,重 点1.介绍宏汇编语言的语法2.介绍系统功能调用3.汇编过程难 点伪指令的格式与应用,第一节 宏汇编语言的语法,机器语言:机器能识别并执行,称目标程序,是二进制码。 汇编语言:用指令助记符、符号地址、标号等书写的语言。 汇编语言源程序:用汇编语言编写的程序。 汇编:汇编语言源程序 目标程序,一.伪指令格式,伪指令:指示性语句.不产生机器目标代码. 1) 标号字段:任选字段,标号名后不能用冒号“:”,这是与指令 性语句的突出区别. 2) 伪指令字段数据定义伪指令:DB,DW段定义伪指令:SEG

2、MENT,ENDS 3) 操作数字段: 4) 注释字段,二.常数、变量和标号,1.常数:(1) 数字常量:(2)字符串常量:ASCII码 2.变量 变量是代表存放在存储单元的数据。 变量名,可认为是存放数据的存储单元的符号地址 变量的属性:段值、偏移量、类型(BYTE,WORD,DWORD),定义变量的伪指令 符号 DB/DW/DD /DQ(8)/DT(10)表达式例1:DAT1 DB 12HDAT2 DB 34HDAT3 DW 5678H 例2:DAB DB ?,?DAW DW ?, ?,例3:STRING1 DB ABCDEFSTRING2 DW AB,CDSTRING3 DD AB,CD

3、,例4:带DUP的表达式DB1 DB ?,?,?,?,?,?DB2 DB 6 DUP(?)DB3 DB 10 DUP(4) 3.标号 标号是一条指令的目标代码的符号地址。 属性有:段 值(SEG)偏移量(OFFSET)距离属性:NEAR(近),只能被本段内访问。FAR(远),可以被其它段访问 。,三、表达式与运算符,表达式由操作数和运算符组成,汇编时产生一个值。1.算数运算符:+ - * MOD,取余运算符SHL,左移运算符SHR,右移运算符例: 32 MOD 5 ;汇编时,得到的值=2 2.逻辑运算符: AND、OR、NOT、XOR例: 24H OR 0FH ;汇编时,得到的值=2FH,3.

4、关系运算符:关系运算符是逻辑判断式,为真时,结果取0FFFFH,为假时,结果取0。EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于等于)、GE例:25 LT 26 ;其值=0FFFFH26 GT 25 ;其值=0FFFFH24 GE PP ;其值=0,4.分析运算符SEG OFFSET TYPE LENGTH SIZE(1)SEG:操作数的段地址(2)OFFSET:操作数地址的偏移量例: TABLE DW 67,89.MOV AX,SEG TABLEMOV BX,OFFSET TABLEMOV CX,TABLE,(3)TYPE 求符号名类型的数值(P163)格式:TYPE

5、(符号名)符号名类型值:DB: 送 1,DW:送 2,DD:送 4例:ARRY DW 1,2MOV SI ,TYPE ARRAY汇编为:MOV SI,2 (4)LENGTH 为符号名分配的项数。格式:LENGTH (符号名)使用DUP,回送变量的单元数;否则送1。例:SUM DW 100 DUP(0)MOV CX, LENGTH SUM汇编后:MOV CX,100,(5) SIZE 变量:回送分配给变量的字节数。格式:SIZE (符号名) 例: SUM DW 100 DUP(0)MOV DX, SIZE SUM汇编后:MOV DX, 200 5.组合运算符 (1) 定义符号名为新类型格式:类型

6、 PTR (符号名)例: OPER1 DB 10H,21H,30H,45HMOV AX,WORD PTR OPER1+2;AX 4530H,(2).指定新类型THIS格式: THIS (类型) 例: LABC EQU THIS BYTELABD DW 4321H,2255HMOV AL, LABC ;AL=21HMOV AX, LABD ;AX=4321H符号LABC与LABD有相同的段地址和偏移地址, LABC是字节类型, LABD是字类型. 6.分离运算符格式: LOW :取低字节格式: HIGH :取高字节,宏汇编语言的语法小节 伪指令格式伪指令:指示性语句.不产生机器目标代码. 常数、

7、变量和标号变量的属性:段值、偏移量、类型。标号属性有:段 值、偏移量、距离属性。 表达式与运算符表达式由操作数和运算符组成,汇编时产生一个值。1.算数运算符:+ - * /2.逻辑运算符:AND OR NOT XOR,3.关系运算符:EQ NE LT GT 4.分析运算符: SEG OFFSET TYPE LENGTH SIZE 5.组合运算符 PTR THIS 6.分离运算符LOW HIGH,第二节 伪指令,伪指令:汇编时不产生机器代码,而是由MASM识别,又称汇编命令。 一、标号赋值伪指令 格式: EQU EQU 功能:把表达式的值赋给符号名。 解除语句:格式:PUREG 符号1,符号2,

8、符号3功能:解除对符号1、符号2、符号3的赋值。,例: PORT1 EQU 3PORT2 EQU PORT1+2PORT3 EQU PORT2CONT EQU CX即: PORT1=3 ,PORT2=5PORT3=5 ,CX与CONT意义相同PUREG PORT1 ;解除PORT1的赋值PORT1 EQU 10即: PORT1 = 10,二、内存数据定义伪指令 格式: 字 节 定 义: 符号 DB 表达式字 定 义: 符号 DW 表达式四字节定义: 符号 DD 表达式八 字 定义: 符号 DQ 表达式十字节定义 : 符号 DT 表达式 例: SOB DB ?SUM DW ?SLEV DD ?T

9、AB1 DB 28N1 DD 2.5, 3.2E+2,例:有如下定义 TABLE1 DD 0,1,2,3 TABLE2 DB 30H,31H,32H,33H TABLE3 DB 12345678910 ZER DW 8 DUP(0) DEM DB HELLO? 判断下列指令是否正确: 1. MOV AX,TABLE1 2. MOV BX,TABLE2 3. MOV AL, TABLE3 4. MOV AX, WORD PTR TABLE1, ,三、定义存储单元的类型功能:指定存储单元的类型是字节型. 功能:指定存储单元的类型是字节型.功能:指定存储单元的类型是字节型.例:有如下定义:SUM D

10、B 12H , 80H TAB DW 1234H 1).MOV AX,WORD PTR SUM 汇编后: MOV AX,8012H 2).MOV BH,BYTE PTR TAB 汇编后: MOV BH,34H,BYTE WORDDWORD,四、段定义语句(p166)格式: 段名 SEGMENT 定位方式 连接方式 类别.段名 ENDS (1)定位方式:指定段的起始地址边界.4种: PARA(页边界) (能被256除)PAGE(段边界) (能被16除)WORD(字边界) (能被2除)BYTE(2)连接方式6种:PUBLIC STACK 空COMMON MEMORY AT (3)类别名,五.段说明

11、ASSUME :给各程序段指定段寄存器 六.过程定义语句 过程定义格式:过程名 PROC NEAR或FARRET过程名 ENDP过程调用格式: CALL 过程名 七.定位伪指令ORG 2000H;指定起始地址的偏移量,八. 结束伪指令格式: END 启动标号或过程 九. 定位伪指令格式: ORG 表达式 十. 列表为指令TITLE SUBTTL PAGE 十一.连接伪指令PUBLIC EXTRN INCLUDE GROUP 十二.其它,第三节 宏指令,为了简化汇编语言的书写,把一些频繁出现的程序段定义为“宏指令”. 在汇编过程中,将宏指令所代替的程序段汇编成相应的机器代码,并插入到源程序中 宏

12、指令要使用前:(1)宏定义(2)宏调用(3)宏扩展,1.宏代换格式:宏名 MACRO 形式参数1,形式参数1,ENDM功能:为指令序列定义一个宏名,称为宏指令. 2.局域符号定义语句格式: LOCAL 符号符号1,符号2,功能:指出符号1,符号2,仅在宏代换中有意义. 3.删除宏定义语句格式: PURGE 宏定义名1宏定义名2,功能:注销程序中引用的宏指令. 4.退出宏定义语句格式:EXITM,5.重复定义语句格式: IRPC 形式参数,字符串 指令序列ENDM 6.包含语句:格式: INCLUDE 文件名 ;把命令后的文件插入该语句处一起编译. 例:定义一条宏指令,完成算术左移.SHT MA

13、CRO X,YMOV CL,XSAL Y,CLENDM 宏调用: SHT 6,BL经宏展开: MOV CL,6SAL BL,CL,第四节 系统功能调用,主要内容:系统功能调用 一.简介 MS-DOS设置了几十个内部子程序,可以完成 I/O设备管理,存储管理,文件管理,合作业管理.它们被做成中断服务程序,其入口地址已由系统置入中断向量表中,可以用软中断指令调用. 类型号:2027H 系统功能调用:INT 21H,二、DOS系统功能调用,1.DOS系统功能调用格式 1)、在AH中设置功能号 2)、在指定的积存器中设置入口参数 3)、用INT21H指令执行系统功能调用 4)、根据出口参数分析执行情况

14、 2.DOS系统功能调用INT 21H的部分I/O操作 1). 键盘输入一个字符并回显功能号AH=01H,出口参数 AL=字符;使用格式: MOV AH , 01HINT 21H,2). 键盘输入字符到缓冲区:功能号 :AH=0AH,入口参数 :DS:DX=缓冲区首址使用格式 BUF DB 20DB ?DB 20 DUP (?)MOV DX , OFFSET BUFMOV AH , OAHINT 21H,3).输出一个字符功能号 :AH=2入口参数 :DL=字符,光标随字符移动使用格式: MOV DL , AMOV AH , 02HINT 21H执行上面程序后,将在屏幕上显示字符 A. 4).

15、输出字符串,功能号 : AH=9,入口参数 :DS:DX=串地址,字串结束为“$”符号使用格式: BUF DB HELLO!MOV DX, OFFSET BUFMOV AH, 09HINT 21H.,5)直接控制台输入输出单字符功能号:AH=06H入口参数:DL=0FFH(输入)DL=字符(输出)出口参数:AL=输入字符 6)键盘输入一个字符无回显功能号:AH=08H出口参数:AL=字符; 7)返回DOS系统功能号:AH=4CH 8)清键盘缓冲区,并调用一种键盘功能功能号:AH=0CHAL=键盘功能号(1、6、7、8、0AH),9).从串口输入单字符AH=03H入口参数AL=字符 10)向串口

16、输出单字符AH=04H出口参数DL=字符 11)设置时间:INT 21/2BH year:mounth:day=CX:CH:CL 12)取得时间:INT21H/2AH 13)取得日期:INT21H/2CH,第五节 汇编过程,一.汇编程序的功能 将汇编语言源程序翻译成机器语言编写的目标程序.并可输出列表文件 检查语法并给出错误信息 展开宏指令常用汇编程序:ASM 和MASM,二.程序的编辑、汇编与连接,1.建立源文件用编辑软件完成.常见软件:Edit、Pe、Q 2.汇编源程序用汇编程序MASM对源程序进行汇编 3.连接产生可执行文件用连接程序LINK对.OBJ进行连接, 产生可执行文件; 4.执

17、行程序,5.调试程序 DEBUG程序是专为宏汇编语言设计的一种调试程序. DEBUG程序的命令D命令:显示内存内容I命令:输入命令O命令:输出命令U命令:反汇编 Q命令:退出DEBUGT命令:单步执行P命令:单步执行命令,指给出指令执行结果,data segmenta1 db hellon!,0dh,0ah,$ data ends code segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset a1mov ah,09hint 21h mov ah,4chint 21h code endsend start,看一

18、个例子,第六节 汇编语言程序设计,程序设计思想:模块化(结构化)程序设计思想面向对象程序设计思想 汇编语言程序设计: 模块化程序设计方法:1)子程序设计是模块化程序设计的基础2)模块化:将一个较大的程序分解为多个具有独立功能的程序模块,这些独立模块称为子程序或过程.3)将各个模块组装联调,完成整个程序,补充例1: 编程序将AL中的二进制数,转换成16进制数的ASCII码, 存于DI指向的内存2个单元中。 解:1)分析题目2)确定算法(1)、把二进制数置AL中,AL中的数从左到右,转换成ASCII码,用循环左移ROL和AND指令;(2)、0 9 的ASCII码:30 39H A F 的ASCII

19、码:41H 46H。判断是否为数字0 9?若是,加30H;否则,是A F,再加07H,得字母的ASCII码。,DI指向结果单元,BL=2,AL 一个字符的16进制数, 10?,AL AL+30H 存ASCII码,Y,AL=AL+07H,N,G1,BL=0?,BL BLX-1,N,Y,存ASCII码,3)程序流图,4)程序:(看源程序EXCH2_16.ASM) (子程序EXCH2_16: 入口参数=二进制数, 出口参数=DI指向16进制数的ASCII码) EXCH2_16 PROC FARPUSH CX ;保护现场PUSH BXPUSH DIMOV BL,2 ;需转换2次MOV BH, AL ;

20、AL中的数暂存BHMOV CL, 4 ;置移位位数ROL AL, CL ;循环左移4位G2: AND AL, 0FH ;得到低4位,CMP AL,10 ; BL 10?JB S ; BL10,转ADD AL,07H ;大于10,加7S: ADD AL,30HMOV DI,AL ;存ASCII码INC DI ;修改地址 MOV AL,BHDEC BL JNZ G2 ;2个数没转换完,继续POP DI ;恢复现场POP BX POP CXRET ;子程序返回 EXCH2_16 ENDP,补充例2:在数据段DAT2开始的单元存放一个ASCII码字符串,编程序显示这些字符,要求每两个字符之间用空格隔开

21、.显示数据用DOS功能2号调用. 1)分析题目 2)画出框图 INT 21H 的2号功能:显示单个字符,DL=字符. 3)编写程序(看源程序DISPLAY.ASM) 写成子程序:DISPLAY: 入口参数:用DI指向ASCII码区首地址;CX放要显示字符的总数; 4)调试程序,;显示ASCII码字符子程序 DISPLAY PROC NEARMOV BL,2MOV DL,DI G: MOV AH,2INT 21HINC DI ;指向下一个要显示的数DEC BL JNZ T ;连续显示2个数,未完继续MOV DL, ;显示一个空格MOV AH,2INT 21HMOV BL,2 T: LOOP G

22、;未全部显示完继续RET DISPLAY ENDP,例 1(P183) (1)设计要求在源程序中设置数据段、堆栈段及代码段。在数据段中定义八个字节数据,把这些数据转换成16进制数的ASCll码存在上述数据之后,然后在屏幕上显示这些数据。显示数据用DOS功能2号调用,每个数据用空格分隔。 (2)程序流程:程序流程如图76和图77所示。 (3)程序:子程序EXCH2_16:功能,将AL中的2进制数转换为16进制数的ASCII码,存DI指向的单元.子程序DISPLAY:功能,显示ASCII码.入口参数:DI指向ASCII码区,CX是ASCII码区长度.,开 始,设8个字节数,定义ASCII码区,设数

23、据区指针SI,设ASCII码指针DI 设数据区长度CX,ALSI,调用转换程序EXCH2_16,SI SI+1 CX CX-1,CX=0?,调显示子程序DISPLAY,结束,3)程序如下:(看源程序z7_6_1.asm)NAME EX2 PAGE 50,70 ;-DATA DEFINE-DATA SEGMENT ;数据段定义DAT1 DB 30H,34H,42H,43H,44H,45HB1=$-DAT1B2=B1*2 DAT2 DB B2 DUP(?) DATA ENDS STACK SEGMENT ;定义堆栈段STA DW 100 DUP(?) STACK ENDS,CODE SEGMENT

24、ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AX ;初始化堆栈区MOV AX,100MOV SP,AX ;置堆栈指针 MOV SI,OFFSET DAT1 ;指向数据 MOV DI,OFFSET DAT2 ;指向ASCII码区MOV CX,B1 ;送需转换字节数 DO: MOV AL,SI ;取一个字节到AL CALL EX2_16 ;调转换子程序INC SI ;指向下个数 LOOP DON,MOV DI,OFFSET DAT2 ;指向ASCII码区MOV CX,B1CALL DIS

25、PLAY ;调显示子程序MOV AH,4CH ;返回DOSINT 21H EXCH2_16 PROC NEAR ;转换子程序. EXCH2_16 ENDP DISPLAY PROC NEAR ;显示子程序 DISPLAY ENDP CODE ENDSEND START,例2: (1)设计要求:设计多字节减法运算程序,要求程序能显示运算数据和结果数据(16进制)分模块设计要求:多字节减法9900664488H-885522H=?数据按逆序存放:先低位后高位多字节显示:先显示高位,后低位 回车换行操作 (2)程序流图,9900664488885522,98FFCDEF66,NAME EX2 PAG

26、E 50,70 PUBLIC D1,D2,N1,N2 EXTRN EX21;FAR EXTRN EX22;FAR ; DAT SEGMENT PARA DAT D1 DB 88H,44H,66H,00H,99H N1= 一D1 D2 DB 22H,55H,88H N2= - DZ DAT ENDS STAC SEGMENT PARA STACK STA1 DW 100 DUP(?) STAC ENDS . STA PROC FAR .,. STD ; LEA SI,D1 ADD SI,N1-1 ;指向被减数D1高位字节 MOV CX,N1 ;被减数D1长度送CX CALL EX21 ;显示被减

27、数 CALL PP2 ;回车与换行 LEA SI,D2 ADD SI,N2-1 ;指向减数D2高位字节 MOV CX,N2 ;减数D2长度送CX CALL EX21 ;显示减数 CALL PP2 ;回车与换行 CALL EX22 ;调用多字节减法子程序 LEA SI,D1 ADD SI,N1-1 ;指向结果单元高位字节 MOV CX,N1 CALL EX21 ;显示结果 RET STA ENDP,多字节减法子程序:EX22 PROC FARLEA SI,D1 ;指向被减数LEA DI,D2 ;指向减数MOV BX,N1 ;送被减数长度 MOV CX,N2 ;减数字节数 MM: MOV AL,D

28、ISBB SI,AL ;带借位减 INC DI ;指向下一个字节 INC SIDEC BX LOOP MM M1: JZ M2 ;JNC M2SBB BYTE PTR SI,0INC SIDEC BXJMP M1 M2: RET EX22 ENDP,;多字节二进制数转换成16进制数并显示(P186) NAME EX21 PUBLIC EX21 CODE SEGMENT PARA CODE EX21 PROC FAR.F: LOBSD ;ALSI.RET EX21 ENDP CODE ENDSEND,例3排序程序设计 排序是把表中元素按某种规律排列起来,排序需要事先约定排序条件,称为关键条件。表

29、中元素按值的大小升序或降序排列。 (1)设计要求 设源程序代码段中有无序字符表,将其按代码值大小升序排序,显示排序前后字符表,显完,提示OK字符。 (2)程序算法气泡排序是一种常用的排序方法,它的规则是:表中相邻两元素一比较,并把大值元素向下交换,直至表尾(大值元素落底),此时,称为一次冒泡(程序中一次大循环)。以后重复冒泡排序,直至最小元素冒到表顶为止。若在一次冒泡排序中没有出现两元素交换(设标志为0),则停止排序。,35 39 47 32 49 30,35 39 47 32 49 30,35 39 47 32 49 30,35 39 32 47 49 30,35 39 32 47 49 3

30、0,第1趟: 6个数,将最大的数降到底部,6个数需比较5次 COUNT=5 , BX=0 (第一趟) , DL=5 (外循环) CX=5-0 (内循环) 修改 :BX=BX+1=1DL=DL-1=4 (剩4趟),35 39 32 47 30 49,35 39 32 47 30 49,35 39 32 47 30 49,35 32 39 47 30 49,35 32 39 47 30 49,35 32 39 30 47 49,第2趟:将最大的数降到底部,5个数需比较4次 COUNT=4, BX=1 (第2趟) , DL=4 (外) CX=5, CX=CX-BX=5-1=4 (内循环次数) 修改:

31、BX=BX+1=1+1=2DL=DL-1=3 (剩3趟),35 32 39 30 47 49,32 35 39 30 47 49,32 35 39 30 47 49,32 35 30 39 47 49,第3趟:将最大的数降到底部,4个数需比较3次 COUNT=3, BX=2 (第3趟) , DL=3 (外) CX=5, CX=CX-BX=5-2=3 (内循环次数) 修改:BX = BX+1 =3DL = DL-1 =2 (剩2趟),32 35 30 39 47 49,32 35 30 39 47 49,32 30 35 39 47 49,第4趟:将最大的数降到底部,3个数需比较2次 COUNT

32、=5, BX=3 (第4趟) , DL=2 (外循环次数) CX=CX-BX=5-3=2 (内循环次数) 修改:BX = BX+1 = 4DL = DL+1 = 1(剩2趟),32 30 35 39 47 49,30 32 35 39 47 49,第5趟:将最大的数降到底部,2个数需比较1次 COUNT=5 CX=CX-BX=5-4=1 (内) BX=5 (第5趟) BX=BX+1=4+1=5 DL=1 (外) DL=DL-1=0 (结束),(3).框图,NAME EX4一4 CODES SEGMENT ORG 0100HASSUME CS:CODES STAR: JMP SSTT ASCll

33、 DB GAJXYDEBFIPKWR ;定义字符串DB QOUZVCHMST4135COUNT=$-ASCll-1OK DB ODH, OAH, OK! SSTT:MOV AX,CSMOV DS, AX ;初始化数据段MOV DL,COUNT ;置外循环次数MOV DH,1 ;设有交换标志XOR BX, BX,L0: OR DH,DH ;交换标志=0?JZ L3 ;无交换,已排好序,退出 MOV DH,0 ;重置交换标志=0MOV CX,COUNT ;字符数减一 SUB CX,BX ;内循环次数 L1: MOV SI,OFFSET ASCll ;指向表首MOV AL,SI ;字符送ALINC SI ;指向下个字符CMP AL, SI ;比较表中相邻字符JBE L2 ;小于转XCHG AL, SI ;否则交换,大字符下沉MOV SI-1,AL ;小字符上浮,MOV DH,1 ;有交换,DH=1 L2: LOOP L1 ;内循环结束?INC BX ;内循环一次加一DEC DL ;外循环次数减一JNZ L0 ;外循环次数非零,继续 L3:MOV DX,OFFSET ASCIIMOV AH,9INT 21H ;显示排好序的字符 MOV AH,4CHINT 21H ;返回DOS CODE ENDSEND STAR,思考题,汇编语言 机器语言 汇编语言源程序 汇编程序 变量的属性,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报