收藏 分享(赏)

5汇编语言PPT课件.ppt

上传人:Facebook 文档编号:3832492 上传时间:2018-11-20 格式:PPT 页数:63 大小:342.50KB
下载 相关 举报
5汇编语言PPT课件.ppt_第1页
第1页 / 共63页
5汇编语言PPT课件.ppt_第2页
第2页 / 共63页
5汇编语言PPT课件.ppt_第3页
第3页 / 共63页
5汇编语言PPT课件.ppt_第4页
第4页 / 共63页
5汇编语言PPT课件.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

1、第5章:汇编语言程序设计(一),汇编源程序的编程格式 DOS系统I/O功能调用 BIOS键盘输入功能调用 文本方式BIOS屏幕功能调用 汇编语言程序设计步骤,汇编语言程序设计(二),分支程序 循环程序 子程序及其调用 宏指令与条件汇编 代码转换 数值计算和数据处理 字符串的动态显示技术 模块化程序设计,程序设计1. 分支程序、循环程序、子程序、宏指令等程序格式的灵活运用;2. 二进制十进制的显示程序、最大最小数的查找、数的范围的判断、正负数的判断、统计及绝对值的求取等相关典型程序的编写。,本章重点,编程格式,汇编,链接,MASM.EXE,LINK.EXE,1.ASM,1.OBJ,1.EXE,E

2、XE文件,汇编,链接,MASM.EXE,LINK.EXE,1.ASM,1.OBJ,1.EXE,COM文件,转换,EXE2BIN.EXE,1.COM,DATA SEGMENT 数据段DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATABEG: MOV AX, DATAMOV DS, AX ;设置DS初值 代码段 MOV AH, 4CHINT 21H ;返回DOSCODE ENDSEND BEG,EXE文件结构,只允许使用代码段; 数据集中设置在CS的开始(可加速汇编处理)或末尾; 程序启动指令必须为IP=100H的单元; CS目标块小于64KB(比较原始且受到

3、限制)。应用: 常驻程序,COM文件特点,CODE SEGMENTASSUME CS:CODEORG 100HBEG: JMP START 数据定义 START: 主干程序 MOV AH, 4CHINT 21HCODE ENDSEND BEG,COM文件结构,教材P102 显示10行HELLO ;-FILENAME:hello.ASM DATA SEGMENT USE16 MESG DB HELLO,0DH,0AH,$ DATA ENDS ;- STACK SEGMENT DB 100 DUP(?) STACK ENDS,EXE文件结构 举例,CODE SEGMENT USE16ASSUME

4、CS:CODE,DS:DATA,SS:STACK BEG: MOV AX, DATA MOV DS, AXMOV CX,10 LAST: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP LASTMOV AH,4CHINT 21H CODE ENDSEND BEG,EXE文件结构 举例,教材P103 显示10行HELLO CODE SEGMENT USE16ASSUME CS:CODEORG 100H BEG: JMP START MESG DB HELLO,0DH,0AH,$ START: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP

5、LASTMOV AH,4CHINT 21H CODE ENDSEND BEG,COM文件结构 举例,CODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACKORG 100H BEG: JMP START MESG DB HELLO,0DH,0AH,$ START: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP LASTMOV AH,4CHINT 21H CODE ENDSEND BEG,EXE文件结构 举例,MOV AH, 功能号入口参数INT 21H 出口参数,I/O功能调用,1:等待键入一个字符出口参数:AL=输入字符

6、的ASCII码。 2:显示一个字符入口参数:DL=待显字符的ASCII码。编程实现以下功能:将键盘上输入的小写字母以大写显示。,I/O功能号(一),;-FILENAME:xiaobianda.ASM CODE SEGMENT ASSUME CS:CODE BEG: MOV AH,1INT 21HSUB AL,20HMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21H CODE ENDSEND BEG,举例,9:显示一个字符串入口参数:DS:DX=欲显示字符串在内存的首地址,且字符串必须以$ 作为结束符。 0AH:键入字符串入口参数:DS:DX=输入缓冲区首地址,I

7、/O功能号(二),教材P102 显示10行HELLO ;-FILENAME:hello.ASM DATA SEGMENT MESG DB HELLO,0DH,0AH,$ DATA ENDS ;- STACK SEGMENTDB 100 DUP(?) STACK ENDS,I/O功能号 举例1,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK BEG: MOV AX, DATA MOV DS, AXMOV CX,10 LAST: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP LASTMOV AH,4CHINT 21H CODE

8、 ENDSEND BEG,I/O功能号 举例1,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK BEG: MOV AX, DATA MOV DS, AXMOV CX,10 LAST: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP LASTMOV AH,4CHINT 21H CODE ENDSEND BEG,I/O功能号 举例1,教材P112 人机会话 What is your name?Li nei Li nei?(Y/N)N What is your name?Li mei Li mei?(Y/N)Y,I/O功能号 举例

9、2,DATA SEGMENT MESG1 DB 0DH,0AH,What is your name?$ MESG2 DB ?(Y/N)$ BUF DB 30DB ?DB 30 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA BEG: MOV AX,DATAMOV DS,AX AGAIN: MOV AH,9MOV DX,OFFSET MESG1INT 21HMOV AH,0AHMOV DX,OFFSET BUF INT 21HMOV BL,BUF+1 MOV BH,0MOV SI,OFFSET BUF+2MOV BYTE PTRBX+S

10、I,$,MOV AH,2MOV DL,0AHINT 21H MOV AH,9MOV DX,OFFSET BUF+2INT 21HMOV AH,9MOV DX,OFFSET MESG2INT 21HMOV AH,1INT 21HCMP AL,YJNE AGAINMOV AH,4CHINT 21H CODE ENDSEND BEG,汇编语言程序设计步骤,(1) 分析问题。就是全面理解问题的功能,把要解决问题的所需条件、原始数据、输入和输出信息、运行速度要求、精度要求和结果形式搞清楚。这是程序开发过程的第一步。,(2) 建立数学模型。在了解要解决的问题之后,需要建立数学模型,这是把问题向计算机处理方

11、式转化的第一步。程序设计者可以先研究要解决问题的技术规范,找出规律,归纳出数学模型。当然,也可能有些问题不用写出数学模型或写不出数学模型。,(3) 确定算法。一旦有了描述问题的数学算法,就可把实际问题分解为计算机求解的步骤和方法,即确定算法。算法可由计算机语言、日常生活语言、表格、自定义流程图等按计算机能接受的方式进行描述。,(4) 绘制流程图。程序流程图是用图形方式对算法的一种直观而形象的描述。它是用箭头线段、框图及菱形图等绘制的形象化的图形。常见的程序流程图是由逻辑框和流向线组成。逻辑框是表示程序操作功能的符号,流向线用来指示程序的逻辑处理顺序。,(5) 内存空间分配。就是用指令或伪指令为

12、数据和代码程序分配内存空间。在程序设计时要考虑分段结构。程序运行时所需要的工作单元应尽可能设在CPU 寄存器中。,(6) 编制程序。选用合适的指令及程序设计常用的技巧,按流程图编写程序。要求做到简单明了、层次清晰、运算迅速以及少占内存。,(7) 程序调试。程序调试是程序设计的最后一步,也是程序设计中最重要的一步。只有通过上机运行才能验证程序是否正确,经过反复的“运行发现错误改正错误运行”才能得到正确的程序。,分支程序,分支是通过条件转移指令来实现的。,条件,S1,S2,条件,S,S1,S2,Sn,条件,N,N,Y,Y,分支程序,分支程序有3种结构: 简单分支 复合分支 多分支,简单分支举例1,

13、例题1:已知在内存中,有一个字节单元NUM 存有带符号数据,计算出它的绝对值后并放入RESULT 单元中。分析:根据数学中绝对值的概念可知,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数。要计算一个数的相反数,就要完成减法运算,即用0 减去这个数。而8086/8088 系统有专用的求反指令NEG。其程序流程图如图 所示,源程序如下。,简单分支举例1,简单分支举例1,DATA SEGMENT X DB 25RESULT DB ? DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX, DATAMOV DS,AX ;初始化MO

14、V AL,X ;X取到AL 中TEST AL,80H ;测试AL正负JZ NEXT ;为正转NEXTNEG AL ;否则AL 求补NEXT: MOV RESULT,AL ;送结果MOV AH,4CHINT 21H ;返回DOS CODE ENDS END START ;汇编结束,简单分支举例2,例题2:P118 二进制数显示程序 将BX寄存器的内容以二进制数格式显示在屏幕上。 程序: CODE SEGMENT ASSUME CS:CODE BEG: MOV BX,5678HMOV CX,16 LAST: MOV DL,0RCL BX,1JNC NEXTMOV DL,1,简单分支举例2,NEXT

15、: MOV AH,2INT 21H LOOP LASTMOV AH,4CHINT 21H CODE ENDSEND BEG,复合分支举例,例题:P119 复合判断 设NUMBER单元的数X以及数值N1、N2均为单字节无符号数,请判断X的大小,并根据判断结果分别显示:N1N2。 程序: data segment mesg1 db n1n2$ number db 5 n1 equ 22 n2 equ 88 data ends,code segment assume cs:code,ds:data beg: mov ax,datamov ds,axmov dx,offset mesg1cmp num

16、ber,n1jnc nextmov dx,offset mesg2jmp disp next: cmp number,n2+1jc dispmov dx,offset mesg3 disp: mov ah,9int 21hmov ah,4chint 21h code endsend beg,多分支程序举例1,例题1:编程求符号函数,设x在AL中这是一个 3 分支问题,用两个条件转移指令来实现。源程序框图如图所示。源程序如下:,多分支程序举例1,多分支程序举例1,DATA SEGMENTX DB 3Y DB DATA ENDS CODE SEGMENTASSUME CS:CODE, DS:DAT

17、ASTART: MOV AX,DATAMOV DS,AXMOV AL,XCMP AL,0 JGE BIGERMOV AL,0FFH ;X0,1送Y单元MOV Y,ALJMP NEXT,多分支程序举例1,BIGER: JE EQULMOV AL,1MOV Y,AL ;X0,1送Y单元JMP NEXTEQUL: MOV Y,AL ;X=0,0送Y单元NEXT: MOV AH,4CHINT 21H ;返回DOS CODE ENDS END START,多分支程序举例2,例题2:P120 多分支转移 设计一个256分支的段内转移程序: 设:JUMP单元有一个数X, 若X=0,转移到标号为P000的程序

18、段 若X=1,转移到标号为P001的程序段 . 若X=255,转移到标号为P255的程序段,多分支程序举例2,例题2:P120 多分支转移 DATA SEGMENT JUMP DB ? TAB DW P000DW P001 .DW P255 DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA BEG: MOV AX,DATAMOV DS,AX,多分支程序举例2,MOV BL,JUMPMOV BH,0ADD BX,BXMOV SI,OFFSET TABLEJMP BX+SI P000: P001:P255: CODE ENDS END BEG,循环程序,循环

19、程序:循环准备,循环体,循环控制,循环准备,循环控制条件,循环体,循环准备,循环体,循环控制条件,Y,Y,N,N,循环程序举例1,例题1:编写程序完成求123N 的累加和,直到累加和超过1000 为止。统计被累加的自然数个数送CN 单元,累加和送SUM。流程图如图所示,源程序如下:,循环程序举例1,DATA SEGMENT SUM DW ? CN DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AX ;初始化MOV AX,0 ;0 送AXMOV BX,0 ;0送BX LP: INC BX ;

20、BX 加1ADD AX,BX ;求累加和CMP AX,1000 ;比较JBE LP ;1000转MOV SUM,AXDEC BXMOV CN,BX ;送结果MOV AH,4CHINT 21H ;返回DOS,循环程序举例1,CODE ENDS END START ;汇编结束,循环程序举例2,P121 找最大数 假设从buf单元开始是个ASCLL码字符串,找出其中最大的那个数,并且送屏幕显示。,循环程序举例2 解法1,DATA SEGMENT BUF DB QWERTYUIOP123 COUNT EQU $-BUF MAX DB MAX=,?,0DH,0AH,$ DATA ENDS CODE SE

21、GMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AX ;初始化MOV AL,0LEA BX,BUFMOV CX,COUNT LAST:CMP BX,AL,循环程序举例2,JC NEXTMOV AL,BX NEXT: INC BXLOOP LASTMOV MAX+4,ALMOV AH,9MOV DA,OFFSET MAXINT 21HMOV AH,4CHINT 21H CODE ENDS END BEG,循环程序举例2 解法2,DATA SEGMENT BUF DB QWERTYUIOP123 FLAG DB -1 MAX DB MAX

22、=,?,0DH,0AH,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AX ;初始化MOV AL,0LEA BX,BUF LAST: CMP BYTE PTRBX,-1JE DISPCMP BX,AL,循环程序举例2,JC NEXTMOV AL,BX NEXT: INC BXJMP LASTDISP: MOV MAX+4,ALMOV AH,9MOV DA,OFFSET MAXINT 21HMOV AH,4CHINT 21H CODE ENDS END BEG,子程序名 PROC 实体RET子程序

23、名 ENDP调用: CALL 子程序名,子程序及其调用,从子程序调用所处的位置分: 段内子程序 near 段间子程序 far从有无参数分: 无参数子程序 有参数子程序,子程序及其调用,有参数就需要传递参数,有三种办法: 利用寄存器 利用堆栈 利用内存单元例题P124,子程序及其调用,无参数宏 定义格式:宏名 MACRO 宏体ENDM 调用: 宏名 LOCAL:1. 格式:LOCAL 标号名表2. 宏指令中第一条指令,宏指令 无参数宏,例如: CRLF MACRO MOV AH,0EHMOV AL,0DHINT 10HMOV AL,0AHINT 10HENDM 使用:MOV AH,2 MOV D

24、L,A INT 21H CRLF,宏指令 无参数宏,宏名 MACRO 哑元素 宏体ENDM 调用: 宏名 例题p129 例题p130,宏指令 有参数宏,IF 条件 ELSEENDIF,条件汇编,IF 条件 ENDIF,格式1 格式2,条件汇编,SHIFT MACRO VAR,NN,LRIF LR EQ LROL VAR,NNELSEROR VAR,NNENDIFENDM 使用 MOV EBX,12345678H PUSH EBX SHIFT EBX,8,L POP EBX SHIFT EBX,8,R,PUBLIC 符号名, ,符号名 功能:本模块定义,其他模块引用的用法:出现在被调用模块上方 EXTRN 符号名:类型, 功能:其他模块定义,本模块引用的用法:出现在调用模块上方,模块化程序设计,P167 1、2、3,作业,

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

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

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


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

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

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