2 u012176477 u012176477 于 2014.12.14 15:27 提问

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

编程计算以下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

3个回答

caozhy
caozhy   Ds   Rxr 2014.12.14 19:28

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

caozhy
caozhy   Ds   Rxr 2014.12.14 19:33

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

u012176477
u012176477 因为数据存储在代码段的,我需要使用这些数据,所以我将cs的值赋值给ds,这样cs与ds应该是相等的,程序2和程序1就会完成同样的功能,但是结果却不是这样
3 年多之前 回复
a1193561652
a1193561652   Rxr 2015.05.19 20:47

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

code    segment
    dw   xxxx。。。。
start:
    。。。
code    ends
end    start    ;指定重start标号处开始程序
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!