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

下载本文档

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

文档简介

微机原理及应用,主讲教师 陈 玮,2019/5/27,第4章 汇编语言及汇编程序设计,2,第四章 汇编语言及汇编程序设计,一、概述 二、伪指令 三、表达式及运算符 四、宏指令 五、汇编语言程序的上机过程 六、汇编程序的设计过程 七、汇编程序基本设计方法 八、系统功能调用 例题,作业,2019/5/27,第4章 汇编语言及汇编程序设计,3,一、概述,汇编语言是一种面向CPU指令系统的程序设计语言。指令格式:,1、标号是指该指令的符号地址,以冒号结束; 2、用助记符表示操作码,是指令名称的代表符号,是语句中的关键字,不可缺省;,2019/5/27,第4章 汇编语言及汇编程序设计,4,一、概述(续上页),3、用符号代表操作数或操作数地址。 操作数是本指令执行需要的数据。 有些指令不需要指明操作数,可以默认;有些指令需要两个操作数;还有些操作数可以用表达式。 4 、注释项是可选项,用分号开始。,2019/5/27,第4章 汇编语言及汇编程序设计,5,一、概述(续上页),用汇编语言编写的程序称为源程序,常用的汇编程序有ASM-86和宏汇编MASM-86。 汇编语言源程序的组成部分: 可以使用CPU指令系统所提供的指令(硬指令); 可以使用各种符合汇编语法的表达式, 运算符以及自行定义生成满足需要的目标代码的指令。,2019/5/27,第4章 汇编语言及汇编程序设计,6,1、标号,8086/8088汇编语言中使用的标号必须遵循下列规则: (1)大小写字母; (2)数字09; (3)某些特殊字符(, _,?) (4)第一个字符不能是数字, “?”不能单独作为标号。 (5)标号的有效长度是31; 有效标号:START MY_PROGRAM 无效标号:MAIN% 1BETA,2019/5/27,第4章 汇编语言及汇编程序设计,7,二、伪指令,伪指令是告诉汇编程序生成目标代码的指令语句。 1、 符号定义伪指令 2、内存数据定义伪指令 3、段定义伪指令 4、段寄存器说明伪指令 5、 定位伪指令 6、 子程序伪指令,2019/5/27,第4章 汇编语言及汇编程序设计,8,1、符号定义伪指令,(1)EQU伪指令 (2)等号(赋值)伪指令 (3)解除符号定义伪指令,2019/5/27,第4章 汇编语言及汇编程序设计,9,(1)EQU伪指令,伪指令格式: EQU 指令功能: 给符号名赋值。符号名可以由程序员取定, 表达式应该是可以计算得出一个具体值。例: PORT EQU 88H ;定义符号PORT代表88H DATA EQU PORT+2 ;定义符号DATA代表 ;PORT+2 注意: 用EQU定义的符号,不能重新再定义,除非用PURGE伪指令解除; 如果在表达式中用了其他符号,必须事先定义。,2019/5/27,第4章 汇编语言及汇编程序设计,10,(2)等号(赋值)伪指令,伪指令格式: = 指令功能: 与EQU类似,唯一的区别是“=”可以随时对符号名赋新值, 而不必使用PURGE伪指令。 例: PORT=88H ;定义符号PORT代表88H DATA=PORT+2 ;定义符号DATA代表PORT+2,2019/5/27,第4章 汇编语言及汇编程序设计,11,(3)解除符号定义伪指令,伪指令格式: PURGE 符号1, 符号2, 指令功能: 撤消用EQU赋值的符号名, 以便于赋予新值。 例: PURGE PORT, DATA ;撤消用EQU对PORT、 ;DATA的赋值,2019/5/27,第4章 汇编语言及汇编程序设计,12,2、内存数据定义伪指令,格式: 变量 命令 参数1, 参数2, 功能: 数据定义语句用来分配存储单元。数据定义语句的命令有: DB 定义字节数据 DW 定义字数据 DD 定义双字数据 DQ 定义8字节数据 DT 定义10字节数据,2019/5/27,第4章 汇编语言及汇编程序设计,13,2、内存数据定义伪指令,复制操作符 格式: DUP 数据1,数据2, 功能:汇编程序把所定义的数据按先后次序连续分配存储空间,所起的名称只代表第一个单元的字符。 例题,2019/5/27,第4章 汇编语言及汇编程序设计,14,2、内存数据定义伪指令,例: VAR1 DB 32H,ABC VAR2 DW 1234H,40H,AB DD 12345678H DB ?, 11000011B ARRY1 DB 2 DUP(0,1) ARRY2 DW 2 DUP(?,1) ,2019/5/27,第4章 汇编语言及汇编程序设计,15,三、表达式及运算符,在汇编语言中,指令的操作数除了可以是常数、寄存器、变量和标号外,还可以是表达式。 表达式是由常数、寄存器、变量、标号和专用运算符组合而成。 在程序汇编时,汇编程序自动把这些表达式计算出来,形成具体的指令操作数。 1、常数、变量和标号 2、表达式及运算符,返回,2019/5/27,第4章 汇编语言及汇编程序设计,16,1、常数、变量和标号,常数 包括数值型常数和字符型常数。 如:12H,1234H,AB 变量 变量代表存放在存储单元中的数据。 定义后的变量有三个属性: (1)段属性表示变量所在的逻辑段; (2)偏移量属性表示变量所在逻辑段中的偏移地址; (3)类型属性表示变量占用的存储单元数,DB、DW、DD、DQ、DT。,2019/5/27,第4章 汇编语言及汇编程序设计,17,1、常数、变量和标号,标号 是指令目标代码的符号地址。 在转移指令中常用标号代替具体转移地址,标号的使用使编写汇编语言程序时,不必考虑程序汇编、连接后系统分配给指令代码的实际地址。 标号同样有三个属性: (1)段属性表示指令代码所在的逻辑段; (2)偏移量属性表示指令代码所在的逻辑段中的偏移地址; (3)距离属性表示标号可作段内转移或段间转移(NEAR、FAR)。,2019/5/27,第4章 汇编语言及汇编程序设计,18,2、表达式及运算符,表达式由操作数和运算符组成。 其中,操作数可以是常数、变量、寄存器和标号。 运算符包括算术运算符、逻辑运算符、关系运算符、分析运算符和属性运算符五类运算。 注意:运算符的先后次序 。,2019/5/27,第4章 汇编语言及汇编程序设计,19,五、汇编语言程序的上机过程,建立汇编语言的环境,典型的汇编语言开发环境都包含4种工具: 1、编辑程序 2、汇编程序 3、连接程序 4、汇编程序的上机过程,2019/5/27,第4章 汇编语言及汇编程序设计,20,1、编辑程序,(1) 编辑程序是用来输入汇编语言源程序的工具,包括EDIT.EXE, EDLIN.EXE等; (2) 汇编语言是以文本格式保存的; (3) 汇编程序的源程序必须以ASM作为扩展名; (4) 输入和编辑源程序时必须遵循汇编语言的语法规定。 汇编程序的基本结构 例题 实际操作: 编辑源程序 TEST11.ASM,2019/5/27,第4章 汇编语言及汇编程序设计,21,汇编程序的基本结构,DATAA SEGMENT ;数据段内定义各类程序执行需要的相关的数据 DATAA ENDS STACKA SEGMENT ;根据具体程序的需要,定义堆栈段供程序执行过程 ;中保持临时数据 STACKA ENDS CODEA SEGMENT ASSUME CS:CODEA,DS:DATAA,SS:STACKA START: MOV AX,DATAA MOV DS,AX ;完成具体操作的指令序列 CODEA ENDS END START,2019/5/27,第4章 汇编语言及汇编程序设计,22,实际操作(实现X+YZ, 源程序文件名: TEST11.ASM),DATA1 SEGMENT ; 数据段 X DB 05H Y DB 04H Z DB ? DATA1 ENDS CODE1 SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ; 数据段基址AX MOV DS,AX ; AX DS MOV AL,X ; 内存单元X的数据AL ADD AL,Y ; 内存单元Y的数据+ALAL, 即X+Y AL MOV Z, AL ; AL内存单元Z, 即求和结果送回Z MOV AH,4CH ;送功能号 INT 21H ;系统功能调用,返回操作系统 CODE1 ENDS END START,2019/5/27,第4章 汇编语言及汇编程序设计,23,2、汇编程序,(1) 汇编程序用来把源程序翻译成机器码, 包括ASM.EXE, MASM.EXE; (2) 汇编程序翻译源程序, 产生一个目标代码文件,与源程序文件名相同,扩展名为OBJ。 实际操作: 产生目标文件TEST11.OBJ,2019/5/27,第4章 汇编语言及汇编程序设计,24,3、连接程序,通过汇编产生的是OBJ文件是二进制目标文件, 但用的是浮动地址, 不能直接运行, 必须用连接程序LINK.EXE连接和定位。 实际操作: 产生可执行文件TEST11.EXE,2019/5/27,第4章 汇编语言及汇编程序设计,25,4、汇编程序的上机过程,实际操作演示,2019/5/27,第4章 汇编语言及汇编程序设计,26,data1 segment ; 数据段开始 x db 05h y db 04h z db ? buff db 5+4= $ ; 定义一个数据串,数据串规定以$结尾, 为了显示5+4= data1 ends code1 segment ; 代码段开始 assume cs:code1,ds:data1 ; 段寄存器说明伪指令 start: mov ax,data1 ; 将数据段基址ax mov ds, ax ; axds mov al, x ; 内存数据xal add al, y ; 内存数据Y+alal, 即X+Y al mov z, al ; alZ, 即X+Y Z lea dx, buff ; 装载 buff的有效地址 mov ah, 09h ; 送功能号 int 21h ;系统功能调用,显示屏显示字符串5+4= mov dl,z ; 将z送dl add dl,30h ; 将z的值转换成对应的ASCII码值 mov ah, 02h ;送功能号 int 21H ;系统功能调用, 将x+y的和z以单字符形式在显示屏上显示出来 mov ah,4ch ; 送功能号 int 21h ; 系统功能调用,返回DOS状态 code1 ends end start,返回,2019/5/27,第4章 汇编语言及汇编程序设计,27,六、汇编程序的设计过程,1、分析问题确定算法 2、绘制程序流程图(做作业一定要求) 3、编写代码,2019/5/27,第4章 汇编语言及汇编程序设计,28,七、汇编程序基本设计方法,1、 简单程序 作业 2、 分支程序 3、 循环程序 4、 子程序,2019/5/27,第4章 汇编语言及汇编程序设计,29,1、简单程序,简单程序是指顺序结构程序, 在程序中不包含任何转移类指令。 执行时按指令的先后次序从第一条开始逐条执行,直至程序结束。 例题,2019/5/27,第4章 汇编语言及汇编程序设计,30,例题,1、有X,Y两个16位数3456H和0ABCDH,求两数之和,并将结果送到Z单元。 解: 编写流程图,2019/5/27,第4章 汇编语言及汇编程序设计,31,例题 程序清单,DATA SEGMENT X DW 3456H Y DW 0ABCDH Z DW 0 DATA ENDS ;设置数据段,取名DATA CODE SEGMENT ASSUME DS :DATA,CS:CODE START :MOV AX,DATA ;取数码段DATA段址至AX MOV DS,AX ;段地址送DS LEA SI,X ;将X的有效地址送S1 LEA DI, Y ;将Y的有效地址送D1 MOV AX,SI ;将X的值送AX ADD AX,DI ;AX+Y的值送回AX MOV Z, AX ;将AX的值送到存储单元Z MOV AH, 4CH ;设置功能号 INT 21H ;系统功能调用,返回DOS CODE ENDS END START,2019/5/27,第4章 汇编语言及汇编程序设计,32,作业,P.120 2、3、 5、7、12,2019/5/27,第4章 汇编语言及汇编程序设计,33,2、分支程序,分支程序就是利用转移指令,控制计算机执行某段程序或不执行某段程序。,两路分支,多路分支,例题,2019/5/27,第4章 汇编语言及汇编程序设计,34,例题,1、内存中有一个8位带符号数,求其绝对值,并将结果放回原处。 答:编写流程图,程序清单,2019/5/27,第4章 汇编语言及汇编程序设计,35,例题 程序清单,DATA2 SEGMENT M DB 05H ; 第二个程序换成5,即0fbh DATA2 ENDS CODE2 SEGMENT ASSUME CS:CODE2,DS:DATA2 START: MOV AX,DATA2 MOV DS,AX ;送段地址至DS LEA SI,M ;取M的指针 MOV AL,SI ;取带符号数 AND AL,AL ;判断符号位 JNS DONE ;SF=0,转移到DONE NEG AL ;SF=1,AL0,AL求补 DONE: MOV SI,AL ;绝对值送回原内存单元 MOV DL, SI ADD DL, 30H MOV AH, 02H INT 21H ; 系统功能调用,显示该数值 MOV AH,4CH INT 21H CODE2 ENDS END START,2019/5/27,第4章 汇编语言及汇编程序设计,36,例题,2、编写程序实现函数。 1 (当X0) Y= 0 (当X=0) 9 (当X0) 解: 编写程序清单,程序清单,2019/5/27,第4章 汇编语言及汇编程序设计,37,例题 程序清单_数据段,DATAXY SEGMENT X DB 8FH ; 另外两组分别是7FH,00H Y DB ? DATAXY ENDS,2019/5/27,第4章 汇编语言及汇编程序设计,38,例题 程序清单_代码段,CODE SEGMENT ASSUME CS:CODE,DS:DATAXY START: MOV AX,DATAXY MOV DS,AX ;送段地址 LEA SI, X ;取X的指针 MOV AL,SI ;将X的值送AL AND AL, AL ;自身与,取符号标志位 JNS OTHER ;SF=0,转移到OTHER MOV Y, 09H ;SF=1,则X0 DONE: MOV DL, Y ADD DL, 30H MOV AH, 02H INT 21H ; 系统功能调用,显示Y的 值 MOV AH,4CH INT 21H CODE2 ENDS END START,2019/5/27,第4章 汇编语言及汇编程序设计,39,3、循环程序,循环程序就是控制计算机反复执行一段指令序列的程序结构。,非零次循环结构,零次循环结构,例题,2019/5/27,第4章 汇编语言及汇编程序设计,40,1、统计字节数据Z的1的个数,将结果放在RESULT内。 解:编写流程图,例题,程序清单,2019/5/27,第4章 汇编语言及汇编程序设计,41,例题 程序清单 数据段,DATAXY SEGMENT X DB 0FFH ; 第二个程序换成5,即0fbh RESULT DB ? DATAXY ENDS,2019/5/27,第4章 汇编语言及汇编程序设计,42,例题 程序清单 代码段,CODE SEGMENT ASSUME CS:CODE,DS:DATAXY START: MOV AX,DATAXY MOV DS,AX ;送段地址至DS XOR BL,BL ;累加器BL清0 MOV CX,08H ;循环次数送CX LEA SI,X ;取X的指针 MOV AL,SI ;取X送AL SUM: SHR AL,1 ;逻辑右移1位 JNC NONE ;CF=0,转移到NONE INC BL ;CF=1,BL+1BL NONE: LOOP SUM MOV RESULT,BL;统计值送RESULT内存单元 MOV DL, RESULT ADD DL, 30H MOV AH, 02H INT 21H ; 系统功能调用,显示该统计数值 MOV AH,4CH INT 21H CODE ENDS END START,2019/5/27,第4章 汇编语言及汇编程序设计,43,4、子程序,一个程序中,当在不同的地方需要多次使用某段程序时,我们常将这段程序单独编写成一个程序段,称为子程序/过程。 (1)子程序的定义格式 (2)子程序的调用 (3)编写子程序的注意事项,2019/5/27,第4章 汇编语言及汇编程序设计,44,(1)子程序的定义格式,格式: 子程序名 PROC RET 子程序名 ENDP,2019/5/27,第4章 汇编语言及汇编程序设计,45,(2)子程序的调用,格式: CALL 子程序名,2019/5/27,第4章 汇编语言及汇编程序设计,46,(3)编写子程序的注意事项,1、现场保护: 保护调用子程序的现场, 即保护子程序中会用到的寄存器, 将这些寄存器入栈; 2、功能子程序: 子程序要完成的功能; 3、恢复现场: 为了使计算机返回到主程序调用时的状态, 将入栈的数据出栈。注意顺序! 例题:子程序的基本框架,2019/5/27,第4章 汇编语言及汇编程序设计,47,子程序的基本框架,设某一子程序中要用到寄存器BX,CX,SI,DI 则: ABC: PUSH BX PRSH CX PUSH SI PUSH DI ;子程序的功能程序 POP DI POP SI POP CX POP BX RET,2019/5/27,第4章 汇编语言及汇编程序设计,48,例题1,编写统计X数据中的“1”的个数子程序,并编写主程序调用。 子程序如下: ABC: PUSH BX PUSH CX XOR BL,BL ;累加器BL清0 MOV CX,08H ;循环次数送CX SUM:SHR AL,1 ;逻辑右移1位 JNC NONE ;CF=0,转移到NONE INC BL ;CF=1,BL+1BL NONE: LOOP SUM MOV AL, BL ;AL里保存的是“1”的统计个数 POP CX POP BX RET,2019/5/27,第4章 汇编语言及汇编程序设计,49,例题1 主程序_数据段_堆栈段,DATAXY SEGMENT X DB 0FFH SX DB ? DATAXY ENDS ;- STACK SEGMENT DW 100 DUP(?) STACK ENDS,2019/5/27,第4章 汇编语言及汇编程序设计,50,例题1 主程序_代码段,CODE1 SEGMENT ASSUME CS:CODE1, DS:DATAXY,SS:STACK START: MOV AX, DATA MOV DS, AX LEA BX, X MOV AL,BX CALL ABC MOV BX+1, AL MOV DL, SX ADD DL, 30H MOV AH, 02H INT 21H ; 系统功能调用,显示该统计数值 MOV AH,4CH INT 21H ; 子程序插入此处 CODE1 ENDS END START,2019/5/27,第4章 汇编语言及汇编程序设计,51,例题2、,将一字节无符号二进制数转换为两位十进制数的ASCII码值,并存放在其后的两个字节。(显示程序用子程序编写)。 解:编写流程图:,2019/5/27,第4章 汇编语言及汇编程序设计,52,程序数据段,data1 segment x db 2ah ;可任取100的无符号字节数据 y db ? z db ? buff db 2ah=$ data1 ends,2019/5/27,第4章 汇编语言及汇编程序设计,53,代码段:,code1 segment assume cs:code1,ds:data1 start: mov ax,data1 mov ds,ax mov al,x cbw mov bl,0ah div bl mov y,al mov z,ah lea dx,buff mov ah,09h int 21h mov al,y ;下接右上,;上接左下 call disp mov al,z call disp jmp eend disp: mov dl,al add dl,30h mov ah,02h int 21h ret eend: mov ah,4ch int 21h code1 ends end start,2019/5/27,第4章 汇编语言及汇编程序设计,54,思考题,试编制程序将一个字数据用十六进制数的形式显示在屏幕上。,2019/5/27,第4章 汇编语言及汇编程序设计,55,八、系统功能调用,MS-DOS是8086/8088微机系统广泛使用的一种操作系统。MS-DOS中包含有许多通用的内部子程序,分别用于完成I/O管理、内存管理、文件管理以及作业管理等。 MS-DOS以中断服务程序形式提供这些功能程序,在汇编

温馨提示

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

评论

0/150

提交评论