用汇编语言执行c=a+b,为什么在DEBUG里看不到c的结果

汇编语言程序调试啊datasegmentadw100hbdw250hcdw?dataendscodesegmentassumecs:code,ds:datastart:m... 汇编语言程序调试啊
data segment
a dw 100h
b dw 250h
c dw ?
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov ax,a
add ax,b
mov c,ax
mov ah,4ch
int 21h
code ends
end start
听老师说在DEBUG里面可以看到运算过程及结果,但是我在自己电脑上运行的时候看到c的值是0,是怎么回事啊?
展开
 我来答
xihk
2010-09-04
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部

首先,你应该知道debug 的简单命令:

-u 反汇编

-g [range]执行到指定。。

-d [adress] 查看内存

这样,你想看c的值,就用-d命令查看c所在的内存

下面给你截了个小图,自己试试吧!

需要注意的是数据在内存中是小端存储,简单的说,前面你把c定义成字,内存中低八位应在高八位的前面....

另外,完全可以通过系统调用将c的值显示在显示器上...

好了,给分吧!

_fmlyht
2010-09-04 · TA获得超过2359个赞
知道大有可为答主
回答量:2398
采纳率:0%
帮助的人:1819万
展开全部
代码没有问题!

请问你是怎么看的?

debug加载源文件,跟踪到mov c,ax,并执行,查看c的内容,看AX也一样的,然后跟踪直到退出。

c的值是0绝对超小概率事件,你运气很不错!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6205bc1
2010-09-04 · TA获得超过6004个赞
知道大有可为答主
回答量:5933
采纳率:20%
帮助的人:2731万
展开全部

a b是标号,所以想用在代码段中,必须把他们所在的段和某寄存器联系起来,你题中是把DATA的数据段跟CS联系起来,所以,应该再用一个寄存器来作为偏移。

mov si, 0
然后
mov ax,a[si]
add si, 2
add ax,b[si]
这样才可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
z85525006
2010-09-04 · TA获得超过1003个赞
知道小有建树答主
回答量:672
采纳率:0%
帮助的人:562万
展开全部
我的怀疑是 dw,毕竟 ax 只是16位的寄存器,不是 eax
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-09-03
展开全部
你用的是什么编译器?用Tc的话可以用Alt+F5查看,或者在最后加getch();
用Vc的话可以采用断点标志,将光标移动到最后一行,在点击一下菜单栏里的小手,再运行就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式