汇编语言程序设计(刘慧婷第3版)微课版 课件 第3、4章 汇编语言程序实例及上机操作、操作数的寻址方式_第1页
汇编语言程序设计(刘慧婷第3版)微课版 课件 第3、4章 汇编语言程序实例及上机操作、操作数的寻址方式_第2页
汇编语言程序设计(刘慧婷第3版)微课版 课件 第3、4章 汇编语言程序实例及上机操作、操作数的寻址方式_第3页
汇编语言程序设计(刘慧婷第3版)微课版 课件 第3、4章 汇编语言程序实例及上机操作、操作数的寻址方式_第4页
汇编语言程序设计(刘慧婷第3版)微课版 课件 第3、4章 汇编语言程序实例及上机操作、操作数的寻址方式_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章汇编语言程序实例及上机操作

<<汇编语言程序设计>>实践性很强,结合上机是最好的学习方法。3.1汇编语言的工作环境3.1.1汇编语言的系统工作文件

3.1.2进入DOS命令行的方式3.1.3常用的DOS命令3.1.1汇编语言的系统工作文件

使用编辑程序编辑源程序文件(.asm)使用汇编程序(MASM)将源程序文件(.asm)汇编成目标文件(.obj)使用连接程序(LINK),将目标文件(.obj)连接成可执行文件(.EXE)使用调试程序(DEBUG),调试可执行文件运行汇编语言程序需要以下文件编辑程序EDIT.COM汇编程序MASM.EXE连接程序LINK.EXE调试程序DEBUG.EXE注意几点本书使用MicrosoftMasm6.15,MicrosoftLINK5.13版本。EDIT.COM和DEBUG.EXE为系统自带。为方便操作,系统文件和用户文件尽可能放在同一文件目录下。3.1.2进入DOS命令行方式程序---附件---命令提示符运行---CMD退出用EXIT3.1.3常用的DOS命令1.盘:;选择盘符如果屏幕显示为C:\>,表示你当前在C盘,你希望到E盘,则可键入:C:\>E:↙(↙表示Enter键)3.1.3常用的DOS命令2.CD;选择目录例如:E:\>CD;显示当前目录,当前目录是根目录E:\>CDMASM;进到MASM子目录,E:\>MASM>CDMY;从当前目录MASM进到下一级MY子目录E:\>MASM\MY>CD‥;从当前目录MY退到上一级目录MASME:\>MASM>CD\

;从当前目录MASM退到根目录E:\>3.1.3常用的DOS命令3.DIR;显示目录和文件例如:E:\>MASM>DIR;列出当前目录下的子目录和文件E:\>MASM\>DIR*.ASM;列出所有扩展名为ASM的文件,*为通配符E:\>MASM>DIRHELLO.*;列出所有名为HELLO而扩展名不限的文件E:\>MASM>DIRHE*.???;列出所有文件名前2个字符为’HE’而扩展名有3个字符的文件3.1.3常用的DOS命令4.REN;改变文件名例如:E:\>RENH1.TXTH2.ASM;把文件H1.TXT改名为H1.ASM3.1.3常用的DOS命令5.CLS;清除屏幕6.DEL;删除文件例如:E:\>DELC.TXT;删除文件C.TXT7.MD;建立目录例如:E:\>MDMASM;建立MASM目录3.1.3常用的DOS命令8.RD;删除目录例如:E:\>MASM\>RDASM;删除下级子目录ASM3.1.3常用的DOS命令9.COPY;复制文件例如:E:\>COPYH1.TXTH2.TXT;复制文件H1.TXT到文件H2.TXTE:\>COPYA+BC.TXT;把文件A和B连接后得到文件C.TXT3.1.3常用的DOS命令10.TYPE显示文本文件的内容例如:E:\>TYPEC.TXT;显示文件C.TXT的内容11.>;输出的重定向操作符例如:E:\>DIR>THIS.TXT;把DIR显示结果输出到文件THIS.TXT3.1.3常用的DOS命令12.HELP显示命令格式和用法E:\>HELP;显示所有命令的格式E:\>HELPDIR;显示DIR命令的用法3.2汇编语言程序实例3.2.1实例13.2.2实例2例3.1单个字符的键盘输入与显示输出程序

codesegmentassumecs:codestart:movah,1int21hmovdl,aladddl,1movah,2int21hmovah,4chint21hcodeendsendstart运行结果:键入A接着显示B,键入K接着显示L例3.2编写显示“HELLO,WORLD!”程序。

datasegmentStringdb‘HELLO,WORLD!$’dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetstringmovah,9int21hmovah,4chint21hcodeendsendstart

3.3程序实例的上机步骤3.3.1编辑--建立ASM源程序文件3.3.2汇编--产生OBJ二进制目标文件3.3.3连接--产生EXE可执行文件3.3.4关于LST列表文件3.3.5程序的运行和调试3.3.1编辑建立ASM源程序文件1.进入DOS命令行方式。2.假定汇编语言的系统工作文件目录为D:\MASM6.15\,其中D:\表示D盘的根目录。可以通过以下命令指向D盘:D:↙3.如果屏幕显示不在此目录,可以通过以下命令进入该目录:D:\>CD\MASM6.15↙注意,加黑字体是键入的命令。当屏幕显示进入该目录后,用如下命令编辑源程序文件:D:\>MASM6.15\>EDITHELLO.ASM↙3.3.2汇编--产生OBJ二进制目标文件假定汇编语言源程序文件HELLO.ASM已经在当前目录D:\MASM6.15\下,用如下命令进行汇编:D:\>MASM6.15\>MASMHELLO↙注意,加黑字体是键入的命令。该命令执行后,将产生一个同名的二进制目标文件HELLO.OBJ。下一步就是对这个HELLO.OBJ文件进行连接以产生最后的可执行文件。如果源程序有语法错误,则不会产生目标文件。同时报错,提示源程序的出错位置和错误原因。3.3.3连接产生EXE可执行文件使用连接程序LINK把目标文件(OBJ)转换为可执行的EXE文件。键入以下命令:D:\>MASM6.15\>LINKHELLO↙因为源程序中没有定义堆栈段,所以连接程序给出无堆栈段的警告,其实并不是错误,并不影响程序的运行。到此为止,连接过程已经结束。3.3.4关于LST列表文件D:\>MASM6.15\>MASMHELLOHELLOHELLO↙列表文件报告了汇编过程中产生的很多有价值的参考信息。主要包括源程序和机器语言清单、指令和变量的偏移地址等等。3.3.5程序的运行建立了EXE文件后,就可以直接在DOS的提示符下,输入EXE文件的文件名,如:

D>Hello↓

直接运行程序。对EXE文件无需扩展名就可执行。真正的可执行文件是生成的,不是用改名操作得到的。3.3.6程序的调试调试程序DEBUG.EXE是WINDOWS系统自带的。DEBUGHello.EXE“-”DEBUG命令提示符1.反汇编命令U格式1:U地址地址用偏移地址或者段地址:偏移地址表示。该命令从指定的地址开始,把机器语言反汇编为汇编语言。若省去指定地址,则以上一个U命令反汇编的最后一条指令地址的下一个单元作为起始地址。2.运行程序命令G格式:G[=起始地址][中止地址]起始地址规定了执行的起始地址。中止地址是断点地址,让程序暂停在某个位置=不能省掉。若省掉起始地址,则以当前CS:IP作为起始地址。默认段地址在段寄存器CS中。3.跟踪程序命令T格式1:T[=起始地址]单步执行程序,在指令执行中逐条进行跟踪,若省去地址,则从CS:IP现行值执行。格式2:T[=起始地址][指令条数]

可对多条指令进行跟踪。注意:对于INT指令不能使用T命令跟踪。4.单步执行程序指令PP命令,用以执行循环、重复的字符串指令、软件中断或子例程。例如T命令无法一次执行的INT指令,P命令就可以一次执行完这个系统例行程序,回到用户程序中。5.退出命令Q用Q命令退出DEBUG。/learn/UESTC-1002047009?tid=%201002147007#/learn/content?type=detail&id=1003315756&sm=15.退出命令Q用Q命令退出DEBUG。3.4在Win7系统中执行汇编对于初学者,使用DosBox是一个较好的64位环境下编译汇编程序的解决方案。下载安装DosBox,安装目录缺省为C:\ProgramFiles(x86)\DOSBox-0.74。3.4在Win7系统中执行汇编DosBox为Windows环境下Dos模拟器,可以将Dos程序放置在该环境中运行。其过程即为挂载。挂载命令为mount。这里需要挂载的Dos程序为汇编编译程序MASM6.15,如图3-19所示。在DosBox环境下Z:>提示符下键入命令mountC:D:\MASM6.15如果挂载成功,会在该命令的下面自动出现提示语句:DriveCismountedaslocaldirectoryD:\MASM6.15\3.4在Win7系统中执行汇编在DosBox环境下,查看C:目录下的文件,可以看出和Windows下D:\MASM6.15的文件完全一样。即mount命令将原本存放在Windows环境下的文件映射到了DosBox中。3.4在Win7系统中执行汇编需要提醒的是,如果在实际存放目录(本例中为D:\MASE6.15)中新存放一个事先写好的汇编程序,在DosBox中需要重新启动并进行挂载,才能对该汇编程序进行debug等相关操作。3.5几个常用的DOS系统功能调用21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能。汇编语言程序设计需要采用系统的各种功能程序。功能调用的格式通常按照如下4个步骤进行:⑴在AH寄存器中设置系统功能调用号⑵在指定寄存器中设置入口参数⑶执行指令INT21H,实现中断服务程序的功能调用⑷根据出口参数分析功能调用执行情况1.键盘输入一个字符并回显DOS功能调用INT21H功能号:AH=01H出口参数:AL=输入字符的ASCII码功能:等待从键盘输入一个字符,该字符的ASCII码送AL,并送屏幕显示。调用此功能时,若无输入,则会一直等待,直到输入后才继续。movah,01h ;功能号:ah←01h int21h ;功能调用

cmpal,’Y’ ;处理出口参数al jeyeskey ;是“Y” cmpal,’N’ jenokey ;是“N” yeskey: ...nokey: ...2.显示一个字符DOS功能调用INT21H功能号:AH=02H入口参数:DL=输出字符功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。在当前显示器光标位置显示一个问号movah,02h ;设置功能号:ah←02hmovdl,'?' ;提供入口参数:dl←'?'int21h ;DOS功能调用:显示问号3.显示字符串DOS功能调用INT21H功能号:AH=09H入口参数:DS:DX=欲显示字符串在主存中的首地址;字符串应以$(24H)结束功能:显示由DS:DX指定的字符串

stringdb'Hello,Everybody!$‘;在数据段定义要显示的字符串

...movah,09h;设置功能号ah←09hmovdx,offsetstring;提供入口参数 dx←字符串的偏移地址int21h ;DOS功能调用字符串显示第五周汇编语言程序设计2024-3-264.键盘输入到缓冲区DOS功能调用INT21H功能号:AH=0AH入口参数:DS:DX=缓冲区首地址(DS:DX)=缓冲区字节数功能:输入到缓冲区

缓冲区的定义第1字节事先填入最多欲接收的字符个数(包括回车字符,可以是1~255)第2字节将存放实际输入的字符个数(不包括回车符)第3字节开始将存放输入的字符串实际输入的字符数多于定义数时,多出的字符丢掉,且响铃

buffer db81;定义缓冲区;第1个字节填入可能输入的 最大字符数

db?;存放实际输入的字符数

db81dup(?);存放输入的字符串

... movdx,segbuffer ;伪指令seg取得buffer的段 地址

movds,dx ;设置数据段DS movdx,offsetbuffer movah,0ah int21h5.结束程序返回DOSDOS功能调用INT21H功能号:AH=4CH入口参数:AL=返回码功能:结束程序返回DOS

MOVAH,4CHINT21H第4章操作数的寻址方式4.1立即寻址方式4.2寄存器寻址方式4.3直接寻址方式4.4寄存器间接寻址方式4.5寄存器相对寻址方式4.6基址变址寻址方式4.7相对基址变址寻址方式第4章操作数的寻址方式计算机中的指令由操作码和操作数组成。操作数字段可以有一个、两个或三个,通常称为一地址、二地址或三地址指令。二地址指令中两个操作数分别称为源操作数和目的操作数。所谓寻址方式就是指令中寻找操作数的方式。80x86汇编语言指令的一般格式位:[标号:]指令助记符[操作数][;注释][]中的内容位可选项。标号:符号地址,表示指令在内存中的位置。标号后应加冒号:。指令助记符:指令名称,是指令功能的英文缩写。操作数:指令要操作的数据或数据所在的地址。寄存器,常量,变量,表达式。注释:每行以分号“;”开头,汇编程序不处理。4.1立即寻址方式立即寻址方式操作数就在指令中,紧跟在操作码之后,操作数作为指令的一部分存放在代码段。例4.1MOVAL,6H执行完此条指令后(AL)=06H例4.2MOVAX,12AFHAX=12AFH,即AH=12H,AL=AFH

注意:执行时无需去内存取数,因此称为立即数。主要用于寄存器赋初值。立即数只能作为源操作数,并且长度与目的操作数一致。4.2寄存器寻址方式操作数就是寄存器中的值。指令中给出寄存器名。例3.3MOVAX,BX指令执行后,AX=BX,BX保持不变。例MOVAL,BLMOVAX,BXMOVAL,BX错

MOVAX,BL错

注意:以上两种寻址方式都与存储器无关。以下各种寻址方式的操作数都在存储器中。偏移地址也称为有效地址(EA)。4.3直接寻址方式操作数的有效地址EA就在指令中。机器默认段地址在DS中。4.3直接寻址方式(1)存储器读操作例4-4MOVAX,DS:[2000H]该指令表示从数据段的2000H单元读出一个字送入AX。其中(DS)=1500H,(17000H)=31H,(17001H)=65H,(AX)=1020H。则有效地址EA=2000H物理地址=(DS)*10H+EA=15000H+2000H=17000H执行指令后:(AX)=6531H4.3直接寻址方式(2)存储器写操作如果要实现CPU写内存操作,只要把MOV指令的目的操作数变为存储单元,源操作数为CPU的寄存器即可。例4-5MOVDS:[4000H],AX将AX的值写入数据段的4000H单元。已知(DS)=1500H,(AX)=3946H。则有效地址EA=4000H物理地址=(DS)*10H+EA=15000H+4000H=19000H执行指令后:(19000H)=46H(19001H)=39H4.3直接寻址方式(3)符号地址直接寻址方式除了用数值作为有效地址之外,还可以用符号地址的形式。为存储单元定义一个名字,该名字就是符号地址。如果把存储单元看成变量,该名字也是变量名。4.3直接寻址方式(4)段前缀在与内存有关的寻址方式中,操作数的段地址默认为数据段,80X86规定除了数据段之外,数据还可以存放在其他三种段中。如果操作数在其他段中存放,称为段超越,需要在指令中用段超越前缀指出,即用操作数前加上段寄存器名和冒号表示。4.3直接寻址方式例4-7VALUEEQU1000HMOVAX,DS:[VALUE]MOVAX,ES:[VALUE]若已知(ES)=3600H,EA=VALUE=1000H,则有段超越前缀ES的指令源操作数的物理地址计算为:物理地址=(ES)*10H+EA=36000H+1000H=37000H若字单元(37000H)=9091H执行完MOVAX,ES:[VALUE]后:(AX)=9091H4.4寄存器间接寻址方式操作数的有效地址在寄存器中,只允许使用BX、BP、SI和DI寄存器。物理地址=10Hx(DS)+(BX)

物理地址=10Hx(DS)+(SI)物理地址=10Hx(DS)+(DI)

物理地址=10Hx(SS)+(BP)

4.4寄存器间接寻址方式4.4寄存器间接寻址方式例4-8MOVAX,[BX]已知(DS)=1500H,(BX)=4580H,则EA=(BX)=4580H物理地址=(DS)*10H+EA=15000H+4580H=19580H若(19580H)=2364H执行指令后:(AX)=2364H4.4寄存器间接寻址方式例4-9MOVES:[DI],AX已知(ES)=2500H,(DI)=5318H,则EA=(DI)=5318H物理地址=(ES)*10H+EA=25000H+5318H=2A318H若(AX)=2468H执行指令后:(2A318H)=68H(2A319H)=24H4.4寄存器间接寻址方式例4-10MOVAX,[BX];默认DS寄存器作段地址MOVDX,[BP];默认SS寄存器作段地址MOVES:[DI],AX;指定ES寄存器作段地址4.5寄存器相对寻址方式操作数的有效地址是一个寄存器和位移量之和。

物理地址=10Hx(DS)+(BX)+8(16)位位移量物理地址=10Hx(DS)+(SI)+8(16)位位移量物理地址=10Hx(DS)+(DI)+8(16)位位移量

物理地址=10Hx(SS)+(BP)+8(16)位位移量

4.5寄存器相对寻址方式例4-11MOVAX,TOP[SI]以上指令TOP为符号地址,即位移量。已知(DS)=1500H,(SI)=7310H,TOP=25H,则有效地址EA=(SI)+TOP=7310H+25H=7335H物理地址=(DS)*10H+EA=15000H+7335H=1C335H若(1C335H)=2428H,执行指令后,(AX)=2428H4.5寄存器相对寻址方式例4-12MOVAX,[BX+2623H]或写成MOVAX,[BX].2623H已知(DS)=1500H,(BX)=6854H,则有效地址EA=(BX)+2623H=8E77H物理地址=(DS)*10H+EA=15000H+8E77H=1DE77H若(1DE77H)=3567H,执行指令后:(AX)=3567H4.5寄存器相对寻址方式例4-13MOVAX,ARRY[BX]MOVAX,[ARRY][BX]MOVAX,[ARRY+BX]MOVAL,BUF[BX]MOVAL,[BX+8H]MOVAL,[BX].8H4.6基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。基址寄存器BX和BP,变址寄存器SI和DI。默认段寄存器搭配和寄存器间接寻址方式一样。4.6基址变址寻址方式例4-14MOVAX,[BX+DI]执行前:已知(DS)=2100H,(BX)=0158H,(DI)=10A5H,(221FD)=34H,(221FE)=95H,(AX)=0FFFFH。则有效地址EA=(BX)+(DI)=0158H+10A5H=11FDH物理地址=(DS)*10H+EA=21000H+11FDH=221FDH执行后,(AX)=9534H4.6基址变址寻址方式例4-15MOVAX,[BX][SI];默认DS寄存器作段地址MOVAX,[BP][DI];默认SS寄存器作段地址MOVAX,E

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论