收藏 分享(赏)

北理工微机原理第七章课件.ppt

上传人:dreamzhangning 文档编号:2767259 上传时间:2018-09-27 格式:PPT 页数:65 大小:753KB
下载 相关 举报
北理工微机原理第七章课件.ppt_第1页
第1页 / 共65页
北理工微机原理第七章课件.ppt_第2页
第2页 / 共65页
北理工微机原理第七章课件.ppt_第3页
第3页 / 共65页
北理工微机原理第七章课件.ppt_第4页
第4页 / 共65页
北理工微机原理第七章课件.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、第七章 汇编语言及汇编程序,7.1 宏汇编语言的基本语法 7.2 伪指令 7.3 宏指令 7.4 系统功能调用 7.5 汇编程序的功能及汇编过程 7.6 汇编语言程序设计,7.1 概述,汇编语言程序的上机处理过程,主要的汇编程序:MASM、TASM,1、 常量,二进制 xxxxxxxxB 01000101B 八进制 xxxO 或xxxQ 721O或721Q 十进制 xxxx或xxxxD 1991或1991D 十六进制 xxxxH 0F1D4H 字符串 xxx或“xxx” AB 常出现在指令和伪指令中,7.1.2 常量、变量和标号,7.1 宏汇编语言的基本语法,2、变量 变量代表存储单元的数据,

2、以变量名的形式出现 在程序中,可认为是存储单元的符号地址.,VAR_DATA SEGMENT DATA1 DB 12H DATA2 DB 34H (BYTE 属性) DATA3 DW 5678H (WORD 属性) VAR_DATA ENDS 变量代表的数据在程序运行过程中可随时修改。,用DB、DW、伪指令定义后,变量具有的三种属性: 段值 SEG 偏移量 OFFSET 类型 BYTE/WORD,3、标号(作为操作数的标号),指令存放单元的符号地址,是转移/调用/循环指令的操作数标号的三种属性: 段 SEG 偏移量 OFFSET 距离 NEAR/FAR,7.1.3 表达式与运算符,表达式由操作

3、数和运算符组成,在汇编的时,一个表达式得到一个值操作数可以是寄存器、常量(数值常量、符号常量)、存储器操作数(标号、变量)运算符包括:算术运算符、逻辑运算符、关系运算符、数值返回运算符和属性运算符,注:表达式中的运算符是一种伪操作,也是由汇编程 序来完成的,不要将它与指令混淆了,数值返回运算符(分析运算符),SEG 变量/标号 (求段基址) OFFSET 变量/标号(求偏移地址) MOV SI, OFFSET S1 (LEA SI,S1) MOV DI, OFFSET S2 (LEA DI,S2) TYPE 变量/标号(P159 表 7-1) 变量返回类型:1:字节、2:字、4:双字 标号返回

4、类型:-1: NEAR、-2: FARSIZE 符号名(求为符号名分配的字节数,由DUP( )定义的),组合运算符(改变、建立符号名的新类型),(1)定义符号为新类型 格式:类型 PTR 符号名 MOV AX,WORD PTR D1(2)指定新类型 格式:THIS 类型 LABC EQU(符号位) THIS BYTE(新类型) LABD DW 4321H,2255H MOV AL,LABC ;AL=21H MOV AX,LABD ;AX=4321H,分离运算符,(1)LOW 取低字节 格式:LOW 表达式 (2)HIGH 取高字节 格式:HIGH 表达式P160 例:设SSY=2050HMOV

5、 AL,LOW 3080H; AL=80HMOV AH,HIGH SSY; AH=20HMOV CL,LOW 3A4BH; CL=4BH,7.1.1 伪指令语句格式,标号名(IDENTIFIERS)任选、不能有冒号,可以是常量名 、变量名、过程名、结构名、记录名, 它们作为指令、伪指令的操作数时表示一个常 量或存储器地址 伪指令 (DIRECTIVES):要求汇编程序完成的操作命令,例如,DB、 DW、SEGMEMT、PROC 等 操作数(OPERANDS) 常数、字符串、常数名、变量名、标号、一些 专用符号。,标号名 伪指令 操作数 ;注释,7.2 伪指令( Directive )不由CPU

6、 来执行而由汇编(MASM)来识别的 指令称为伪指令,伪指令没有对应的机器指令,其格式为 标号 伪指令 操作数 ;注释,1、符号定义伪指令 EQU、= 表达式的值赋给符号名,2、内存数据定义伪指令:DB、DW、DD、DQ定义重复数据操作符DUP必须与DB、DW、DD、DQ配合使用。 例,B1 DB 20H DUP(?)B2 DB 2 DUP(3 DUP(ABC),括号内是重复的内容,3、段定义伪指令(p161) 段名 SEGMENT 定位方式连接方式类别名 段名 ENDS,4、段寄存器说明伪指令ASSUME 段寄存器:段定义名1,5、过程(子程序)定义伪指令 格式:过程名PROC NEAR(F

7、AR) . 过程名ENDP,8 定位伪指令 ORG,12、记录伪指令: (1)记录定义伪指令: RECORD (2)记录存储单元分配及赋值13、结构伪指令STRUCENDS,DS:0000DS:000AH,DAT SEGMENTARRAY1 EQU 100AHARRAY2 DB 12H,34HTABLE1 DW ?TABLE2 DB 2 DUP(DEF)B1=$-TABLE1DAT ENDS MOV AX, ARRAY1 LEA SI, TABLE2 MOV SI, AX,填写DS:0000-DS:000AH内存,并求B1的值。,7.3 宏指令,1、为了简化汇编语言源程序的书写,将一些频繁 出

8、现的程序段定义为“宏指令”,当遇到这个程序 段时,只需用一条宏调用语句代替。 2、汇编过程中要将宏指令所代替的程序段汇编成 相应的机器代码并插入到源程序的目标代码中。 例如, (1) 宏定义 XH MACRO Y,X | (3) 宏扩展MOV CL,X | MOV CL,5RO&Y AL, CL | ROR AL, CLENDM | 当程序中出现(2)时,用(3) (2) 宏调用 | 来代替.XH R,5 |,7.4 系统功能调用,1、MS-DOS系统中的内部子程序2、对汇编语言编程者来说是独立中断子程序,用软中断指令调用。3、INT 21H 称为系统功能调用,共有88个功能号4、使用格式 (

9、1)入口参数 指定寄存器(无参数的不用此句) (2)功能号 AH (3)INT 21H 5、重点掌握 1、0AH、2、9、4CH 号,1、键盘输入单字符 MOV AH,1 INT 21H2、键盘输入字符串 MOV DX,OFFSET BUF MOV AH,0AH INT 21H3、输出(显示/打印)单字符 MOV DL,A MOV AH,2 INT 21H,4、输出字符串 MOV DX,OFFSET BUF MOV AH,9 INT 21H5、返回操作系统 MOV AH,4CH INT 21H,7.5汇编程序的功能及汇编过程(1),1. 编辑汇编语言程序 a. 先通过附件进入DOS状态 C:;

10、 b . D: CD MASM ;进入D盘MASM子目录 D:MASM; c.EDIT ABC.ASM (ABC.ASM为文件名,用户可自己取名,但后缀必须为ASM) d. 键入程序 2汇编(MASM)源程序:MASM ABC; (生成ABC.OBJ 文件) 3程序连接 :LINK ABC;(生成ABC.EXE 文件),7.5汇编程序的功能及汇编过程(2),4执行程序:ABC (注:本例无显示结果的程序段,因而无法看到结果,要想看结果,必须使用DEBUG程序; 5调试程序 a. DEBUG ABC.EXE;(将ABC.EXE文件调入内存并进入DEBUG状态 -) b .- U (显示程序,程序

11、从IP=0000处开始) c. - G (运行程序ABC.EXE,运行完后回到DEBUG状态 -) d. 查看程序结果: - U0000 (显示程序,并从程序的第4句知数据段的段地址,例如0B4E - D4C28:0 0B4E:0000 7A 0A 07,7.6汇编语言源程序设计8086汇编语言源程序的结构,DATA SEGMENT. DATA ENDS STACK SEGMENT STACK. STACK ENDS CODE SEGMENTASSUME DS:DATA, SS:STACK, CS:CODE START: CODE ENDSEND START,数据段,堆栈段,代码段,【例7.1

12、】设计要求: 在源程序中设置数据段、堆栈段及代码段。在数据段中定义8个字节数据,把这些数据转换成十六进制数的ASCII码存在上述数据之后,然后在屏幕上显示这些数据。显示数据用DOS功能2号调用,每个数据用空格分隔。 (2) 程序流程: 程序流程如图7.6和图7.7所示。 (3) 程序清单: 二进制数对十六进制数转换及显示主程序如下:,图7.6,图7.7,NAME EX1 DAT SEGMENT PARA DATA1 DB 12H,34H,56H,78H,9AHDB 0BCH,0DEH,0F0HB1=$-A1 ;求出$到A1所占的字节数B2=B1*2A2 DB B2 DUP(?) ;定义B2个内

13、存空间 DAT ENDS注:$:当前数据指针,是一个偏移地址值;未用内存数据定义伪指令定义的变量不占内存空间,因而B1、B2不占内存空间,,例7.1程序运行结果显示:12 34 56 78 9A BC DE F0,例7.1,STAC SEGMENT PARA STACK STASTA1 DW 100 DUP(?)STAC ENDS,CODE SEGMENT PARA CODEASSUME CS:CODE,DS:DATASSUME SS:STAC,ES:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV ES,AX,;执行后

14、返回所需指令,;赋段及偏移地址,LEA SI,A1LEA DI,A228: MOV CX,B1 ;要转换的字节数G1: MOV BL,2 ;每字节转换2次MOV AL,SIMOV BH,AL ;取出的数先暂存于BHPUSH CXMOV CL,4 ;先取出高4位ROR AL,CLPOP CX,G2: AND AL,0FHDAAADD AL,0F0HADC AL,40H MOV DI,ALINC DIMOV AL,BH ;取回暂存数据准备取低4位DEC BLJNZ G2 ;一个字节未转换完2次则转G2INC SILOOP G1,MOV SI,OFFSET A1+1MOV CX,2; 显示一个字节的

15、不用此句CALL P1RET,G2: AND AL,0FHDAAADD AL,0F0HADC AL,40H,;AL=07H ;AL=07H ;AL=F7H,CF=0 ;AL=37H,;AL=0AH ;AL=10H ;AL=00H,CF=1 ;AL=41H,P1 PROC ;显示两数据、一个空格的子程序 MOV BL,2;计数值G: MOV DL,SIMOV AH,2INT 21HINC SIDEC BLJNZ T MOV DL, MOV AH,2INT 21HMOV BL,2 T: LOOP GRET,;系统功能调用(P169),;显示空格,P1 ENDP CODE ENDSEND STAR,

16、MOV AL,SIAND AL,0FHMOV SI+1,ALMOV AL,SIMOV CL,4 SHR AL,CL MOV SI+2,AL,CMP AL,0AHJC AB1ADD AL,7AB1: ADD AL,30H,CMP AL,0AHJC AB2ADD AL,7 AB2: ADD AL,30H,;转换成ASCII码,;转换成ASCII码,加30H/37H:,课堂练习:符号定义伪指令和内存数据定义伪指令都是什么?它们之间有一个区别是什么?,例7.2 多字节减法运算, 分模块设计要求: 主程序: (EX2.ASM) 1、多字节减法;(EX22.ASM) 2、多字节显示;(EX21.ASM)

17、3、回车换行操作(PP2.ASM)分别编辑、汇编,最后统一连接 MASM EX2; 产生EX2.OBJ 文件 MASM EX21; 产生EX21.OBJ 文件 MASM EX22; 产生EX22.OBJ 文件 注:PP2.ASM为独立文件,但不需要汇编 LINK EX2+EX21+EX22; (参看P176 第二行) EX2,NAME EX2PAGE 50,70PUBLIC D1,D2,N1,N2EXTRN EX21:FAREXTRN EX22:FAR;-DAT SEGMENT PARA DATD1 DB 88H,44H,66H,00H,99HN1=$-D1D2 DB 22H,55H,88H,

18、00H,00HN2=$-D2DAT ENDS;-,99006644880000885522 98FFDDEF66,STAC SEGMENT PARA STACK STA1 DW 100 DUP(?)STAC ENDS;-CODE SEGMENT PARA CODEASSUME CS:CODE,DS:DATASSUME SS:STAC,ES:DATSTA PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV ES,AX,STDLEA SI,D1ADD SI,N1-1MOV CX,N1CALL EX21;多字节显示(显示被减数)CALL PP2

19、 ;回车换行 LEA SI,D2ADD SI,N2-1MOV CX,N2CALL EX21CALL PP2CALL EX22;执行减法运算LEA SI,D1ADD SI,N1-1MOV CX,N1CALL EX21RETSTA ENDP,调子程序前的入口参数,显示减数,显示运算结果,;-INCLUDE PP2.ASMCODE ENDSEND STA,PP2 PROCMOV DL,0DH;回车(参看P458)MOV AH,2INT 21HMOV DL,0AH;换行MOV AH,2INT 21HRET PP2 ENDP,回车换行子程序( PP2.ASM ),NAME EX21 ;多字节转换、显示(

20、184页118) PAGE 50,70 PUBLIC EX21 CODE SEGMENT PARA CODE ASSUME CS:CODE EX21 PROC FARPUSH AXPUSH DX F: LODSB ;SI ALCALL PP1 ; 单字节ASCII码转换、显示子程序MOV DL, MOV AH,2INT 21HLOOP F POP DXPOP AXRETEX21 ENDP,(入口参数SI,CX),;-单字节ASCII码转换、显示子程序(184页2032) PP1 PROC PUSH BXPUSH CXMOV BL,ALMOV CL,4 SHR AL,CLCALL P1 ;低4位

21、ASCII码转换、显示子程序MOV AL,BLCALL P1POP CXPOP BXRET PP1 ENDP,;低4位ASCII码转换、显示子程序(184页3349) P1 PROC PUSH AX PUSH DX AND AL,0FHCMP AL,10JB S ADD AL,7 S: ADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXPOP AXRET P1 ENDP CODE ENDSEND,;185页NAME EX22 ;多字节减法PUBLIC EX22EXTRN D1:BYTE,D2:BYTEEXTRN N1:ABS,N2:ABS;-CODE SEGMEN

22、T PARA CODEASSUME CS:CODEEX22 PROC FARLEA SI,D1;被减数地址LEA DI,D2;减数地址MOV BX,N1;被减数字节数MOV CX,N2;减数字节数,MM: MOV AL,DISBB SI,ALINC DIINC SIDEC BX ;被减数的个数LOOP MM ;CX为减数个数 ;减完后的处理 M1: JZ M2 ;被减数和减数相等 JNC M2;用最后一个字节减影响的CF来确定是否要 处理借位SBB BYTE PTRSI,0INC SIDEC BXJMP M1 M2: RET EX22 ENDP CODE ENDSEND,TITLE EX3 ;

23、大小写字母互换 PAGE 50,70 DAT SEGMENT PARA DAT D0 DB 0DH,0AH D1 DB AKFDjfjjecJIDJkkdkjkJD,$ DAT ENDS STAC SEGMENT PARA STACK STAC STA1 DW 100 DUP(?) STAC ENDS CODE SEGMENT PARA CODEASSUME CS:CODE,DS:DATASSUME SS:STAC,ES:DAT,STAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV ES,AXCALL TT ;显示字符串LEA D

24、I,D1CALL TT1 ;大转小CALL TT ;显示字符串LEA DI,D1CALL TT2 ;小转大 CALL TT ;显示字符串RET STAR ENDP,TT1 PROC ; 大转小GO: MOV AL,DICMP AL,$JZ GO2CMP AL,AJB GO1CMP AL,ZJA GO1ADD BYTE PTRDI,20HGO1: INC DIJMP GOGO2: RETTT1 ENDP,入口参数:DI,TT2 PROC ;小转大 GQ: MOV AL,DICMP AL,$JZ GQ2CMP AL,aJB GQ1CMP AL, z ;小写JA GQ1SUB BYTE PTRDI,

25、20H GQ1: INC DIJMP GQ GQ2: RET TT2 ENDP入口参数:DI,;显示字符串TT PROCLEA DX,D0; 不是DSMOV AH,9INT 21HRET TT ENDP CODE ENDSEND STAR,NAME EX4-1; PAGE 50,70 DAT SEGMENT PARA DAT ORG 2000H A1 DB 10 DUP(ABCDE)DB 8 DUP(12345)DB * DAT ENDS,例 7.4 表的处理 读出表中某个或某些元素进行显示或处理; 删除表中某个或某些元素; 在表中某个位置插入某些元素; 把表中元素按某种规律重新排序; 从表中

26、查找某种或某些元素; 对表中元素作某种要求的统计.,LEA SI,A1 ;mov si offset A1XOR AX,AXMOV AH,*Q1: CMP AH,SIJZ Q2INC SIADD AL,1DAA ;只对AL调整JMP Q1Q2: 显示AL中的数值即长度,1. 统计表的长度(188页2534),;2.显示AL中的数值即长度(188页3446) Q2: MOV BL,ALMOV CL,4SHR AL,CLOR AL,30HMOV DL,ALMOV AH,2INT 21HAND BL,0FHOR BL,30HMOV DL,BLMOV AH,2INT 21H CALL P10 ;回车换

27、行,高4位移到低4位并转换成ASCII码,低4位转换成ASCII码,显示字符,显示字符,;3.键入两个十进制数(188页4761)MOV CL,2Q3: MOV AH,1INT 21HCMP AL,30HJB Q3 ;判断是否是数据 CMP AL,39HJA Q3DEC CLJZ Q4AND AL,0FHMOV AH,10MUL AHMOV BL,ALJMP Q3Q4: AND AL,0FH,;是第1个数据则乘10,;是第2个数据转Q4,ADD AL,BL;十位和个位组合成一个字节DEC AL;因为从0开始计数LEA SI,A1MOV AH,0ADD SI,AXMOV DL, MOV AH,2

28、INT 21HMOV DL,SIMOV AH,2INT 21H,;4.读出对应位置元素值并送屏幕显示(188页6272),;确定位置,NAME EX4-2;表删除插入程序 PAGE 50,70 DAT SEGMENT PARA DAT ORG 2000H A0 DB 0DH,0AH A1 DB 10 DUP(QWERTYUIO)DB 5 DUP(ASDFGHJKL,)DB $ DAT ENDS,删除表中某个或某些元素,STDMOV CX,30LEA SI,A1MOV DI,SIADD SI,29ADD DI,34REP MOVSB ;字节串移动MOV CX,5MOV AL,! REP STOS

29、B ;写字节串,;1. 将29-0(30个)存储单元的字符移到34-5单元,空出的前5位置”!”(189页2736),QWERTYUIO,QWERTYUIO,QWERTYUIO,QWERTYUIO,QW !QWERTYUIO,QWERTYUIO,QWERTYUIO,YUIO,QW,确定源、目的地址及移动的个数,;2.删除原第36-45元素(前面已删掉了31-35元素)(189页3841)CLD ;方向递增ADD SI,45+1 ;前面MOVSB多减了1ADD DI,35+1MOV CX,105+1REP MOVSB键盘输入一个字符,执行后AL中为键值的ASCII码MOV AH,1INT 21H

30、,!QWERTYUIO,QWERTYUIO,QWERTYUIO,YUIO,QWERTYUIO,QWER !QWERTYUIO,QWERTYUIO,QWERTYUIO,QWERTYUIO,QWERTYUIO,查找要删除的元素,遇到$结束LEA SI,A1 T1: CMP BYTE PTRSI,$JZ T3CMP AL,SIJZ T2INC SIJMP T1T2: CALL EX4_3;数据块移动JMP T1,数据块移动子程序,EX4_3 PROCPUSH SIMOV DI,SIINC SIR: MOVSBCMP BYTE PTR DI-1,$JZ R1JMP RR1: POP SIRETEX4_

31、3 ENDP,NAME EX4_4CODES SEGMENTORG 0100HASSUME CS:CODESSTAR: JMP SSTTASCII DB GAJXYDEBFIPKWRDB QOUZVCHMST4135 COUNT =$-ASCII-1 OK DB 0DH,0AH,OK!$SSTT: MOV AX,CSMOV DS,AX,P190 (3)排序程序设计(数据放在代码段中),MOV DL,COUNTMOV DH,1XOR BX,BXL0: OR DH,DH JZ L3 ;DH=0说明没有交换 MOV DH,0MOV CX,COUNTSUB CX,BX ;控制内循环次数 MOV SI,

32、OFFSET ASCII,9,7,1,4,8 ;循环4次 7,1,4,8,9 ;3次 1,4,7,8,9 ;2次,L1: MOV AL,SIINC SICMP AL,SIJBE L2XCHG AL,SIMOV SI-1,ALMOV DH,1 ;表示有交换 L2: LOOP L1INC BX ;控制内循环 DEC DL ;控制外循环次数 JNZ L0,内循环一次,最大数沉底,9,7,1,4,8,显示字符串L3: MOV DX,OFFSET ASCIIMOV AH,9INT 21HINT 20H,DAT SEGMENT A DB 125B DB 90Y DB 3 DUP(0)Z DB 0,0DAT

33、 ENDS也可编程序由键盘输入A、B的值,例7.5 求 Y=A2+B2+2AB,MOV AL,AMOV Z,ALMOV Z+1,ALCALL EX5_1 ;求A2MOV AL,B MOV Z,ALMOV Z+1,ALCALL EX5_1 ;求B2MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,AL CALL EX5_1 ;求ABADD WORD PTR Y,AX ;再加ABADC BYTE PTR Y+2,0,EX5_1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR Y+2,0RET EX5_1 ENDPZ,Z+1为入口参数、Y,AX为出口参数,两数相乘子程序,PP PROCLEA SI,YADD SI,2MOV CX,3P: MOV AL,SICALL PP3DEC SILOOP PRETPP ENDP,三字节显示子程序,

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

当前位置:首页 > 中等教育 > 小学课件

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


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

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

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