汇编语言程序设计DEBUG中G命令用法

兔毛147 2019-05-18 09:31:37
使用U命令之后发现到33结束,但是为什么G33之后就没反应了呢?请各位大佬指点一下,不胜感激
...全文
1068 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2019-05-18
  • 打赏
  • 举报
回复
那就是没运行到 33 处吧,上面有循环,可能是有异常没能终止,也可能是 35子程有问题没正常返回;单步走个循环看看就是。
兔毛147 2019-05-18
  • 打赏
  • 举报
回复
实验1 DEBUG的使用 1、实验目的 掌握DEBUG常用命令的使用;熟悉8086CPU内部有多少寄存器;掌握访问段式存储器结构地址的表示方法。 2、实验内容 将数据段的两个数求和,结果保存在数据段。源程序、机器语言程序如下: CS:0100 Al 00 00 MOV AX,[0000] CS:0103 03 06 02 00 ADD AX,[0002] CS;0107 A3 04 00 MOV [0004],AX CS:010A CB RETF 数据段内容如下: DS:0000 2301 2500 ;两个已知数 3、实验步骤 (1)用E命令键人上述机器语言程序和数据段的初值。 —E DS:000 2301 2500 —E DS:006 2A 2A 2A (2A为*标记,是为便于查看数据段内容而设置) —E CS:100 A1 00 00 03 06 02 00 —E CS:107 A3 04 00 CB (2)用D命令检查数据段、代码段内容。 —D DS:0 —D CS:100 (3)用T命令逐条执行上述程序,注意观察每条指令执行后相应寄存器的变化。 (4)用U命令反汇编本程序。 —U 100 10A (5)用R命令修改IP的内容为0100重新执行上述程序。 —R IP 显示:IP 010A :0100 (6)用G命令运行程序。 —G =CS:0100 107 观察:IP=AX= —G =CS:0100 10A 观察:IP=AX= 4、实验思考题 (1)用A命令输入源程序: CS:0100 MOV AX,FFFF STC 0104 MOV DS,AX MOV BX,DS MOV ES,BX MOV CX,ES MOV SS,CX MOV DX,SS MOV SP,DX MOV BP,SP MOV SI,BP MOV DI,SI JNB 012l XOR AX,DI JNZ 0125 CLC JMP 0104 0121 OR AX,DI JZ0100 0125 HLT (2)用T命令单步执行上述程序。观察结果,并注意标志寄存器的变化。
汇编语言程序设计 实 验 报 告 课程名称 汇编语言程序设计 班 级 姓 名 学 号 指导教师 汇编语言程序设计 实验一 DEBUG 程序使用技巧 1. 寄存器和内存 开始 Debug 程序。输入"Q( " 退出程序。再次启动 Debug。 输入 "r( "来显示CPU的当前状态和寄存器的当前内容。 输入 "r AX( "和"1234", AX 寄存器的内容变为 1234。 输入 "r DS( "和"2000", DS 寄存器的内容变为 2000。 输入 "d DS:1000( "来显示数据段 80H 字节数据,把数据抄在这里: 输入 "f DS:1000 1100 77( "再显示一次这 80H 字节。判断这条指令的作用是什么? 答:从DS:1000地址七 ,将1100H字节的内容赋值为77H 再输入 "d 2000:1000( "来显示数据段 80H 字节数据。观察与前面的数据有无不同。 输入 "d 1900:0100( "和"d 1ff0:0100( "来显示两个存储段的内容。比较其 2000:0000 段的数据。相同段落的数据相同么?根据你的观察,得出结论,是否程序员可以用 不同的段起始地址和偏移量组合,把不容内容存入相同的内存段。 答:相同段落的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段。 2.输入机器码,使用单步和断点 退出 Debug,再重新启动 Debug。 输入 "r( "观察 CPU 的状态,下一条指令是什么? 答:下一条指令是ADD [BX+SI],AL 使用两种方式输入一段程序,第一种方式:直接输入机器码。 输入 "u( "来显示程序段的指令序列。然后输入 "d CS:100( " 来显示代码段的数据。观察显示内容。 "u CS:100 106( "做反汇编,就是显示出汇编语句。将这几句汇编语句记录下来: 使用输入 "r( "观察 CPU 的状态,使用 "t( "来跟踪程序,直至最后一条指令执行完毕。注意,跟踪程序前,要让 IP 寄存器的值是 100H。一直监视 AX 和 IP 寄存器的内容变化,尤其是标志位的变化。 第二种方式,是输入汇编语句。重启 Debug 程序。 先输入 "a CS:100( ",然后输入: MOV AX, FF00 ADD AX,01F0 MOV BX,AX NEG BX ADD AX,BX 输入 "u CS:100 10A( "就可以得到这几条语句的机器码。把机器码记录下来: 使用命令"r ip( "再输入 "100( ",可以将寄存器 IP 的内容置为 "100H"。再输入"r( "观察 CPU 的状态,然后反复输入 "t( " 跟踪程序,直到程序结束。解释为什么标志位内容会有改变?另外,说明这段程序完成 什么任务? 答: (1)执行完指令: add ax,01f0后 结果为 100f0H 发生了进位,进位标志位发生改变,并且二进制的100f0H 1 的个数为偶数,所以奇偶标志位发生了改变。 (2)执行完指令:neg bx 即求补指令,bx由正数变为负数,符号标志位发生改变;二进制的1的数量有偶数变成奇 数,奇偶标志位发生改变。 (3) 执行完指令:add ax,bx,ax由00f0H 变为10000H,符号标志位发生改变,零标志位发生改变,奇偶标志位发生改变。 重新把寄存器 IP 的内容变为 100H,不使用跟踪命令 "t",改用"g 10c"来完成程序。 程序还可以加断点,做法是在程序加入 "int 3" 这条指令。如果这条指令在程序的末尾,我们可以通过输入 "g( " 来完成运行程序。这样就不需像上面需要告诉 Debug 程序最后机器码字节的地址偏移量了。"int 3"是 Debug 很有效的返回控制指令。把这条指令放在程序必要的位置上,在这条指令后面的代 码在不允许时就不会运行。 3.ASCII 字符码,从键盘输入,从显示器输出 (i) 标准 ASCII ( American Standard Code for Information Interchange ) 码使用 7- bit 二进制数来代表字符。一般文本信息经常用 ASCII 编码。 使用命令 "a CS:100( ", 输入下面的代码: MOV BX,0 MOV [BX],BL INC BX CMP BH,1 JNE 103 INT 3 使用 "d DS:0 100( "命令,显示程序运行前相应内存段的数据。运行上面的程序来填充 DS:0000-00FF 这段内存的内容。再次输入 "d DS:0 100( "命令来显示填充的内容。在窗口的右边,可以看到相应的ASCII码字符。 如果填充的内容不是字符,显示就用点表示。用类似

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧