第五章汇编语言程序设计(shao)_第1页
第五章汇编语言程序设计(shao)_第2页
第五章汇编语言程序设计(shao)_第3页
第五章汇编语言程序设计(shao)_第4页
第五章汇编语言程序设计(shao)_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章 汇编语言程序设计第五章第五章 汇编语言程序设计汇编语言程序设计主要内容:主要内容:l 汇编语言源程序的结构汇编语言源程序的结构l 汇编语言语句格式汇编语言语句格式l 伪指令伪指令l 汇编语言程序设计汇编语言程序设计第五章 汇编语言程序设计5.15.1 概述概述程序是一组为完成某种功能而按一定顺序(由算法程序是一组为完成某种功能而按一定顺序(由算法确定)编排的指令序列。确定)编排的指令序列。 机器语言机器语言:二进制数形式的指令和数据,既不直观:二进制数形式的指令和数据,既不直观, ,又不易理解和记忆又不易理解和记忆( B0 64 B0 64 )助记符助记符:用便于记忆的英语单词表示的指

2、令操作码。:用便于记忆的英语单词表示的指令操作码。它它反映了指令的功能和主要特征反映了指令的功能和主要特征, ,便于人们理解和便于人们理解和记忆记忆(MOV ALMOV AL,64H64H)汇编语言汇编语言:汇编语言是一种用符号表示的、面向汇编语言是一种用符号表示的、面向CPU 指令系统的程序设计语言,是用指令的助记指令系统的程序设计语言,是用指令的助记符、符号地址、标号等编写程序的语言符、符号地址、标号等编写程序的语言 。第五章 汇编语言程序设计汇编程序汇编程序 汇编源程序需翻译成机器语言汇编源程序需翻译成机器语言, ,变成可执变成可执行文件行文件, ,机器才能执行机器才能执行, ,这个翻译

3、过程叫这个翻译过程叫汇汇编编。高级语言中称该过程为高级语言中称该过程为“解释解释”或或“编译编译”。执行翻译的程序称为。执行翻译的程序称为“汇编程汇编程序序”。 汇编汇编 汇编语言源程序汇编语言源程序 机器语言目标程机器语言目标程序序第五章 汇编语言程序设计汇编语言程序设计与执行过程汇编语言程序设计与执行过程 输入汇编语言源程序输入汇编语言源程序 源文件源文件 .ASM 汇编(编译)汇编(编译) 目标文件目标文件 .OBJ 链接链接 可执行文件可执行文件 .EXE 调试调试 最终程序最终程序第五章 汇编语言程序设计5.1.1 5.1.1 汇编语言源程序的结构汇编语言源程序的结构 汇编语言源程序

4、通常由一个或几个程序汇编语言源程序通常由一个或几个程序模块组成模块组成, ,每个模块一般由三个逻辑段组每个模块一般由三个逻辑段组成:成: 数据段数据段存放数据、变量存放数据、变量 堆栈段堆栈段堆栈区域堆栈区域 代码段代码段存放程序指令存放程序指令第五章 汇编语言程序设计 一个基本的汇编语言程序框架如下:一个基本的汇编语言程序框架如下: stack SEGMENT DB 100 DUP (stack) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data start: MOV AX, dat

5、a MOV DS, AX MOV ES, AX MOV AL, 4CH INT 21H code ENDS END start 堆栈段堆栈段数据段数据段代码段代码段第五章 汇编语言程序设计5.1.2 5.1.2 汇编语言的语句与格式汇编语言的语句与格式 汇编语言的语句有两种:汇编语言的语句有两种:指令性语句指令性语句由由80868086指令助记符构成的语句指令助记符构成的语句指示性语句指示性语句由伪指令构成的语句由伪指令构成的语句 指令性语句的格式为:指令性语句的格式为: 标号标号: : 指令助记符指令助记符 目的操作数,源操作数目的操作数,源操作数 ; ;注释注释 指示性语句的格式为:指示性

6、语句的格式为: 名字名字 伪指令伪指令 操作数操作数1,1,操作数操作数2,2,操作数操作数n ;n ;注释注释 注:各部分之间至少要用一个空格作为分隔符。注:各部分之间至少要用一个空格作为分隔符。第五章 汇编语言程序设计指令性语句指令性语句由由CPU执行,每一条指令性语执行,每一条指令性语句都句都有一条机器码指令与其对应有一条机器码指令与其对应;指示性语句指示性语句由由汇编程序汇编程序执行。它指出汇编执行。它指出汇编程序应如何对源程序进行汇编,如何定义变程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令

7、与其相对应。等。指示性语句无机器码指令与其相对应。 指令性语句汇编时生成机器码;指令性语句汇编时生成机器码; 指示性语句汇编时不生成机器码。指示性语句汇编时不生成机器码。第五章 汇编语言程序设计语句的构成元素:语句的构成元素: 标号:标号:指令的符号地址,用来代表指令在存储器指令的符号地址,用来代表指令在存储器中的地址。只能出现在指令性语句中,标号后应中的地址。只能出现在指令性语句中,标号后应加上冒号。加上冒号。 名字:名字:段、过程、变量的名字,用来代表它们在段、过程、变量的名字,用来代表它们在存储器中的地址。只能出现在指示性语句中,名存储器中的地址。只能出现在指示性语句中,名字后不加冒号。

8、字后不加冒号。 指令助记符:指令助记符:8086助记符、伪指令助记符、伪指令 操作数:操作数:指令的操作对象,可以是:指令的操作对象,可以是:寄存器、存寄存器、存储单元、常数或表达式储单元、常数或表达式 第五章 汇编语言程序设计 5.1.3 5.1.3 语句中的操作数语句中的操作数1.1.常量常量包括数值常数和字符串常数包括数值常数和字符串常数数值常数:数值常数:二进制数二进制数, ,以以B B结尾。如结尾。如01001101B01001101B。十进制数十进制数, ,如如8585。十六进制数十六进制数, ,以以H H结尾。第结尾。第1 1个数字为个数字为A-FA-F时,时,前面应加前面应加0

9、 0,如,如0F160H0F160H。字符串常数:字符串常数:包含在单引号中的若干字符。包含在单引号中的若干字符。汇编时被翻译成对应的汇编时被翻译成对应的ASCIIASCII码码第五章 汇编语言程序设计有三个属性:有三个属性: 段地址段地址:即标号所在段的段地址;:即标号所在段的段地址; 偏移量偏移量:标号所代表存储单元的段内偏移地址;:标号所代表存储单元的段内偏移地址; 类类 型型:NEARNEAR或或FARFAR: NEARNEAR表示标号所在语句与转移指令表示标号所在语句与转移指令/ / 调用指令在同一码段内。调用指令在同一码段内。 FARFAR标号所在语句与转移指令标号所在语句与转移指

10、令/ /调用调用 指令不在同一代码段内。指令不在同一代码段内。若没有对类型进行说明若没有对类型进行说明, ,默认为默认为NEARNEAR。标号通常作为标号通常作为转移指令转移指令或或CALLCALL指令指令的转移地址。的转移地址。2.2.标号标号指令所在内存单元的符号地址指令所在内存单元的符号地址第五章 汇编语言程序设计 变量变量即内存中的存储单元或数据区。即内存中的存储单元或数据区。 变量名变量名是存储单元是存储单元( (数据区数据区) )的符号地的符号地 址或名字。址或名字。变量也有三个属性变量也有三个属性: :段地址段地址变量所在段的段地址变量所在段的段地址偏移量偏移量变量单元地址与段首

11、地址之间的位移量变量单元地址与段首地址之间的位移量类类 型型有有BYTEBYTE、WORDWORD和和DWORDDWORD三种三种变量在程序中作为变量在程序中作为存储器操作数存储器操作数被引用被引用3.3.变量变量第五章 汇编语言程序设计标号和变量名的使用规则标号和变量名的使用规则 组成:组成:A-Z(不分大小写不分大小写), 0-9, ? . _ $ 不能以数字开头,句号不能以数字开头,句号(.)只能作为首字符只能作为首字符 长度小于长度小于31个字符个字符 不能与关键字不能与关键字(指令助记符、伪指令、预定义符指令助记符、伪指令、预定义符号等号等)重名重名 不能重复定义不能重复定义例如:例

12、如: 正确的:正确的:LP1, AGAIN, NEXT, _GO, OK_1 错误的:错误的:4M, LOOP, AAA, #ABC第五章 汇编语言程序设计4.4.表达式表达式表达式是常数、寄存器、标号、变量与表达式是常数、寄存器、标号、变量与运算符的组合。运算符的组合。包括数值表达式和地址表达式。包括数值表达式和地址表达式。 MOV AX, 12 - 4 ;数值数值表达式表达式 LEA BX, string + 4 ;地址表达式地址表达式运算符有运算符有5 5种:算术、逻辑、关系、取地种:算术、逻辑、关系、取地址、属性。址、属性。1 1)算术运算符)算术运算符 有有5 5个:个: + +,-

13、 -,* *,/ /,MODMOD2 2)逻辑运算符)逻辑运算符 有有4 4个:个: ANDAND、OROR、XORXOR、NOTNOT第五章 汇编语言程序设计3)3)关系运算符关系运算符 有有6 6个:个:EQEQ、NENE、LTLT、GTGT、LELE、GEGE 关系运算的结果是一个逻辑值:关系运算的结果是一个逻辑值:真真或或假假 关系为真关系为真, ,结果为全结果为全1 1,关系为假,关系为假, ,结果为全结果为全0 0例:例:MOV AX,2 LT 7MOV AX,2 LT 7;(;(AXAX)=0FFFFH=0FFFFH 4)4)取地址运算符取地址运算符 SEG:取变量:取变量/标号

14、的段地址标号的段地址 OFFSET:取变量:取变量/标号的偏移地址标号的偏移地址MOV BX,OFFSET VARMOV BX,OFFSET VAR ;取变量;取变量VAR的偏移地址的偏移地址 MOV AXMOV AX,SEG VARSEG VAR ;取变量;取变量VAR的段地址的段地址 第五章 汇编语言程序设计5)5)属性运算符属性运算符PTRPTR:用来:用来临时改变临时改变存储器操作数的类型。存储器操作数的类型。格式:格式: PTR BYTE、WORD、DWORD 用于描述数据存储单元用于描述数据存储单元(变量变量)地址地址 NEAR、FAR 用于描述转移、调用的目的地址用于描述转移、调

15、用的目的地址例:例:STR1 DW ? ;STR1定义为字类型定义为字类型 MOV AX,STR1 ;MOV AX,STR1 ;合法合法 MOV AL,STR1 ;MOV AL,STR1 ;非法非法 MOV AL, MOV AL, BYTE PTRBYTE PTR STR1 ; STR1 ;合法合法第五章 汇编语言程序设计5.2 5.2 伪指令伪指令 数据定义伪指令数据定义伪指令 符号定义伪指令符号定义伪指令 段定义和段寄存器指定伪指令段定义和段寄存器指定伪指令 过程定义伪指令过程定义伪指令 结束伪指令结束伪指令功能:指示汇编完成规定操作的命令功能:指示汇编完成规定操作的命令第五章 汇编语言程

16、序设计5.2.1 5.2.1 数据定义伪指令数据定义伪指令 DB DB DW DW变量变量 DD DD 操作数操作数1 1,操作数,操作数2 2, DQ DQ DT DT功能:用于定义变量,用变量和存储单元相联系,功能:用于定义变量,用变量和存储单元相联系,为变量分配内存单元为变量分配内存单元 DB-DB-字节类型字节类型 DW-DW-字类型字类型 DD-DD-双字类型双字类型 DQ-DQ-四字类型四字类型 DT-DT-五字类型五字类型 第五章 汇编语言程序设计格式中操作数的形式:格式中操作数的形式:1 1、一个或多个常数、一个或多个常数/ /数值表达式数值表达式 30H40H02H00H35

17、HFDH04HDATA1 DB 30HDATA1 DB 30HDATA2 DW 0240HDATA2 DW 0240H,3500H 3500H DATA3 DB (-1DATA3 DB (-1* *3)3),(16/4)(16/4) DATA1DATA1DATA2DATA2DATA3DATA3MOV AX,DATA1MOV AX,DATA1;错误;错误MOV AL,DATA1MOV AL,DATA1;正确;正确MOV AX, DATA2MOV AX, DATA2;正确;正确MOV AL, DATA2MOV AL, DATA2;错误;错误MOV AL, BYTE PTR DATA2MOV AL,

18、 BYTE PTR DATA2;正确;正确第五章 汇编语言程序设计2 2、?、?? 用来保留存储空间用来保留存储空间, ,但不存入数据但不存入数据DATA5 DB ?DATA6 DW ?-41H42H43H44H42H41H44H43HDATA5DATA5DATA6DATA6DATA7DATA7DATA8DATA83、字符串、字符串 DATA7 DB ABCD DATA8 DW AB, CD注意:注意:3个及其以上的字符个及其以上的字符 只能用只能用DB定义。定义。第五章 汇编语言程序设计4、重复方式重复方式DUPDUP格式:变量格式:变量 定义符定义符 n DUPn DUP(表达式(表达式1

19、 1)其中,其中,n n为重复次数为重复次数 表达式表达式1 1为重复内容为重复内容-05H00H00H05H00H00HDATA9 DB 2 DUP (?)(?)DATA10 DB 2 DUP(5,2 DUP(0)DATA9DATA9DATA10DATA10第五章 汇编语言程序设计5.2.2 5.2.2 符号定义伪指令符号定义伪指令把一个表达式用一个符号表示,以后凡是出把一个表达式用一个符号表示,以后凡是出现该表达式的地方都可用这个符号表示。现该表达式的地方都可用这个符号表示。 1. 等值语句等值语句EQU 格式:符号名格式:符号名 EQU 表达式表达式 PORT EQU 40H ; 用用P

20、ORT代替代替40H COUNT EQU CX ; 用用COUNT代替代替CX寄存器寄存器 M EQU MOV ; 用用M代替代替MOV指令助记符指令助记符 注:注:EQU语句不能重新定义,即在同一源程序中,用语句不能重新定义,即在同一源程序中,用EQU定义过的符号不能赋予不同的值。定义过的符号不能赋予不同的值。第五章 汇编语言程序设计 2. 等号语句等号语句= 格式:符号名格式:符号名 表达式表达式 例:例: PP 89FAH ; PPPP+1 ; 例:例:B EQU BP+8 B EQU 20H 不行!不行! 用用EQUEQU定义的符号未清除前定义的符号未清除前, ,不能重新定义。不能重新

21、定义。清除清除EQUEQU定义可用定义可用PURGEPURGE伪指令。伪指令。 用用”=”=”定义的符号可在任何时候进行重定定义的符号可在任何时候进行重定义义 二者均不占用存储空间二者均不占用存储空间, ,仅是给符号赋值仅是给符号赋值 第五章 汇编语言程序设计5.2.3 5.2.3 段定义伪指令段定义伪指令 汇编语言程序是按段来组织程序和数据的。汇编语言程序是按段来组织程序和数据的。 用于告诉汇编程序和链接程序如何按逻辑段来用于告诉汇编程序和链接程序如何按逻辑段来组织程序和利用存储器。组织程序和利用存储器。 三类段:代码三类段:代码( (程序程序) )、数据、堆栈、数据、堆栈 格式:格式: 段

22、名段名 SEGMENT 定位类型定位类型组合方式组合方式类别类别 段名段名 ENDS功能:定义段名和段属性功能:定义段名和段属性第五章 汇编语言程序设计1)定位类型)定位类型说明如何确定逻辑段的边界。有四种:说明如何确定逻辑段的边界。有四种: PARA: 16的倍数地址,地址低的倍数地址,地址低4位为零,默认位为零,默认值。值。 BYTE : 从任何地址开始。从任何地址开始。 WORD : 段的起始地址必须是偶数,地址低段的起始地址必须是偶数,地址低1位为位为0。 PAGE : 256的倍数地址,地址低的倍数地址,地址低8位为位为0。第五章 汇编语言程序设计 说明不同模块中同名段的组合方式。说

23、明不同模块中同名段的组合方式。 PUBLIC:所有此类型的同名段组合成一个逻辑段,:所有此类型的同名段组合成一个逻辑段,公用一个段地址,运行时装入同一个物理段中公用一个段地址,运行时装入同一个物理段中 COMMON:所有此类型的同名段具有相同的起始所有此类型的同名段具有相同的起始地址地址(覆盖覆盖),共享相同的存储区域,共享相同的存储区域 AT:指定段的起始地址,不能用于代码段:指定段的起始地址,不能用于代码段 STACK:专用于说明堆栈段,组合方式同:专用于说明堆栈段,组合方式同PUBLIC3) 类别类别用单引号括起来的字符串用单引号括起来的字符串。所有同类别的段被安。所有同类别的段被安排在

24、连续的存储区域中。排在连续的存储区域中。第五章 汇编语言程序设计1. 地址计数器地址计数器$功能:指出汇编地址的偏移量,记载下一功能:指出汇编地址的偏移量,记载下一个变量或指令在当前段中的偏移量个变量或指令在当前段中的偏移量l 每个段开始时,每个段开始时,$=0,随着汇编过程的,随着汇编过程的进行而自动增值进行而自动增值l $用于指令时,表示本条指令的第一个用于指令时,表示本条指令的第一个字节地址,字节地址, $用于其他情况时,表示当用于其他情况时,表示当前值前值如:如:JNE $+6,转向,转向JNE指令的首地址加指令的首地址加65.2.4 地址计数器伪指令地址计数器伪指令第五章 汇编语言程

25、序设计格式:格式:ORG 功能:定义指令或数据的起始地址(段内功能:定义指令或数据的起始地址(段内的偏移地址),把表达式的值送给的偏移地址),把表达式的值送给$ $,表达,表达式的值即为开始地址式的值即为开始地址例:例: ABC SEGMENTABC SEGMENT ORG 100H ORG 100H begin: begin: ABC ENDS ABC ENDS 指令从指令从100H开始存放开始存放第五章 汇编语言程序设计DATA2200H78HDATA1 204H 205H 206H 207H02H05H99H203H9AH34H08H12H201H202H66H208H209HDATA3

26、第五章 汇编语言程序设计5.2.5 段分配伪指令段分配伪指令ASSUME 功能:指定段和段寄存器的关系,说明功能:指定段和段寄存器的关系,说明哪个段使用哪个段寄存器哪个段使用哪个段寄存器 格式:格式:ASSUME ASSUME 段寄存器名:段名,段寄存器名:段名, 这个语句说明:这个语句说明: 1. CS将指向名字为将指向名字为code的代码段的代码段 2. DS和和ES将指向名字为将指向名字为data的数据段的数据段注意:注意: 1. 程序段必须用程序段必须用CS,堆栈段必须用,堆栈段必须用SS 2. 该语句一般放在代码段的最前面该语句一般放在代码段的最前面 3. 说明性语句,除说明性语句,

27、除CS外,各段寄存器在外,各段寄存器在程序中赋值程序中赋值第五章 汇编语言程序设计5.2.6 5.2.6 过程定义伪指令过程定义伪指令PROCPROC、ENDPENDP功能:用于定义子程序的结构,过程名是功能:用于定义子程序的结构,过程名是CALLCALL的操的操作数作数格式:格式: 过程名过程名 PROCPROC 类型类型 RET RET 过程名过程名 ENDPENDP NEAR过程过程只能被定义该过程的段中的其他程序只能被定义该过程的段中的其他程序调用调用(段内调用段内调用), 缺省时为缺省时为NEAR FAR过程过程可由任何段中的程序调用(可由任何段中的程序调用(段间调用段间调用)类型:

28、类型:第五章 汇编语言程序设计5.2.7 5.2.7 汇编结束伪指令汇编结束伪指令END第五章 汇编语言程序设计DATASEGMENT;定义数据段定义数据段D1DB 5 DUP(?)(?);5个字节单元个字节单元CCEQU $D1; 单元的个数单元的个数SUMDW 0;累加结果放在累加结果放在SUM中中DATAENDS;数据段定义结束数据段定义结束STACK SEGMENT ;定义堆栈段定义堆栈段DB 100 DUP (?)(?);100字节的栈空间字节的栈空间STACK ENDS;堆栈段定义结束堆栈段定义结束CODE SEGMENT;定义代码段定义代码段ASSUME DS:DATA,SS:S

29、TACK,CS:CODE;对各段进行说明对各段进行说明BEGIN:MOV AX,DATA; DS初始化为初始化为DATAMOV DS,AX MOV AX, STACK MOV SS, AX多个连续字节单元的累加多个连续字节单元的累加定义存储单定义存储单元的数据元的数据定义堆栈定义堆栈第五章 汇编语言程序设计 LEA SI,D1 ;预置源数据的首地址预置源数据的首地址MOV CX,CC;预置次数;预置次数 CLDLODSB ;取一个数并修改;取一个数并修改SIMOV AH,0;清;清AX的高字节的高字节CLC;清;清CF位位AGAN:ADC SUM,AX;累加;累加LODSB ;再取数并修改;再

30、取数并修改SILOOP AGAN ;控制循环;控制循环MOV AH,4CH;INT 21HCODE ENDS;代码段结束;代码段结束ENDBEGIN;整个程序结束;整个程序结束代码段结代码段结束束第五章 汇编语言程序设计调用调用DOS系统的系统的4CH 功能功能, 返回返回DOS方法:方法: 在要返回在要返回DOS 处,安排指令:处,安排指令: MOV AH, 4CH INT 21H 执行完执行完4CH的功能调用,即返回的功能调用,即返回DOS 。例例 code SEGMENT ASSUME CS: codestart: 、 ;程序主体部分程序主体部分 、 、 MOV AH, 4CH ;返回返

31、回DOS INT 21Hcode ENDS END start第五章 汇编语言程序设计5.3 5.3 汇编语言程序设计基础汇编语言程序设计基础5.3.1 5.3.1 概述概述1.1.汇编语言程序设计的步骤:汇编语言程序设计的步骤:l根据实际问题抽象出数学模型根据实际问题抽象出数学模型l确定算法确定算法l画出程序框图画出程序框图( (流程图流程图) ) l分配内存工作单元和寄存器分配内存工作单元和寄存器l编程、调试编程、调试2.2.绘制程序流程图绘制程序流程图(1)(1)用方框表示工作框用方框表示工作框 NY?第五章 汇编语言程序设计(4)(4)各框之间用直线连起来表示程序走向。各框之间用直线连

32、起来表示程序走向。 。 3. 源程序的基本结构:源程序的基本结构: 顺序、分支、循环、子程序顺序、分支、循环、子程序第五章 汇编语言程序设计例:例:将某段中的字符串将某段中的字符串“Hello!”传送到另一段中(内传送到另一段中(内存数据块的传送)。存数据块的传送)。开始开始建立传送方向建立传送方向 DS: SI 源串首地址源串首地址 ES: DI 目的串首地址目的串首地址CX 串长度串长度串传送串传送返回返回 DOS5.3.2 5.3.2 顺序结构程序顺序结构程序( (顺序执行,无转移、无循环顺序执行,无转移、无循环) )第五章 汇编语言程序设计aa SEGMENT ;数据段;数据段1xx

33、DB Hello! ;定义源串;定义源串aa ENDSbb SEGMENT ;数据段;数据段2yy DB 6 dup (?) ; 定义目的串定义目的串bb ENDScc SEGMENT ;代码段;代码段 ASSUME CS:cc, DS:aa, ES:bb ;分配段寄存器;分配段寄存器start : CLD ;设置传送方向;设置传送方向 MOV AX , aa ;DS: SI 源串首地址源串首地址 MOV DS , AX LEA SI , xx MOV AX , yy ;ES:DI 目的串首地址目的串首地址 MOV ES , AX MOV DI , OFFSET yy MOV CX , 6 ;

34、CX 串的长度串的长度 REP MOVSB ;串传送;串传送 MOV AH , 4CH ;调用调用4CH系统功能,返回系统功能,返回DOS INT 21H cc ENDS END start ;程序结束;程序结束第五章 汇编语言程序设计条件满足条件满足?处理处理P1处理处理P2标号标号1:标号标号2:NY1. 简单分支结构简单分支结构5.3.3 分支程序分支程序第五章 汇编语言程序设计 用比较指令用比较指令 CMP DEST,SRC JE EQUL EQUL: 用测试指令用测试指令 TEST DEST,SRC JNZ NEXT NEXT: 用逻辑指令用逻辑指令 SHR DEST,CL JC N

35、EXT NEXT:第五章 汇编语言程序设计 例例1:现有现有DS段中的段中的NUM为为8位无符号数,位无符号数,将这个单元中数低四位对应的将这个单元中数低四位对应的16进制数进制数转换成转换成ASCII码,存入码,存入STR单元。单元。 例例2:求求AX累加器和累加器和BX寄存器中两个无寄存器中两个无符号数之差的绝对值,结果放在内存中符号数之差的绝对值,结果放在内存中STR单元中。单元中。第五章 汇编语言程序设计标号标号1:条件条件1成立成立?P1NY2. 多种分支结构多种分支结构条件条件2成立成立?条件条件n成立成立?Pn+1标号标号2:标号标号n:标号标号n+1:P2PnNNYY第五章 汇

36、编语言程序设计例例3:。YXYXYXZ101第五章 汇编语言程序设计程程 序序;- 数据段定义数据段定义 -DATSEGMENTXDB242YDB67ZDB?DATENDS ;- 代码段定义代码段定义 -COD SEGMENT ASSUME DS: DAT, CS: CODSTART:MOV AX, DAT MOV DS, AX; 初始化初始化DS MOV AL, X MOV BL, Y第五章 汇编语言程序设计;-CMP AL, BLJEC1; (AL)(BL) 则跳转至则跳转至C1 JAC2; (AL) (BL) 则跳转至则跳转至C2 MOV AL, -1 JMP EXT C1:MOV AL

37、, 0 JMPEXT C2:MOV AL, 1 EXT: MOV Z, AL MOV AH, 4CH INT 21H ; 返回返回DOS;-COD ENDSENDSTART第五章 汇编语言程序设计 循环程序的组成:循环程序的组成:循环程序是在满足某些条件时对一段程循环程序是在满足某些条件时对一段程序的重复执行,一般由四部分组成。序的重复执行,一般由四部分组成。 2. 基本结构形式基本结构形式(1) 先执行后判断先执行后判断(dowhile) 至少执行一次循环体至少执行一次循环体(2) 先判断后执行先判断后执行循环体可能一次都不循环体可能一次都不执行执行5.3.4 循环程序循环程序初始化初始化循

38、环体循环体循环控制循环控制继续循环?继续循环?YN初始化初始化循环体循环体循环控制循环控制继续循环?继续循环?YN第五章 汇编语言程序设计 MOV CX,COUNT AGAIN: LOOP AGAIN MOV CX,COUNT AGAIN: DEC CX JNZ AGAIN MOV CX,COUNT AGAIN: JCXZ NEXT DEC CX JMP AGAIN NEXT:第五章 汇编语言程序设计例例: 在内存在内存BLOCK开始处存放了开始处存放了10个无符号字节个无符号字节数,从中找出最大值送入数,从中找出最大值送入MAX单元中。单元中。DATA SEGMENTBLOCK DB 100

39、,60,20, MAX DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAH1: MOV AX, DATA MOV DS, AX MOV CX,9 MOV AL,BLOCK LEA BX,BLOCKAGAIN:INC BX CMP AL,BX JAE NEXT XCHG AL,BXNEXT:LOOP AGAIN MOV MAX,AL CODE ENDS END H1第五章 汇编语言程序设计DATA SEGMENTARRAY DB 66H,88H,10H,DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA STA

40、RT: MOV AX,DATA MOV DS:AX MOV DI,9 LOOP1:MOV CX,DI MOV BX,0LOOP2:MOV AL ,ARRAYBX CMP AL,ARRAYBX+1 JGE NEXT XCHG AL,ARRAYBX+1 MOV ARRAYBX,ALNEXT:INC BX LOOP LOOP2 DEC DI JNZ LOOP1 CODE ENDS END START例:例: 将内存首地址为将内存首地址为ARRAY开始的开始的10个带符号字个带符号字节数,将其按由大到小的次序排列。节数,将其按由大到小的次序排列。第五章 汇编语言程序设计子程序:重复使用的程序段或具有通

41、用性便于共享的子程序:重复使用的程序段或具有通用性便于共享的 程序段程序段1.1.调用子程序用调用子程序用CALLCALL指令,返回调用程序用指令,返回调用程序用RETRET指令指令2. 现场的保护和恢复现场的保护和恢复 现场:现场:指转向子程序执行时主程序的状态,包括当指转向子程序执行时主程序的状态,包括当时标志寄存器、段寄存器、通用寄存器的内容时标志寄存器、段寄存器、通用寄存器的内容退出子程序前要退出子程序前要恢复现场恢复现场。 现场的保护和恢复分别用现场的保护和恢复分别用PUSH和和POP指令实现指令实现第五章 汇编语言程序设计调用和返回指令调用和返回指令主主程程序序子子程程序序调调用用

42、返返回回返回指令返回指令返返回回 、 、 、调用指令调用指令 、 、 、调调用用 主主程程序序子子程程序序 、第五章 汇编语言程序设计l 调用指令调用指令CALL 段内直接调用段内直接调用 格式格式 CALL 符号地址符号地址 ;NEAR属性属性 执行执行 (SP) (SP)- 2 (SS:SP) (IP) (IP) 符号地址的偏址符号地址的偏址 ;转至符号地址处取指令转至符号地址处取指令入栈保存返回地址偏值入栈保存返回地址偏值第五章 汇编语言程序设计 段间直接调用段间直接调用格式格式 : CALL 符号地址符号地址 ;FAR属性属性执行执行 : (SP) (SP)- 2 (SS:SP) (C

43、S) (SP) (SP)- 2 (SS:SP) (IP) (IP) 符号地址的偏址符号地址的偏址(CS) 符号地址的段址符号地址的段址入栈保存返回地址段值入栈保存返回地址段值入栈保存返回地址偏值入栈保存返回地址偏值转至符号地址转至符号地址第五章 汇编语言程序设计l 返回指令返回指令RET 段间返回段间返回格式格式 RET 或或 RETF 执行执行 (IP) (SS:SP) (SP) (SP)+ 2 (CS) (SS:SP) (SP) (SP)+ 2从堆栈取返回地址偏值从堆栈取返回地址偏值从堆栈取返回地址偏值从堆栈取返回地址偏值从堆栈取返回地址段值从堆栈取返回地址段值 段内返回段内返回 格式格式

44、 RET 执行执行 (IP) (SS:SP) (SP) (SP)+ 2第五章 汇编语言程序设计段内和段间返回指令的汇编语言格式均可用段内和段间返回指令的汇编语言格式均可用RET, 但机器码不同,段内为但机器码不同,段内为C3H, 段间为段间为CBH, 汇编程序据过程类型确定返回类型汇编程序据过程类型确定返回类型。例例1 display PROC NEAR 、 、 C3H 、 RET ;NEAR 属性的过程对应段内返回属性的过程对应段内返回 display ENDP例例2 display PROC FAR 、 、 CBH 、 RET ;FAR属性的过程对应段间返回属性的过程对应段间返回 disp

45、lay ENDP第五章 汇编语言程序设计 调用前要预先确定子程序中要调用前要预先确定子程序中要使用哪些寄存使用哪些寄存器,并定义入口参数和出口参数器,并定义入口参数和出口参数。 参数传递的方法:参数传递的方法:方法一:方法一: PUSH BX PUSH CX CALL PROC-1 POP CX POP BX方法二:方法二: . PROC-1 PROC . PUSH BX . PUSH CX CALL PROC-1 . POP CX . POP BX . RET PROC-1 ENDP(1)使用约定的寄存器传递)使用约定的寄存器传递 (2)使用约定的存储单元传递)使用约定的存储单元传递 (3)

46、使用堆栈传递)使用堆栈传递 (要用(要用BP寻址)寻址)第五章 汇编语言程序设计利用堆栈传递参数利用堆栈传递参数通常在主程序中把参数或参数地址保存在通常在主程序中把参数或参数地址保存在堆栈中堆栈中, ,而在子程序中将参数从堆栈取出来而在子程序中将参数从堆栈取出来例:把一个用十六进制表示的字例:把一个用十六进制表示的字ASCIIASCII码码 汇编程序如下:汇编程序如下:DATADATASEGMENTSEGMENTNUMNUMDWDW25AFH ;25AFH ;要转换的十六进制数要转换的十六进制数STRINGSTRINGDBDB4 DUP(?)4 DUP(?)DATADATAENDSENDS第五

47、章 汇编语言程序设计STACKSTACKSEGMENTSEGMENTDB 100 DUP(?)DB 100 DUP(?) STACK STACKENDSENDS CODECODESEGMENTSEGMENTASSUME ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKCS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN:BEGIN:MOVMOVAX,DATAAX,DATAMOVMOVDS,AXDS,AXMOVMOVES,AXES,AXMOVMOVAX,STACKAX,STACKMOVMOVSS,AX SS,AX LEALEABX,STRING

48、;BX,STRING;取变量偏址取变量偏址PUSHPUSH BXBX ; ;将偏址压栈将偏址压栈PUSHPUSH NUMNUM ; ;将变量压栈将变量压栈BHBL0064H0062H(SP)25AF0060H堆栈第五章 汇编语言程序设计 CALL BINHEX CALL BINHEX MOV MOVAH,4CHAH,4CH INT INT21H21H; ;* * * * * * * * * * * * * * * * * * * * * * * *BINHEXBINHEX PROCPROCPUSHPUSH BPBPMOVMOVBP,SPBP,SPPUSHPUSH AX AX PUSHPUSH

49、DI DI PUSHPUSH CX CX PUSHPUSH DXDXBHBL0064H0062H25AF0060H005EHIPH005CH(BP、SP)(IP)(BP)IPL第五章 汇编语言程序设计BHBHBLBL0064H0062H2525AFAF0060H005EHIPIPH H005CH(BP) PUSHF PUSHF MOV AX,BP+4 MOV AX,BP+4 MOV DI,BP+6 MOV DI,BP+6 MOV DX,AX ;(DX)=25AFH MOV DX,AX ;(DX)=25AFH MOV CX,4 MOV CX,4 STD ; STD ;从后往前存从后往前存AGAI

50、N:AND AX,000FH ;AGAIN:AND AX,000FH ;第一次第一次(AX)=000FH(AX)=000FH CALL HEXDCALL HEXD ; ;转换为转换为ASCIIASCII码码 STOSB STOSB PUSH CX PUSH CX MOV CL,4MOV CL,4 SHR DX,CL ; SHR DX,CL ;逻辑右移逻辑右移4 4位位 MOV AX,DX ;MOV AX,DX ;第第1 1次次(AX)=025AH(AX)=025AH POP CX POP CX LOOP AGAIN ;(CX)-1=0? LOOP AGAIN ;(CX)-1=0?不等不等, ,

51、转转+4IPIPL L(BP)第五章 汇编语言程序设计POPFPOPFPOPPOPDX DX POPPOPCXCXPOPPOPDIDIPOPPOPAXAXPOPPOPBPBPRETRET4 4 BINHEX ENDP BINHEX ENDP ; ;* * * * * * * * * * * * * * * * * * * * *HEXD PROCHEXD PROC CMP AL,0AH CMP AL,0AH JL LP JL LP ADD AL,7 ADD AL,7LP: ADD AL,30HLP: ADD AL,30H RET RETHEXD ENDPHEXD ENDPCODE ENDSCODE EN

温馨提示

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

评论

0/150

提交评论