问题描述
- 汇编:在代码中使用数据,见代码
- 编程计算以下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 endsend start ;指定重start标号处开始程序
时间: 2024-10-22 21:45:32