42 程序设计(1)-精品文档资料系列.ppt





《42 程序设计(1)-精品文档资料系列.ppt》由会员分享,可在线阅读,更多相关《42 程序设计(1)-精品文档资料系列.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、复习复习符号定义伪指令:符号定义伪指令:EQUEQU、数据定义伪指令:数据定义伪指令:DBDB、DWDW、DDDD段定义伪指令:段定义伪指令:SEGMENTSEGMENT、ENDSENDS、ASSUMEASSUME 汇编结束伪指令:汇编结束伪指令:END1练习:数据定义伪指令练习:数据定义伪指令例:例:DATA SEGMENTDATA SEGMENTADB 1020STR1DB HI OK!,0DH,0AH,$DATA1DW 2 DUP(0)SUMDW?TABLEDB 2 DUP(3 DUP (3),7)DATA ENDSDATA ENDS问:(1)若执行下列指令后,(AX)=?(AX)=?L
2、EA BX,TABLE LEA BX,TABLE MOV AX,BX+3 MOV AX,BX+3 (2)变量 A,STR1,DATA1,SUM,TABLE A,STR1,DATA1,SUM,TABLE 的 EAEA?20000DATA1$0AH0DH!KO20HIHSTR1C8HATABLESUM37333733DATA SEGMENTADB 1020STR1 DB HI OK!,0DH,0AH,$DATA1DW 2 DUP(0)SUM DW?TABLE DB 2 DUP(3 DUP (3),7)DATA ENDSLEA BX,TABLELEA BX,TABLEMOV AX,BX+3MOV A
3、X,BX+3变量 A,STR1,DATA1,SUM A,STR1,DATA1,SUM 的 EAEA?;(AX)=0307H;(AX)=0307H为 0 0,1 1,1010,14 14 36.运算符(常用)运算符(常用)地址操作符地址操作符SEG ;取段址取段址OFFSET ;取偏址取偏址类型操作符类型操作符PTR;定类型定类型4地址操作符地址操作符l取得名字或标号的段地址和偏移地址两个属性取得名字或标号的段地址和偏移地址两个属性 将括起的表达式作为存储器地址将括起的表达式作为存储器地址:采用指定的段地址寄存器采用指定的段地址寄存器OFFSET OFFSET 名字名字/标号标号返回名字或标号的
4、偏移地址返回名字或标号的偏移地址SEG SEG 名字名字/标号标号返回名字或标号的段地址返回名字或标号的段地址例:例:FIVE EQU 5MOV AX,FIVE;AX=5MOV AX,SEG FIVE;AX=5 所在地址的所在地址的段地址段地址MOV AX,OFFSET FIVE;AX=5 所在地址的所在地址的偏移量地址偏移量地址 5datasegmentarraydb 45,45H,36,9dataends mov ax,seg array mov ds,ax mov bx,offset array mov cl,array+2地址操作符实例地址操作符实例;等价于等价于 mov ax,dat
5、a;等价于等价于 lea bx,array bx=0;等效于等效于 mov cl,array2 cl=36;等效于等效于 mov cl,bx+2 63.3.段定义伪指令段定义伪指令 因因8086/8088 CPU8086/8088 CPU的存储器是分段的的存储器是分段的,这就需要有段这就需要有段定义语句。定义语句。与段有关的伪指令主要有:与段有关的伪指令主要有:SEGMENTSEGMENT、ENDSENDS、ASSUMEASSUME 段定义伪指令的格式如下:段定义伪指令的格式如下:段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDSENDS
6、方括号中为可选项,规定了逻辑段的一些其他特性方括号中为可选项,规定了逻辑段的一些其他特性方括号中为可选项,规定了逻辑段的一些其他特性方括号中为可选项,规定了逻辑段的一些其他特性7 这两个伪指令总是这两个伪指令总是成对成对出现,二者前面的出现,二者前面的段名段名一致。二者之间的删节部分,对一致。二者之间的删节部分,对数据段数据段、附加段附加段及及堆栈段堆栈段,一般是,一般是符号符号、变量定义等伪指令变量定义等伪指令。对。对于于代码段代码段则是则是指令指令及及伪指令伪指令。SEGMENT 和和 ENDS例如:例如:DATA SEGMENT DATA ENDS 此外,还必须明确段和段寄存器的关系,这
7、可此外,还必须明确段和段寄存器的关系,这可由由ASSUMEASSUME语句来实现。语句来实现。DW 20DUP(?)8ASSUME 段寄存器:段名段寄存器:段名,段寄存器名:段名段寄存器名:段名,.l通知通知MASM用指定的段寄存器来寻址对应的逻辑段,用指定的段寄存器来寻址对应的逻辑段,即建立段寄存器与段的缺省关系即建立段寄存器与段的缺省关系l在明确了程序中各段与段寄存器之间的关系后,汇在明确了程序中各段与段寄存器之间的关系后,汇编程序会根据数据所在的逻辑段,在需要时自动插入编程序会根据数据所在的逻辑段,在需要时自动插入段超越前缀。这是段超越前缀。这是ASSUME伪指令的主要功能伪指令的主要功
8、能lASSUME伪指令并不为段寄存器设定初值,连接程伪指令并不为段寄存器设定初值,连接程序序LINK将正确设置将正确设置CS:IP和和SS:SP4.4.段寄存器说明伪指令段寄存器说明伪指令功能:功能:通知汇编程序,哪一个段寄存器是该段的段寄通知汇编程序,哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目存器,以便对使用变量或标号的指令汇编出正确的目的代码。的代码。9由于由于ASSUME伪指令只指明某一个段地址应存于哪伪指令只指明某一个段地址应存于哪一个段寄存器中,并没有包含将段地址送入该寄存一个段寄存器中,并没有包含将段地址送入该寄存器的操作。因此要将器的操作。因此要将真
9、实段地址装入段寄存器还需真实段地址装入段寄存器还需用汇编指令来实现用汇编指令来实现。如:如:CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK MOV AX,DATA ;DATA段值送段值送AXMOV DS,AX ;AX内容送内容送DS,DS才有实际段值才有实际段值 CODE ENDS ASSUME 段寄存器:段名段寄存器:段名,段寄存器名:段名段寄存器名:段名,.4.4.段寄存器说明伪指令段寄存器说明伪指令功能:功能:指明某一个段地址应存于哪一个段寄存器中指明某一个段地址应存于哪一个段寄存器中10PTRPTR操作符操作符PTRPTR操作符使名字或标号具有指
10、定的类型操作符使名字或标号具有指定的类型类型名:类型名:BYTE/WORD/DWORD或或 NEAR/FARmov ax,word ptr array ;array是一个字变量是一个字变量jmp far ptr n_label ;n_label是一个标号是一个标号使用使用PTRPTR操作符,可以操作符,可以临时临时改变名字或标号的类型改变名字或标号的类型类型名类型名 PTR 名字名字/标号标号14一般来说,一个完整的汇编源程序由三个段组成,一般来说,一个完整的汇编源程序由三个段组成,即堆栈段、数据段和代码段。即堆栈段、数据段和代码段。堆栈段:在内存中建立一个堆栈区域,以便在中堆栈段:在内存中建
11、立一个堆栈区域,以便在中断、子程序调用时使用。断、子程序调用时使用。注意堆栈溢出注意堆栈溢出。代码段:存放要执行的指令。代码段:存放要执行的指令。数据段:存放常数、变量等程序中需要操作的数据。数据段:存放常数、变量等程序中需要操作的数据。数据段应放在代码段之前数据段应放在代码段之前。4.2 汇编语言程序的结构汇编语言程序的结构15一个完整的汇编程序一个完整的汇编程序DATA SEGMENT .;数据段内定义各类程序执行需要的相关数据数据段内定义各类程序执行需要的相关数据DATA ENDSSTACK SEGMENT .;根据程序的具体需要定义堆栈段,供程序执根据程序的具体需要定义堆栈段,供程序执
12、行行 ;过程中临时保留数据用;过程中临时保留数据用STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOVAX,DATA MOV DS,AX .;完成具体操作的指令序列完成具体操作的指令序列CODE ENDS END START16 DATA1 SEGMENT ;数据段数据段 X DB 05H Y DB 04H Z DB?DATA1 ENDS例、实现例、实现X+YZ存放在内存单元的两个存放在内存单元的两个8位数位数X、Y相加,和放相加,和放于内存单元于内存单元ZCODE1 SEGMENT;代码段代码段 ASSUME CS:
13、CODE1,DS:DATA1START:MOV AX,DATA1;数据段地址数据段地址AX MOV DS,AX;AX DS MOV AL,X;内存单元内存单元X的数据的数据AL ADD AL,Y;内存单元内存单元Y的数据的数据+ALAL MOV Z,AL;求和结果求和结果内存单元内存单元Z MOV AH,4CH;送功能号送功能号 INT 21H;系统功能调用,返回操作系统系统功能调用,返回操作系统 CODE1 ENDS END START17汇编语言的一个实例汇编语言的一个实例DATADATASEGMENTSEGMENT;数据段定义数据段定义BLOCK DB43H,0ABH,PDATA DB2
14、0DUP(?)NDATA DB20DUP(?)DATAENDS;数据段结束CODESEGMENT;代码段定义代码段定义ASSUME CS:CODE,DS:DATAMAINPROC FAR;过程开始START:PUSH DSMOVAX,0PUSH AX设置设置返回返回DOSDOS的返回地址的返回地址,它相它相当于把当于把DS:0HDS:0H压栈压栈.连接程序为每一连接程序为每一个用户程序建立了一个程序段前缀个用户程序建立了一个程序段前缀,在前缀开始处安排了一条在前缀开始处安排了一条 INT 20H,INT 20H,在过程结束时通过在过程结束时通过RETRET返回返回DOSDOS。18MOV AX
15、,DATAMOV DS,AX;DATA DS MOV ES,AX;DATA ES ;具体程序RET;返回指令MAIN ENDP;过程结束CODE ENDS;代码段结束 END START;源程序结束19汇编语言源程序结构汇编语言源程序结构 DATASEGMENT;数据段定义数据段定义BLOCK DB43H,0ABH,DATAENDS;数据段结束数据段结束CODESEGMENT;代码段定义代码段定义ASSUME CS:CODE,DS:DATAMAINPROCFAR;过程开始过程开始START:MOV AX,DATAMOV DS,AX;DATA DS ;具体程序具体程序RET;返回指令返回指令MA
16、INENDP;过程结束过程结束CODEENDS;代码段结束代码段结束 END START;源程序结束源程序结束20 用汇编语言编写的程序称为源程序,常用的汇编用汇编语言编写的程序称为源程序,常用的汇编程序有程序有ASM和宏汇编和宏汇编MASM。汇编语言程序要实现在机器上运行,必须完成以下汇编语言程序要实现在机器上运行,必须完成以下几个步骤几个步骤:1、编辑程序编辑程序2、汇编程序汇编程序3、连接程序连接程序4、运行调试程序运行调试程序4.3 汇编语言程序的上机过程汇编语言程序的上机过程源程序源程序.asm可执行文件可执行文件.exe目标模块目标模块.obj文本编辑器文本编辑器汇编程序汇编程序M
17、ASM连接程序连接程序LINK调试程序调试程序24文本编辑器(文本编辑器(Editor)文本编辑器用于编辑无任何格式的文档文本编辑器用于编辑无任何格式的文档程序设计时要采用文本编辑器编写源程序程序设计时要采用文本编辑器编写源程序常见的文本编辑软件有很多,如常见的文本编辑软件有很多,如MS-DOS的的EDIT全屏全屏幕编辑器、幕编辑器、Windows的的Notepad计事本,可以采用微计事本,可以采用微机中任何一个文本编辑器编写汇编语言源程序机中任何一个文本编辑器编写汇编语言源程序汇编程序的源程序必须以汇编程序的源程序必须以ASM作为扩展名;作为扩展名;源程序源程序.asm可执行文件可执行文件.
18、exe目标模块目标模块.obj文本编辑器文本编辑器汇编程序汇编程序MASM连接程序连接程序LINK调试程序调试程序25汇编程序(汇编程序(Assembler)汇编程序将汇编语言源程序翻译(称为汇编程序将汇编语言源程序翻译(称为“汇编汇编”)成机器代码目标模块)成机器代码目标模块80 x86CPU的汇编程序主要有微软的宏汇的汇编程序主要有微软的宏汇编程序编程序MASM。源程序源程序.asm可执行文件可执行文件.exe目标模块目标模块.obj文本编辑器文本编辑器汇编程序汇编程序MASM连接程序连接程序LINK调试程序调试程序26连接程序(连接程序(Linker)源程序源程序.asm可执行文件可执行
19、文件.exe目标模块目标模块.obj文本编辑器文本编辑器汇编程序汇编程序MASM连接程序连接程序LINK调试程序调试程序 通过汇编产生的通过汇编产生的OBJ文件是二进制目标文件,但文件是二进制目标文件,但用的是浮动地址,不能直接运行,必须用连接程序用的是浮动地址,不能直接运行,必须用连接程序LINK.EXE连接和定位。连接和定位。如有多个如有多个OBJ文件,用连接程序生成一个文件,用连接程序生成一个可执行可执行文件文件(扩展名为(扩展名为EXE)。)。27调试程序(调试程序(Debugger)直接运行目的文件(直接运行目的文件(EXE文件),观察结果。文件),观察结果。调试程序进行程序排错、分
20、析等调试程序进行程序排错、分析等例如:例如:DOS的的DEBUG程序程序源程序源程序.asm可执行文件可执行文件.exe目标模块目标模块.obj文本编辑器文本编辑器汇编程序汇编程序MASM连接程序连接程序LINK调试程序调试程序28用文件编辑工具编写源程序用文件编辑工具编写源程序用用MASM汇编源程序汇编源程序有语法错误?有语法错误?用用LINK连接目标代码文件连接目标代码文件执行执行EXE文件文件运行结果有错误?运行结果有错误?有连接错误?有连接错误?YYYNNN294.3 程序设计的基本方法程序设计的基本方法汇编程序的开发过程顺序结构 分支结构 循环结构 主子程序结构311、汇编程序的开发
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 42 程序设计1-精品文档资料系列 程序设计 精品 文档 资料 系列

限制150内