| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1136 人关注过本帖
标题:我是一个菜鸟!我有一个问题!
只看楼主 加入收藏
lasonberg
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-8-10
收藏
 问题点数:0 回复次数:4 
我是一个菜鸟!我有一个问题!
刚接触汇编,就有了很多问题,但痛并快乐着。。。。
问题:编程计算下面8个数据的和,所得结果存入寄存器AX中(0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H)。
由于当时我还没学到DW(当然现在会用了!)所以用了笨蛋的方法做的!程序写的很笨,大家不要笑哈!
assume cs:code , ds:data
data segment
mov ax,0020H
mov ds,ax
mov ds:[0],0123H
mov ds:[2],0456H
mov ds:[4],0789H ;这里是笨方法
mov ds:[6],0abcH
mov ds:[8],0defH
mov ds:[10],0fedH
mov ds:[12],0cbaH
mov ds:[14],0987H
data ends
code segment
mov ax,0
mov dx,0
mov bx,0
mov cx,8
s:mov dl,ds:[bx]
inc bx
mov dh,ds:[bx]
add ax,dx
mov dx,0
inc bx ;这里也是!!!
loop s
mov ax,004cH
int 21H
code ends
end
编译运行的时候,观察AX,总是发现当运行到代码段 mov ax,0的时候,直接跳过去了并没有编译!并且观察0020:0000内存单元的数据发现是C3 而不是23,而我把 (mov ax,0)放到数据段中末尾就好了,如:
assume cs:code , ds:data
data segment
mov ax,0020H
mov ds,ax
mov ds:[0],0123H
mov ds:[2],0456H
mov ds:[4],0789H
mov ds:[6],0abcH
mov ds:[8],0defH
mov ds:[10],0fedH
mov ds:[12],0cbaH
mov ds:[14],0987H
   mov ax,0
data ends
  这是为什么呀?是编程思想一开始就是错误的么?还是CPU当中有其他的规定或者什么的?希望各位高手能解开我的疑问,我刚学汇编不久希望能得到鼓励与解惑,谢谢!
搜索更多相关主题的帖子: 寄存器 mov data segment 
2007-08-18 18:04
路灯
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-9-25
收藏
得分:0 
data
是数据段,不是代码段,这样写有问题的,不要把代码写在数据段里,电脑会把数据段里的代码转换为数据的

如果DW不会的话,用DB,只是要事先处理里样,用还是一样用的。

很多东西,不是没有教过就不会用。不会用的查资料就行了。
不然永远也走不出去。
老师其实是自己。自己让自己学会的。

电脑只知道0和1
你指定,那里是代码,它就当代码去执行,
如果你指定这里是数据,它就当数据处理。

但是,如果给电脑指定错了。后果,那就谁也不知道了。
2007-09-25 09:56
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
单步跟踪没有?

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-09-25 11:34
ybdesire
Rank: 2
等 级:论坛游民
威 望:1
帖 子:49
专家分:10
注 册:2007-5-19
收藏
得分:0 
加一个start看看
2007-09-29 15:11
ybdesire
Rank: 2
等 级:论坛游民
威 望:1
帖 子:49
专家分:10
注 册:2007-5-19
收藏
得分:0 
你用debug加载程序后用u看看,就知道只有data segment里的指令被加载进去了

学了dw,你也应该知道用start了吧~~

assume cs:code , ds:data
data segment
mov ax,0020H
mov ds,ax
mov ds:[0],0123H
mov ds:[2],0456H
mov ds:[4],0789H
mov ds:[6],0abcH
mov ds:[8],0defH
mov ds:[10],0fedH
mov ds:[12],0cbaH
mov ds:[14],0987H
data ends
code segment
start:
mov ax,0
mov dx,0
mov bx,0
mov cx,8
s:mov dl,ds:[bx]
inc bx
mov dh,ds:[bx]
add ax,dx
mov dx,0
inc bx
loop s
mov ax,004cH
int 21H
code ends
end start 这样就行了,但我看内存时发现0200:0 43 01
并不是0123,,不知为甚?
2007-09-29 15:28
快速回复:我是一个菜鸟!我有一个问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016334 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved