我是一个菜鸟!我有一个问题!
刚接触汇编,就有了很多问题,但痛并快乐着。。。。问题:编程计算下面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当中有其他的规定或者什么的?希望各位高手能解开我的疑问,我刚学汇编不久希望能得到鼓励与解惑,谢谢!