汇编语言及汇编程序设计精选文档.ppt
《汇编语言及汇编程序设计精选文档.ppt》由会员分享,可在线阅读,更多相关《汇编语言及汇编程序设计精选文档.ppt(114页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言及汇编程序设计汇编语言及汇编程序设计本讲稿第一页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计2一、概述一、概述 汇编语言是一种面向汇编语言是一种面向CPU指令系统的程序设计语指令系统的程序设计语言。指令格式言。指令格式:1 1、标号标号是指该指令的符号地址,以冒号结束;是指该指令的符号地址,以冒号结束;2 2、用助记符表示操作码,是指令名称的代表符号,是语、用助记符表示操作码,是指令名称的代表符号,是语句中的关键字,不可缺省;句中的关键字,不可缺省;本讲稿第二页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言
2、及汇编程序设计3一、概述一、概述(续上页续上页)3、用符号代表操作数或操作数地址。、用符号代表操作数或操作数地址。操作数是本指操作数是本指令执行需要的数据。令执行需要的数据。有些指令不需要指明操作数,有些指令不需要指明操作数,可以默认;有些指令需要两个操作数;还有些操作数可以默认;有些指令需要两个操作数;还有些操作数可以用表达式。可以用表达式。4、注释项是可选项,用分号开始。、注释项是可选项,用分号开始。本讲稿第三页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计4一、概述一、概述(续上页续上页)用汇编语言编写的程序称为源程序,常用的汇编用汇编语言编
3、写的程序称为源程序,常用的汇编程序有程序有ASM-86和宏汇编和宏汇编MASM-86。汇编语言源程序的组成部分汇编语言源程序的组成部分:可以使用可以使用CPU指令系统指令系统所提供的指令所提供的指令(硬指令硬指令);可以使用各种可以使用各种符合汇编语法符合汇编语法的表达式,的表达式,运算运算符以及自行定义生成满足需要的目标代码的指令。符以及自行定义生成满足需要的目标代码的指令。本讲稿第四页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计51、标号、标号 8086/8088汇编语言中使用的标号必须遵循下列汇编语言中使用的标号必须遵循下列规则:规则:(1
4、)大小写字母;大小写字母;(2)数字数字09;(3)某些特殊字符(某些特殊字符(,_,?)(4)第一个字符不能是数字,第一个字符不能是数字,“?”不能单独作为标不能单独作为标号。号。(5)标号的有效长度是标号的有效长度是31;有效标号有效标号:START MY_PROGRAM 无效标号无效标号:MAIN%1BETA本讲稿第五页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计6二、伪指令二、伪指令 伪指令是告诉汇编程序生成目标代码的指令语伪指令是告诉汇编程序生成目标代码的指令语句。句。1、符号定义伪指令符号定义伪指令 2、内存数据定义伪指令内存数据定义
5、伪指令 3、段定义伪指令段定义伪指令 4、段寄存器说明伪指令段寄存器说明伪指令 5、定位伪指令定位伪指令 6、子程序伪指令子程序伪指令本讲稿第六页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计71、符号定义伪指令、符号定义伪指令 (1)EQU伪指令伪指令 (2)等号等号(赋值赋值)伪指令伪指令 (3)解除符号定义伪指令解除符号定义伪指令本讲稿第七页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计8(1)EQU伪指令伪指令伪指令格式伪指令格式:EQU 指令功能指令功能:给符号名赋值。符号名可以由程序员取给符
6、号名赋值。符号名可以由程序员取定,定,表达式应该是可以计算得出一个具体值。例表达式应该是可以计算得出一个具体值。例:PORT EQU 88H;定义符号;定义符号PORT代表代表88H DATA EQU PORT+2;定义符号;定义符号DATA代表代表;PORT+2注意注意:用用EQU定义的符号,不能重新再定义,除非用定义的符号,不能重新再定义,除非用PURGE伪指令解除;伪指令解除;如果在表达式中用了其他符号,必须事先定义。如果在表达式中用了其他符号,必须事先定义。本讲稿第八页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计9(2)等号等号(赋值赋值
7、)伪指令伪指令伪指令格式伪指令格式:=指令功能指令功能:与与EQU类似,唯一的区别是类似,唯一的区别是“=”可以可以随时对符号名赋新值,随时对符号名赋新值,而不必使用而不必使用PURGE伪指令。伪指令。例例:PORT=88H;定义符号;定义符号PORT代表代表88HDATA=PORT+2;定义符号;定义符号DATA代表代表PORT+2本讲稿第九页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计10(3)解除符号定义伪指令解除符号定义伪指令伪指令格式伪指令格式:PURGE 符号符号1,符号符号2,指令功能指令功能:撤消用撤消用EQU赋值的符号名,赋值的
8、符号名,以便于赋予以便于赋予新值。新值。例例:PURGE PORT,DATA;撤消用;撤消用EQU对对PORT、;DATA的赋值的赋值本讲稿第十页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计112、内存数据定义伪指令、内存数据定义伪指令格式格式:变量变量 命令命令 参数参数1,参数参数2,功能功能:数据定义语句用来分配存储单元。数据定义数据定义语句用来分配存储单元。数据定义语句的语句的命令命令有有:DB 定义字节数据定义字节数据 DW定义字数据定义字数据 DD定义双字数据定义双字数据 DQ定义定义8字节数据字节数据 DT定义定义10字节数据字节数
9、据本讲稿第十一页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计122、内存数据定义伪指令、内存数据定义伪指令复制操作符复制操作符 格式格式:DUP 数据数据1,数据,数据2,功能功能:汇编程序把所定义的数据按先后次序连续:汇编程序把所定义的数据按先后次序连续分配存储空间,所起的名称只代表第一个单元的字分配存储空间,所起的名称只代表第一个单元的字符。符。例题例题本讲稿第十二页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计132、内存数据定义伪指令、内存数据定义伪指令例例:VAR1 DB 32H,ABCVA
10、R2 DW 1234H,40H,AB DD 12345678H DB?,11000011BARRY1 DB 2 DUP(0,1)ARRY2 DW 2 DUP(?,(?,1)本讲稿第十三页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计143、程序分段伪指令、程序分段伪指令 段定义伪指令的用途是在汇编语言程序中定义逻辑段,用它来指定段定义伪指令的用途是在汇编语言程序中定义逻辑段,用它来指定段的名称和范围,并指明段的定位类型、组合类型及类别。段的名称和范围,并指明段的定位类型、组合类型及类别。常用的段定义伪指令有常用的段定义伪指令有 SEGMENT/EN
11、DS 和和 ASSUME等。等。(1)段定义伪指令)段定义伪指令 SEGMENT/ENDS格式格式:段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 分类名分类名 ;本段程序内容;本段程序内容(指令语句或伪指令语句指令语句或伪指令语句)段名段名 ENDS段名为所定义段的名称或标识符段名为所定义段的名称或标识符本讲稿第十四页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计15段定义由伪指令段定义由伪指令SEGMENT开始开始、ENDS结束结束。n其中:SEGMENT 和ENDS 必须成对出现,n 且语句前必须有段名,段名必须相同。SEGME
12、NT和和ENDS语句之间可以有指令和其他伪语句之间可以有指令和其他伪操作操作,表示存放在该段内存的变量、指令或其他伪操作表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理对该段内存的处理 程序中可以定义多个段。程序中可以定义多个段。程序经汇编、连接及装入内存后,段名为一具体的程序经汇编、连接及装入内存后,段名为一具体的段值。段值。本讲稿第十五页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计16定位类型定位类型 PAGE:表示相应的段必须从某一页(256个字节)的边界开始。PAGE=0000 0000BPARA:表示段的起点是从存储器中的某一
13、个节的边界开始。PARA=0000B WORD:表示段的起点可以从任何一个字的边界(偶地址)开始。WORD=0BBYTE:表示段的地址可以从存储器的任何地址开始。BYTE=B组合类型 PUBLIC:依次连接。COMMON:从相同的地址开始,具有同样的段地址。AT表达式:相应段定位在由表达式求值得到的节边界地址上。STACK:与PUBLIC方式相同,但仅用于堆栈段。MEMORY:装在被连接的其它段之上本讲稿第十六页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计17源程序模块的段定义示例源程序模块的段定义示例 :STACKSEGSEGMENT PARA
14、 STACK STACK ;;定义堆栈段STACKSEGENDS ;DATASEGSEGMENT;定义数据段DATASEG ENDS ;EXTRASEG SEGMENT;定义附加数据段EXTRASEG ENDS;CODESEG SEGMENT;START:定义代码(即指令)段CODESEG ENDS;END START;源程序模块结束 本讲稿第十七页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计18(2)段寄存器说明伪指令 ASSUMEn格式:ASSUME 段寄存器:段名 ,段寄存器:段名,n 其中 段寄存器为CS、DS、ES、SS中的一个n 段名
15、为用伪操作SEGMENT定义过的段名n例 ASSUME CS:cc,DS:aa ASSUME 伪操作的作用 指示汇编程序指令中用到的标号、过程及变量所在的段。其中 对标号、过程必须用 CS 段寄存器指示 对变量可用 CS、DS、ES、SS 段寄存器指示本讲稿第十八页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计19若未用若未用ASSUME语句指示指令中用到的标号、语句指示指令中用到的标号、过程和变量所在的段过程和变量所在的段,汇编程序将给出错误信息。汇编程序将给出错误信息。ASSUME语句只起指示作用,并无实际的操作。语句只起指示作用,并无实际的操
16、作。在程序中引用定义的变量做内存操作数时,在程序中引用定义的变量做内存操作数时,需按寻址方式用传送指令(如需按寻址方式用传送指令(如MOV)给相应的段寄)给相应的段寄存器赋值。存器赋值。本讲稿第十九页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计20data SEGMENT value DW 1234H,5678H result DW?data ENDS code SEGMENT ASSUME CS:code,DS:data start:MOV AX,data ;给给DS赋值赋值 MOV DS,AX MOV AX,value ;取数取数 ADD A
17、X,value+2 ;两数相加两数相加 MOV result,AX ;保存结果保存结果 MOV AH,4CH ;返回返回DOS INT 21H code ENDS END start例例 用程序实现用程序实现 1234H+5678H本讲稿第二十页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计21程序中有程序中有ASSUME语句,经汇编,连接和装入内存后的情况:语句,经汇编,连接和装入内存后的情况:data SEGMENT value DW 1234H,5678H result DW?data ENDS code SEGMENT ASSUME CS:
18、code,DS:data start:MOV AX,data ;给给DS赋值赋值 MOV DS,AX MOV AX,value ;取数取数 ADD AX,value+2 ;两数相加两数相加 MOV result,AX ;保存结果保存结果 MOV AH,4CH ;返回返回DOS INT 21H code ENDSD:MASMDEBUG assume.exe-R ;查看程序执行前各寄存器查看程序执行前各寄存器AX=0000 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1295 ES=1295 SS=12A5 CS=12A6 I
19、P=0000 NV UP EI PL NZ NA PO NC12A6:0000 B8A512 MOV AX,12A5-U ;查看在内存的程序查看在内存的程序12A6:0000 B8A512 MOV AX,12A512A6:0003 8ED8 MOV DS,AX12A6:0005 A10000 MOV AX,0000 12A6:0008 03060200 ADD AX,0002 12A6:000C A30400 MOV 0004,AX12A6:000F B44C MOV AH,4C12A6:0011 CD21 INT 21、本讲稿第二十一页,共一百一十四页2022/10/26第第4章章 汇编语言
20、及汇编程序设计汇编语言及汇编程序设计224、过程定义伪指令 PROC/ENDP 在在程程序序设设计计中中,经经常常将将一一些些重重复复出出现现的的语语句句组组定定义义为为子子程程序序。子子程程序序又又称称为为过过程程,可可以以采采用用CALL指令来调用。指令来调用。使用格式:使用格式:过程名 PROC NEAR/FAR (语句系列)(语句系列)RET (语句系列)(语句系列)过程名 ENDP 调用一个过程的格式为:调用一个过程的格式为:CALL 过程名 本讲稿第二十二页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计23 过程过程定义由伪指令定义由伪
21、指令 PROC开始、开始、ENDP结束结束。其中:其中:PROC 和和 ENDP 必须成对出现必须成对出现,且语句前必须有过程名,且语句前必须有过程名,过程名必须相同过程名必须相同。PROC和和ENDP语句之间为子程序的指令序列。语句之间为子程序的指令序列。程序中可以定义多个过程。程序中可以定义多个过程。程程序序经经汇汇编编、连连接接及及装装入入内内存存后后,过过程程名名为为一一具具体体的的内内存存地地址址,指示子程序入口。指示子程序入口。本讲稿第二十三页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计24过程名常用作过程名常用作CALL调用指令的操
22、作数调用指令的操作数,子程的最后安排子程的最后安排RET返回指令,使执行完子程后能返回调用处返回指令,使执行完子程后能返回调用处。过程有两种类型:过程有两种类型:NEAR和和FAR 无类型项时,无类型项时,默认为默认为NEAR类型类型。当过程与调用指令不在同一段时,应将过程定义为当过程与调用指令不在同一段时,应将过程定义为 FAR 类型。类型。过程类型决定子程序中过程类型决定子程序中RET的返回类型的返回类型本讲稿第二十四页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计25例例1 display PROC 、C3H 、RET ;NEAR 属性的过程
23、对应段内返回属性的过程对应段内返回 display ENDP例例2 display PROC FAR 、CBH 、RET ;FAR属性的过程对应段间返回属性的过程对应段间返回 display ENDP本讲稿第二十五页,共一百一十四页2022/10/26第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计26启动地址可是一个标号或过程名启动地址可是一个标号或过程名,指示程序的入口。指示程序的入口。程序装入内存后,系统跳转到入口处程序装入内存后,系统跳转到入口处,开始执行程序。开始执行程序。aa SEGMENT ;数据段数据段1 str1 DB Hello!aa ENDSbb SEGMENT
24、;数据段数据段2 str2 DB 6 dup(?)bb ENDScc SEGMENT ;代码段代码段 ASSUME CS:cc ASSUME DS:aa,ES:bb start:CLD MOV AX,aa MOV DS,AX LEA SI,str1 MOV AX,SEG str2 MOV ES,AX MOV DI,OFFSET str2 MOV CX,6 REP MOVSB MOV AH,4CH INT 21H cc ENDS END start D:masmDEBUG hello.exe-U :查看代码段查看代码段129F:0000 FC CLD129F:0001 B89D12 MOV AX
25、,129D129F:0004 8ED8 MOV DS,AX129F:0006 8D360000 LEA SI,0000129F:000A B89E12 MOV AX,129E129F:000D 8EC0 MOV ES,AX129F:000F BF0000 MOV DI,0000129F:0012 B90600 MOV CX,0006129F:0015 F3 REPZ129F:0016 A4 MOVSB129F:0017 B44C MOV AH,4C129F:0019 CD21 INT 21、-D 129d:0 l10 ;查看数据段查看数据段1的内容的内容129D:0000 48 65 6C 6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 汇编程序 设计 精选 文档
限制150内