最新汇编语言第4章顺序程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《最新汇编语言第4章顺序程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 汇编语言 顺序 程序设计 课件
- 资源描述:
-
1、DATA SEGMENT ;数据段定义伪指令;数据段定义伪指令X DW 4 ;定义;定义X为字单元,值为为字单元,值为4Y DW 5Z DW?;定义;定义Z为空单元为空单元DATA ENDS ;数据段结束;数据段结束 完整的程序如下:完整的程序如下:;abc.asm 公式计算公式计算CODE SEGMENT ;代码段定义伪指令;代码段定义伪指令 ASSUME CS:CODE,DS:DATA ;指定段寄存器与对应段名;指定段寄存器与对应段名START:MOV AX,DATA MOV DS,AX ;将数据段段地址送入;将数据段段地址送入DSMOV BX,X MOV AX,YADD AX,BX ;加
2、法;加法MOV CL,3SAL AX,CL ;算术左移;算术左移3次,相当于乘以次,相当于乘以8SUB AX,X ;减法;减法SAR AX,1 ;算术右移;算术右移1次,相当于除以次,相当于除以2MOV Z,AXMOV AH,4CH ;此两句为结束程序,返回;此两句为结束程序,返回DOSINT 21H CODE ENDS ;代码段结束;代码段结束 END START ;整个程序结束伪指令;整个程序结束伪指令4.1.2 从源程序到可执行程序从源程序到可执行程序 图图 汇编语言程序从输入到生成可执行文件过程汇编语言程序从输入到生成可执行文件过程1建立和生成的文件建立和生成的文件2汇编环境汇编环境3
3、上机步骤上机步骤4调试程序调试程序 1建立和生成的文件建立和生成的文件(1)用户编写的源程序,源程序名自)用户编写的源程序,源程序名自定、扩展名为定、扩展名为.ASM(2)源程序经汇编程序)源程序经汇编程序MASM汇编汇编(翻译)后生成二进制目标程序,文(翻译)后生成二进制目标程序,文件 名 默 认 与 源 程 序 同 名、扩 展 名件 名 默 认 与 源 程 序 同 名、扩 展 名为为.OBJ(3)目标程序需要经过)目标程序需要经过LINK连接生连接生成可执行程序,文件名默认与源程序成可执行程序,文件名默认与源程序同名、扩展名为同名、扩展名为.EXE 2汇编环境汇编环境 最基本的汇编环境只需
4、要两个文件:最基本的汇编环境只需要两个文件:MASM.EXE和和LINK.EXE。将这两。将这两个文件拷入到已经建好的文件夹(例个文件拷入到已经建好的文件夹(例如如HB)中,并将文件夹)中,并将文件夹HB放在硬盘放在硬盘根目录根目录C:下下 文本编辑软件可以用文本编辑软件可以用EDIT或者或者“记记事本事本”3上机步骤上机步骤 Ccd 退到根目录退到根目录Ccd hb 进入进入hb子目录子目录C:hbedit abc.asm 编辑源程序编辑源程序C:hb masm abc.asm 汇编汇编C:hb link abc.obj 连接连接C:hb abc.exe 执行执行C:hb debug abc
5、.exe 调试调试 进入进入DOS窗口中执行:窗口中执行:4调试程序调试程序-U 反汇编反汇编-G 断点断点 执行程序执行程序-D DS:0 查看数据段查看数据段-Q 退出退出进入进入DEBUG后,执行如下命令:后,执行如下命令:上机练习:上机练习:(1)验证举例的设计思路二程序)验证举例的设计思路二程序(2)将举例的设计思路一的程序段)将举例的设计思路一的程序段增加相关的伪指令,修改为可上机执增加相关的伪指令,修改为可上机执行的程序。行的程序。4.2 伪指令伪指令4.2.1段定义伪操作段定义伪操作n段定义伪指令段定义伪指令nASSUME伪指令伪指令段定义伪指令段定义伪指令 段定义伪指令可用来
6、定义各种类型的段。段定义伪指令可用来定义各种类型的段。格式如下:格式如下:段名段名 SEGMENT 类型参数类型参数 段名段名 ENDSSEGMENT和和ENDS必须成对使用,表示段的必须成对使用,表示段的开始和结束。开始和结束。类型参数:类型参数:(1)定位类型)定位类型PARA 该段的起始地址必须为小段的首地址,即段该段的起始地址必须为小段的首地址,即段地址的十六进制数最低位为地址的十六进制数最低位为0BYTE 该段可以从任意地址开始该段可以从任意地址开始WORD 该段必须从字边界开始,即段的起始地址为该段必须从字边界开始,即段的起始地址为偶数偶数DWORD 该段必须从双字边界开始,即段地
7、址的十六该段必须从双字边界开始,即段地址的十六进制数最低位应为进制数最低位应为4的倍数的倍数PAGE 该段必须从页边界开始,即段地址的十六进该段必须从页边界开始,即段地址的十六进制数最低两位为制数最低两位为00(能被(能被256整除)整除)如果不指出定位类型,系统默认为如果不指出定位类型,系统默认为PARA。(2)组合类型)组合类型PRIVATE 该段为私有段,连接时不与其他同名段合并该段为私有段,连接时不与其他同名段合并PUBLIC 连接时可与其他模块中的同名段按顺序连接连接时可与其他模块中的同名段按顺序连接 成一个段成一个段COMMON 表示该段与其他模块中的同名段有相同的起表示该段与其他
8、模块中的同名段有相同的起 始地址,如果连接将产生覆盖;连接后,始地址,如果连接将产生覆盖;连接后,段的长度为同名段中的最长者段的长度为同名段中的最长者STACK 表示该段为堆栈段表示该段为堆栈段AT 表达式表达式 该段直接定位在表达式指出的位置上该段直接定位在表达式指出的位置上如果不指定组合类型,系统默认为如果不指定组合类型,系统默认为PRIVATE。(3)类别标识)类别标识在引号中给出段的类型名,在连接时,类别标识相同的在引号中给出段的类型名,在连接时,类别标识相同的段放在连续的存储区中。段放在连续的存储区中。例如,用例如,用STACK来标识该段为堆栈段来标识该段为堆栈段 返回返回ASSUM
9、E伪指令伪指令 ASSUME伪指令用于指明段寄存器与段伪指令用于指明段寄存器与段的对应关系,格式为:的对应关系,格式为:ASSUME 段寄存器:段名,段寄存器:段名,段寄存器:段寄存器:段名,段名,如果不使用如果不使用ASSUME伪指令,系统就无法获伪指令,系统就无法获知用户定义的段都有哪些,进而就不能正确知用户定义的段都有哪些,进而就不能正确地划分段。地划分段。返回返回数据定义伪指令格式为:数据定义伪指令格式为:存储单元名存储单元名 DB(或(或DW、DD等伪指令)等伪指令)操作数操作数其中:其中:(1)存储单元可以起名也可以不要名字)存储单元可以起名也可以不要名字(2)数据定义伪指令)数据
10、定义伪指令DB 定义字节单元定义字节单元DW 定义字单元定义字单元DD 定义双字单元定义双字单元DQ 定义四字单元定义四字单元DT 定义十字节单元定义十字节单元(3)操作数用于指出存储单元的内容即该单元的值。)操作数用于指出存储单元的内容即该单元的值。一条数据定义伪指令可以给多个存储单元赋值。一条数据定义伪指令可以给多个存储单元赋值。需要说明的是确定存储单元的内容时要与存储单需要说明的是确定存储单元的内容时要与存储单元的属性一致。元的属性一致。4.2.2 数据定义伪指令数据定义伪指令 操作数是常数或表达式操作数是常数或表达式 例例1 定义字节单元定义字节单元X=56,字单元,字单元E_1=20
11、30H,双字,双字单元单元CARRY=12345678H DATA SEGMENT X DB 56 E_1 DW 2030H CARRY DD 12345678H DATA ENDS实际存储显示:实际存储显示:例例2 一次定义多个存储单元。字母打头的十一次定义多个存储单元。字母打头的十六进制数要在前面加六进制数要在前面加0,?代表空单元,?代表空单元 XX DB 12,0,0E4H YY DW 5,?,?,6*3实际存储显示:实际存储显示:例例3 用用DUP()子句重复定义相同操作数子句重复定义相同操作数 AVE DB 8,3 DUP(2),-6MSN DB 5 DUP(?)COUNT DW
12、100 DUP(1)存储示意:存储示意:操作数是字符串操作数是字符串 例例1 定义字符及字符串,字符串要用引号括起来定义字符及字符串,字符串要用引号括起来 MES1 DB A,B MES2 DW AB MES3 DB HELLO 实际存储显示实际存储显示:4.2.3 其它伪指令其它伪指令1赋值伪指令赋值伪指令 在程序中多次出现同一个表达式时,可以用在程序中多次出现同一个表达式时,可以用EQU定义一个符号来代表表达式,以简化书写。定义一个符号来代表表达式,以简化书写。与与EQU伪操作相似,等号伪操作相似,等号=伪操作也可以给表伪操作也可以给表达式赋值,且允许对一个符号多次重复定义;达式赋值,且允
13、许对一个符号多次重复定义;而而EQU则不允许。则不允许。例:例:CONT EQU 125*3.14 STR EQU RIGHT SUM EQU 0 BUFF=56 PASS=2034H BUFF=56H2模块定义伪指令模块定义伪指令 在汇编语言中,可以将程序设为多个模块,每在汇编语言中,可以将程序设为多个模块,每个模块完成独立的功能。因此,每个模块可用模个模块完成独立的功能。因此,每个模块可用模块定义伪指令定义名称和结束标识。格式为:块定义伪指令定义名称和结束标识。格式为:NAME 模块名模块名 END 起始标号起始标号其中,其中,NAME伪指令可以缺省。如果缺省,则伪指令可以缺省。如果缺省,
14、则以该模块的源程序名作为模块名。以该模块的源程序名作为模块名。END伪指令不能缺省。其后的起始标号可伪指令不能缺省。其后的起始标号可以是程序的第一条汇编指令的标号以是程序的第一条汇编指令的标号START,或者是主过程名。或者是主过程名。3地址计数器地址计数器 地址计数器地址计数器$表示当前的偏移地址值。表示当前的偏移地址值。如果用在数据段的存储单元定义中,可写成:如果用在数据段的存储单元定义中,可写成:ABC DW 1,2,$+3,4实际存储显示:实际存储显示:如果用在转移指令中:如果用在转移指令中:JMP$+5则无条件跳转到当前指令的偏移地址则无条件跳转到当前指令的偏移地址+5单元继单元继续
15、执行。续执行。4设置偏移地址伪指令设置偏移地址伪指令当前的偏移地址可以用当前的偏移地址可以用ORG伪指令定义。伪指令定义。如果用在数据段中,该指令可以确定存储单元的偏移如果用在数据段中,该指令可以确定存储单元的偏移地址,例如将地址,例如将X单元的偏移地址定义为单元的偏移地址定义为0020H,该单,该单元的内容为元的内容为5,即,即(DS:0020H)=5。伪指令如下:。伪指令如下:DATA SEGMENT ORG 0020H X DW 5DATA ENDS如果用在代码段中,可从指定的单元开始存放并执行如果用在代码段中,可从指定的单元开始存放并执行指令。指令。例如从代码段的例如从代码段的100H
16、开始执行:开始执行:ORG 100HSTART:MOV AX,X;标号;标号START设置为设置为100H MOV BX,Y ADD AX,BX5操作符操作符在汇编指令中可以使用一些操作符,汇编程序编译时将在汇编指令中可以使用一些操作符,汇编程序编译时将这些操作符变为相应的数值回送或者定义属性。这些操作符变为相应的数值回送或者定义属性。(1)回送偏移地址值)回送偏移地址值OFFSETMOV BX,OFFSET X ;将;将X单元的偏移地址传送给单元的偏移地址传送给BXMOV AX,OFFSET START ;将标号;将标号START的偏移地址传送给的偏移地址传送给AX(2)回送段地址值)回送段
17、地址值SEGMOV BX,SEG X ;将;将X单元的段地址传送给单元的段地址传送给BXMOV AX,SEG START ;将标号;将标号START的段地址传送给的段地址传送给AX(3)类型回送操作符)类型回送操作符TYPEMOV BX,TYPE X ;如果;如果X是字节单元,则回送值为是字节单元,则回送值为1,即,即 BX1;若是字单元,值为若是字单元,值为2,双字单元,值为,双字单元,值为4(4)属性操作符)属性操作符PTRMOV BYTE PTR BX,10 ;定义目的操作数为字节单元;定义目的操作数为字节单元MOV WORD PTR SI,20 ;定义目的操作数为字单元;定义目的操作数
18、为字单元(5)类型操作符)类型操作符LABELX LABEL BYTE ;X单元的类型定义为单元的类型定义为BYTE字节型,也可以定字节型,也可以定 义为义为 WORD字型、字型、DWORD双字型等双字型等 6.注释伪指令注释伪指令分号分号“;”后面的内容为注释。后面的内容为注释。编写程序时最好加入注释,便于以后编写程序时最好加入注释,便于以后的阅读和修改。的阅读和修改。练习:练习:写出伪指令,并回答问题。写出伪指令,并回答问题。(1)定义名为)定义名为NEW的字单元,保存的字单元,保存10,20,30,40四个数四个数(2)将)将NEW单元的段地址放入单元的段地址放入DX寄存寄存器,偏移地址
19、放入器,偏移地址放入BX寄存器寄存器(3)NEW中数值中数值40所在单元的偏移地所在单元的偏移地址是多少?址是多少?(4)如果将)如果将NEW单元的偏移地址设置单元的偏移地址设置为为10H,用什么伪指令?,用什么伪指令?4.3基本汇编指令基本汇编指令1MOV传送指令传送指令 MOV传送指令是双操作数指令,传送指令是双操作数指令,SRC为源操作数、为源操作数、DST为目的操作数。要为目的操作数。要求两个操作数的属性必须一致。求两个操作数的属性必须一致。格式:格式:MOV DST,SRC 目的操作数,源操作数目的操作数,源操作数4.3.1 数据、栈及查表数据、栈及查表2.数据交换指令数据交换指令X
20、CHGXCHG指令是双操作数指令,指令的功能是将两个操指令是双操作数指令,指令的功能是将两个操作数的内容互换。要求必须有一个操作数是寄存器,作数的内容互换。要求必须有一个操作数是寄存器,而且两个操作数的属性必须一致。操作数不能为立即而且两个操作数的属性必须一致。操作数不能为立即数。数。格式:格式:XCHG OPR1,OPR2例例1 XCHG AX,BX ;寄存器;寄存器AX和和BX的内容互换的内容互换XCHG BX,AL ;AL寄存器的内容和字节型寄存器的内容和字节型 存储单元的内容互换存储单元的内容互换XCHG CX,XSI ;CX寄存器的内容和字型存寄存器的内容和字型存 储单元的内容互换储
21、单元的内容互换3进栈和出栈指令进栈和出栈指令(1)PUSH进栈指令进栈指令 格式:格式:PUSH SRC执行操作:(执行操作:(SP)(SP)-2 (SP)+1,(SP)(SRC)先将堆栈指针先将堆栈指针SP减减2,再将操作数,再将操作数SRC入栈。要求入栈。要求SRC必须是字。必须是字。PUSH AX (2)POP出栈指令出栈指令 格式:格式:POP DST执行操作:执行操作:(DST)(SP)+1,(SP)(SP)(SP)+2将堆栈指针所指字单元的内容弹到操作数将堆栈指针所指字单元的内容弹到操作数DST中,再中,再将将SP加加2。POP AX例例1 已知已知(AX)=95E3H,(BX)=
22、1986H,(SP)=0010H,(SS)=1250H,将,将AX、BX压栈保存。画出入栈过程。压栈保存。画出入栈过程。执行指令:执行指令:PUSH AX PUSH BX入栈过程示意:入栈过程示意:例例2 上例中,接着执行若干指令后,上例中,接着执行若干指令后,再执行出栈操作。再执行出栈操作。执行指令:执行指令:MOV AX,0MOV BX,1POP BXPOP AX 出栈过程示意:出栈过程示意:如果在写出栈指令时,换成别的寄存如果在写出栈指令时,换成别的寄存器,那么就相当于用堆栈中的数据给器,那么就相当于用堆栈中的数据给其他寄存器赋值。例如:其他寄存器赋值。例如:PUSH AXPUSH BX
23、POP CXPOP DX执行后执行后(CX)=1986H,(DX)=95E3H。设计思路:设计思路:(1)用伪指令定义存储单元用伪指令定义存储单元x中的三个数中的三个数(2)y存储单元预留出三个空单元存储单元预留出三个空单元(3)用用PUSH和和POP指令实现数的倒序存放指令实现数的倒序存放(4)PUSH和和POP的操作数均采用直接寻址的操作数均采用直接寻址方式方式程序如下:程序如下:示例示例4-1 设计程序。利用堆栈,将存设计程序。利用堆栈,将存储单元中的三个数倒序存放。储单元中的三个数倒序存放。;程序;程序4-1.asm3个数的倒序存放个数的倒序存放data segmentx dw 12,
24、34,56y dw 3 dup(?)data endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax push x push x+2 push x+4 pop y pop y+2 pop y+4 mov ah,4ch int 21hcode ends end start4.查表转换指令查表转换指令XLAT(1)格式:)格式:XLAT执行的操作:在执行的操作:在BX为表首地址的内存表为表首地址的内存表中查找相对地址为中查找相对地址为AL的单元,取出其中的单元,取出其中的内容放入的内容放入AL中。中。(2)要求:数据表的首
25、地址放入)要求:数据表的首地址放入BX,要查找的单元的偏移地址由要查找的单元的偏移地址由AL指出。指出。(3)功能:把)功能:把AL中的数据换成对应的中的数据换成对应的存储单元中的内容。存储单元中的内容。设计思路:设计思路:(1)一位十六进制数:一位十六进制数:0-9,A-F(2)ASCII码:码:30H,39H,41H,42H,46H(3)算法确定:建立数据表)算法确定:建立数据表TABLE,并以十,并以十六进制数六进制数HEX作为索引号(位移量)作为索引号(位移量)(4)采用)采用DOS中断调用实现显示功能中断调用实现显示功能TABLE表在内存的存储情况:表在内存的存储情况:示例示例4-2
展开阅读全文