[技术| 编程·课件·Linux] 为什么debug内存里是乱码

镕羽 · 发布于 2012-09-06 11:34 · 2205 次阅读
968
STACKSG SEGMENT STACK 'S'
DW 64 DUP('ST')
STACKSG ENDS
DATA  SEGMENT
da  DW 3,2,6,9,4,8,7,1,5  ;数组
CT   EQU ($-da)/2   ;元素个数
DATA  ENDS
CODE  SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACKSG
MAIN  PROC  FAR
MOV  AX,DATA
MOV  DS,AX

             mov di,ct-1 ;外循坏次数

l1:         mov cx,di  ;内循坏次数  

             mov bx,0 ;用于数组寻数

l2:         mov ax,da[bx] ;两个内存数无法直接比较

             cmp ax,da[bx+2] ;比较

             jle cont ;小于等于则转到cont继续循环

             xchg ax,da[bx+2] ;否则交换两数

             mov da[bx],ax

cont:      add bx,2 ;改变指针
             loop l2
             dec di  ;外循坏改变条件
             jnz l1  ;不为0则继续循环

MOV  AX,4C00H
INT  21H
MAIN  ENDP
CODE  ENDS
END  MAIN





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
共收到 12 条回复
镕羽 · #2 · 2012-9-6 11:37:11  回复 支持 反对
masm、  link  时都正确 ,也生产exe文件了

也运行了   可是对应的内存为什么还是乱码??

应该为 00 01  00  02  00 03.........00 09才对。
镕羽 · #3 · 2012-9-6 13:37:24  回复 支持 反对
补充:这是计算机组成原理作业  用汇编语言 编写冒泡排序
ouyang · #4 · 2012-9-6 15:53:34  回复 支持 反对
我的也是乱码,木有解决……求高人指导吧!
yang19910223 · #5 · 2012-9-6 21:05:03  回复 支持 反对
jle应该没错吧 我用的是jb,还有貌似用了-g指令后会系统会换过一个内存空间,再使用-d就是查看别的程序的内存空间了。可以使用-U指令查看你的DW数据块放在哪里了,也就是第一句汇编的 MOV AX,XXXX
比如-g
然后-u 看地址
然后-d XXXX:0000

点评

话说,你的头像是 小奴良吧~~  详情 回复 发表于 2012-9-7 17:34
谢谢,找到数据段的内存了 可是发现运行了maopao.exe后 ,内存里的数据并没有排序,还是无序的,我觉得代码逻辑并没有错,可以帮忙看看吗?  详情 回复 发表于 2012-9-7 12:13
镕羽 · #6 · 2012-9-7 12:13:16  回复 支持 反对
本帖最后由 镕羽 于 2012-9-7 12:14 编辑
yang19910223 发表于 2012-9-6 21:05
jle应该没错吧 我用的是jb,还有貌似用了-g指令后会系统会换过一个内存空间,再使用-d就是查看别的程序的内 ...

谢谢,找到数据段的内存了  可是发现运行了maopao.exe后  ,内存里的数据并没有排序,还是无序的,我觉得代码逻辑并没有错,可以帮忙看看吗?图片见楼下
镕羽 · #7 · 2012-9-7 12:14:21  回复 支持 反对
还是乱序的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
X1n4n · #8 · 2012-9-7 16:24:46  回复 支持 反对
镕羽 发表于 2012-9-7 12:14
还是乱序的

你没觉得你的这个“乱码”跟你定义的 WORD型数组的 是一样的吗?
其实 执行 debug maopao.exe 这个命令后 maopao.exe其实还没有执行呢。
要执行后才是排好序的啊。没执行的呢,当然就是你原来定义的数组顺序了。
debug maopao.exe
g
d XXXX:0000
先用g执行即可然后再查看。

点评

谢谢,可以了~~ 但是我在debug之前,先运行了maopao.exe了,如这样: D:\masm\maopao.exe D:\masm\debug maopao.exe 怎么回事啊,谢谢指教吾辈小白~~  详情 回复 发表于 2012-9-7 17:33
镕羽 · #9 · 2012-9-7 17:33:43  回复 支持 反对
X1n4n 发表于 2012-9-7 16:24
你没觉得你的这个“乱码”跟你定义的 WORD型数组的 是一样的吗?
其实 执行 debug maopao.exe 这个命令后 ...

谢谢,可以了~~
但是我在debug之前,先运行了maopao.exe了,如这样:

D:\masm\maopao.exe

D:\masm\debug maopao.exe

怎么回事啊,谢谢指教吾辈小白~~
镕羽 · #10 · 2012-9-7 17:34:21  回复 支持 反对
yang19910223 发表于 2012-9-6 21:05
jle应该没错吧 我用的是jb,还有貌似用了-g指令后会系统会换过一个内存空间,再使用-d就是查看别的程序的内 ...

话说,你的头像是 小奴良吧~~

点评

大奴良不够萌 就用小奴良了  详情 回复 发表于 2012-9-9 19:42
X1n4n · #11 · 2012-9-7 18:00:11  回复 支持 反对
D:\masm\maopao.exe 是你运行了一次,创建了一个进程然后程序排好序了,进程结束了。

对于 D:\masm\debug maopao.exe
debug是个调试器,它会启动程序,创建进程,然后挂起主线程。等待用户操作。此时可以执行单步 t 或者其它命令来调试程序。总之你要看内存必须要在这个进程的地址空间里看。捏那个第一句执行了一个进程这个进程debug感知不到与其无关。
BTW:不知小奴良为何物。。。=_=

点评

谢谢高手赐教~ 小奴良是回复之前楼上的同学的 一个动漫人物~  详情 回复 发表于 2012-9-7 21:01
镕羽 · #12 · 2012-9-7 21:01:13  回复 支持 反对
X1n4n 发表于 2012-9-7 18:00
D:\masm\maopao.exe 是你运行了一次,创建了一个进程然后程序排好序了,进程结束了。

对于 D:\masm\debu ...

谢谢高手赐教~

小奴良是回复之前楼上的同学的  一个动漫人物~
yang19910223 · #13 · 2012-9-9 19:42:31  回复 支持 反对
镕羽 发表于 2012-9-7 17:34
话说,你的头像是 小奴良吧~~

大奴良不够萌 就用小奴良了
回帖
B Color Image Link Quote Code Smilies
Command + Enter
快速回复 返回顶部 返回列表