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

下载本文档

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

文档简介

1、第 5 章 程序设计及汇编语言,内容安排,一. 程序设计步骤 二. 程序设计 三. 汇编语言及汇编程序 四. 汇编语言源程序格式及实例 五. 上机操作,5.1 程序设计步骤,(1)分析问题 (2)建立数学模型 (3)确定算法 (4)绘制程序流程图 (5)内存空间分配 (6)编制程序与静态检查 (7)程序调试(实验),5.2 程序设计,特点:计算机执行程序的方式是“从头到尾”逐条执行指令语句,直至程序结束,1. 简单程序,例5-1:用数据运算指令,对两个16位数做加法运算。这两个数从地址10050H开始连续存放,低位在小地址一端,结果存放在这两个数之后,流程图:,MOVAX,1000H MOV

2、DS,AX;DS1000H MOVSI,50H;被加数指针SI50H MOVDI,52H;加数指针DI52H MOVBX,54H;和的指针BX54H CLC;清CF XORAX,AX;清AX MOVAX,SI;取一个字到AX ADCAX,DI;AXAXDI+CF MOVBX,AX;存一个字到BX HLT;暂停,程序:,例5-2:将内存10050H单元的内容拆成两段,每段4位,并将它们分别存入内存10051H和10052H单元。即10050H单元中的低4位放入10051H的低4位,10050H单元中的高4位放入10052H的低4位,而10051H和10052H的高4位均为零,流程图:,程序:,M

3、OV AX,1000H MOV DS,AX;DS1000H MOV SI,50H;需拆字节的指针SI=50H MOV AL,SI;取一个字节到AL中 ANDAL,0FH;把AL的前4位清0 MOVSI+1,AL;把得到的后4位放到10051H单元 MOVAL,SI;再取出需拆字节放到AL中 MOVCL,4 SHRAL,CL;逻辑右移四次,前4位补0 MOVSI+2,AL;放入10052H单元 HLT,2. 分支程序,利用条件转移指令,使程序执行到某一指令后,根据条件(即上面运算的情况)是否满足,改变程序执行的次序,特点:先用比较指令、数据操作、位测指令等改变标志寄存器各个标志位,然后用条件转移

4、指令进行分支,例5-3:求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存2800H单元中,流程图:,程序:,CLC;清除CF MOV CX,AX SUBAX,BX;AXAXBX,影响CF JCAA ;CF1转AA去执行(即AXBX时转移) MOV DI,2800H;结果指针DI2800H MOV DI,AX;结果送到2800H和2801H单元 JMPLP;暂停 AA:SUBBX, CX ;BXBXCX MOVDI,2800H MOVDI,BX LP: HLT,例5-4:编制程序 从外设71H端口中取一个数M,判断其值是否在10和20之间,即10M20。如果M20,则送0FFH给

5、外设73H端口;如果M10,则送00H给外设73H;如果10M20,则送88H给外设73H,START: IN AL,71H;将71H端口的字节读入AL CLC;清除CF CMP AL,10;ALAL10 JC Lw10;小于10转LP1 CMP AL,20;ALAL20 JC L10to20 ;10AL20转LP2 MOV BL,0FFH;将FFH送入BL寄存器 LOut: MOV AL,BL OUT 73H,AL ;将结果的标志数据输出到73H端口 HLT;暂停 Lw10: MOV BL,00H JMP LOut L10to20: MOV BL,88H JMP LOut,程序:,3. 循环

6、程序,强制CPU重复执行某一指令系列(程序段)的一种程序结构形式,例5-5:求两个多字节数之和。这两个数在10050H地址开始的内存单元中,连续存放,低位在小地址一端,结果放在这两个数之后。设这两个多字节数均为8个字节长,流程图:,程序:,START:MOVAX,1000H MOVDS,AX MOV SI,50H MOVDI,58H MOV BX,60H MOV CX,4 CLC Add8B:MOVAX,SI ADCAX,DI MOVBX,AX PUSHF,ADDSI,2 ADDDI,2 ADDBX,2 POPF LOOPAdd8B HLT,例5-6:要求设计一个软件延时程序,延时时间约1秒左

7、右,延时时间主要取决于循环体及循环次数。从指令表上可以查得PUSHF和POPF指令分别为10和8个时钟节拍,LOOP指令为3.4个时钟节拍,即此循环体需要用1083.421.4拍,而每个时钟节拍是根据系统的晶振频率而定的。假设此系统用的是8MHz的晶振,则每个时钟节拍需要0.125s,因此可以根据下列公式算出循环次数:,流程图:,程序:,MOVBX,3E8H LP2:MOVCX,176H LP1:PUSHF POPF LOOPLP1 DECBXJNZLP2 HLT,4. 子程序,(1)子程序设计与应用应注意的问题 现场保护与恢复 参数传递 子程序说明,(2)子程序调用技巧 子程序嵌套 子程序递

8、归 可重入子程序 协同子程序,例5-7:找出一个数据块中的最大数。其中,数据块的长度1,并且放在内存2001H单元中,而数据块本身是从2002H单元开始存放的,最后,把找出的最大值放到2000H单元中,假设这段数据块中的数都是无符号的8位数,请设计成一段可调用的子程序,程序:,MAXSub:PUSHF PUSHAX PUSHCX PUSHSI MOVSI,2001H MOVCL,SI INC SI MOVAL,00H MOVCH,00H LP:CLC CMPAL,SI,JNCAA MOVAL,SI AA:INC SI LOOPLP MOV 2000H,ALPOPSI POPCX POPAX P

9、OPF RET,5.3 汇编语言及汇编程序,汇编语言易识别,但机器不能直接执行;机器语言相反,1. 汇编语言与机器语言,汇编语言程序设计的特点:,汇编语言是面向机器的语言,CPU不同的机器有不同的汇编语言 可以充分利用机器的硬件功能和结构特点 可有效地加快程序的执行速度,减少目标程序所占用的存储空间 可以对输入/输出端口进行控制,实时性能好 汇编语言程序移植性、通用性、可读性差,汇编程序:ASM-86/MASM-86,2. 伪指令语句,特点:不同于指令语句,伪指令语句(又称命令语句)中的伪指令本身不产生对应的机器目标代码,功能:仅仅是告诉汇编程序,对后面的指令语句和伪指令语句的操作数应该如何产

10、生机器目标代码,伪指令语句格式:,3. 伪指令,(1)符号定义伪指令(赋值语句) 格式: EQU 功能:把表达式的值赋给符号名,特点:伪指令不是由86系列CPU执行,而是由MASM-86识别,并完成相应的功能,注意:用EQU语句赋值的符号名不能被重新赋值,(2)内存数据定义伪指令 格式:名字 DB 名字 DW 功能:表达式或项表中的每一项是一个/两个字节数,他们从符号名地址开始按字节连续存放,直到表中数据项结束,如:D1 DB 12H, 12H 12H D1 DB 3 DUP (12H) MOV AX, D1,注意: 表达式或数据项表多于一项时,项与项之间用逗号“,”或空格分隔 表达式或数据项

11、重复书写时,可用重复格式DUP 需考虑符号名的类型一致,(3)段定义伪指令,格式: SEGMENT 定位方式连接方式类别名 ENDS,功能:给存储器在逻辑上分段,它为程序的汇编和连接说明了段名、分段的各种属性以及分段的开始和结束,定位方式:又称定位类型,指定段的起始地址边界,连接方式:又称组合类型,告诉连接程序本段与其他段可按某种方式连接,类别名:需用单引号括起来,凡是类型名相同的段在连接时均按先后顺序连接起来,(4)段寄存器说明伪指令,格式:ASSUME 段寄存器:段定义名1 ,段寄存器:段定义名2, 功能:告诉汇编程序在汇编时,段寄存器CS:DS:SS:和ES:应具有的符号段基址,以便汇编

12、指令时确定段和建立错误信息。但是段寄存器实际值(CS除外)还要有传送指令在执行程序时赋值,(5)模块开始伪指令,格式:NAME 模块名 功能:指明程序模块的开始,并指出模块名,一般取源程序文件名为模块名,(6)过程(子程序)定义伪指令,格式: PROC NEAR (或FAR) ENDP 功能:定义过程是为了实现子程序调用而设的,调用格式:CALL 过程由RET指令返回,(7)模块结束伪指令,格式:END 启动标号或过程名 功能:告诉汇编程序源文件结束,并给出执行程序的入口位置,(8)定位伪指令,格式:ORG 功能:把以下语句定义的内存数据或程序,从表达式指定的起点(偏移地址)开始连续存放,直至

13、遇到新的ORG指令。表达式值是一个无符号数,(9)列表伪指令,格式:PAGE 行数,行字数 功能:为列表文件定义每页行数(10255)和每行字符数(60132),默认值是66行,80列,5.4 汇编语言源程序格式及实例,DATA SEGMENT 存放数据项的数据段 DATA ENDS EXTRA SEGMENT 存放数据项的附加段 EXTRA END STACK1 SEGMENT PARA STAC 作堆栈用的堆栈段 STACK1 ENDS,(1)汇编语言源程序基本格式,COSEG SEGMENT ASSUME CS :COSEG , DS : DATA ASSUME SS : STACK1,

14、 ES: EXTRA BEING : MOV AX ,DATA MOV DS ,AX 存放指令序列 COSEG ENDS END BEING,注意:排列的先后顺序可以是任意的,例5-8:从键盘上输入任意一个1位十进制数(09),用移位指令乘10,并将结果显示出来,(2)实例,程序:,NAME EX1 PAGE 50,70 DAT SEGMENT PARA DAT BUFF DB 4 DUP(?) DAT ENDS STAC SEGMENT PARA STACK STA STA1 DB 100 DUP(?) STAC ENDS CODE SEGMENT PARA CODE ASSUME CS:

15、CODE, DS: DAT ASSUME SS: STAC, ES: DAT,START PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DAT MOV DS, AX LEA SI, BUFF ;建立缓冲区首址指针 CALL P1 ;调键盘输入子程序 CALL P2 ;调乘10子程序 CALL P3 ;调显示子程序 RET,P1 PROC ;键盘输入子程序 RE: MOV AH, 1 INT 21H CMP AL, 0 JC RE CMP AL, A JNC RE AND AL, 0FH MOV SI, AL MOV DL, 0DH MOV AH, 2

16、INT 21H MOV DL, 0AH MOV AH, 02H INT 21H RET P1 ENDP,P2 PROC ;乘10子程序 MOV AL, SI ;从缓冲区取数 SHL AL, 1 MOV BL, AL MOV CL, 2 SHL AL, CL ADD AL, BL MOV AH, 0 MOV BL, 10 DIV BL ADD AH, 30H ADD AL, 30H MOV SI, AL MOV SI+1, AH RET P2 ENDP,P3 PROC ;显示子程序 MOV DL, SI MOV AH, 2 INT 21H MOV DL, SI+1 MOV AH, 2 INT 21H RET P3 ENDP CODE ENDS END START,5.5 上机操作,汇编语言上机过程:,ALT-F NEW 建立新文件 OPEN 打开已有文件 SAVE 保存 SAVE AS 另存为 EXIT 退出,作业,1. 编写出执行以下计算的程序,其中X, Y, Z, R, W均为存放16位带符号数单元地址 (1) (2) 2.编程序,用TEST指令

温馨提示

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

评论

0/150

提交评论