第4章汇编语言程序设计课件.ppt

上传人:牧羊曲112 文档编号:2109189 上传时间:2023-01-11 格式:PPT 页数:88 大小:390.07KB
返回 下载 相关 举报
第4章汇编语言程序设计课件.ppt_第1页
第1页 / 共88页
第4章汇编语言程序设计课件.ppt_第2页
第2页 / 共88页
第4章汇编语言程序设计课件.ppt_第3页
第3页 / 共88页
第4章汇编语言程序设计课件.ppt_第4页
第4页 / 共88页
第4章汇编语言程序设计课件.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《第4章汇编语言程序设计课件.ppt》由会员分享,可在线阅读,更多相关《第4章汇编语言程序设计课件.ppt(88页珍藏版)》请在三一办公上搜索。

1、4.1汇编语言源程序 机器语言用二进制来表示指令和数据。B0 64 什么意思?这就是机器语言。既不直观,又不易理解和记忆。MOV AL,64H;大家很清楚,这就是助记符。助记符反映指令的功能和主要特征,便于人们理解和记忆。,第4章汇编语言程序设计,1,4.1汇编语言源程序第4章汇编语言程序设计1,操作数可能放在存储器中,这就涉及一个地址问题。程序中遇到转移指令或调用指令,涉及地址转移,若采用具体地址就不很方便,一旦有错,改动就很麻烦。于是人们采用标号或符号来代替地址,例:LP1:LOOPLP1 汇编语言是用助记符、符号地址以及标号等符号书写的程序。用汇编语言编写的程序叫源程序。,指令除了操作码

2、以外,还有一个操作数问题。,2,操作数可能放在存储器中,这就涉及一个地址问题。程序中遇,主要的汇编程序:MASM、TASM,汇编语言源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫汇编。,3,汇编语言汇编目的程序 汇编程序主要的汇编程序:MASM、TA,汇编语言是面向具体计算机硬件的语言,和机器密切相关。它最大缺点是可读性差,编程效率低。,高级语言编程时不需要对机器指令系统有深入了解。可读性强,功能强。为什么要用汇编语言?汇编语言编写的程序节省内存,执行速度快,并为用户直接控制对象提供了手段。故实时性要求很高的程序多采用汇编语言程序。,4,汇编语言是面向具体计算机硬件的语言

3、,和机器密切相关。,4.1.1 汇编语言源程序的结构,源程序通常由一个或几个程序模块组成,每个模块包括数据段、堆栈段和若干代码段。代码段可有若干个过程,过程中的语句分为两类:,指令性语句,其格式为:标号:(前缀)指令助记符 操作数;注释 指示性语句,又叫伪指令,其格式为:名字 伪指令操作数;注释,5,4.1.1 汇编语言源程序的结构 源程序通常由一个,这两种语句的差别:在形式上:带不带冒号,是否可转向它.在本质上:汇编时能否形成对应的机器码.,指令性语句是计算机可执行的,而指示性语句不能执行,用来定义变量,分配存储单元,指示程序开始和结束等。,6,这两种语句的差别:指令性语句是计算机可执行的,

4、而指,汇编语言的一个实例 DATASEGMENTBLOCKDB43H,0ABH,PDATADB20DUP(?)NDATADB20DUP(?)DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATAEXP1PROCFARSTART:PUSHDSMOV AX,0PUSHAX,4.1.2 汇编语言语句类型及格式,7,汇编语言的一个实例4.1.2 汇编语言语句类型及格,MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK LEA DI,PDATA LEA BX,NDATA CLD MOV CX,PDATA-BLOCK GOON:LODSB

5、TEST AL,80H JNZ MINUS STOSB(下接右边),JMP AGAINMINUS:XCHGBX,DI STOSB XCHGBX,DIAGAIN:LOOPGOON RETEXP1 ENDPCODE ENDS END START,8,MOV AX,DATA JMP,例如:MINUS:XCHG BX,DI;交换数据 BLOCKDB43H,0ABH;定义数据 各部分之间至少要用一个空格作为间隔。1)名字是一个符号,它可以是标号或变量,由英文字母、数字及专用字符组成,最大长度不能超过31个,且不能由数字打头,不能用保留字(如寄存器名,指令助记符,伪指令)。,由以上实例可知,每一语句行由4

6、部分组成:名字 操作码操作数;注释,9,例如:MINUS:XCHG BX,DI;交换数据由以,3)操作数由寄存器、存储单元、数据项或其表达式构成。汇编时一个表达式得到一个值。4)注释用来说明程序或语句的功能,用分号“;”作为注释开始。其中名字和注释视情况而定,可有可无.,2)操作码是一个助记符,它可以是指令、伪指令(又叫伪操作)或宏指令。,10,3)操作数由寄存器、存储单元、数据项或其表达式构成。汇编,4.1.3 数据项及表达式,数据项包括常量、变量、标号及表达式,下面分别加以介绍。1、常量(1)数字常量 二进制常量,以B结尾 十进制常量,以D结尾或省略(汇编语言中默认无标记数为十进制数)十六

7、进制常量,以H结尾,如0A8C6H。,11,4.1.3 数据项及表达式 数据项包括常量、变量、标号及表,(2)字符串常量 用单引号引起来的字符或字符串也代表常数。例:A,BCDE,汇编时被翻译成对应的ASCII码41H和42H,43H,44H,45H。,12,(2)字符串常量12,变量是内存中的数据区,在程序中作为存储器操作数来使用(符号地址)。如例子中BLOCK(在数据段中定义)变量有三种属性:段 值变量定义所在段的段地址偏移量变量单元地址与段起始地址之间的位移量。类 型字节、字和双字。,2.变量,13,变量是内存中的数据区,在程序中作为存储器操作,3.标号:指令语句的符号地址。,标号有三种

8、属性:段 值这条指令代码所在段的段地址。偏移量这条指令代码地址与段起始地址之间的位移量。距 离本标号可作为段内或段间的转移特性。有两种情况:NEAR:段内转移,默认类型FAR:段间转移,LOP1:LOOP LOP1,LOP2:JMP LOP2,14,3.标号:指令语句的符号地址。标号有三种属性:LOP1:,DATA SEGMENTBLOCKDB43H,0ABH,PDATADB20DUP(?)NDATADB20DUP(?)DATA ENDS,GOON:MINUS:XCHGBX,DI STOSB JMP MINUSAGAIN:LOOPGOON,变量,标号,15,DATA SEGMENTGOON:变

9、量标号15,表达式是常数、寄存器、标号、变量与一些运算符组合的序列,分为数字表达式和地址表达式两种。汇编时按一定的优先规则对表达式进行计算后可得到一个数值或一个地址。下面介绍五种运算符。,4、表达式和运算符,16,表达式是常数、寄存器、标号、变量与一些运算符组合的序列,分为,(1)算术运算符+、-、*、/、MOD,MOD为求余运算符。SHR、SHL为右移、左移运算符,算术运算符可以用于数字表达式。例:19/7=2,19 MOD 7=5MOV AL,2*7汇编后为B00E 算术运算符也可以用于地址表达式,对地址运算的结果应有明确的物理意义,例两个地址的乘或除无意义,而加或减则可以。例:LEA S

10、I,SUM+3,17,(1)算术运算符+、-、*、/、MOD,MOD为,(2)逻辑运算符:AND、OR、XOR和NOT。,只能用于数字表达式中:例:MOVCL,36H AND 0FH 经汇编后:MOV CL,06H,这些逻辑运算符也是8086/8088的指令助记符,会不会造成混乱呢?例:AND DX,PORT_VAR AND 0FEH 不会的,前者在指令执行时进行,而后者在汇编时进行的。,18,(2)逻辑运算符:AND、OR、XOR和NOT。只能用于数字,EQ(相等),NE(不等),LT(小于),GT(大于),LE(小于或等于),GE(大于或等于)。,(3)关系运算符,关系运算符的两个操作数必

11、须都是数字或者是同一段内的两个存储器地址。关系为真,结果为0FFFFH;关系为假,结果为0。,例:MOV BX,PORT_VAL GE 5 若PORT_VAL的值大于等于5,则汇编后为:MOV BX,0FFFFH 若PORT_VAL的值小于5,则汇编后为:MOV BX,0,19,EQ(相等),NE(不等),LT(小于),GT(大于),,分析和规定存储器的属性。,(4)取值运算符和属性运算符:,1)例:MOV SI,OFFSET STRI;将变量STRI1处的地址偏移量取到SI中.注意与 MOV SI,STRI1的差别。但它与 LEA SI,STRI1类似。,2)SEG运算符用来取存储单元的段值

12、,例:MOVAX,SEG STRI1;将变量STRI1所MOVDS,AX;在段值取到DS中,20,分析和规定存储器的属性。(4)取值运算符和属性运算符:1)例,若BUFFER1存储区是用如下伪指令定义的:BUFFER1 DB 100 DUP(?)则 TYPEBUFFER1等于1。,3)TYPE运算符用来取存储器单元类型,各单元类型对应值如下:,DB(字节)1DW(字)2 DD(双字)4,21,若BUFFER1存储区是用如下伪指令定义的:3)TYPE运算,注意LENGTH返回的存储区必须是用复制操作符DUP()定义的,否则返回值为1。例:FEES DW 4,5,6 则 MOV CX,LENGTH

13、 FEES 汇编后,MOV CX,1,4)LENGTH运算符用来计算一个存储区的单元数目(单元可以是字节,字或双字)的。,22,注意LENGTH返回的存储区必须是用复制操作,例:若BUFFER2存储区是用如下伪指令定义的:BUFFER2 DW 200 DUP(0)则:TYPEBUFFER2等于2LENGTHBUFFER2等于200SIZEBUFFER2等于400,5)SIZE运算符用来计算一个存储区的字节总数。SIZE(符号名)=LENGTH(符号名)*TYPE(符号名),23,例:若BUFFER2存储区是用如下伪指令定义的:BUF,6)属性运算符PTR:用来对存储单元规定类型,通常和伪指令B

14、YTE,WORD等连起来使用。,例:MOVBYTE PTRDI,0 MOVWORD PTRDI,0 而 MOVDI,0;类型不定PTR也可用来对已经规定了类型进行更改。,24,6)属性运算符PTR:用来对存储单元规定类型,通常和伪指,(5)其它运算符,1)方括号 指令中用方括号表示存储器操作数,方括号里的内容表示操作数的偏移地址。例如:MOV AX,BX;将(BX)和(BX+1)指向的存储器两个单元的内容送AX,2)段超越运算符“:”运算符“:”(冒号)跟在某个段寄存器名(DS、ES、SS或CS)之后表示段超越,用来指定一个存储器操作数的段属性,而不管其原来隐含的段是什么。例如:MOV AX,

15、ES:DI;把ES段中由DI指向的字操作数送(AX),25,(5)其它运算符1)方括号 2)段超越运算符“:”25,4.2 伪指令,常用的伪指令有:数据定义伪指令 符号定义伪指令 段定义伪指令 过程定义伪指令 结束伪指令,26,4.2 伪指令常用的伪指令有:26,4.2.1 数据定义伪指令,变量是内存中数据区的名字,故这类伪指令又可叫数据定义伪指令。这类伪指令格式为:变量名 伪指令助记符 操作数;注释其中变量名用符号地址表示,后面不能跟冒号,它可有可无。,27,4.2.1 数据定义伪指令变量是内存中数据区的名字,故这类伪,操作数可以是常数或表达式,数据项之间用“,”隔开,每个数据项占用伪指令规

16、定的字节数。注释用来说明伪指令的功能,它亦可有可无。,例1:DATA_BYTE DB 10,5,10H DATA_WORD DW 100H,100,-4 DATA_DW DD 2*30,0FFFBH,伪指令助记符有如下几种:,DB用来定义字节DW用来定义字DD用来定义双字,28,操作数可以是常数或表达式,数据项之间用“,”隔开,每个,汇编后如下图所示:,DATA_BYTE DB 10,5,10H DATA_WORD DW 100H,100,-4 DATA_DW DD 2*30,0FFFBH,29,汇编后如下图所示:DATA_BYTEDATA_DWDATA_,例2:操作数可以是字符串MASTER

17、LIDBHELLO汇编后如下:,MASTERLI,H,E,L,L,O,30,例2:操作数可以是字符串MASTERLIHEL,操作数?用来保留存储空间,但不存入数据.例3:ABCDB0,1,?,?,?LPIDW?,54,?汇编后如下图示:,31,操作数?用来保留存储空间,但不存入数据.ABCLPI01?,操作数字段还可以用复制操作符DUP来缩写,如:ABCDB0,1,?,?,?ABC DB0,1,3 DUP(?)又如:DO-2 DB2 DUP(0,1,2,?)与 DO-2 DB0,1,2,?,0,1,2,?等价,32,操作数字段还可以用复制操作符DUP来缩写,如:32,例:BUFFER DW 3

18、,4,$+3设BUFFER的偏移地址为0088H,则汇编后如下图所示:,在伪操作的操作数字段中若使用$,表示的是地址计数器的当前值。,33,例:BUFFER DW 3,4,$+3030004008F,4.2.2 符号定义伪指令,1.等值伪指令EQU格式为:符号名EQU表达式 或:新符号名 EQU 老符号名例:CONSTANT EQU 100NEW_PORT EQU PORT_VAL+1EQU伪指令在未解除前,不能重新定义。,34,4.2.2 符号定义伪指令1.等值伪指令EQU34,2.等号(=)伪指令与EQU类似,但允许重新定义例:EMP=7;值为7EMP=EMP+1;值为8,35,2.等号(

19、=)伪指令35,已用EQU定义的符号,可用PURGE解除,再重新定义。例:PURGENEW_PORT NEW_PORT EQU POTR_VAL+8,3.解除伪指令PURGE,36,已用EQU定义的符号,可用PURGE解除,再重新定义。,4.2.3 段定义伪指令,因8086/8088 CPU的存储器是分段的,这就需要有段定义语句。与段有关的伪指令有:SEGMENT、ENDS、ASSUME、ORG 段定义伪指令的格式如下:段名 SEGMENT 定位类型 组合类型 类别段名 ENDS,方括号中为可选项,规定了逻辑段的一些其他特性;,37,4.2.3 段定义伪指令 因8086/8088 CPU的存,

20、1定位类型(Align),说明如何确定逻辑段的边界。定位类型有四种:,1)PARA(Paragraph)(默认),从一个节的边界开始。16个字节称为一个节,即段的起始地址应能被16整除,2)BYTE,从字节边界开始,即可以从任何地址开始。,3)WORD,从字边界开始。即本段的起始地址必须是偶数。,4)PAGE,从页边界开始。256字节称为一页,故本段的起始物理地址应为00H。,38,1定位类型(Align)说明如何确定逻辑段的边界。定位类型,这两个伪指令总是成对出现,二者前面的段名一致。二者之间的部分,对数据段、附加段及堆栈段,一般是符号、变量定义等伪指令。对于代码段则是指令及伪指令。此外,还

21、必须明确段和段寄存器的关系,这可由ASSUME语句来实现。,SEGMENT 和 ENDS,39,这两个伪指令总是成对出现,二者前面的段名一致。二者之间的,2、连接方式(组合类型),在多模块程序中,告诉汇编程序本段与其它段之间如何连接。有六种:,PUBLIC,本段与其它同名同类的段连接起来,公用一个段的起点地址,形成一个物理段。,STACK,表示本段为堆栈段,连接方式为PUBLIC,连接后的起始地址在SS中。,NONE,表示本段不与任何段连接,为系统默认方式。,40,2、连接方式(组合类型)在多模块程序中,,COMMON,表示本段与同名同类的段共用同一段起始地址,即相重叠,段的长度为最长段的长度

22、。,MEMORY,表示本段在连接时定位在所有段之上,即高地址处。,AT,表示本段定位在表达式指定的段地址处。,3、类别名,为自定义名,必须用单引号括起来。凡是类别名相同的段在连接时按先后顺序连接起来。,41,COMMON表示本段与同名同类的段共用同一段起始地址,即,4.2.4 设定段寄存器伪指令ASSUME,ASSUME 段寄存器名:段名,段寄存器名:段名,.,告诉汇编程序用SEGMENT伪操作定义过的段的段地址将要存放在哪个段寄存器中。,把段地址装入段寄存器(称为段初始化)的操作需要由程序自己完成,42,4.2.4 设定段寄存器伪指令ASSUME ASSUME,ASSUME伪指令告知汇编程序

23、有关段寄存器与段的关系,但并没有给段寄存器赋予实际的初值。故在下例中 MOVAX,DATA;DATA为数据段名称 MOVDS,AX MOVES,AX这些语句实现了将段基址装入段寄存器。如程序中用到堆栈段,也需装入实际的初值。而代码段不需要用户装入,由初始化程序自动装入。,43,ASSUME伪指令告知汇编程序有关段寄存器与段的关系,,汇编语言的一个实例 DATASEGMENT BLOCK DB43H,0ABH,PDATA DB20DUP(?)NDATA DB20DUP(?)DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATAEXP1PROCFARSTART:PUSH

24、DSMOVAX,0PUSHAX MOV AX,DATAMOV DS,AXMOV ES,AX;装入段值LEA SI,BLOCK。,44,汇编语言的一个实例44,4.2.5 过程定义伪指令,过程的含义和子程序是一样的,一个过程可以被其它程序所调用,过程的最后一条指令是返回指令RET。,过程定义伪指令的格式为:过程名 PROC NEAR(或:过程名PROCFAR)RET 过程名 ENDP,45,4.2.5 过程定义伪指令 过程的含义和子程序是一样的,过程属性NEAR(若不指明,则默认为NEAR)表示在段内被调用。FAR属性表示可以被其它段调用。返回指令都是RET,但两种情况下汇编时产生的代码不同,前

25、者代码为C3H,后者代码为CBH。调用过程的格式为:CALL 过程名,46,过程属性NEAR(若不指明,则默认为NEAR)表示在,DELAY PROCPUSH BXPUSH CXMOV BL,2NEXT:MOV CX,2801W10MS:LOOP W10MSDEC BLJNZ NEXTPOP CXPOP BXRETDELAY ENDP,MAIN PROCMOV BX,11HMOV CX,33HCALL DELAY NOP RETMAIN ENDP,CALL DELAY执行后,BX,CX的值是多少?,47,DELAY PROCMAIN PROCCALL DE,NAME1 PROC FAR。CAL

26、L NAME2。RETNAME2 PROC。RETNAME2 ENDPNAME1 ENDP,过程可以嵌套定义,48,NAME1 PROC FAR过程可以嵌套定义48,4.2.6 宏命令伪指令,如果需要多次使用同一个程序段,可以将这个程序段定义为一个宏指令,然后在需要时,简单地用宏指令名来代替。,指令的格式为:宏命令名 MACRO 形式参数,.(宏定义体)ENDM,与C语言中的宏定义类似,49,4.2.6 宏命令伪指令 如果需要多次使用同一,例两个数之和的宏定义和宏调用。宏定义为:DADD MACRO X,Y,Z MOV AX,X ADD AX,Y MOV Z,AXENDM,X、Y、Z是形式参数

27、。调用宏DADD时可写为:,DADD DATA1,DATA2,SUM,DATA1,DATA2,SUM是实际参数,由它们替换定义中的X、Y、Z。,50,例两个数之和的宏定义和宏调用。X、Y、Z是形式参数。调用宏,此宏命令经汇编后展开的指令相当于源程序:MOV AX,DATA1 ADD AX,DATA2 MOV SUM,AX,宏调用与过程(子程序)调用有类似的地方。其差别是:,宏命令伪指令由宏汇编程序MASM在汇编过程中进行处理,而调用指令CALL和返回指令RET则是运行时执行。,宏指令简化了源程序,但不能简化目标程序,并不节省内存单元。,51,此宏命令经汇编后展开的指令相当于源程序:宏调用与过程

28、(子程序,4.2.7 模块定义伪指令,模块:独立的源程序单位,在编制较大的汇编程序时,一般分成几个模块生成各自的目标程序,最后链接在一起。,模块的开始,常用伪指令NAME或TITLE为该模块定义一个名字。,模块的结尾,要加结束伪指令END,以使汇编程序结束汇编。,52,4.2.7 模块定义伪指令模块:独立的源程序单位,在编制较大,1NAME 伪指令(汇编后目标程序的名称)指令格式:NAME 模块名NAME伪指令的前面不允许再加标号,2TITLE伪指令(为程序清单指定的页标题)其格式为:TITLE 标题名,标题名最多允许60个字符。,53,1NAME 伪指令(汇编后目标程序的名称)2TITLE伪

29、,3.结束伪指令END,当汇编程序对源程序进行汇编过程中,如遇到END,得知源程序到此结束。格式为:END 标号 标号表示程序的起始地址,通常就是程序第一条指令的标号。如果有多个模块连接在一起,则只有主模块的END语句允许使用标号。,54,3.结束伪指令END 当汇编程序对源程序进行汇编过程中,,汇编语言的一个实例 DATASEGMENT BLOCK DB43H,0ABH,PDATA DB20DUP(?)NDATA DB20DUP(?)DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATAEXP1PROC FARSTART:PUSH DSMOV AX,0PUSH A

30、X,55,汇编语言的一个实例55,MOV AX,DATA MOV DS,AX MOV ES,AX;装入段值 LEA SI,BLOCK LEA DI,PDATA LEA BX,NDATA CLD MOV CX,PDATA-BLOCKGOON:LODSB;(AL)SI TEST AL,80H JNZ MINUS STOSB;DI(AL);DI(DI)+1,JMP AGAINMINUS:XCHG BX,DI STOSB XCHG BX,DIAGAIN:LOOP GOON RETEXP1 ENDPCODE ENDS END START,56,MOV AX,DATA JMP,汇编语言程序设计,1、分析问

31、题、建立数学模型 2、确定数据结构及算法3、绘制程序流程图4、内存空间、寄存器分配5、编写源程序,扩展名为ASM6、用汇编程序编译,形成目标文件,扩展名为OBJ。7、进行连接,形成EXE可执行文件。8、对程序进行调试。,程序设计步骤,57,汇编语言程序设计1、分析问题、建立数学模型 程序设计步骤57,58,汇编语言源程序目标程序(二进制)可执行程序编连 连接程序,第一步:编写和输入程序 将程序输入到计算机,此程序称为源文件,为文本文件,扩展名为.ASM。因此可以用任何编辑软件输入和修改源程序。,可以使用EDIT、PE、SK等任何编辑软件将程序输入到计算机。,59,第一步:编写和输入程序 可以使

32、用EDI,第二步:编译源程序 将源程序编译生成目标文件,扩展名为.OBJ。如源程序有错,则不能生成目标程序,根据错误提示,用编辑软件修改源程序。然后再次编译,直至生成目标文件。可根据需要,同时产生列表文件.LST和交叉索引文件.CRF。,汇编软件有MASM、TASM、ASM等。,60,第二步:编译源程序 汇编软件有MASM,第三步:连接 将目标文件进行连接,生成可执行文件,扩展名为.EXE。,连接软件为LINK。,61,第三步:连接 连接软件为LINK。61,第四步:运行 运行可执行文件,查看结果是否正确,如结果不对,则需修改源程序,然后再编译、连接、运行,重复以上步骤,直到得出正确结果。可在

33、命令行下执行,也可在调试软件环境下执行。可以进行调试,如单步运行、设置断点、监视表达式等。,调试软件有DEBUG、TURBO DEBUGGER、CODEVIEW等。,62,第四步:运行调试软件有DEBUG、TURBO DEB,一、MASM的使用(ex:tt1.asm)1、提问方式 2、命令方式,二、LINK的使用 1、提问方式 2、命令方式,三、程序的执行 在提示符下输入可执行文件名,然后回车。,四、程序的调试 DEBUG软件的使用。,63,一、MASM的使用(ex:tt1.asm)二、LINK的使用,IDE86集成环境的使用 1、EDIT编辑软件的使用 2、COMPILE的使用 为TASM3

34、.1汇编软件 3、LINK的使用 为Turbo Link2.0连接软件 4、DEBUG的使用,64,IDE86集成环境的使用64,65,65,编辑软件不能改变,输入用户源文件名,扩展名ASM,66,编辑软件输入用户源文件名,66,控制参数:/zi不能改变!,输入用户源文件名,扩展名ASM,如编译产生错误,会在“error messages”显示错误指令的行号及错误类型,只有没有错误后才能产生OBJ文件,才能进行下一步“Link”的操作。,67,控制参数:/zi不能改变!输入用户源文件名,,控制参数:/v不能改变!,输入用户文件名,扩展名OBJ,只有连接没有错误后才能产生EXE文件,才能进行下一

35、步“Debug”的操作。,68,控制参数:/v输入用户文件名,只有连接,控制参数:/v不能改变!,输入用户文件名,扩展名EXE,69,控制参数:/v输入用户文件名,69,选择“View”“CPU”,可观察寄存器和标志位。,70,选择“View”“CPU”,可观察寄存器和标志位。70,寄存器,标志寄存器,存储器内容,程序及代码,71,寄存器标志寄存器存储器内容程序及代码71,观看存储区内容方法:1、在“View”菜单中选“Dump”2、右键单击存储区,在弹出菜单中,点击“Goto”。,72,观看存储区内容方法:72,在对话框中输入要查看的存储区的段寄存器及偏移地址。如es:0,见下图所示。,73

36、,在对话框中输入要查看的存储区的段寄存器73,74,74,程序的调试方法,1、全速执行(F9,“RUN”菜单中)2、单步执行(F7、F8,“RUN”菜单中)3、设置断点(F2,“Breakpoints”菜单中)4、观察寄存器、标志位的内容(“View”菜单中)5、查看存储器的内容(DUMP,“View”菜单中)6、查看运行结果(Alt+F5,“Window”菜单中),75,程序的调试方法 1、全速执行(F9,“RUN”菜单中)75,汇编程序开发集成环境与汇编语言程序设计 实验一上机内容与要求一、学习并掌握IDE86集成开发环境的使用。各种功能下主菜单下的主要功能的使用。编辑、编译、连接、运行各

37、步骤的使用。编辑:源程序的输入、修改。编译:常见编译出现的语法错误的修改。连接:形成可执行文件 运行:全速运行、断点设置、单步运行、单步跟踪;观察寄存器、标志寄存器的值;观察数据存储器中的数据;,76,汇编程序开发集成环境与汇编语言程序设计76,二、P165 例4-8 输入该程序,编译、连接、运行以单步形式观察程序的执行过程(1)执行每条指令后,寄存器AX、CX、SI及标志位CF的值。(2)查看以TABLE开始的存储器单元中的内容。,三、时间安排(地点:7号楼218)(软件实验共3次:第10、11、13周)01210605班 周二 第1大节01210606班 周三 第1大节01220601班

38、周一 第4大节01220602班 周一 第3大节,77,三、时间安排(地点:7号楼218)77,主要内容回顾:,伪指令:数据定义伪指令:DB/DW/DD符号定义伪指令:EQU,=段定义伪指令:SEGMENTENDS,ASSUME过程定义伪指令:PROCENDP宏命令伪指令:MACROENDM模块定义伪指令:NAME,END,78,主要内容回顾:78,4.3 DOS系统功能调用介绍,系统软件中提供的功能调用有两种:DOS(Disk Opration System)功能调用(也称高级调用),与操作系统有关。BIOS(Basic Input and Output System)功能调用(也叫低级调用

39、),与ROM-BIOS有关。见附录D、E用户程序在调用这些系统服务程序时,不是用CALL 命令,而是采用软中断指令INT n来实现。,DOS系统功能调用都是用软中断指令INT 21H来实现的。,79,4.3 DOS系统功能调用介绍系统软件中提供的功能调用有两种,INT 2lH功能大致可以分为四个方面:设备管理、目录管理、文件管理和其它。,D0S系统功能调用的使用方法如下:AH功能号;在其它寄存器中放入该功能所要求的入口参数;执行INT 21H指令;分析出口参数(取结果)。,以下介绍INT 21H的几个最常用的功能。,80,INT 2lH功能大致可以分为四个方面:设备管理、目录管理、,数据输入和

40、输出只介绍键盘输入和显示输出,调用系统功能需要提供入口参数及所调用的功能号,调用结束返回结果。,1.DOS键盘输入功能调用,(1)单字符输入并回显在屏幕上入口参数:AH=01;功能调用号返回参数:AL=输入字符的ASCII码中断:INT 21H,81,数据输入和输出只介绍键盘输入和显示输出,调用系统功能需要提供,例:在交互式程序中需用户对一个提示做出应答。GET_KEY:MOVAH,1;等待键入字符 INT21H;结果在AL中CMPAL,Y;是Y?JZ YES;是,转YES CMPAL,N;是N?JZ NO;是,转NO JNZGET_KEY;其它键返回,继续;等待输入 YES:NO:,82,例

41、:在交互式程序中需用户对一个提示做出应答。82,(2)输入字符串 此功能调用能从键盘输入一串字符并把它 存入用户定义的缓冲区。入口参数:AH=0AH DS:DX=输入字符串在内存中的首地址 中断号:21H,83,(2)输入字符串83,若用户键入的字符数(包括回车符)大于定义的N1,机器铃响,且光标不再向右移动,N2由中断调用程序自动填入。例:设在数据段定义:STR1 DB 10,?,10 DUP(?)调用DOS功能的0AH号功能的程序段:LEA DX,STR1 MOV AH,0AH INT 21H,84,若用户键入的字符数(包括回车符)大于定义的N1,机器铃响,2.DOS显示功能调用,(1)显

42、示一个字符入口参数:AH=02(或06)DL=字符(用ASCII码表示)中断号:21H例:有如下程序段MOV AH,02MOV DL,41H;代表显示字母AINT21H,85,2.DOS显示功能调用(1)显示一个字符85,入口参数:AH=09 DS:DX=字符串地址 中断号:21H 被显示的字符串必须以$结束,且所显示的内容不应出现非可见的ASCII码,否则产生不可预料的结果。,(2)显示字符串,86,入口参数:AH=09(2)显示字符串86,例:显示字符串。DATA SEGMENTMESS1 DB Input String:,0DH,0AH,$DATA ENDS MOVAH,09 MOVDX,OFFSET MESS1 INT21H,87,例:显示字符串。87,入口参数:AH=4CH 中断号:21H MOV AH,4CH;或 MOV AX,4C00H INT 21H,(3)返回DOS,88,入口参数:AH=4CH(3)返回DOS88,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号