收藏 分享(赏)

程序设计1.ppt

上传人:nacm35 文档编号:8460526 上传时间:2019-06-28 格式:PPT 页数:34 大小:233.50KB
下载 相关 举报
程序设计1.ppt_第1页
第1页 / 共34页
程序设计1.ppt_第2页
第2页 / 共34页
程序设计1.ppt_第3页
第3页 / 共34页
程序设计1.ppt_第4页
第4页 / 共34页
程序设计1.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、掌握的内容:段寄存器说明语句的作用,堆栈段定义的特殊性,源程序的各种辅助说明伪指令。 熟练掌握的内容:段的定义。 程序的三大结构(顺序结构、分支结构和循环结构等)在汇编语言中的表现形式。 汇编语言的常用编程工具MASM 、LINK 、Debug的使用,能在该编程环境下完成程序的编辑、汇编、调试和运行等步骤。,汇编语言程序设计,机器硬件的具体结构联系过于紧密在一种结构的机器上开发 的程序极难移植到另一种不同结构的机器上去。,1)充分利用机器的硬件功能和结构特点,加快程序的执行速度, 减少目标程序所占用的存储空间; 2)用来编写实时控制程序、实时通信程序,有时也用来编制某些 系统软件程序。,汇编语

2、言进行程序设计缺点,汇编语言进行程序设计的优点,一个基本的汇编语言程序框架如下:stack SEGMENT PARA stackDB 100 DUP(stack)stack ENDSdata SEGMENTdata ENDScode SEGMENTASSUME CS:code, DS:data, ES:data, SS:stackstart: MOV AX, dataMOV DS, AXMOV ES, AXMOV AH, 4CHINT 21Hcode ENDSEND start,堆栈段,数据段,代码段,真指令,ASM-86汇编语言源程序在结构上特点: (1)一个汇编语言源程序由个或几个段组成,

3、每个段由SEGMENT语句开始,以ENDS语句结束。 (2) 4类段:代码段、数据段、附加段和堆栈段。 (3)若仅由一个段,则这个段必为代码段。 (4)源程序语句无非是指令性语句或指示性语句。 (5)一条语句占一行。 (6) 代码段中ASSUME确定段与段寄存器间的关系。 (7)整个源程序必须用END伪指令来结束。END后面的标号表示该程序执行时的起始地址(亦称人口地址)。,宏指令语句是由编程者按照一定的规则来定义的一种较“宏大”的指令,可包括多条指令或伪指令。,在8086汇编中使用的语句可以分成3种类型,这类指令能够产生目标代码,是CPU可以执行的能够完成特定功能的语句,主要由机器指令组成。

4、在汇编时一条指令语句被翻译成对应的机器码,对应着特定的操作。,指令语句:,伪指令语句:,伪指令语句是为汇编程序和连接程序提供一些必要控制的管理性语句,它不产生目标代码,仅仅在汇编过程中告诉汇编程序应如何汇编,并完成相应的伪操作。,宏指令语句:,汇编语言源程序书写格式,三种语句格式是类似的(宏指令语句不用掌握):指令语句的格式:标号: 操作符 参数,参数;注释 伪指令语句的格式:名字 操作符 参数 ,参数,参数;注释三种语句都由四部分组成:第一部分是标号、名字(包括变量和常量) 标号、名字是程序设计人员自己定义的符号, 用于代表内存单元的地址,表示本条语句的符号地址,统称为标识符,它应符合下列规

5、定: 1)第一个字符必须是字母、问号“?”、“” 、“.”或“_”; 2)从第二个字符开始可以是字母、数字、问号“?”、“”或“_”; 3)最大长度为31个字符。 4)不应该是保留字。,第二部分是操作符。 第三部分是参数域。参数域都可由以下几种形式组成:常数、寄存器名、存储器操作数和表达式。,(1)常数 二进制数(须用字母B结尾) 十进制数(数字后面加字母D或什么也不加) 十六进制数(用H结尾) 八进制数(用Q结尾) 串常数,串常数的值为串引导中各字符的ASCII码,例如,A的值为41H,而AB6的值为414236H。为了防止与标识符相混,凡是以字母AH开始的十六进制数,必须在其前面加一个0(

6、零)、如0A786H。,(2)存储器操作数。包括标号和变量 标号和变量都是符号地址,所以它们都有三属性: 段值(SEGMENT):即标号或变量所在段的段基址; 段内地址偏移量(OFFSET):即标号或变量所指的实际地址与所在段的起始地址的差的低16位。 类型(TYPE):对于变量来说,类型指字节、字或是双字等,取决于定义变量的伪指令。对于标号来说,类型指NEAR还是FAR。,(3)表达式 算术表达式:加()、减()、乘()、除(/)、 求余(MOD)、右移(SHR)和左移(SHL) 逻辑表达式:包括按位运算的与(AND)、或(OR)、异或 (XOR)和非(NOT)。注: AND、OR、NOT和

7、XOR既是逻辑运算符,又是指令助记符。作为指令助记符,它们必须出现在指令的操作符部分,且其操作是在程序执行时进行的;而逻辑运算符的操作是在汇编过程中完成的如:OR DX,7532H AND 0FFFFH关系表达式:关系运算有相等(EQ)、不等(NE)、小于(LT)、大于(GT)、小于等于(LE)、大于等于(GE)六种。 运算结果只有两种可能:若关系是假(关系不成立),则结果为0,若关系为真,则结果为全1。 如:MOV BX,3 LT 5;BX0FFFFH,数值回送符:有SEG、OFFSET、TYPE、LENGTH和SIZE。前三种分别用来分离存储器操作数的段、偏移量和类型三种属性。后两种用来求

8、数组变量的长度和字节数。1)格式:SEG 变量标号功能:取变量或标号的段基址。例如,设OPER1为数据段中定义的变量,则 MOV AX,SEG OPER1指令的含义是把变量OPERl的段基址送寄存器AX。2)格式:OFFSET 变量标号功能:取变量或标号的偏移地址。例如,设OPER1为数据段中定义的变量,则 MOV AX,OFFSET OPER1指令含义是把变量OPERl的偏移地址送寄存器AX。,3)格式:TYPE 变量标号功能: 取变量或标号的类型值。当作用于变量时,得到的是该变量的长度类型值;作用于标号时,将得到该标号的距离类型值,但TYPE运算符主要作用于变量。,4)格式:LENGTH

9、变量功能: 获取为变量分配的项数。如果变量是用DUP说明,则返回DUP定义变量的重复次数,否则,返回值为1。,5)格式:SIZE 变量功能: 获取为变量分配的总字节数。,例:如果在数据段中定义 ABC DW 100 DUP(?),则TYPE ABC =2LENGTH ABC =100SIZE ABC =100X2=200,属性操作符:这类运算符为存储器操作数临时指定一个新的属性,而忽略当前属性,因此又称属性修改运算符。,1)PTR 格式:PTR 地址表达式功能: 临时指定由地址表达式所确定的存储单元 的类型属性。类型可以是BYTE、WORD、DWORD、 NEAR或FAR。,如果定义 ARY

10、DW 100,将ARY定义为字类型变量,为将ARY的低位字节传送到AL,可用PTR临时指定ARY的类型属性,即执行语句MOV AL,BYTE PTR ARY注意,本语句不更改ARY变量原有的类型属性(即字类型属性)。,2)THIS 格式:THIS 类型功能:指定变量或标号的类型。类型可以是BYTE, WORD,DWORD,NEAR,FAR,被指定变量或标号的段地址和偏移地址与下一个存储单元地址相同。例如 WA EQU THIS WORDBA DB 100 DUP(?)此时,变量WA的段地址和偏移地址与变量BA相同,但类型属性不同(WORD),而后者的类型为字节(BYTE)。,3)段跨越前缀 格

11、式:段寄存器:地址表达式功能:用来改变地址表达式的段属性。例如 MOV AX,ES:BX+ SI,第四部分是注释,由分号“;”开始。,数据定义及存储分配伪指令 格式:变量名 DB/DW/DD/DQ/DT ;注释,伪指令,DUP常用在数据定义伪指令中,其使用的格式为: 变量名 DB/DW/DD/DQ/DT DUP(表达式2);注释,例: A1 DB 10,10H ;定义两个字节A2 DW 10,10H ;定义两个字A3 DB AB ;定义两个字节A4 DW AB ;定义一个字A5 DB 2 DUP(1,2,3) 结果见例LI.ASM,等值(赋值)语句EQU 格式:符号名 EQU 表达式 等号语句

12、= 格式:符号名 = 表达式,注意:用EQU和= 定义的符号不占存储单元。,ORG伪指令,格式:ORG 表达式 功能:位置指针-表达式的值。其中,表达式的值是一个无符号数,取值范围为065535。汇编程序在汇编过程中将要用到一个位置指针(亦称地址计数器,其中的值用$表示),它用来告诉汇编程序下一个可分配给指令或数据的存储单元地址(偏移地址)。ORG伪指令用于控制(或修改)当前位置指针的内容。,则变量VECT1的偏移地址为10H,而VECT2的偏 移地址为1AH。这里,$等于0012H(即当前地址指针)。该数据定义段经汇编后,内存中DAT数据段分配情况如图所示。,段定义伪指令SEGMENT/EN

13、DS 格式: 段名 SEGMENT 定位类型 组合类型 类别 ;段内语句序列 段名 ENDS,标号定义伪指令LABEL 格式: 变量名或标号名 LABEL 类型 LABEL伪指令常用来对已具有变量名或标号名的存储单元另起一个新的变量名或标号,这个新名的段属性和偏移量属性跟原名相同,但类型属性取决于LABEL后的“类型”。,段寻址伪指令ASSUME 该伪指令用来告诉汇编程序某个段是使用哪一个段寄存器。 格式: ASSUME 段寄存器名:段名,段寄存器名:段名, 功能:设定源程序中各段与段寄存器之间的关系,过程定义伪指令 定义子程序的格式为:过程名 PROC NEAR/FARRET 过程名 END

14、P,程序结束伪指令END 源程序结束伪指令表示一个程序模块的结束,其格式为: END 标号其中,“标号”是程序中第一条要被执行指令的标识符,它用来指示程序执行时的起始地址。,程序设计步骤,当在设计一个程序时,应该考虑满足以下目标: 1)程序的正确性。 2)增强程序的可读性。 3)所写程序应该是结构化的,易修改,易调试,即程序的可维护性。,程序设计的基本步骤 1. 明确任务,确定算法,例:Y=|X|,3分配存储空间和工作单元 4编写程序 5上机调试、运行程序,2根据算法画出程序流程图,程序的基本结构,程序是指令(语句)的有序集合,是对系统任务处理步骤的描述。程序的执行是有一定顺序的,依据执行顺序

15、可将程序分为如下基本结构:顺序结构、分支(选择)结构、循环结构和子程序结构。,顺序结构:是一种线性结构,这种结构的程序每执行一次,其中的语句或程序段依次被执行一次程序的顺序结构如图所示:,其中S1、S2、S3表示顺序执行的语句或程序段。,例6-4 假设由下列数学公式: Y=X3+8X2+8X+6 试编写当X=10时,计算Y值的程序。,Y=(X+8)X+8)X+6,START: MOV AX,STACK_SEGMOV SS,AX MOV SP,OFFSET TOPPUSH DS SUB AX,AXPUSH AX MOV AX,DATA_SEG MOV DS,AXMOV AX,X ADD AX,8

16、 MUL XADD AX,8 MUL XADD AX,6 MOV Y,AXRET MAIN ENDP CODE_SEG ENDS END START,DATA_SEG SEGMENT X DW 10Y DW 0 DATA_SEG ENDS STACK_SEG SEGMENT STACK STACKDW 100 DUP (?)TOP LABEL WORD STACK_SEG ENDS CODE_SEG SEGMENT MAIN PROC FARASSUME CS:CODE_SEG,DS:DATA_SEGASSUME SS:STACK_SEG,data segment ;数据段msg db 0dh

17、,0ah,07h,“Hello$“data ends code segment ;代码段assume cs:code,ds:data main proc farpush ds ;标准序mov ax,0push axmov ax,data ;设置数据段mov ds,axlea dx,msg ;取字符串地址,执行后显示HELLO。,mov ah,09h;显示字符串 int 21hret ;返回操作系统 main endp code ends end main,在计算机上运行汇编语言程序的步骤: (1)编辑程序建立源程序文件(.ASM)。 (2)用汇编程序(MASM或ASM)把源文件(.ASM)汇编

18、成目标文件(.OBJ)。 (3)用连接程序(LINK)把目标文件(.OBJ)转换成可执行文件。 (4)在DOS命令状态下通过直接键入文件名执行该汇编语言程序或利用DEBUG程序对 用户程序进行调试。,文件名.ASM 文件名.OBJ 文件名.EXE,汇编语言 源程序,汇编,目标 程序,连接,执行 程序,编辑程序 EDIT.EXE 或记事本,汇编程序 MASM.EXE,连接程序 LINK.EXE,用汇编语言编写源程序,经过汇编程序和连接程序生成目标程序和执行程序,分支程序:具有两个或两个以上相对独立的程序段,每执行一次分支程序,其中有且仅有一个程序段被执行一次。,汇编语言中实现分支的要素有二: (

19、1)使用能影响状态标志的指令,如算术运算指令、逻辑运算指令和移位指令等,利用状态标志来反映条件成立与否。 (2)使用条件转移指令,对状态位进行测试判断,确定程序如何转移,形成分支。,例:编写程序计算Y=X,X,Y为字变量。,CMP AX,0 JGE POS,AND AX,AX JNS POS,DATA SEGMENTX DW 10HY DW ? DATA ENDS CODE SEGMENT MAIN PROC FARASSUME CS:CODE,DS:DATA START:PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,XTEST AX,80

20、00HJZ POSNEG AX POS: MOV Y,AXRET MAIN ENDP CODE ENDSEND START,编写程序,根据键盘输入的值,显示不同的内容。若输入数字“0”,则显示“You have input digit 0.”,若输入数字“1”,则显示“You have input digit 1.”若输入数字“9”,则显示“You have input digit 9.”,否则显示“Error!”。,在数据段中两个16位二进制无符号数DATA1和DATA2,找出其中较小数结果存于MIN中。,push axmov ax,datamov ds,axmov ax,data1cmp

21、ax,data2jnae nextmov ax,data2 next: mov min,axret main endp code endsend main,data segmentdata1 dw 2000hdata2 dw 3f80hmin dw ? data ends ss_seg segment stack db 256 dup(?) ss_seg ends code segmentassume cs:code,ds:data main proc farpush dsmov ax,0,宏指令: 为了简化汇编语言源程序的书写,宏汇编程序(MASM)允许我们把频繁出现的某个程序段定义成一条宏指令,并且在源程序中需要这个程序段的地方用该宏指令取而代之。而当宏汇编程序遇到该宏指令时就会根据相应的定义把它展开。并转换成机器代码。,

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

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

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


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

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

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