汇编语言实验指导书_第1页
汇编语言实验指导书_第2页
汇编语言实验指导书_第3页
汇编语言实验指导书_第4页
汇编语言实验指导书_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言实验指导书王勇刘辉上海电力学院计算机系二00六年四月第I页目录实验一DEBUG命令实验1实验二字符串传递实验7实验三循环程序实验15实验四多重循环实验21实验五分支程序实验28实验六子程序参数传递实验34实验七子程序嵌套实验37实验八中断处理实验42实验九BIOS中断实验46实验十建立文件实验50实验十一读文件实验55实验十二综合性实验60第1页实验一DEBUG命令实验一实验目的掌握DEBUG的基本命令及其功能二实验内容DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。1、DEBUG程序的启动DEBUG的命令格式DRIVEPATHDEBUGDPFILENAMEEXTPARAM其中DRIVE是指定DEBUG文件的磁盘驱动器标识符,DEBUG是外部DOS命令,所以必须把它从磁盘读入内存。若未指定,DOS将使用当前默认磁盘驱动器。PATH是DOS查找DEBUG文件的一个子目录串表示的路径。若未指定,DOS将使用当前工作目录。D是DEBUG将要调试的文件所在的磁盘驱动器。P是查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。FILENAMEEXT是DEBUG将要调试的文件名。PARAM是将被调试的程序(或文件)的命令行参数。例如在DOS提示符下,可键入命令CDEBUGDEBUG所完成的初始化动作,假定文件名没有,启动DEBUG段寄存器CS、DS、ES和SS置为DEBUG程序后的第一个段。指令指针寄存器IP置为100H(程序段前缀PSP后的第一个语句)。堆栈指针SP置为段末或COMMANDCOM暂驻部分的结束地址(其中较小的那个地址)。其余通用寄存器均置为0,标志寄存器置为下述状态。NVUPEIPLNENAPONC如果在DOS提示符下,可键入命令,包含文件名CDEBUGNAMEEXE段寄存器DS和ES指向PSP。寄存器BX和CX含有程序长度。2、DEBUG的主要命令(1)汇编命令A,格式为A地址该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继第2页存放在从指定地址开始的存储器中。例如A136B0100MOVAX,100136B0103MOVBX,200136B0106MOVCX,300136B0109MOVDX,400136B010C(2)反汇编命令U,有两种格式1)U地址该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。例如U13C900001EPUSHDS13C900012BC0SUBAX,AX13C9000350PUSHAX13C90004B8C313MOVAX,13C313C900078ED8MOVDS,AX13C90009B8C613MOVAX,13C613C9000C8EC0MOVES,AX13C9000E8D360000LEASI,000013C900128D3E0000LEADI,000013C90016FCCLD13C90017B92800MOVCX,002813C9001AF3REPZ13C9001BA4MOVSB13C9001CCBRETF13C9001D0000ADDBXSI,AL13C9001F0000ADDBXSI,AL2)U范围该命令对指定范围的内存单元进行反汇编,例如第3页U13C9000E001B13C9000E8D360000LEASI,000013C900128D3E0000LEADI,000013C90016FCCLD13C90017B92800MOVCX,002813C9001AF3REPZ13C9001BA4MOVSB(3)运行命令G,格式为G地址1地址2地址3。其中地址1规定了运行起始地址,后面的若干地址均为断点地址。例如G1CAX13C6BX0000CX0000DX0000SPFFFCBP0000SI0028DI0028DS13C3ES13C6SS13C3CS13C9IP001CNVUPEIPLZRNAPENC13C9001CCBRETF(4)追踪命令T,有两种格式1)逐条指令追踪T地址该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。TAX0000BX0000CX007DDX0000SPFFFEBP0000SI0000DI0000DS13B3ES13B3SS13C3CS13C9IP0001NVUPEIPLNZNAPONC13C900012BC0SUBAX,AX2)多条指令追踪T地址值该命令从指定地址起执行N条命令后停下来,N由值确定。T3AX0000BX0000CX007DDX0000SPFFFEBP0000SI0000DI0000DS13B3ES13B3SS13C3CS13C9IP0001NVUPEIPLNZNAPONC13C900012BC0SUBAX,AX第4页AX0000BX0000CX007DDX0000SPFFFEBP0000SI0000DI0000DS13B3ES13B3SS13C3CS13C9IP0003NVUPEIPLZRNAPENC13C9000350PUSHAXAX0000BX0000CX007DDX0000SPFFFCBP0000SI0000DI0000DS13B3ES13B3SS13C3CS13C9IP0004NVUPEIPLZRNAPENC13C90004B8C313MOVAX,13C3(5)显示内存单元内容的命令D,格式为D地址或D范围DDS013C3000061616161616161616161616161616161AAAAAAAAAAAAAAAA13C3001061616161616161616161616161616161AAAAAAAAAAAAAAAA13C3002061616161616161610000000000000000AAAAAAAA13C3003061616161616161616161616161616161AAAAAAAAAAAAAAAA13C3004061616161616161616161616161616161AAAAAAAAAAAAAAAA13C3005061616161616161610000000000000000AAAAAAAA13C300601E2BC050B8C3138ED8B8C6138EC08D36P613C3007000008D3E0000FCB92800F3A4CB000000(6)修改内存单元内容的命令E,它有两种格式1)用给定的内容代替指定范围的单元内容E地址内容表例如E20000100F3“XYZ”8D其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元20000100到0104的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。2)逐个单元相继地修改E地址例如E10018E401008978此命令是将原100号单元的内容89改为78。78是程序员键入的。(7)检查和修改寄存器内容的命令R,它有三种方式1)显示CPU内部所有寄存器内容和标志位状态;格式为RR命令显示中标志位状态的含义如下表所示第5页标志名置位复位溢出OVERFLOW(是/否)OVNV方向DIRECTION(减量/增量)DNUP中断INTERRUPT(允许/屏蔽)EIDI符号SIGN(负/正)NGPL零ZERO(是/否)ZRNZ辅助进位AUXILIARYCARRY(是/否)ACNA奇偶PARITY(偶/奇)PEPO进位CARRY(是/否)CYNC2)显示和修改某个指定寄存器内容,格式为R寄存器名例如打入RAX系统将响应如下AXFIF4表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如RBXBX0369059F则BX内容由0369改为059F3)显示和修改标志位状态,命令格式为RF系统将给出响应,如OVDNEINGZRACPECY这时若不作修改可按ENTER键,否则在“”号之后键入修改值,键入顺序任意。如OVDNEINGZRACPECYPONZDINV(8)命名命令N,格式为N文件名此命令将文件名格式化在CS5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。(9)装入命令L,它有两种功能1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为第6页L地址驱动器扇区号扇区数2)装入指定文件,格式为L地址此命令装入已在CS5CH中格式化的文件控制块所指定的文件。在用L命令前,BX和CX中应包含所读文件的字节数。(10)写命令W,有两种格式1)把数据写入磁盘的指定扇区W地址驱动器扇区号扇区数2)把数据写入指定文件中W地址此命令把指定内存区域中的数据写入由CS5CH处的FCB所规定的文件中。在用W命令前,BX和CX中应包含要写入文件的字节数。(11)退出DEBUG命令Q,该命令格式为Q它退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。三实验要求四实验报告写出在DEBUG状态下编写、运行程序的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。第7页实验二字符串传递实验一实验目的掌握字符串的传递过程二实验内容P146例430把40个字母A的字符串从源缓冲区传送到目的缓冲区DOS命令行格式下,按F5键可以输出上次输入的命令把DOS命令行格式下运行结果直接写入文件,用重定向符命令CMASM58ASMMOREGMASMRESULT58DOC1、编译CMASMASM2、链接CLINKOBJ3、调试CDEBUGEXE4、运行CEXE1)先用命令U反汇编整个程序,查看每条指令的物理地址,1、编译CMASM430ASMMICROSOFTRMACROASSEMBLERVERSION500COPYRIGHTCMICROSOFTCORP19811985,1987ALLRIGHTSRESERVEDSOURCELISTINGNULLSTCROSSREFERENCENULCRF50792450136BYTESSYMBOLSPACEFREE0WARNINGERRORS0SEVEREERRORS2、链接CLINK430OBJMICROSOFTROVERLAYLINKERVERSION360COPYRIGHTCMICROSOFTCORP19831987ALLRIGHTSRESERVEDRUNFILE430EXELISTFILENULMAPLIBRARIESLIBLINKWARNINGL4021NOSTACKSEGMENT3、调试CDEBUG430EXE1)、先用命令U反汇编整个程序,查看每条指令的物理地址,其显示内容的含义为内存地址指令代码反汇编的程序代码U0B7500001EPUSHDS第8页0B7500012BC0SUBAX,AX0B75000350PUSHAX0B750004B86F0BMOVAX,0B6F数据段的首地址DS0B6F0B7500078ED8MOVDS,AX0B750009B8720BMOVAX,0B72附加段的首地址ES0B720B75000C8EC0MOVES,AX0B75000E8D360000LEASI,00000B7500128D3E0000LEADI,00000B750016FCCLD0B750017B92800MOVCX,00280B75001AF3REPZ0B75001BA4MOVSB0B75001CB402MOVAH,02为了在DOS格式下,程序运行完毕后可以看到运行结果,特地增加了一个输入语句0B75001ECD21INT21U0B750020CBRETF2)、从上一步结果中找到数据段的首地址0B6F,附加段的首地址0B72,查看里面存储的数据,数据段从首地址0B6F开始40个字节中存储了40个字符AD0B6F00000B6F000061616161616161616161616161616161AAAAAAAAAAAAAAAA0B6F001061616161616161616161616161616161AAAAAAAAAAAAAAAA0B6F002061616161616161610000000000000000AAAAAAAA0B6F0030000000000000000000000000000000000B6F0040000000000000000000000000000000000B6F0050000000000000000000000000000000000B6F00601E2BC050B86F0B8ED8B8720B8EC08D36POR60B6F007000008D3E0000FCB92800F3A4B402CD21D0B720000;附加段从首地址0B72开始40个字节中存储了40个空字符0B720000000000000000000000000000000000000B720010000000000000000000000000000000000B720020000000000000000000000000000000000B7200301E2BC050B86F0B8ED8B8720B8EC08D36POR60B72004000008D3E0000FCB92800F3A4B402CD210B720050CB0000000000000000000000000000000B72006061616161616161616161616161616161AAAAAAAAAAAAAAAA0B72007061616161616161616161616161616161AAAAAAAAAAAAAAAA第9页3)、从反汇编地址中找到把数据段的首地址0B6F传给寄存器AX的指令地址0B750007,用G命令执行到地址0007,然后用T命令单步执行,看寄存器AX,DS,ES的内容的变化G0007AX0B6FBX0000CX0111DX0000SPFFFCBP0000SI0000DI0000DS0B5FES0B5FSS0B6FCS0B75IP0007NVUPEIPLZRNAPENC0B7500078ED8MOVDS,AXTAX0B6FBX0000CX0111DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B5FSS0B6FCS0B75IP0009NVUPEIPLZRNAPENC0B750009B8720BMOVAX,0B72TAX0B72BX0000CX0111DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B5FSS0B6FCS0B75IP000CNVUPEIPLZRNAPENC0B75000C8EC0MOVES,AXTAX0B72BX0000CX0111DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B72SS0B6FCS0B75IP000ENVUPEIPLZRNAPENC0B75000E8D360000LEASI,0000DS00006161TAX0B72BX0000CX0111DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B72SS0B6FCS0B75IP0012NVUPEIPLZRNAPENC0B7500128D3E0000LEADI,0000DS00006161TAX0B72BX0000CX0111DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B72SS0B6FCS0B75IP0016NVUPEIPLZRNAPENC0B750016FCCLD4)、让程序执行到传送准备工作完成后的地址0B750016FCCLD,查看源偏移地址SI和目标偏移地址DI的值,以及移动次数存放的寄存器CX,然后用T命令单步执行,看寄存器源地址(DSDI)和目标地址(ESSI)的内容的变化G0016AX0B72BX0000CX0111DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B72SS0B6FCS0B75IP0016NVUPEIPLZRNAPENC0B750016FCCLDTAX0B72BX0000CX0111DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B72SS0B6FCS0B75IP0017NVUPEIPLZRNAPENC0B750017B92800MOVCX,0028T第10页AX0B72BX0000CX0028DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX0027DX0000SPFFFCBP0000SI0001DI0001DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX0026DX0000SPFFFCBP0000SI0002DI0002DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX0025DX0000SPFFFCBP0000SI0003DI0003DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBDDS0000;进行了三次传送操作后,查看一下源缓冲区和目的缓冲区的内容0B6F000061616161616161616161616161616161AAAAAAAAAAAAAAAA0B6F001061616161616161616161616161616161AAAAAAAAAAAAAAAA0B6F002061616161616161610000000000000000AAAAAAAA0B6F003061616100000000000000000000000000AAA0B6F0040000000000000000000000000000000000B6F0050000000000000000000000000000000000B6F00601E2BC050B86F0B8ED8B8720B8EC08D36POR60B6F007000008D3E0000FCB92800F3A4B402CD21DES00000B72000061616100000000000000000000000000AAA0B720010000000000000000000000000000000000B720020000000000000000000000000000000000B7200301E2BC050B86F0B8ED8B8720B8EC08D36POR60B72004000008D3E0000FCB92800F3A4B402CD210B720050CB0000000000000000000000000000000B72006061616161616161616161616161616161AAAAAAAAAAAAAAAA0B72007061616161616161616161616161616161AAAAAAAAAAAAAAAA第11页R用R命令查看一下各个寄存器的内容AX0B72BX0000CX0025DX0000SPFFFCBP0000SI0003DI0003DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSB用E命令修改源缓冲区的内容,然后执行传送操作,看目的缓冲区的内容的变化E0B6F00040B6F000461676168616961700B6F000861716171DDS00000B6F000061616161676869707171616161616161AAAAGHIPQQAAAAAA0B6F001061616161616161616161616161616161AAAAAAAAAAAAAAAA0B6F002061616161616161610000000000000000AAAAAAAA0B6F003061616100000000000000000000000000AAA0B6F0040000000000000000000000000000000000B6F0050000000000000000000000000000000000B6F00601E2BC050B86F0B8ED8B8720B8EC08D36POR60B6F007000008D3E0000FCB92800F3A4B402CD21TAX0B72BX0000CX0024DX0000SPFFFCBP0000SI0004DI0004DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX0023DX0000SPFFFCBP0000SI0005DI0005DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX0022DX0000SPFFFCBP0000SI0006DI0006DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX0021DX0000SPFFFCBP0000SI0007DI0007DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC第12页0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX0020DX0000SPFFFCBP0000SI0008DI0008DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSB源缓冲区变化了的内容传送到了目的缓冲区,结果如下DES00000B72000061616161676869700000000000000000AAAAGHIP0B720010000000000000000000000000000000000B720020000000000000000000000000000000000B7200301E2BC050B86F0B8ED8B8720B8EC08D36POR60B72004000008D3E0000FCB92800F3A4B402CD210B720050CB0000000000000000000000000000000B72006061616161616161616161616161616161AAAAAAAAAAAAAAAA0B72007061616161616161616161616161616161AAAAAAAAAAAAAAAARAX0B72BX0000CX0020DX0000SPFFFCBP0000SI0008DI0008DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSB用F命令修改源缓冲区的内容,然后执行传送操作,看目的缓冲区的内容的变化F0B6F00060009“YUPKH“TAX0B72BX0000CX001FDX0000SPFFFCBP0000SI0009DI0009DS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX001EDX0000SPFFFCBP0000SI000ADI000ADS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX001DDX0000SPFFFCBP0000SI000BDI000BDS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC第13页0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX001CDX0000SPFFFCBP0000SI000CDI000CDS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSBTAX0B72BX0000CX001BDX0000SPFFFCBP0000SI000DDI000DDS0B6FES0B72SS0B6FCS0B75IP001ANVUPEIPLZRNAPENC0B75001AF3REPZ0B75001BA4MOVSB把源缓冲区中从地址0B6F0006到0009的内容改为“YUPK“,但在执行此次块修改命令F前,源缓冲区的前8个字符已经传送到目的缓冲区,所以此次块修改命令F执行后,源缓冲区内容从地址0B6F0006到0009的内容改为“YUPK“,执行若干次传送指令后,目的缓冲区内从ES0008到0009之间的内容接收了源缓冲区的内容“PK“,如下结果DES00000B7200006161616167686970706B616161000000AAAAGHIPPKAAA0B720010000000000000000000000000000000000B720020000000000000000000000000000000000B7200301E2BC050B86F0B8ED8B8720B8EC08D36POR60B72004000008D3E0000FCB92800F3A4B402CD210B720050CB0000000000000000000000000000000B72006061616161616161616161616161616161AAAAAAAAAAAAAAAA0B72007061616161616161616161616161616161AAAAAAAAAAAAAAAA5、完全执行程序,最后再显示目标地址(ESSI)的内容的变化G001CAX0B72BX0000CX0000DX0000SPFFFCBP0000SI0028DI0028DS0B6FES0B72SS0B6FCS0B75IP001CNVUPEIPLZRNAPENC0B75001CB402MOVAH,02DES00000B7200006161616167686970706B616161616161AAAAGHIPPKAAAAAA0B72001061616161616161616161616161616161AAAAAAAAAAAAAAAA0B72002061616161616161610000000000000000AAAAAAAA0B7200301E2BC050B86F0B8ED8B8720B8EC08D36POR60B72004000008D3E0000FCB92800F3A4B402CD210B720050CB000000000000000000000000000000第14页0B72006061616161616161616161616161616161AAAAAAAAAAAAAAAA0B72007061616161616161616161616161616161AAAAAAAAAAAAAAAAOQ三实验要求四实验报告写出在DEBUG状态下编写、运行程序的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。第15页实验三循环程序实验一实验目的掌握循环程序编写方法二实验内容例51编制一个程序,把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。本例为调试方便,把要转换的二进制数定义在数据段中,在程序中把数据段中定义的数据取到BX寄存器内1、编译CMASM51ASMINVALIDKEYBOARDCODESPECIFIEDMICROSOFTRMACROASSEMBLERVERSION500COPYRIGHTCMICROSOFTCORP19811985,1987ALLRIGHTSRESERVEDSOURCELISTINGNULLSTCROSSREFERENCENULCRF50680450248BYTESSYMBOLSPACEFREE0WARNINGERRORS0SEVEREERRORS2、链接CLINK51OBJMICROSOFTROVERLAYLINKERVERSION360COPYRIGHTCMICROSOFTCORP19831987ALLRIGHTSRESERVEDRUNFILE51EXELISTFILENULMAPLIBRARIESLIBLINKWARNINGL4021NOSTACKSEGMENT3、调试CDEBUG51EXEU0B6F0000C9DBC90B6F00014ADECDX0B6F00020000ADDBXSI,AL0B6F00040000ADDBXSI,AL0B6F00060000ADDBXSI,AL0B6F00080000ADDBXSI,AL0B6F000A0000ADDBXSI,AL0B6F000C0000ADDBXSI,AL0B6F000E0000ADDBXSI,AL0B6F00101EPUSHDS0B6F00112BC0SUBAX,AX第16页0B6F001350PUSHAX0B6F0014B86F0BMOVAX,0B6F0B6F00178ED8MOVDS,AX0B6F00198D3E0000LEADI,00000B6F001D8B1DMOVBX,DI0B6F001FB504MOVCH,04;发现反汇编的结果有些代码不是本程序的,找到本程序代码的起始地址,重新反汇编U0B6F00100B6F00101EPUSHDS0B6F00112BC0SUBAX,AX0B6F001350PUSHAX0B6F0014B86F0BMOVAX,0B6F0B6F00178ED8MOVDS,AX0B6F00198D3E0000LEADI,00000B6F001D8B1DMOVBX,DI0B6F001FB504MOVCH,040B6F0021B104MOVCL,040B6F0023D3C3ROLBX,CL0B6F00258AC3MOVAL,BL0B6F0027240FANDAL,0F0B6F00290430ADDAL,300B6F002B3C3ACMPAL,3A0B6F002D7C02JL00310B6F002F0407ADDAL,07U0B6F00318AD0MOVDL,AL0B6F0033B402MOVAH,020B6F0035CD21INT210B6F0037FECDDECCH0B6F003975E6JNZ00210B6F003BB401MOVAH,010B6F003DCD21INT210B6F003FB8004CMOVAX,4C000B6F0042CD21INT212查看BX寄存器是否正确地取得了值G0B6F001DAX0B6FBX0000CX0094DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP001DNVUPEIPLZRNAPENC0B6F001D8B1DMOVBX,DIDS00000B5FG0023第17页AX0B6FBX0B5FCX0404DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0023NVUPEIPLZRNAPENC0B6F0023D3C3ROLBX,CLT;验证BX寄存器内的值的最高位是否移到了最低位AX0B6FBXB5F0CX0404DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0025OVUPEIPLZRNAPENC0B6F00258AC3MOVAL,BLTAX0BF0BXB5F0CX0404DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0027OVUPEIPLZRNAPENC0B6F0027240FANDAL,0FT;验证ANDAL,0F的作用AX0B00BXB5F0CX0404DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0029NVUPEIPLZRNAPENC0B6F00290430ADDAL,30T;由数字转化为字符,为输出作准备AX0B30BXB5F0CX0404DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP002BNVUPEIPLNZNAPENC0B6F002B3C3ACMPAL,3A3)、在调试时,有关21号中断的处理G0033AX0B30BXB5F0CX0404DXFF30SPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0033NVUPEINGNZACPECY0B6F0033B402MOVAH,02TAX0230BXB5F0CX0404DXFF30SPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0035NVUPEINGNZACPECY0B6F0035CD21INT21TAX0230BXB5F0CX0404DXFF30SPFFF8BP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS00A7IP107CNVUPDINGNZACPECY00A7107C90NOPG00370B5FTPROGRAMTERMINATEDNORMALLY;上述几条指令执行完毕,发现数据并没有正确输出,并且整个调试过程非法中断。对这种输入输出的调试方法是用G命令让程序直接执行到INT21语句的下一条语句。如下操作第18页G0033AX0B30BXB5F0CX0404DXFF30SPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0033NVUPEINGNZACPECY0B6F0033B402MOVAH,02G00390;将第一个字符正确输出AX0201BXB5F0CX0304DXFF30SPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0039NVUPEIPLNZNAPECY0B6F003975E6JNZ0021;程序判断条件是否跳转到下一次的输出处理程序处,CF位的值为CY,所以跳转TAX0201BXB5F0CX0304DXFF30SPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0021NVUPEIPLNZNAPECY0B6F0021B104MOVCL,04TAX0201BXB5F0CX0304DXFF30SPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP0023NVUPEIPLNZNAPECY0B6F0023D3C3ROLBX,CL4)、直接执行到所有的字符都输出的地方G003BB5F;输出其余三个字符AX0201BX0B5FCX0004DXFF46SPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP003BNVUPEIPLZRNAPENC0B6F003BB401MOVAH,01G003F;直接执行到输入语句下一条语句,保证调试正确进行EAX0165BX0B5FCX0004DXFF46SPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP003FNVUPEIPLZRNAPENC0B6F003FB8004CMOVAX,4C00Q第19页5)、用E命令直接修改数据段内的值,查看BX寄存器取得何值G001DAX0B6FBX0000CX0094DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP001DNVUPEIPLZRNAPENC0B6F001D8B1DMOVBX,DIDS00000B5F;原始数据段内的数据EDS0000;用E命令直接修改数据段内的值0B6F00005F90BF;通过键盘输入修改的值G001DAX0B6FBX0000CX0094DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP001DNVUPEIPLZRNAPENC0B6F001D8B1DMOVBX,DIDS00000F09;数据段内的数据修改为刚才输入的值TAX0B6FBX0F09CX0094DXFFFFSPFFFEBP4AC9SI0000DI0000DS0B6FES0B5FSS0B6FCS0B6FIP001FNVUPEIPLZRNAPENC0B6F001FB504MOVCH,04DDS00000B6F0000090F00000000000000000000000000000B6F00101E2BC050B86F0B8ED88D3E00008B1DB5PO0B6F002004B104D3C38AC3240F04303C3A7C020400B6F007004B104D3C38AC3240F04303C3A7C020400BAF00400000893E0200268B0D890E0000BB0100EWUTOL0B74004090268B35D1E603F7263B047206743DF9RT0B740050EB3A90C70600000100268B1D891E0200W0B740070D1E98BF1D1E6263B007411770749890ETWIT;运行后AX寄存器的内容发生了变化AX0007BX0000CX01F6DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B74SS0B6FCS0B76IP000FNVUPEIPLNZNAPONC0B76000FBF0000MOVDI,00003)查看在数组中比较AX内容的过程G0016第31页;比较后程序的走向AX0007BX0000CX01F6DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B74SS0B6FCS0B76IP0016NVUPEIPLNZNAPENC0B7600167709JA0021TAX0007BX0000CX01F6DX0000SPFFFCBP0000SI0000DI0000DS0B6FES0B74SS0B6FCS0B76IP0021NVUPEIPLNZNAPENC0B76002126ES0B7600228B35MOVSI,DIES0000000ATAX0007BX0000CX01F6DX0000SPFFFCBP0000SI000ADI0000DS0B6FES0B74SS0B6FCS0B76IP0024NVUPEIPLNZNAPENC0B760024D1E6SHLSI,1T;执行完SHLSI,1后SI的值的变化,验证SHL指令的左移AX0007BX0000CX01F6DX0000SPFFFCBP0000SI0014DI0000DS0B6FES0B74SS0B6FCS0B76IP0026NVUPEIPLNZNAPENC0B76002603F7ADDSI,DIG004A;CX和DX寄存器取得地之后,比较它们存放的值AX0007BX0000CX0001DX000ASPFFFCBP0000SI0014DI0000DS0B6FES0B74SS0B6FCS0B76IP004ANVUPEINGNZACPOCY0B76004A3BCACMPCX,DXDDS00000B6F000001000A00746865206D756D6265722069THEMUMBERI0B6F00107320696E207468652061727261790D0ASINTHEARRAY0B6F00202420746865206E756D62657220697320THENUMBERIS0B6F00306E6F7420696E20746865206172726179NOTINTHEARRAY0B6F00400D0A20240000000000000000000000000B6F00500A00020004000600070008000C000F000B6F0060170019001D00000000000000000000000B6F00701E50B8740B8EC0B86F0B8ED8B80700BFPTODES0000第32页0B7400000A00020004000600070008000C000F000B740010170019001D00000000000000000000000B7400201E50B8740B8EC0B86F0B8ED8B80700BFPTO0B7400300000263B450277098D7502744FF9EB4CEWUTOL0B74004090268B35D1E603F7263B047206743DF9RT0B740050EB3A90C70600000100268B1D891E0200W0B740070D1E98BF1D1E6263B007411770749890ETWITAX0007BX0000CX0001DX000ASPFFFCBP0000SI0014DI0000DS0B6FES0B74SS0B6FCS0B76IP004CNVUPEINGNZACPOCY0B76004C771DJA006BG0057;在数组中是否找到该元素AX0007BX0000CX0005DX000ASPFFFCBP0000SI000ADI0000DS0B6FES0B74SS0B6FCS0B76IP0057NVUPEIPLNZNAPENC0B7600573B00CMPAX,BXSIDS000A626DTAX0007BX0000CX0005DX000ASPFFFCBP0000SI000ADI0000DS0B6FES0B74SS0B6FCS0B76IP0059NVUPEINGNZACPECY0B7600597411JZ006C4)是否找到,可以查看FLAGS标志位的CF值,用LAHF指令把FLAGS标志位放入AH寄存器,只取出CF位即可G00

温馨提示

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

评论

0/150

提交评论