资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
本教案内容第4章 汇编语言程序设计w汇编语言程序设计基础n源程序的汇编、连接与调试n分支程序设计技术n循环程序设计技术n子程序设计技术n综合程序设计示例4.2 源程序的汇编、连接与调 试汇编语言的基本编程过程可以总结成表4.2所示 步骤输入涉及的程序输出1编辑源程 序键盘“记事本”等myfileasm 2汇编源程 序myfileasmMASM 或 TASMmyfileobj3连接程序myfileobjLINK 或 TLINKmyfileexe4.2 源程序的汇编、连接与调 试一、编辑源程序利用编辑程序“记事本”等编写源程序,其规则应该遵循8086 CPU的指令系统的要求,源程序名的扩展名必须为ASM。例如myfileasm,下面以此为例加以说明。4.2 源程序的汇编、连接与调 试二、汇编源程序 汇编过程是利用汇编程序MASM对源程序文件进行汇编. MASM功能: p 找出源程序中指令格式的错误、标号变量定义错误 (存在没有定义或重复定义标号变量); p 生成三个文件:目标文件(myfileobj,必须产生 )、列表文件(myfilelst)和交叉索引文件( myfilecrf)。 1. 目标文件为指令、伪指令编译后的目标代码文件; 2. 列表文件中列出了程序代码、偏移地址以及出错信 息,可以方便地分页打印装订; 3. 交叉索引文件列出了程序中所定义地所有标识符和 标号及其引用情况。 4.2 源程序的汇编、连接与调 试汇编程序一般采用MASM,其使用格式为:MASM source,object,list,crossref 其中,source : 源程序文件名(可以不带扩展名)object : 目标文件名(也不带扩展名)list : 列表的文件名crossref : 交叉索引的文件名在实际使用的简略方式: MASM myfile;表示只生成myfileobj MASM myfile;按屏幕提示进行操作 MASM myfile,list;表示要生成myfileobj和myfilelst4.2 源程序的汇编、连接与调 试三、连接程序 连接程序LINK将目标程序连接成可执行文件。 p两个输入文件:目标文件(.obj)和库文件(.lib)(汇 编语言程序连接时不需要库文件,高级语言程序连接时需 要相应的库文件; p两个输出文件:可执行文件(.exe)和内存分配文件 (.map)。连接命令的常用格式有: LINK object;对目标文件进行连接,并生 成二进制代码文件(.exe) LINK object;没有命令末的分号, 这时可按屏幕提示进行操作 4.2 源程序的汇编、连接与调 试四、程序调试源程序编写后,通过汇编和连接后,就得到了 可以在计算机系统中直接执行的二进制代码文 件,但程序执行的结果是否正确则无法判断。 利用MASM对源程序汇编时可以检测出程序的语 法错误、指令用法错误,程序执行的情况需要 通过程序调试来完成。汇编语言程序的调试可以借助于专门的调试工 具软件DEBUG来实现。 4.2 源程序的汇编、连接与调 试DEBUG提供了强大的调试功能,主要有: l显示、修改寄存器和内存单元的内容(R命令) l按指定地址运行程序(G命令) l设置断点并分段执行程序(G命令) l反汇编目标代码(U命令) l单(多)条跟踪执行(单步执行)(T、P命令) l直接输入汇编语句(A命令) l显示并修改内存单元的内容(D、E、F命令) l读磁盘扇区 l读/写文件4.2 源程序的汇编、连接与调 试DEBUG软件的常用命令 1.启动DEBUGDEBUG d:path文件名.扩展名 启动DEBUG软件,并加载(装入)指定的文件,在 缺省文件名时,可直接DEBUG状态,其提示符为“ -”。上式中,“d:”为磁盘符号,表示可以指定 不同的驱动器;“path”表示路径名;文件必须 是包含扩展名的完整形式,在调试程序时,应该 是.exe文件。 例如要对myfile.exe进行调试,则可以输入:DEBUG myfile.exe4.2 源程序的汇编、连接与调 试2. 显示各个寄存器的内容 在DEBUG状态下,输入命令R,可以显示出所有寄存器的 当前内容,如图4.2 所示。通用寄存器和段寄存器的内 容一目了然,第二行的右端给出出了PSW中的8个状态标 志位,它们是采用字母来表示其意义的,依次分别为: 溢出标志(OF)、方向标志(DF)、中断允许标志(IF )、符号标志(SF)、零标志(ZF)、半进位标志(AF )、奇偶标志(PF)和进位标志(CF),其符号含义如 表4.3所示。图4.2中,最后一行表示所加载程序的第一 条即将执行的指令。标志位的符号含义 4.2 源程序的汇编、连接与调试标志位名称标志位为“1” 的符号标志位为“0” 的符号 溢出标志(OF)OVNV 方向标志(DF)DNUP 中断允许标志(IF)EIDI符号标志(SF)NGPL 零标志(ZF)ZRNZ 半进位标志(AF)ACNA奇偶标志(PF)PEPO 进位标志(CF)CYNC4.2 源程序的汇编、连接与调 试3. 显示并修改某个寄存器的内容当要显示并修改AX寄存器的内容时,也可以采用R命令,如:R AX这时DEBUG会显示出AX的当前内容“AX 0000”,并提示用户输入更改值,当不想修改时,可以直接按回车键。 4.2 源程序的汇编、连接与调 试4. 显示修改标志寄存器 利用R命令还可以修改个别标志位,例如输入 :R F 则会显示出当前的标志位状态“NV UP EI PL NZ NA PO NC - ”,并等待用户输入更改值, 当需要更改IF和CF时,可以直接输入“DICY” ,这时可以将IF位清0、CF位置1,而且输入顺 序可以不按标志位的次序。4.2 源程序的汇编、连接与调 试5. 反汇编目的代码可以利用U命令反汇编出内存中的二进制代码,即以汇编语言指令形式表示出二进制代码。 (1)U ;从当前CS:IP地址开始反汇编,每次对约32个字节的代码进行反汇编,下次U命令会从本次结束位置开始反汇编。 (2)U addr ;从指定地址(addr)开始进行反汇编。(3)U addr1,addr2 ;从地址1(addr1)反汇编到地址2(addr2)4.2 源程序的汇编、连接与调 试6. 设置断点并执行程序 可以利用G命令实现程序的分段执行。G命令主要有四种 格式: (1)G ;从当前地址(CS:IP)开始执行程序, 直到程序结束。 (2)Gaddr ;从指定地址(addr)开始执行程序,直 到程序结束。 (3)Gaddr1,addr2;从地址1(addr1)执行到 地址2(addr2),实际上在所指定的地址2处设置了一个 断点,这样可以使程序得以分段执行。 (4)G addr ;从当前地址CS:IP执行到指定的 地址(addr),即在addr处设置了断点。 4.2 源程序的汇编、连接与调 试7. 显示并修改内存单元的内容p D命令用于显示内存(存储)单元的内容;p E命令用于显示并修改存储单元的内容;p F命令用于给一块存储区域置入同一个值。D命令的常用格式有三种:4.2 源程序的汇编、连接与调 试D命令的常用格式有三种: (1)D Daddr:Offset;从指定地址开始显示128个字节单元的内容,Daddr指定段地址,缺省时为DS的内容,它可以直接指定段地址值,也可以为DS、ES、CS和SS;Offset用于指定段内偏移地址。 (2)D;继续上一次显示的内存位置开始显示128个字节单元的内容,如果是第一次显示,则从DS:0位置开始显示。 (3)D Daddr:Offset1 Offset2;从指定段的地址1(Offset1)显示到地址2(Offset2)。 4.2 源程序的汇编、连接与调 试E命令的常用格式有两种: (1)E Daddr:Offset;从指定地址开始显示一个字 节单元的内容,用户可以通过输入新值进行修改,按空格 键表示确认修改,这时会自动显示下一个单元的内容。如 果不修改该单元的内容,可以直接按空格键。按回车键表 示E命令结束。 (2)E Daddr:Offset Expression; 直接修改指定 单元的内容,Expression为多个字节内容构成的表达式, 字节之间用空格间隔。例如E100 10 20 30 40 50表示将 DS:100H开始的5个字节单元的内容改成“10H 20H 30H 40H 50H”。应该注意,在DEBUG下的所有数值只能是十六 进制数。4.2 源程序的汇编、连接与调 试F命令的常用格式有两种: (1)F Daddr:Offset1 Offset2 Expression ;以表达式(Expression)的值依次填入从地址1( Offset1)到地址2(Offset2)的所有单元,例如F100 200 55 AA表示将DS:100H到200H的所有单元间隔写入 55H和AAH。 (2)F Daddr:Offset L length Expression ;以表达式(Expression)的值依次填入从地址( Offset)开始、长度为length中的所有单元,例如 F100L100 55 AA表示将DS:100H到200H的所有单元间隔 写入55H和AAH。4.2 源程序的汇编、连接与调 试8内存单元内容的传送 在DEBUG下,利用M命令可以将一块区域的内容传送到 另一个位置,它常用的有两种格式: (1)M Daddr:Offset1 Offset2 Offset3 ;表示将从地址1(Offset1)到地址2( Offset2)的所有单元的内容传送到地址Offset3开始 的单元中,例如M100 200 300表示将DS:100H到200H 的所有单元传送到300H开始的单元中。 (2)M Daddr:Offset1 L length Offset2 ;将从地址1(Offset1)开始、长度为length 中的所有单元的内容传送到地址Offset2开始的单元中 。4.2 源程序的汇编、连接与调 试9程序的单步执行在DEBUG下,可以利用T命令或P命令单步执行程序,它们 不带任何参数,每次都会执行一条指令,同时会显示出所 有寄存器的内容(与R命令显示的形式一致)。 但T命令与P命令是有区别的,T命令每次执行汇编语言的 一条指令,而P命令每次执行汇编语言的一条语句,对于 像CALL sub、INT n这样的语句,执行T指令表示转向子程 序或中断服务子程序,而执行P命令时,则表示执行完整 个子程序或中断服务子程序,因此,在遇到DOS中断调用 指令时,经常采用P命令,以避免程序转入DOS本身的中断 服务子程序。4.2 源程序的汇编、连接与调 试10输入汇编语言指令 在DEBUG下,可以利用A命令直接输入汇编语言的指令,常 用格式有两种: (1)A Daddr:Offset;从指定地址Offset开始输入汇编语言指令,每输入一条指令,DEBUG软件会自 动编译该指令,并生成相应的二进制代码,同时计算出下 一条指令的存放地址,用户可以继续输入汇编语言指令。 如果按回车键则可以结束A命令。 (2)A;从上一次A命令结束的地址进行输入汇编语言指令,如果是第一次使用,则默认从CS :IP地址开始输入汇编语言指令。 4.2 源程序的汇编、连接与调 试11文件装入 在DEBUG下,可以重新装入文件,这时需要分两步:先指定 文件名(N命令),然后装入文件(L命令)。 N命令的格式为: N path file ;指定file为文件名,可以包含扩展名。 L命令的常用格式有两种: (1)L Daddr:Offset;将指定文件装入到从地址 Offset开始的单元中。 (2)L ;默认将文件装入到从CS:100H开始的单元中。 文件装入后,其装入的字节数存放在由BX和CX构成的32位寄 存器中,BX的内容为高16位,CX的内
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号