注册 登录
编程论坛 汇编论坛

我是一个菜鸟!我有一个问题!

lasonberg 发布于 2007-08-18 18:04, 1137 次点击
刚接触汇编,就有了很多问题,但痛并快乐着。。。。
问题:编程计算下面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当中有其他的规定或者什么的?希望各位高手能解开我的疑问,我刚学汇编不久希望能得到鼓励与解惑,谢谢!
4 回复
#2
路灯2007-09-25 09:56
data
是数据段,不是代码段,这样写有问题的,不要把代码写在数据段里,电脑会把数据段里的代码转换为数据的

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

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

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

但是,如果给电脑指定错了。后果,那就谁也不知道了。
#3
I喜欢c2007-09-25 11:34
单步跟踪没有?
#4
ybdesire2007-09-29 15:11
加一个start看看
#5
ybdesire2007-09-29 15:28
你用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,,不知为甚?
1