汇编:在代码中使用数据,见代码

编程计算以下8个数据的和,结果存放在ax寄存器中
0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
结果为: 4BDB
P123, 《汇编语言(第2版)》,王爽

8个数据定义在代码段cs,我的想法是将cs赋值给ds,然后使用bx做偏移地址"add ax, ds:[bx]",但是书上是直接使用"add ax, cs:[bx]",运行之后导致结果不相同。

【1.运行结果是:ax = 4BD8】

    assume cs:code

    ;代码段
    code segment

    ;定义8个字型数据
    dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h


    ;设置偏移地址
    mov bx, 0

    ;设置循环次数
    mov cx, 8

    ;将ax寄存器清零
    mov ax, 0

        s:  add ax, cs:[bx]
    add bx, 2
    loop s

    ;正常结束程序
    mov ax, 4c00h
    int 21h
    code ends
    end

【2.运行结果是:ax =5EAE】

    assume cs:code

    ;代码段
    code segment

    ;定义8个字型数据
    dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h


    ;将代码段设置为数据段
    mov ax, cs
    mov ds, ax

    ;设置偏移地址
    mov bx, 0

    ;设置循环次数
    mov cx, 8

    ;将ax寄存器清零
    mov ax, 0

        s:  add ax, ds:[bx]
    add bx, 2
    loop s

    ;正常结束程序
    mov ax, 4c00h
    int 21h
    code ends
    end

这两个答案都是错的,正确答案是4BDB

看上去第一个程序没有问题。ds有它特定的作用,你为什么要用它呢。

程序有问题,
code段开头的是数据,而你又没指定程序的开始标志,所以那段数据就被当做程序执行了。
应该

code    segment
    dw   xxxx。。。。
start:
    。。。
code    ends
end    start    ;指定重start标号处开始程序