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

下载本文档

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

文档简介

2019/7/13,机械系统计算机控制课件,1,第4章 汇编语言程序设计,机械系统计算机控制 2007 机电学院,2019/7/13,机械系统计算机控制课件,2,汇编语言程序设计,汇编语言语句 汇编语言源程序结构 数据 程序设计,2019/7/13,机械系统计算机控制课件,3,4.1 8086汇编语言的语句,语句类型:,指令语句指令性语句 伪指令语句指示性语句,2019/7/13,机械系统计算机控制课件,4,4.1 8086汇编语言的语句,4.1.1指令性语句格式,标号:助记符域(操作码段)操作数1 ,操作数2,;注释,2019/7/13,机械系统计算机控制课件,5,4.1 8086汇编语言的语句,4.1.2指示性语句格式,名字域(标识符)伪指令(指示符) 操作数 (表达式);注释域,伪指令语句格式:,操作数可以是常数、寄存器、标号、变量和序列。,2019/7/13,机械系统计算机控制课件,6,4.1 8086汇编语言的语句,4.1.3有关属性,段值属性指存储器操作数的段起始地址 和标号的CS值。 段内偏移量16位无符号数。 类型属性标号的属性和变量的类型属性,标号的属性用来指出该标号在本段内引用还是在其他段中引用,在段内引用,称为NEAR,指针长度为2字节;在段间引用,则称为FAR,指针长度为4字节。 变量的类型属性用来指出该变量所保留的字节数,主要是指BYTE(字节型)、WORD(字型)或DWORD(双字型)。,2019/7/13,机械系统计算机控制课件,7,4.2 8086汇编语言中的伪指令,等值定义伪操作 EQU指令 格式 EQU 不分配存储单元 不能用EQU多次对同一符号赋值 例如:DATA EQU 15 ;定义为15 TIME EQU DATA*2 ;定义为30,4.2.1符号定义语句,2019/7/13,机械系统计算机控制课件,8,4.2 8086汇编语言中的伪指令,等号赋值指令 格式 不分配存储单元 用可多次对同一符号赋值 例如:VALUE 128 ;定义为128 VALUE VALUE 2 ;重定义为 130,4.2.1符号定义语句,2019/7/13,机械系统计算机控制课件,9,例:EQU 、 赋值伪操作,COUNT EQU 25 COUNTER1 DB COUNT COUNTER2 DB COUNT TEMP=25 TEMP=TEMP+1 MOV AL,COUNT; AL =25 MOV AH,COUNTER2; AH = 25 MOV BL, TEMP ;BL = 26,2019/7/13,机械系统计算机控制课件,10,4.2 8086汇编语言中的伪指令,4.2.2变量定义语句 格式 变量名代表参数表中第一个字节的偏移地址 变量名后不跟冒号 DB 定义字节, 是唯一能定义字符串的伪操作. DW 定义字(两个字节单元) DD 定义二个字单元(四个字节单元) DQ 定义四个字单元(八个字节单元) DT 定义五个字单元(十个字节单元) n DUP () n重复项数,不能单独用。,2019/7/13,机械系统计算机控制课件,11,4.2.2变量定义语句,定义一组数据,例如:BUFF DW 1234H, 0ABCDH, 8EH, -79DH 定义BUFF为一个字型变量,共有5个参数。,定义一串字符,例如:STR DB Welcome ! 字符以ASCII码的形式存放在内存中。 注:只能定义为字节型,其他形式因存储顺序的问题,将会存乱串的内容。,2019/7/13,机械系统计算机控制课件,12,4.2.2变量定义语句,定义保留存储单元,在程序设计中,如果希望将运算结果保存到内存中,则在设计时就要预留一部分存储单元。这些单元不需要事先赋值。,例如:SUM DW ?,? 即从SUM偏移地址开始,为2个字型数据保留了4个字节的内存单元。,2019/7/13,机械系统计算机控制课件,13,4.2.2变量定义语句,复制操作,复制操作符DUP可以预置重复的数值,DUP之前的数字表示重复的次数,DUP后面由括号将内容括起来。,例如:APC DB 5 DUP (0) 得到5个字节连续赋0。,2019/7/13,机械系统计算机控制课件,14,4.2.2变量定义语句,将已定义的地址存入内存单元,定义过的标号或用PROC定义过的过程都有段地址和偏移量。若希望将变量、标号或过程名的段地址和偏移量保存到存储单元,可以用下面的方式完成:,LIT DD CYC CYC: MOV AX, BX ,2019/7/13,机械系统计算机控制课件,15,4.2.2变量定义语句,将已定义的地址存入内存单元,这样就可以将标号CYC的段地址和偏移量存放到变量LIT开始的4个字节单元中。有时可以这样的方法把程序中所有子程序的首地址列在一起,采用查表的方法动态地转入所需的子程序。,LIT DD CYC CYC: MOV AX, BX ,2019/7/13,机械系统计算机控制课件,16,; List File for DB Examples 0000 19 DATA1 DB 25 ; decimal number 0001 89 DATA2 DB 10001001B ; binary number 0002 12 DATA3 DB 12H ; hexadecimal number 0010 ORG 0010H ; the offset address is 10h 0010 32 35 39 31 DATA4 DB 2591 ; ASCII number 0018 ORG 0018H ; the offset address is 18h 0018 00 DATA5 DB ? ; set aside a byte 0020 ORG 0020H ; the offset address is 20h 0020 4D 79 20 6E 61 6D DATA6 DB My name is Joe ; ASCII characters 65 20 69 73 20 4A 6F 65 002E 0A 10 02 31 30 42 DATA7 DB 10,10H,10B,10B ; different data types,例:DB定义字节、字符,2019/7/13,机械系统计算机控制课件,17,例:DW定义字,; List File for DW Examples 0070 ORG 70H 0070 03BA DATA DW 954 ; decimal 0072 0954 DATA9 DW 100101010100B ; binary 0074 253F DATA10 DW 253FH ; hexadecimal 0076 FFFB DATA11 DW -5 ; negative 0080 ORG 80H 0080 0009 FFFF 0007 000C DATA12 DW 9,-1,7,0CH,00100000B,100,HI 0020 0064 4849 008E 0070 0076 DW DATA, DATA11,2019/7/13,机械系统计算机控制课件,18,例: DD 定义双字,; List File for DD Examples 00A0 ORG 00A0H 00A0 000003FF DATA13 DD 1023 ; decimal 00A4 0008965C DATA14 DD 10001001011001011100B ; binary 00A8 5C2A57F2 DATA15 DD 5C2A57F2H ; hexadecimal 00AC 00000023 00034789 DATA16 DD 23H,34789H,65533 ; miscellaneous 0000FFFD,2019/7/13,机械系统计算机控制课件,19,例:DQ 和DT,DQ 定义4字 DT 为压缩的BCD数据分配存储单元,; List File for DQ ,DT Examples 00C0 ORG 00C0H 00C0 C223450000000000 DATA17 DQ 4523C2H ; hexadecimal 00C8 4948000000000000 DATA18 DQ HI ; ASCII characters 00D0 0000000000000000 DATA19 DQ ? ; nothing 00E0 ORG 00E0H 00E0 2998564379860000 DATA20 DT 867943569829 ; BCD 0000 00EA 0000000000000000 DATA21 DT ? ; nothing 0000,2019/7/13,机械系统计算机控制课件,20,例:DUP,按照给定的次数来复制某个(某些)操作数,; List File for DUP Examples 0100 ORG 0100H 0100 0020 DATA22 DB 32 DUP(?) ; set aside 32 bytes ? 0120 ORG 0120H 0120 0005 DATA23 DB 5 DUP(2 DUP(99) ; fill 10 bytes with 99 0002 63 012A 0008 DATA24 DW 8 DUP(?) ; set aside 8 words ? ,2019/7/13,机械系统计算机控制课件,21,4.2.3 段定义语句,格式:SEGMENT定位类型组合类型类别 段模块 ENDS,SEGMENT和ENDS必须成对出现,在它们之间是汇编语言中的各种指令。,1.段定义语句格式,2019/7/13,机械系统计算机控制课件,22,4.2.3 段定义语句,1)定位类型,(1)PAGE 段的首地址能被256整除,即段地址的低8位为0。 (2)PARA 段的首地址能被16整除,即段地址的低4位为0。 为默认值。 (3)WORD 段的首地址能被2整除,即段起始于偶地址, 最低位为0。 (4)BYTE 段的起始地址为任何地方。,2019/7/13,机械系统计算机控制课件,23,4.2.3 段定义语句,2)组合类型,向连接程序提供本段同其他段的组合关系。 (1)NONE 表示本段与其他段逻辑上不发生关系,每段都 有自己的基地址。是默认连接方式。 (2)PUBLIC 按LINK程序指定的次序相邻地连接在一起,指 定一个共同的段基地址,即连接成一个物理段。,2019/7/13,机械系统计算机控制课件,24,4.2.3 段定义语句,2)组合类型,(3)STACK 与PUBLIC同样处理,但是作为堆栈段用的。程序 中必须至少有一个STACK段。如果有多个,则初始化 时,SS指向第一个所遇到的STACK段。 (4)COMMON 表示本段与不同模块中同名、同类别的段有相同 的段首地址,因而会相互覆盖,段的长度取各段中的 最大长度。,2019/7/13,机械系统计算机控制课件,25,4.2.3 段定义语句,2)组合类型,(5)AT 表示本段装在以表达式的值为开始的地址处,但 它不能用来指定代码段。 表达式可以是任意一个有效常数。 这个类型可以方便地实现在某一固定的存储区 (如ROM区、中断向量区)内的某一固定偏移地址处定 义标号或变量,以便程序以标号或变量的形式存取这 些存储单元。,2019/7/13,机械系统计算机控制课件,26,4.2.3 段定义语句,2)组合类型,(6)MEMORY 连接程序将该段定位在被连接在一起的 各段的前面(最高地址处)。 若有多个指定MEMORY组合类型的段,则 遇到的第一个段作为MEMOIRY处理,其余的作 为COMMON处理。,2019/7/13,机械系统计算机控制课件,27,4.2.3 段定义语句,3)类别,就是用单引号括起来的字符串。 字符串可以是任意的合法名字。 在连接时,将类别相同的所有段存入连续的存储区中。先出现的在前,后出现的在后。并取字符串为合并段的名字。,2019/7/13,机械系统计算机控制课件,28,4.2.3 段定义语句,例:有两个模块,;模块1 DATA SEGMENT COMMON DATA ENDS CODE SEGMENT PUBLIC CODE ENDS,;模块2 DATA SEGMENT COMMON DATA ENDS CODE SEGMENT PUBLIC CODE ENDS,两个模块汇编连接后的存储区分配如图所示。,2019/7/13,机械系统计算机控制课件,29,4.2.3 段定义语句,其中,DATA段为两块共同的数据覆盖区。 CODE段为两个模块中的CODE段的顺序连接。 块1在高地址,块2在低地址。,2019/7/13,机械系统计算机控制课件,30,4.2.3 段定义语句,段分配伪指令说明 ASSUME CS:段名,DS:段名,SS:段名,ES:段名 作用:确定定义的段与段寄存器的对应关系 段寄存器名:CS、DS、SS、ES 段名:编程者定义的段的名字,2.段假设语句(段分配指令),2019/7/13,机械系统计算机控制课件,31,4.2.3 段定义语句,例如: DATA SEGMENT . DATA ENDS STACK SEGNENT . STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA CODE ENDS,2019/7/13,机械系统计算机控制课件,32,一个简单程序实例,;THE FORM OF AN ASSEMBLY LANGUAGE PROGRAM STSEG SEGMENT DB 64 DUP(?) STSEG ENDS;- DTSEG SEGMENT DATA1 DB 36H DATA2 DB 4BH SUM DB ? DTSEG ENDS CDSEG SEGMENT MAIN PROC FAR ;this is the program entry point ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG START: MOV AX,DTSEG ;load the data segment address MOV DS,AX ;assign value to DS MOV AL,DATA1 ;get the first operand MOV BL,DATA2 ;get the second operand ADD AL,BL ;add the operands MOV SUM,AL ;store result in location SUM MOV AH,4CH ;set up to INT 21H ;return to DOS MAIN ENDP CDSEG ENDS END START ;this is the program exit point,2019/7/13,机械系统计算机控制课件,33,4.2.3 段定义语句,ORG伪指令格式 ORG 指定数据的存储地址或代码段的起始地址 例: ORG 100H DATA1 DB 100 例: ORG 100H START: MOV AX,BX,3.ORG伪指令与地址计数器$,表达式以65536(FFFFH)为模进行计算。64K。,2019/7/13,机械系统计算机控制课件,34,4.2.3 段定义语句,例如: DATA SEGMENT ORG 6 A DW 1234H ORG 20 B DW 6789H DATA ENDS 则A存放地址的偏移地址值为6H,而B存放地址的偏移地址为14H(20的十六进制数)。,2019/7/13,机械系统计算机控制课件,35,4.2.3 段定义语句,地址计数器$ 也就是当前所用存储单元的偏移地址。 指定数据的存储地址或代码段的起始地址 例: ORG 3000H X DW $+8,$-2; 定义了2个字,(X)3008H,(X+2)3000H 例: JNE $+6; 转向地址是JNE指令的首地址加上6。,2019/7/13,机械系统计算机控制课件,36,4.2.3 段定义语句,1)PUBLIC 表示本模块提供被其他模块使用的信息。 格式: PUBLIC 名字, “名字”可以是模块中定义的一个变量或标号,包括过程名。,2)EXTRN 表示本模块引用了在其他模块中定义的信息。 格式: EXTRN 名字:类型,,4.PUBLIC和EXTRN伪指令,当一个程序由多个模块组成时,必须通过该命令将各模块连接成一个完整的、可执行的程序。,2019/7/13,机械系统计算机控制课件,37,4.2.4 过程定义语句,程序结构伪指令(续) 过程定义伪指令说明 过程名 PROC NEAR/FAR 过程名 ENDP NEAR:处于同一个段,段内调用 FAR:处于不同的段,段间调用 对应CALL和 RET的NEAR 和FAR属性 程序结束伪指令说明 END | 表示源程序结束,汇编程序汇编源程序遇到END结束汇编。,2019/7/13,机械系统计算机控制课件,38,例:数据段定义,图示说明数据定义伪指令语句 VAR DB 12,12H,3DUP(0,FFH)实现的内存分配和预置数据。,2019/7/13,机械系统计算机控制课件,39,例:数据段定义,已知 DATA SEGMENT DATA1 DB 15,10 ;2个字节单元 DATA2 DW 4,3 ;4个字节单元 CHAR DB”Hello” ; 5个字节单元 M DB 2 DUP(3,2DUP(4);6个字节单元 X DB 2 DUP(0,0) ;4个字节单元 Y DW 100 DUP(?) ;200个字节单元 CT EQU $-X ; CT =204 DATA ENDS,2019/7/13,机械系统计算机控制课件,40,例:数据段定义,已知数据段定义如下,画出数据的存储分配图。 DATA SEGMENT VER1 DW 1234H VER2 DW 2 DUP(?), 5 COUNT EQU 2 VER3 DB HELLO VER4 DB 2 DUP(E,COUNT DUP(0) DATA ENDS,2019/7/13,机械系统计算机控制课件,41,例:数据段定义,已知数据段定义如下,画出数据的存储分配图。 DATA SEGMENT VER1 DW 5 VER2 DW 2 DUP(1234H),2 COUNT EQU 2 VER3 DD 12345678H VER4 DB 2 DUP(E,COUNT DUP(0) DATA ENDS,2019/7/13,机械系统计算机控制课件,42,例:数据段定义,已知数据段定义如下,画出数据的存储分配图。 DATA SEGMENT ORG 0020H VER1 DW A1BCH VER2 DW 2 DUP(?), 5 COUNT EQU 2 ADDR DW VER1 DATA ENDS,2019/7/13,机械系统计算机控制课件,43,例:数据段定义,已知数据段定义如下,画出数据的存储分配图。 DATA SEGMENT ORG 3000H D 5 Y DW 2 DUP(34H) COUNT DD 12345678H DW Y DATA ENDS,2019/7/13,机械系统计算机控制课件,44,4.3 8086汇编语言中的运算符,4.3.1 常用运算符和操作符 算术运算符 逻辑运算符 关系运算符 分析操作符 综合运算符,2019/7/13,机械系统计算机控制课件,45,4.3 8086汇编语言中的运算符,4.3.2 运算符的优先级 圆括号,LENGTH,SIZE PTR,OFFSET,SEG,TYPE,THIS ,MOD +,- EQ,NE,LT,LE,GT,GE NOT AND OR,XOR,优先级别从高到低排序为,2019/7/13,机械系统计算机控制课件,46,4.4 汇编语言程序设计,一个好的程序应该: 满足设计要求、实现预定功能; 可读性好、易维护结构化; 可移植性好; 执行速度快; 占用存储空间少。,2019/7/13,机械系统计算机控制课件,47,4.4 汇编语言程序设计,4.4.1 汇编语言程序设计基本步骤 分析问题、建立数学模型、确立算法; 绘制流程图,细化算法; 分配存储空间及工作单元,写程序; 查找语法、逻辑错误; 上机调试。,2019/7/13,机械系统计算机控制课件,48,sample.asm,编 辑 程 序,汇 编 程 序,连 接 程 序,sample.crf,otherfiles.obj,sample.lst,sample.obj,sample.map,sample.exe,汇编程序编写、编译步骤,执行 程 序,2019/7/13,机械系统计算机控制课件,49,建立, 运行汇编语言程序,C:EDIT sample.ASM C:MASM sample.ASM Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981,1988.All rights reserved. Object filename SAMPLE.OBJ: Source listing NUL.LST: SAMPLE.LST Cross-reference NUL.CRF: 47962 + 413345Bytes symbol space free 0 Warning Errors 0 Severe Errors,C:LINK sample.OBJ Microsoft (R) Overlay Linker Version 3.64 Copyright (C) Microsoft Corp 1983-1988. All rights reserved. Run File SAMPLE.EXE: List File NUL.MAP: Libraries .LIB: LINK : warning L4021: no stack segment C:sample,2019/7/13,机械系统计算机控制课件,50,建立, 运行汇编语言程序,.EXE是可执行文件,除了包含程序、数据等代码外,还包含文件头。 文件头也称为程序段前缀PSP,占256个字节。 DOS加载一个可执行文件.EXE后的内存分配见右图。 它首先为该程序建立一个PSP程序段前缀,然后把可执行程序的程序代码加载到PSP后续的地址上。即CS指向的地址。 而DS、ES初始化在PSP的起始地址。,2019/7/13,机械系统计算机控制课件,51,4.4 汇编语言程序设计,4.4.2 汇编语言程序的基本结构 1.汇编语言源程序结构(程序框架的构建),每个程序至少必须有一个代码段和END伪指令。 还可以有堆栈段、数据段和附加数据段。 每个段的排列顺序是任意的,每种段都可以有多个。,2019/7/13,机械系统计算机控制课件,52,4.4 汇编语言程序设计,4.4.2 汇编语言程序的基本结构 1.汇编语言源程序结构(程序框架的构建),NAME ;可有可无 TITLE ;可有可无 DATA SEGMENT ;定义数据段 用DB、DW、DD,等 DATA ENDS EXTRA SEGMENT ;定义附加段 用DB、DW、DD,等 EXTRA ENDS,2019/7/13,机械系统计算机控制课件,53,4.4 汇编语言程序设计,4.4.2 汇编语言程序的基本结构 1.汇编语言源程序结构(程序框架的构建),STACK SEGMENT PARA STACK ;定义堆栈段 用DB、DW、DD,等 STACK ENDS CODE SEGMENT ;定义代码段 ASSUME CS:CODE, DS:DATA, ES:EXTRA, SS:STACK START: 各种指令代码 SUBT PROC FAR/NEAR ;过程定义 RET SUBT ENDP CODE ENDS ;代码段结束 END START ;汇编程序结束,2019/7/13,机械系统计算机控制课件,54,.一个简单程序实例,;THE FORM OF AN ASSEMBLY LANGUAGE PROGRAM STSEG SEGMENT DB 64 DUP(?) STSEG ENDS;- DTSEG SEGMENT DATA1 DB 36H DATA2 DB 4BH SUM DB ? DTSEG ENDS CDSEG SEGMENT MAIN PROC FAR ;this is the program entry point ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG START: MOV AX,DTSEG ;load the data segment address MOV DS,AX ;assign value to DS MOV AL,DATA1 ;get the first operand MOV BL,DATA2 ;get the second operand ADD AL,BL ;add the operands MOV SUM,AL ;store result in location SUM MOV AH,4CH ;set up to INT 21H ;return to DOS MAIN ENDP CDSEG ENDS END START ;this is the program exit point,2019/7/13,机械系统计算机控制课件,55,例:分析操作符,例:设标号L1为FAR类型、L2为NEAR类型,变量DATA1、DATA2和ARRAY分别定义为: DATA1 DW ? DATA2 DB 45,107 ARRAY DW 100 DUP(?) 则有: MOV BX,SEG L2 ;标号L2所在段的首地址送BX MOV BX,OFFSET L2 ;标号L2所在段的偏移量送BX MOV AX,TYPE DATA1 ;(AX)=2 MOV AX,TYPE DATA2 ;(AX)=1 MOV AX,TYPE L1 ;(AX)=2 MOV CX,LENGTH DATA1 ;(CX)=1 MOV CX,LENGTH DATA2 ;(CX)=1 MOV CX,LENGTH ARRAY ;(CX)=100 MOV CX,SIZE DATA1 ;(CX)=2 MOV CX,SIZE DATA2 ;(CX)=1 MOV CX,SIZE ARRAY ;(CX)=200 MOV AX,HIGH 0A09H ;(AX)=0AH MOV AX,LOW 0A09H ;(AX)=09H,2019/7/13,机械系统计算机控制课件,56,读程题,已知 TDATA DB 37H, 54H . . MOV AL,TDATA AL=( ) ADD AL,TDATA +1 AL=( ),AF=( ),CF=( ) DAA AL=( ),AF=( ),CF=( )本程序段作用 ( ),2019/7/13,机械系统计算机控制课件,57,读程题,解答 MOV AL,TDATA AL= 37H ADD AL,TDATA + 1 AL= CBH ,AF= 0 ,CF= 0 DAA AL= 91H ,AF= 1 ,CF= 0 本程序段作用 两BCD数相加,2019/7/13,机械系统计算机控制课件,58,读程序例子,一个有16个字的数据区,它的起始地址为70A0:DDF6,请写出这个数据区首末字单元的物理地址。 首地址: H,末地址: H 解答: 首地址: 7E7F6H末地址: 7E814H,2019/7/13,机械系统计算机控制课件,59,读程序例子,下列指令执行后,写结果: ADDR DW 1234H,5678H,0ABCDH LDS SI,ADDR+1 程序执行后,(DS)=_ (SI)=_ 解答: (DS)=_0CD56H (SI)= 7812H,2019/7/13,机械系统计算机控制课件,60,读程序例子,下述程序段执行后,寄存器的值填写在空白处: ORG 0202H DA_WORD DW 20H . MOV AX,DA_WORD MOV BX,OFFSET DA_WORD 问:(AX)=_,(BX)=_。 解答: (AX)=0020H_,(BX)_0202H_,2019/7/13,机械系统计算机控制课件,61,读程序例子,ORG 0204H XY DW 40H MOV AX,XY MOV BX,OFFSET XY 问:(AX)=_。 (BX) =_。 解答: (AX)=_0040H_ (BX) =_0204H_,2019/7/13,机械系统计算机控制课件,62,4.4 汇编语言程序设计,4.4.2 汇编语言程序的基本结构 2.基本编程结构,1)顺序结构 2)分支结构 3)循环结构 4)子程序,2019/7/13,机械系统计算机控制课件,63,基本程序结构:,复合结构:多种程序结构的组合,2019/7/13,机械系统计算机控制课件,64,顺序结构,CDSEG SEGMENT MAIN PROC FAR ;this is the program entry point ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG START: MOV AX,DTSEG ;load the data segment address MOV DS,AX ;assign value to DS MOV AL,DATA1 ;get the first operand MOV BL,DATA2 ;get the second operand ADD AL,BL ;add the operands MOV SUM,AL ;store result in location SUM MOV AH,4CH ;set up to INT 21H ;return to DOS MAIN ENDP CDSEG ENDS END START ;this is the program exit point,2019/7/13,机械系统计算机控制课件,65,分支结构程序设计,(1)两路分支结构 (2)多路分支结构,2019/7/13,机械系统计算机控制课件,66,a)逻辑尺控制 b)条件控制,常用方法,2019/7/13,机械系统计算机控制课件,67,c)地址跳转表 TABLE DW ONE, TWO, THREE JMP TABLESI 1000 ONE: 2000 TWO: 3000 THREE: ,d)根据关键字实现多路分支 在跳转表的每一个字地址或指令前开辟一个关键字单元,用于存放转到跳转地址执行的关键字。,2019/7/13,机械系统计算机控制课件,68,例1. 设有数组x(x1, , x10)和y(y1, , y10),编程计算 z1=x1 y1 z2=x2 y2 z3=x3 y3 z4=x4 y4 z5=x5 y5 z6=x6 y6 z7=x7 y7 z8=x8 y8 z9=x9 y9 z10=x10 y10,逻辑尺:0 0 1 1 0 1 1 1 0 0 1 减法 0 加法,2019/7/13,机械系统计算机控制课件,69,x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10 logic_rule dw 00dch mov bx, 0 mov cx, 10 mov dx, logic_rule next: mov ax, xbx shr dx, 1 jc subtract add ax, ybx jmp short result ; 向前引用 subtract: sub ax, ybx result: mov zbx, ax add bx, 2 loop next,2019/7/13,机械系统计算机控制课件,70,例. 根据AL寄存器中哪一位为1(从低位到高位)把程序 转移到8个不同的程序分支去 。(寄存器间接寻址),branch_table dw routine1 dw routine2 dw routine3 dw routine4 dw routine5 dw routine6 dw routine7 dw routine8,cmp al, 0 je continue lea bx, branch_table L : shr al, 1 ;逻辑右移 jnc add1 ;段内直接转移 jmp word ptr bx add1: add bx, 2 jmp L continue: routine1: routine2: ,2019/7/13,机械系统计算机控制课件,71,循环程序设计,2019/7/13,机械系统计算机控制课件,72,例. 把BX中的二进制数以十六进制的形式显示在屏幕上。,BX,2019/7/13,机械系统计算机控制课件,73,mov ch, 4 rotate: mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ;0-9 ASCII 30H-39H cmp al, 3ah jl printit add al, 7h ;A-F ASCII 41H-46H printit: mov dl, al mov ah, 2 int 21h dec ch jnz rotate,2019/7/13,机械系统计算机控制课件,74,例:将正数n插入一个已整序的字数组的正确位置。,算法: 将数组中数逐个与n比较,SI为指针 若nKi,则Ki下移一个单元 若nKi,则插在Ki的下一个单元,并结束 临界条件: 若nKn,则插入Kn的下一个单元 若nK1,则K1Kn后移一个单元, n插在第一个单元,2019/7/13,机械系统计算机控制课件,75,例程(续),循环控制: 计数控制 元素个数=(字末地址字首地址) / 2) +1 字数 = (字节末地址字节首地址) +1 字节数 地址边界控制 结束地址为ARRAY_HEAD 特征值控制: 表示结束条件的值,2019/7/13,机械系统计算机控制课件,76,例2. 将正数n插入一个已整序的字数组的正确位置。 x dw ? array_head dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32 mov ax, n mov array_head-2, 0ffffh mov si, 0 compare: cmp array_endsi, ax jle insert mov bx, array_endsi mov array_endsi+2, bx sub si, 2 jmp short compare insert: mov array_endsi+2, ax,(si),2019/7/13,机械系统计算机控制课件,77,例3 将首地址为A的字数组从小到大排序(气泡算法,多重循环) A dw 32,85,16,15, 8,2019/7/13,机械系统计算机控制课件,78,mov cx, 10 dec cx loop1: mov di, cx mov bx, 0 loop2: mov ax, Abx cmp ax, Abx+2 jle continue xchg ax, Abx+2 mov Abx, ax continue: add bx, 2 loop loop2 mov cx, di loop loop1,2019/7/13,机械系统计算机控制课件,79,子程序的设计方法,过程(子程序)定义伪操作 过程名 PROC NEAR ( FAR ) 过程名ENDP NEAR属性: 调用程序和子程序在同一代码段中(段内调用) FAR属性: 调用程序和子程序不在同一代码段中(段间调用),2019/7/13,机械系统计算机控制课件,80,子程序的设计方法(续),保存与恢复寄存器 subt proc far push ax push bx push cx push dx pop dx pop cx pop bx pop ax ret subt endp,2019/7/13,机械系统计算机控制课件,81,子程序的设计方法(续),子程序的调用和返回 子程序近调用:隐含使用堆栈保存返回地址 call near ptr subp (1) 保存返回地址 (2) 转子程序 (IP) subp的偏移地址,2019/7/13,机械系统计算机控制课件,82,子程序的设计方法(续),子程序的调用和返回(续) 子程序远调用:隐含使用堆栈保存返回地址 call far ptr subp (1) 保存返回地址 (2) 转子程序 (CS) subp的段地址 (IP) subp的偏移地址,2019/7/13,机械系统计算机控制课件,83,子程序的设计方法(续),子程序的调用和返回(续) 中断调用 INT n (n : 中断类型号) (1) 保存现场和返回地址(FLAGS,CS,IP入栈) (2) 转中断处理程序 (IP) 0000:(n*4) (CS) 0000:(n*4+2),2019/7/13,机械系统计算机控制课件,84,子程序的设计方法(续),子程序的调用和返回(续) 中断调用 INT 21H(DOS功能调用) 调用前首先要选择功能号AH 根据规定,将相关数据送相关寄存器 INT 21H 详见书上P.123有关例题。,2019/7/13,机械系统计算机控制课件,85,子程序的设计方法(续),子程序的调用和返回(续) 子程序返回: (1)ret (返回地址出栈) (2)iret (IP,CS,FLAGS出栈),2019/7/13,机械系统计算机控制课件,86,子程序的设计方法(续),子程序的参数传送方法 1)通过寄存器传送参数 2)通过存储区传送参数 子程序和调用程序在同一程序模块中,则子程序可 直接访问模块中的变量。 子程序和调用程序不在同一程序模块中,则有两种 传送方式:建立公共数据区和使用外部符号。 3)通过地址表传送参数地址 4)通过堆栈传送参数或参数地址,2019/7/13,机械系统计算机控制课件,87,DATA SEGMENT BCDZ DB 00110100B ; 34D BINZ DB ? DATA ENDS CODE SEGMENT ASSUME CS: CODE,DS:DATA main proc far MOV AX , DATA MOV DS,AX ;设定数据段 MOV AL,BCDZ CALL SUB1 ; 102 MOV BINZ,AL MOV AH,4CH INT 21H ;返回DOS main ENDP,例: 将BCDZ中的2位压缩BCD转换成二进制保存到BINZ单元(通过寄存器传送变量),2019/7/13,机械系统计算机控制课件,88,SUB1 PROC NEAR ; 102 PUSHF PUSH BX PUSH CX ;保护现场 MOV AH,AL ;34AH AND AH,0FH ;AH=04H MOV BL,AH ;BL = 04H MOV CL,04 SHR AL,CL ;AL=03H MOV BH,10 MUL BH ; AX=3*0AH=001EH ADD AL, BL ;AL=22H POP CX POP BX POPF ;恢复现场 RET SUB1 ENDP COD

温馨提示

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

最新文档

评论

0/150

提交评论