最新微机原理与应用第七章PPT课件

上传人:pu****.1 文档编号:569581939 上传时间:2024-07-30 格式:PPT 页数:83 大小:1.11MB
返回 下载 相关 举报
最新微机原理与应用第七章PPT课件_第1页
第1页 / 共83页
最新微机原理与应用第七章PPT课件_第2页
第2页 / 共83页
最新微机原理与应用第七章PPT课件_第3页
第3页 / 共83页
最新微机原理与应用第七章PPT课件_第4页
第4页 / 共83页
最新微机原理与应用第七章PPT课件_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《最新微机原理与应用第七章PPT课件》由会员分享,可在线阅读,更多相关《最新微机原理与应用第七章PPT课件(83页珍藏版)》请在金锄头文库上搜索。

1、进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会想起进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会想起那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记忆中的故那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记忆中的故乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老少,个个手持乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老少,个个手持一把,忽闪忽闪个不停,嘴里叨叨着一把,忽闪忽闪个不停,嘴里叨叨着“怎么这么热怎么这么热”,于是三五成群,聚在大树,于是三五成群,聚在大树下,或站着,或随即坐在石头上,手持那把扇子,边唠嗑边乘凉。孩

2、子们却在周下,或站着,或随即坐在石头上,手持那把扇子,边唠嗑边乘凉。孩子们却在周围跑跑跳跳,热得满头大汗,不时听到围跑跑跳跳,热得满头大汗,不时听到“强子,别跑了,快来我给你扇扇强子,别跑了,快来我给你扇扇”。孩。孩子们才不听这一套,跑个没完,直到累气喘吁吁,这才一跑一踮地围过了,这时子们才不听这一套,跑个没完,直到累气喘吁吁,这才一跑一踮地围过了,这时母亲总是,好似生气的样子,边扇边训,母亲总是,好似生气的样子,边扇边训,“你看热的,跑什么?你看热的,跑什么?”此时这把蒲扇,此时这把蒲扇,是那么凉快,那么的温馨幸福,有母亲的味道!蒲扇是中国传统工艺品,在是那么凉快,那么的温馨幸福,有母亲的味

3、道!蒲扇是中国传统工艺品,在我国已有三千年多年的历史。取材于棕榈树,制作简单,方便携带,且蒲扇的表我国已有三千年多年的历史。取材于棕榈树,制作简单,方便携带,且蒲扇的表面光滑,因而,古人常会在上面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即面光滑,因而,古人常会在上面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即今日的蒲扇,江浙称之为芭蕉扇。六七十年代,人们最常用的就是这种,似圆非今日的蒲扇,江浙称之为芭蕉扇。六七十年代,人们最常用的就是这种,似圆非圆,轻巧又便宜的蒲扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,圆,轻巧又便宜的蒲扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,也走过了我们的半个人

4、生的轨迹,携带着特有的念想,一年年,一天天,流向长也走过了我们的半个人生的轨迹,携带着特有的念想,一年年,一天天,流向长长的时间隧道,袅长的时间隧道,袅微机原理与应用第七章汇编程序:用来把汇编语言编写的程序自动翻译成目的汇编程序:用来把汇编语言编写的程序自动翻译成目的 程序的软件程序的软件标号名标号名伪指令伪指令操作数操作数;注释;注释,7.1.1 伪指令语句格式伪指令语句格式没有冒号!没有冒号!常量名常量名变量名变量名过程名过程名结构名结构名记录名等记录名等常数常数字符串字符串常量名常量名变量名变量名标号标号专用符号(如专用符号(如BYTE、FAR)内存数据定义伪指令内存数据定义伪指令用于数

5、字表达式:用于数字表达式: MOV AX , 4*1024汇编后的形式为汇编后的形式为: MOV AX , 4096 用于地址表达式用于地址表达式,例例: LEA SI , TAB+3若若TAB的偏移地址为的偏移地址为1000H,则汇编后的形式为:,则汇编后的形式为: LEA SI , 1003H 逻辑运算符只能用于数字表达式中。逻辑运算符只能用于数字表达式中。 例:例:MOVCL , 36H AND 0FH 经汇编后:经汇编后:MOV CL , 06H注意,不要把逻辑运算符与逻辑运算指令混淆:注意,不要把逻辑运算符与逻辑运算指令混淆: 例:例:AND AX , 3FC0H AND 0FF00

6、H 汇编后源操作数被翻译为:汇编后源操作数被翻译为:3F00H,所以上述指,所以上述指令与令与AND AX, 3F00H等价。等价。关系运算的结果是一个逻辑值:关系运算的结果是一个逻辑值:真真或或假假 关系为关系为真真,结果为全结果为全1 关系为关系为假假,结果为全结果为全0例:例:MOV BX , PORT GT 300H 若若PORT的值大于的值大于300H,则汇编后为:则汇编后为: MOV BX,0FFFFH 否则汇编后为:否则汇编后为: MOV BX,0 分析运算符(数值回送操作符):分析运算符(数值回送操作符): SEG(计算段基址)(计算段基址) OFFSET(计算偏移地址)(计算

7、偏移地址) TYPE(计算符号类型值(计算符号类型值; P157) SIZE(计算符号名分配的字节数)(计算符号名分配的字节数)(=TYPE*LENGTH) LENGTH(计算符号名分配的数)(计算符号名分配的数)例例2:把:把VARW的偏移地址送的偏移地址送BX MOV BX,OFFSET VARW例例3:假设:假设VARW变量是字变量,把变量是字变量,把VARW的类型值送的类型值送AL MOV AL, TYPE VARW ;AL =2例例1:把:把VARW所在段的段值送所在段的段值送AX MOV AX,SEG VARW变量名变量名SEG:取变量:取变量/标号的段地址标号的段地址OFFSET

8、:取变量:取变量/标号的偏移地址标号的偏移地址例:例:VAR DB 12H MOV BX,OFFSET VAR ;取变量;取变量VAR的偏移地址的偏移地址 MOV AX,SEG VAR ;取变量;取变量VAR的段地址的段地址注意,以下指令的异同:注意,以下指令的异同: MOV BX, OFFSET VAR LEA BX, VAROFFSET只能取静态的偏移地址;只能取静态的偏移地址;LEA指令即可取静态的偏移地址,也可取动态的偏移地址。指令即可取静态的偏移地址,也可取动态的偏移地址。 TYPE 取变量的类型(取变量的类型(1,2,4)LENGTH 取所定义变量的长度取所定义变量的长度 (即变量

9、中元素的个数)(即变量中元素的个数)SIZE 取所定义存储区的字节数取所定义存储区的字节数 (=TYPE*LENGTH)例:例:VAR DW 1,2,3,4,5 则则 TYPE VAR = 2 LENGTH VAR = 5 SIZE VAR = 10执行执行: MOV CX, SIZE VAR ; (CX)=10 组合运算符(属性操作符)组合运算符(属性操作符)定义符号名为新类型定义符号名为新类型PTR格式:格式: PTR 功能:用于指定或临时改变变量或标号的类型功能:用于指定或临时改变变量或标号的类型例:例:MOV WORD PTR SI,1 ;指明字类型;指明字类型指定新类型指定新类型TH

10、IS格式:格式:THIS 功能:为某个符号名建立新类型功能:为某个符号名建立新类型例:例:LABC EQU THIS BYTE MOV LABC,AL执行后执行后SI = 01SI+1=00用来指定地址操作数的类型。用来指定地址操作数的类型。格式:格式: PTR 类型类型BYTE, WORD, DWORD, NEAR, FARBYTE、WORD、DWORD 用于描述数据存储单元用于描述数据存储单元(变量变量)地址地址NEAR、FAR 用于描述转移、调用的目的地址用于描述转移、调用的目的地址例例6) :MOVBYTE PTRDI,0 ;字节类型字节类型 MOVWORD PTRDI,0 ;字类型字

11、类型 MOVDI,0B5H ;类型不定类型不定PTR也可用来进行强制类型转换也可用来进行强制类型转换例:例:STR1 DW 1234H ;STR1定义为字类型定义为字类型 MOVAX,STR1 ;合法合法 MOVAL,STR1 ;非法非法 MOV AL,BYTE PTR STR1 ;合法合法 分离运算符分离运算符LOW 取低字节取低字节 格式:格式:LOW HIGH 取高字节取高字节 格式:格式:HIGH 例:设例:设SSY=2050H MOV AL,LOW 3080H ;AL=80H MOV AH,HIGH SSY ;AH=20 MOV CL, LOW 3A4BH ;CL=4BH 汇编运算符

12、的优先级汇编运算符的优先级括号括号LENGTH、SIZEPTR、OFFSET、.HIGH、LOW*、/、MOD、SHL、SHR+、-EQ、NE、LT、LE、GT、GENOTANDOR、XOR1. 符号定义伪指令(赋值语句)符号定义伪指令(赋值语句)(1)格式:格式: EQU 功能:用符号来代表表达式的内容功能:用符号来代表表达式的内容 等价语句等价语句EQU表达式可以是常表达式可以是常数、数值表达式、数、数值表达式、字符串、存储器字符串、存储器符号等符号等例:例:COUNT EQU 100 ;符号;符号COUNT代表常数代表常数100 BUFF EQU 4*COUNT ;BUFF代表代表400

13、 HELLO EQU “How are you! ” ;HELLO代表代表How are you VARW EQU THIS WORD ;变量;变量VARW的类型是字的类型是字 注意:等价语句的符号名注意:等价语句的符号名不能被重新赋值不能被重新赋值 等号语句等号语句=格式:格式: = 功能:用符号来代表表达式的数值功能:用符号来代表表达式的数值数值表达式数值表达式例:例:ABCD = 100 YY = 20+300/4 ABCD = 2*ABCD+1可以重新赋值可以重新赋值例:例:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIST = BYTE PTRSI+BP

14、GOTO = JMP MOV AX, TEN MOV CX, COUNT ADD DIST, FIVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL 先定义先定义后引用后引用 字节定义语句字节定义语句DB格式:格式:名字名字 DB 功能:表达式值或项表中的每一项是一个功能:表达式值或项表中的每一项是一个字节字节数,数, 它们从符号名地址开始按字节连续存放。它们从符号名地址开始按字节连续存放。例:例:COUNT DB 100 DB 0DH,0AH, VARW DB ?,?,6,?,?,?,?低低0A2406 0D64COUNTVARW高高可以使用重

15、复操作符可以使用重复操作符DUP如:如:BUFFER DB 8 DUP(0)符号地址符号地址DUP可以嵌套如:可以嵌套如:ARRAY DB 100 DUP(0,2 DUP(1,2),),3) 字字定义语句定义语句DW格式:格式:名字名字 DW 功能:表达式值或项表中的每一项是一个功能:表达式值或项表中的每一项是一个字字数,数, 它们从符号名地址开始按它们从符号名地址开始按字字连续存放。连续存放。例:例:FLAG DW 2FCDH,24H DW ?2400 2FCDFLAG低低高高汇编后对应的存储区域分配情况汇编后对应的存储区域分配情况 四字节定义语句四字节定义语句DD格式:格式:名字名字 DD

16、 功能:表达式值或项表中的每一项是四个字节数,它们功能:表达式值或项表中的每一项是四个字节数,它们 从符号名地址开始按四字节从小地址连续存放。从符号名地址开始按四字节从小地址连续存放。格式:格式:名字名字 DQ 功能:表达式值或项表中的每一项是八个字节数,它们功能:表达式值或项表中的每一项是八个字节数,它们 从符号名地址开始按八字节从小地址连续存放。从符号名地址开始按八字节从小地址连续存放。 八字节定义语句八字节定义语句DQ 10字节定义指令字节定义指令DT例例1:DSEG1 SEGMENT DATA_B DB 10,5,10H DATA_W DW 100H,-4 DATA_D DD 0FFF

17、BHDSEG1 ENDS汇编后的内存分配情况汇编后的内存分配情况如右图所示。如右图所示。05H10H00H01HFCHFFHFBHFFH00H00H0AHDSEG1: DATA_BDATA_BDATA_WDATA_WDATA_DDATA_D10105 510H10H100H100H- - - -4 40FFFBH0FFFBH例例2 2:操作数可以是字符串,例如:操作数可以是字符串,例如STR DBHELLO汇编后的情况如图:汇编后的情况如图:STRHELLO注意下面两个定义的不同之处:注意下面两个定义的不同之处: X DBAB ;41H在低字节,在低字节,42H在高字节在高字节 Y DW AB

18、 ;42H在低字节,在低字节,41H在高字节在高字节48H45H4CH4CH4FH41H42H42H41HXY例例3: TABLE DB 10 DUP(?) BUFFER DW TABLE,$+3设设TABLE的偏移地址为的偏移地址为0080H,则汇编后如下图所则汇编后如下图所示:示:BUFFER0080H80HTABLE008AH008BH008CH008DH008EH.8FH00H00H0089H10 Bytes程序计数器程序计数器 $程序计数器程序计数器 $段定义的一般格式:段定义的一般格式: SEGMENT 定位方式定位方式连接方式连接方式类型名类型名 ENDS段开始语句段开始语句段结

19、束语句段结束语句例:一个简单的数据段例:一个简单的数据段 DSEG SEGMENT BUFFER DB 8 DUP(0) DSEG ENDS开始的段名与结开始的段名与结束的段名必须相束的段名必须相同,段的长度不同,段的长度不能超过能超过64KB,SEGMENT后面后面的参数是可选的的参数是可选的注意: 定位方式定位方式(定位类型)(定位类型) 书书(P162)定位类型指出了对当前段起始地址的要求,有定位类型指出了对当前段起始地址的要求,有4个选项个选项PAGE 指定起始地址的低指定起始地址的低8位是位是0,即其值能被,即其值能被256整除(称页边界)整除(称页边界)PARA 指定起始地址的低指

20、定起始地址的低4为是为是0,即其值能被,即其值能被16整除(整除(称段边界称段边界)WORD指定起始地址的最低位是指定起始地址的最低位是0,即其值能被,即其值能被2整除(称为字边界)整除(称为字边界)BYTE 指定起始地址是任意值指定起始地址是任意值缺省定位缺省定位定位类型是用来确定程序段与程序段之间的衔接,如定位类型是用来确定程序段与程序段之间的衔接,如BYTE 使得当前段紧接前一段,而使得当前段紧接前一段,而PAGE可能导致最大的段间隔可能导致最大的段间隔 连接方式连接方式(组合类型)(组合类型)连接方式告诉连接程序本段可按某种方式连接连接方式告诉连接程序本段可按某种方式连接PUBLIC告

21、诉连接程序本段与其它同名同类别告诉连接程序本段与其它同名同类别 的段连接起来,公用一个起始点。的段连接起来,公用一个起始点。STACK 表示是堆栈段,连接方式同上。表示是堆栈段,连接方式同上。NONE 表示本段不与任何段连接。表示本段不与任何段连接。COMMON表示本段与同名同类别的段共用同一段地址,表示本段与同名同类别的段共用同一段地址, 即同名同类段相重叠。即同名同类段相重叠。MEMORY本段连接时定位在所有段之上,即高地址处。本段连接时定位在所有段之上,即高地址处。AT 表达式表达式表示本段定位在表达式值指定的段地址处。表示本段定位在表达式值指定的段地址处。隐含连接方式隐含连接方式一个源

22、程序至少有一个堆栈段一个源程序至少有一个堆栈段例例:连接方式连接方式BmaxC(S)B(C)A(P)B(C)AC(S)A(P)B(C)AC2C1A1A2PCS模块模块1模块模块2模块模块1N 类别名类别名 类别名是由程序员指定的字符串,没有给出类别时,类别名是由程序员指定的字符串,没有给出类别时,这个段的类别就为空。这个段的类别就为空。例例1:某个源程序:某个源程序SSEG SEGMENT PARA STACK DB 1024 DUP(?)(?)SSEG ENDS;DSEG SEGMENT PARA COMMONMESS DB HELLO,0DH,0AH,DSEG ENDS;CSEG SEGM

23、ENT PARA PUBLICCSEG ENDS END START例例2: 类别类别用单引号括起来的字符串。所有同类别的段被安排在连续用单引号括起来的字符串。所有同类别的段被安排在连续的存储区域中。的存储区域中。如:如:给出类别时,给出类别时,在模块在模块1中有段定义:中有段定义:seg1 SEGMENT PARA STACK stack seg1 ENDS 在模块在模块2中有段定义:中有段定义:seg2 SEGMENT PARA STACK stack seg2 ENDS则连接时这两个段被安排在一起。则连接时这两个段被安排在一起。PUBLICCODEPUBLICCODECOMMONDATA

24、COMMONDATAAT 2000HAT 8000H格式:格式:ASSUME 段寄存器:段定义名段寄存器:段定义名1,段寄存器:段定义名,段寄存器:段定义名2,功能:告诉汇编程序在汇编时,段寄存器的符号基址功能:告诉汇编程序在汇编时,段寄存器的符号基址例:例:DSEG1 SEGMENT VARW DW 12 DSEG1 ENDS ; DSEG2 SEGMENT XXX DW 0 YYY DW 0 DSEG2 ENDS ;CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG1,ES:DSEG2 MOV AX,DSEG1 MOV DS,AX MOV AX,DSEG2 MOV ES

25、,AX CSEG ENDS 在代码段中,还必须明确段和段寄存器的关系,这由ASSUME语句来指定。如 ASSUME CS:code, DS:data, ES:data 语句中的code和data为段名。 这个语句说明: 1. CS将指向名字为code的代码段 2. DS和ES将指向名字为data的数据段但要注意但要注意,ASSUME伪指令只是告知汇编程序有伪指令只是告知汇编程序有关段寄存器与段的关系关段寄存器与段的关系,并没有给段寄存器赋予实并没有给段寄存器赋予实际的初值。故下面的语句际的初值。故下面的语句 MOVAX,DATA MOVDS,AX MOVES,AX将段基址装入段寄存器将段基址装

26、入段寄存器。如果程序中用到堆栈段,。如果程序中用到堆栈段,则则SS也需装入也需装入实际的初值实际的初值。代码段基地址代码段基地址不需要程序员装入不需要程序员装入CS寄存器,而由寄存器,而由DOS负责装入。负责装入。格式:格式: PROC 过程属性过程属性 ENDP段间为段间为FAR段内为段内为NEARXXX SEGMENT main proc far call subr1 ret main endp subr1 proc near ret subr1 endp XXX ENDSXXX SEGMENT main proc far call subr1 ret subr1 proc near re

27、t subr1 endp main endp XXX ENDS例例1: 调用程序和子程序在同一代码段中调用程序和子程序在同一代码段中一个过程一个过程例例2: 调用过程和调用过程和子过程不在子过程不在同一个代码同一个代码段内段内SEGX SEGMENT subt proc far ret subt endp call subt SEGX ENDSSEGY SEGMENT call subt SEGY ENDS在同一段中调用在同一段中调用也在不同段中调用也在不同段中调用所以过程属性所以过程属性为为FAR6. 模块开始伪指令模块开始伪指令格式:格式:NAME 模块名模块名 书书(P182)7. 模块

28、结束伪指令模块结束伪指令格式:格式:END 启动标号或过程名启动标号或过程名功能:告诉汇编程序源文件结束,并给出执行程功能:告诉汇编程序源文件结束,并给出执行程 序的入口地址序的入口地址格式:格式:ORG 功能:把以下语句定义的内存数据或程序,从表达式功能:把以下语句定义的内存数据或程序,从表达式 指定的起点开始连续存放。指定的起点开始连续存放。9. 列表伪指令列表伪指令格式:格式:TITLE 标题标题 ;为列表文件每页第一行定义标题为列表文件每页第一行定义标题SUBTTL 小标题小标题 ;为列表文件每页定义小标题,大标题之后为列表文件每页定义小标题,大标题之后PAGE 行数,行字数;行数,行

29、字数;为列表文件定义每页行数,每行字符数。为列表文件定义每页行数,每行字符数。缺省值是缺省值是66行,行,80列列例:例:例:例: ABC SEGMENTABC SEGMENT ORG ORG 100H100H beginbegin: : ABC ENDS ABC ENDS 格式:格式:RADIX 表达式表达式 功能:改变隐含进制数功能:改变隐含进制数例:例:RADIX 16 MOV AX,0FA4 MOV BX,100D 后面可以不跟后面可以不跟H后面必须跟后面必须跟D,表,表示示 十进制数十进制数格式:格式:PUBLIC 功能:本模块用功能:本模块用PUBLIC说明了的符号名,可以被其它程

30、说明了的符号名,可以被其它程 序模块引用序模块引用 公用符号语句公用符号语句PUBLIC变量名、标号、过变量名、标号、过程名、符号常量程名、符号常量 引用符号语句引用符号语句EXTRN格式:格式:EXTRN 功能:在本模块内引用的其它模块符号名,必须用功能:在本模块内引用的其它模块符号名,必须用EXTRN 进行说明,否则不能引用。进行说明,否则不能引用。 公用符号语句公用符号语句PUBLIC (P182)例例: 引用符号语句引用符号语句EXTRNPUBLIC 5EXTRN二级模块二级模块PUBLIC 6EXTRN二级模块二级模块PUBLIC 4EXTRN二级模块二级模块PUBLIC 7EXTR

31、N二级模块二级模块PUBLIC 2EXTRN 5,6一级模块一级模块PUBLIC 3EXTRN 6,7一级模块一级模块PUBLIC 1EXTRN 4,5一级模块一级模块NAME XX EXTRN 1,2,3主模块主模块NAME 4 NAME 5NAME 6 NAME 7NAME 3NAME 2 NAME 1 格式:格式:COMMENT 定界符定界符 注释注释 定界符定界符功能:为模块程序加注释功能:为模块程序加注释自定义的非自定义的非空格符空格符例:某模块开始处例:某模块开始处COMMENT *该模块完成了多字节加法运算该模块完成了多字节加法运算*或或COMMENT /该模块完成了多字节加法运

32、算该模块完成了多字节加法运算/宏指令:为了简化汇编语言源程序的书写提供的指令宏指令:为了简化汇编语言源程序的书写提供的指令宏指令的使用要经过三个步骤:宏指令的使用要经过三个步骤: 宏定义:对各个宏指令进行定义,并分别起一个名字宏定义:对各个宏指令进行定义,并分别起一个名字 宏调用:在需要的地方,通过宏指令名来调用它宏调用:在需要的地方,通过宏指令名来调用它 宏展开:由汇编程序用宏定义中的指令替代宏指令名宏展开:由汇编程序用宏定义中的指令替代宏指令名由汇编程序由汇编程序完成的完成的格式:宏名格式:宏名 MACRO 形式参数形式参数1,形式参数,形式参数2, ENDM功能:为指令序列定义一个宏名,

33、称宏指令功能:为指令序列定义一个宏名,称宏指令宏体宏体形式参数是任选项,可以用来代换宏体中的某些参数形式参数是任选项,可以用来代换宏体中的某些参数或符号。需要代换的或符号。需要代换的符号符号前,必须加一个宏代换符前,必须加一个宏代换符&例:例:AA MACRO Y,X MOV CL,X RO&Y AX,CL ENDM调用时:调用时:AA R,5实在参数实在参数需要替换需要替换的符号的符号象指令一样出象指令一样出现在程序中现在程序中格式:格式:LOCAL 符号符号1,符号,符号2,功能:指出符号仅在宏代换中有意义功能:指出符号仅在宏代换中有意义 (目的是避免在宏展开时引起符号重复)(目的是避免在

34、宏展开时引起符号重复)例:例:AA MACRO LOCAL LP1 LP1 : ADD AL,30H ENDM格式:格式:PURGE 宏定义名宏定义名1,宏定义名,宏定义名2,功能:告诉汇编程序取消某些宏。使之在宏调用的功能:告诉汇编程序取消某些宏。使之在宏调用的 地方不再生成宏展开。地方不再生成宏展开。4. 退出宏定义退出宏定义格式:格式:EXITM功能:在宏体或重复定义的语句中,遇到功能:在宏体或重复定义的语句中,遇到EXITM语句语句 时,终止以后的宏展开。时,终止以后的宏展开。一般与条件伪指令一般与条件伪指令一起配合使用一起配合使用格式格式1:REPT ENDM格式格式2:IRP 形式

35、参数,形式参数, ENDM格式格式3:IRPC 形式参数,字符串形式参数,字符串 ENDM指令序列指令序列指令序列指令序列指令序列指令序列功能:重复执行指令序列,重复次数由语句决定功能:重复执行指令序列,重复次数由语句决定表达式是重复次数表达式是重复次数参数个数是重复次数,重复一参数个数是重复次数,重复一次将一个参数代入形式参数中次将一个参数代入形式参数中字符串中字符数是重复次数,重字符串中字符数是重复次数,重复一次代入一个字符到形式参数复一次代入一个字符到形式参数调用方法:调用方法: 准备入口参数准备入口参数 把功能调用号送把功能调用号送AH寄存器寄存器 发软中断指令发软中断指令 INT 2

36、1H 功能:从键盘读一字符,并将该字符回显在显示器上功能:从键盘读一字符,并将该字符回显在显示器上入口参数:无入口参数:无出口参数:出口参数:AL=读到字符的读到字符的ASCII码码说明:如果读到的字符是说明:如果读到的字符是Ctrl+c或或Ctrl+Break则结束程序则结束程序例:例: MOV AH,1 INT 21H 功功 能:从键盘读一字符串。能:从键盘读一字符串。入口参数:入口参数:DS:DX=缓冲区首址缓冲区首址,缓冲区的第,缓冲区的第一个字节放缓冲区最大容量数一个字节放缓冲区最大容量数出口参数:接收到的字符串放在缓冲出口参数:接收到的字符串放在缓冲 区中第三个字节开始区中第三个字

37、节开始说说 明:明: 缓冲区第二个字节存放实际读入缓冲区第二个字节存放实际读入 的字符数。的字符数。 字符串以回车结束字符串以回车结束(0DH) 如果输入字符串超过了缓冲的区容如果输入字符串超过了缓冲的区容 量,量, 超出的部分丢失,同时响铃超出的部分丢失,同时响铃 如果在输入时按如果在输入时按Ctrl+C或或Ctrl+Break,则结束程序,则结束程序 例:例: BUF DB 20 ;缓冲区最大容量数缓冲区最大容量数 DB ? ;存放实际读入的字符存放实际读入的字符数数 DB 20 DUP(?)(?) MOV DX,OFFSET BUF MOV AH,0AH INT 21H ;输入字符串输入

38、字符串 功能:寄存器功能:寄存器DL中的字符从屏幕上显示输出中的字符从屏幕上显示输出入口参数:入口参数:DL=要输出字符的要输出字符的ASCII码码出口参数:无出口参数:无例:例: MOV DL,A MOV AH,2 INT 21H 功功 能:将指定缓冲区中的字符串从屏幕上显示输出能:将指定缓冲区中的字符串从屏幕上显示输出入口参数:入口参数:DS:DX=要输出字符的首址要输出字符的首址,字符串以字符,字符串以字符 为结束标志为结束标志出口参数:无出口参数:无 BUF DB good bye MOV DX,OFFSET BUF MOV AH,09H INT 21H ;字符串从屏幕上显示字符串从屏

39、幕上显示 例:例:功功 能:直接键盘输入屏幕显示输出能:直接键盘输入屏幕显示输出入口参数:入口参数:DL=OFFH,表示输入;否则表示输出,表示输入;否则表示输出, DL=输出字符代码输出字符代码出口参数:输入时,出口参数:输入时,AL=输入字符代码,输出时,无输入字符代码,输出时,无例:例: MOV DL,0FFH MOV AH,6 INT 21H MOV DL,a MOV AH,6 INT 21H 键盘输入单字符送键盘输入单字符送AL将将DL的内容送屏幕显示的内容送屏幕显示说明:说明:1、在输入时,如无字符可读,、在输入时,如无字符可读,不等待不等待 2、不检查、不检查Ctrl+C或或Ct

40、rl+Break键键 3、在读到字符时也不回显、在读到字符时也不回显 功功 能:从键盘上读一个字符到能:从键盘上读一个字符到AL入口参数:无入口参数:无出口参数:出口参数:AL=读到字符的代码读到字符的代码7. 无回显键盘输入单字符无回显键盘输入单字符08H号功能号功能调用调用 功功 能:从键盘上读一个字符到能:从键盘上读一个字符到AL 入口参数:无入口参数:无 出口参数:出口参数:AL=读到字符的代码读到字符的代码功功 能:从异步通信口串行输入的字符到能:从异步通信口串行输入的字符到AL中中入口参数:无入口参数:无出口参数:出口参数:AL=读到字符的代码读到字符的代码9. 向串口输出单字符向

41、串口输出单字符04H号功能调用号功能调用 功功 能:将能:将DL寄存器中的字符通过异步通信口串行输出寄存器中的字符通过异步通信口串行输出 入口参数:入口参数:DL=要输出字符的代码要输出字符的代码 出口参数:无出口参数:无功功 能:设置有效日期能:设置有效日期入口参数:入口参数:CX=年号,年号,DH=月号,月号,DL=日期日期 都是装配型都是装配型BCD码码出口参数:出口参数:AL=0,表示设置成功;否则,表示设置成功;否则AL=0FFH例:例: MOV CX,2008H MOV DH,04H MOV DL,14H MOV AH,2BH INT 21H 功功 能:将当前日期取到能:将当前日期

42、取到CX和和DX寄存器中寄存器中入口参数:无入口参数:无出口参数:出口参数:CX=年号,年号,DH=月号,月号,DL=日期日期 都是装配型都是装配型BCD码码12. 设置时间设置时间2DH号功能调用号功能调用功功 能:设置有效时间能:设置有效时间入口参数:入口参数:CH=时数,时数,CL=分数,分数,DH=秒数,秒数, DL=百分之一秒数,都是装配型百分之一秒数,都是装配型BCD码码出口参数:出口参数:AL=0,表示设置成功;否则,表示设置成功;否则AL=0FFH功功 能:将当前时间取到能:将当前时间取到CX和和DX寄存器中寄存器中入口参数:无入口参数:无出口参数:出口参数:CX=时分,时分,

43、DH=秒,都是装配型秒,都是装配型BCD码码例:例: MOV AH,2CH INT 21H 功功 能:结束当前正在执行的程序,并返回操作系统能:结束当前正在执行的程序,并返回操作系统入口参数:无入口参数:无出口参数:无出口参数:无回到回到DOS提示符下提示符下C:例:例: MOV AH,4CH INT 21H (一一)基本的汇编语言程序框架如下:stack SEGMENT PARA stack DB 100 DUP(stack) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data sta

44、rt: MOV AX, data MOV DS, AX MOV ES, AX MOV AX , stack MOV SS , AX MOV AL, 4CH INT 21H code ENDS END start 堆栈段数据段代码段.EXE文件装入内存时都产生一个文件装入内存时都产生一个PSP程序前缀段,里面是程序运行的程序前缀段,里面是程序运行的一些基本信息,存放在程序的开始位置一些基本信息,存放在程序的开始位置0-0FFH,PSP的长度是的长度是100H。在程序装入存储器后,在程序装入存储器后,CS和和IP、SS和和SP四个寄存器的值会自动分配好,四个寄存器的值会自动分配好,而而DS和和ES

45、指向指向PSP的段基址。的段基址。程序运行结束时,返回到程序运行结束时,返回到PSP的开始位的开始位置执行置执行。start: push ds sub ax,ax push ax ret不可用存储区低端不可用存储区低端程序前缀段程序前缀段程序前缀段程序前缀段PSPPSPINT 20内存大小内存大小程序模块程序模块(可包括多个段可包括多个段)不可用存储区高端不可用存储区高端.EXE.EXE文件装入内存文件装入内存文件装入内存文件装入内存 FARFAR程序前缀段程序前缀段程序前缀段程序前缀段PSPPSP入入入入口地址口地址口地址口地址:DS:0;ES:0:DS:0;ES:0 100H 100H个字

46、节个字节个字节个字节 功能调用功能调用SPSPSPDSLDSH00H00H(二二)基本的汇编语言程序框架如下:基本的汇编语言程序框架如下:stack SEGMENT PARA stack DB 100 DUP(?) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data , SS:stack begin proc far start push ds sub ax,ax push ax MOV AX, data MOV DS , AX MOV ES , AX MOV AX , stack MO

47、V SS , AX ret begin endp code ENDS END start 堆栈段数据段代码段.COM文件装入内存时都产文件装入内存时都产生一个生一个PSP程序前缀段,里面程序前缀段,里面是程序运行的一些基本信息,是程序运行的一些基本信息,存放在程序的开始位置存放在程序的开始位置0-0FFH,PSP的长度是的长度是100H。不可用存储区低端不可用存储区低端程序前缀段程序前缀段程序前缀段程序前缀段PSPPSP程序模块程序模块(只能有一个段只能有一个段) 堆栈堆栈不可用存储区高端不可用存储区高端.COM.COM文件装入内存文件装入内存文件装入内存文件装入内存 NEARNEAR内存大小

48、内存大小程序前缀段程序前缀段程序前缀段程序前缀段PSPPSP入入入入口地址口地址口地址口地址:DS:0;ES:0;:DS:0;ES:0;SS:0 ;CS:0SS:0 ;CS:0 100H 100H个字节个字节个字节个字节 功能调用功能调用属性属性.EXE文件文件.COM文件文件许可的段数许可的段数多个段多个段只能有一个段只能有一个段段引用段引用可以引用可以引用无无无无堆栈段堆栈段必须定义必须定义程序代码起点程序代码起点不要求不要求ORG 100H程序大小程序大小可为任意大小可为任意大小小于小于64KPSP地址地址初始化时赋给初始化时赋给ES和和DS初始化时赋给初始化时赋给ES,DS,SS和和C

49、S重定位信息重定位信息需要需要不需要不需要(三三)基本的汇编语言程序框架如下基本的汇编语言程序框架如下: 例例(P190) 堆栈段数据段代码段 code code SEGMENT SEGMENT ASSUME CS: ASSUME CS:codecode, DS:, DS:codecode, , ES:ES:codecode ORG 100H ORG 100H begin proc near MOV AX, MOV AX, CSCS MOV DS, AX MOV DS, AX MOV ES, AX MOV ES, AX INT 20HINT 20H begin endp code code E

50、NDS ENDS END END begin 从键盘接收并显示一个字符串,回车,换行后再次显示输入的字符从键盘接收并显示一个字符串,回车,换行后再次显示输入的字符Stack segment stack dw 32 dup(?)stack endsdata segment OBUF DB , 0DH, 0AH, $ IBUF DB 0FFH, 0, 255 DUP(?) data ends code segment assume ds:data,cs:code,ss:stackbegin proc farstart: push ds sub ax,ax push ax mov ax,data m

51、ov ds,ax MOV DX, OFFSET OBUF MOV AH,9 INT 21H MOV DX, OFFSET IBUF MOV AH,10 INT 21H MOV BL, IBUF+1 MOV BH, 0 MOV IBUFBX+2, $ MOV DL,0AH MOV AH, 2 INT 21H MOV DX, OFFSET IBUF+2 MOV AH, 9 INT 21H retBegin endpcode ends end start ;堆栈段定义;堆栈段定义;代码段定义;代码段定义;段声明;段声明;过程定义;过程定义;初始化段寄存器;初始化段寄存器;主子程序返回;主子程序返回;

52、源程序结束;源程序结束;数据段定义;数据段定义;程序段前缀入栈;程序段前缀入栈;BX=实际字实际字节串长节串长;显示提示符;显示提示符;键入字符串;键入字符串;换行;换行;再次显示字符串;再次显示字符串任何一个源程序必须至少有一个代码段,其它段视程序要求而定。任何一个源程序必须至少有一个代码段,其它段视程序要求而定。段寄存器的装填(段寄存器的装填(DS、ES、SS由用户自行装填,由用户自行装填,CS不须用户处理)。不须用户处理)。 方法:方法: MOV AX,* MOV DS,AX (或(或ES、SS)DOS下汇编程序的正常结束下汇编程序的正常结束 方法方法1: MOV AH,4CH INT

53、21H 方法方法2: 程序名:程序名: PROC FAR PUSH DS MOV AX,0 PUSH AX . RET 程序名程序名 ENDP例例2 2:在CRT上循环显示0-98之间的十进制数。(实验4B)十进制数ASCII码CRT显示开始置数字初值回车换行产生十进制数数98?从0开始BCD转换ASCII送CRT显示延时NYDATA SEGMENTBUF DB 3 DUP(?)(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATAMAIN PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX , DATA MOV DS ,

54、 AXMOV BL,-1 PUSH BX ;保护;保护BLNEXT: MOV SI,OFFSET BUF MOV DL,0DH;回车符;回车符 MOV AH,2 INT 21H ;送显示;送显示 mov dl,0ah ;输出换行符输出换行符 mov ah,2 int 21h pop bx ;取出取出bl mov al, bl ;产生十进制数;产生十进制数 inc al daa cmp al,99h jc next1 ;al低于低于99H转转Next1 mov al, 0Next1: mov bl,al push bx ;暂存暂存bl(十进制数十进制数) mov dl,al ;十进制数转十进制数

55、转ASCII mov cl,4 ;高高4位转位转ASCII shr al,cl or al,30h mov si,al inc si mov al,dl ;低;低4位转位转ASCII and al,0fh or al,30h mov si,al inc si mov al,$ mov si,al ;字符串结束符;字符串结束符 mov dx,offset buf ;9号调用送显示号调用送显示 mov ah,9 int 21h mov cx,0ffffh ;延时;延时Dy: loop dy jmp next retMain endpcode ends end main(EDIT)汇编语言汇编语言源

56、文件(源文件(.ASM)汇编程序汇编程序(MASM或或ASM)目标代码文件目标代码文件.BOJ列表文件列表文件.LST交叉索引文件交叉索引文件.CRF输入输入翻译翻译输出输出汇编程序的功能就是把用助记符书写的汇编语言源程序,汇编程序的功能就是把用助记符书写的汇编语言源程序,翻译成机器语言目标代码;同时进行语法检查,指出语翻译成机器语言目标代码;同时进行语法检查,指出语法错误所在行的行号。法错误所在行的行号。在计算机上运行汇编语言程序的步骤在计算机上运行汇编语言程序的步骤用编辑程序建立用编辑程序建立XX.ASM程序程序用汇编程序把用汇编程序把XX.ASM程序转换成程序转换成XX.OBJ程序程序用

57、连接程序把用连接程序把XX.OBJ程序转换成程序转换成XX.EXE程序程序用用调试程序调试程序调试程序调试程序 XX.EXE用用DOS命令直接键入程序名执行命令直接键入程序名执行文本编文本编辑辑EIDTEIDT汇编程汇编程序序MASMMASM连接程连接程序序LINKLINKDEBUGDEBUG编辑源文件(用编辑源文件(用EDIT)文件存盘文件存盘用用MASM汇编源文件(汇编源文件(.ASM)生成目标代码文件(生成目标代码文件(.OBJ)开始开始有语法错?有语法错?用用LINK连接目标代码文件连接目标代码文件生成可执行文件(生成可执行文件(.EXE)有语法错?有语法错?在在DOS下执行下执行.E

58、XE文件文件程序运行有错?程序运行有错?调试文件(调试文件(DEBUG)结束结束YYY7.5.2程程序序的的编编辑辑、汇汇编编及及连连接接扩展名为扩展名为.ASM的文件的文件1. 编辑程序编辑程序EDIT 文件名文件名.ASM 回车回车在在DOS方式下方式下输入程序输入程序存盘存盘2. 汇编程序汇编程序MASM 文件名;回车文件名;回车缺省方式,以源文件名缺省方式,以源文件名为目标文件名,无列表为目标文件名,无列表文件;无交叉索引文件文件;无交叉索引文件如果有语法错误,用如果有语法错误,用EDIT修改文件修改文件3. 程序连接程序连接LINK 文件名;回车文件名;回车上机步骤:上机步骤:5.

59、调试程序调试程序DEBUG 文件名文件名. EXE 回车回车进入了进入了DEBUG调试状态调试状态4. 执行程序执行程序文件名文件名 回车回车如果执行程序有错,进入第如果执行程序有错,进入第5步步DATA SEGMENT ;存放数据项的数据段;存放数据项的数据段DATA ENDSEXTRA SEGMENT ;存放数据项的附加段;存放数据项的附加段EXTRA ENDSSTAC SEGMENT PARA STACK ;作堆栈用的堆栈段;作堆栈用的堆栈段STAC ENDSCOSEG SEGMENT ASSUME CS:COSEG,DS:DATA ASSUME SS:STAC,ES:EXTRABEIN

60、G:MOV AX,DATA MOV DS,AX ;存放指令序列;存放指令序列COSEG ENDS END BEING7. 6汇汇编编语语言言程程序序设设计计构造一个源程序的基本格式:构造一个源程序的基本格式:1.A命令(汇编命令)命令(汇编命令) 格式:格式:A 地址地址 功能:从指定地址把宏汇编语言语句直接汇编入内存功能:从指定地址把宏汇编语言语句直接汇编入内存2. D命令(显示命令)命令(显示命令) 格式:格式:D 地址地址 或或 D 范围范围 功能:从指定地址开始显示功能:从指定地址开始显示内存内存中中80H字节的内容,字节的内容, 或显示指定范围的内容或显示指定范围的内容地址:由段值和

61、偏移两部分组成。如地址:由段值和偏移两部分组成。如DS:100,段值段值可以可以省略省略 范围:有两种表示方法,一种是用起始地址和结束地址如范围:有两种表示方法,一种是用起始地址和结束地址如DS:100 110, 另一种用起始地址和长度表示。如另一种用起始地址和长度表示。如DS:100 L10 说明:说明:3.G命令(执行命令)命令(执行命令) 格式:格式:G =起始地址起始地址断点地址表断点地址表 功能:从当前地址或指定地址执行遇到断点停止执行功能:从当前地址或指定地址执行遇到断点停止执行4.R命令(寄存器命令)命令(寄存器命令) 格式:格式:R ;显示所有寄存器的内容;显示所有寄存器的内容

62、 R 寄存器名寄存器名 ;显示并可修改寄存器的内容;显示并可修改寄存器的内容 RF ;显示并可修改标志寄存器的内容;显示并可修改标志寄存器的内容5.Q命令(停止命令)命令(停止命令) 格式:格式:Q 功能:退出功能:退出DEBUG程序,不保存内存中调试的文件程序,不保存内存中调试的文件6.T命令(跟踪命令)命令(跟踪命令) 格式:格式:T =地址地址数值数值 功能:从当前地址或指定地址执行一条或指定的条数指令功能:从当前地址或指定地址执行一条或指定的条数指令 并显示各寄存器的内容及下一条要执行的指令并显示各寄存器的内容及下一条要执行的指令7.U命令(反汇编命令)命令(反汇编命令) 格式:格式:

63、U 范围范围 或或 U 地址地址 功能:把指定范围的内容反汇编或从指定地址开始反汇功能:把指定范围的内容反汇编或从指定地址开始反汇 编编16条条 格式:格式:E 地址地址 表表 功能:用表中的内容替换内存中一个或多个字节里的内容功能:用表中的内容替换内存中一个或多个字节里的内容 (表中的数据以空格分隔,一个数据代表一个单元(表中的数据以空格分隔,一个数据代表一个单元 的内容)的内容)8. E命令(修改内存单元命令)命令(修改内存单元命令)例:把当前数据段,例:把当前数据段,100H开始的连续单元分别修改为开始的连续单元分别修改为 11H,22H,33H,44H,55HE 100 11 22 33 44 55DEBUG中标志位的符号表示中标志位的符号表示

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号