当前位置: 代码迷 >> 汇编语言 >> 一)在数据段中依次存入10,11,12,13,14,15,16,17,将其相加,并将结果存入DX寄存器
  详细解决方案

一)在数据段中依次存入10,11,12,13,14,15,16,17,将其相加,并将结果存入DX寄存器

热度:3842   发布时间:2013-02-26 00:00:00.0
1)在数据段中依次存入10,11,12,13,14,15,16,17,将其相加,并将结果存入DX寄存器。
我的代码是:
data segment
  data1 db 10,11,12,13,14,15,16,17
  data ends
code segment
  assume cs:code,ds:data
 start:
  mov ax,data
  mov ds,ax
  mov cx,8h
  mov dx,0h
  s:
  add dx,[si]
  add si,2
  loop s
  mov ax,4c00h
  int 21h
  code ends
  end start



哪里错了 ?用 DEBUG跟踪 DX 值不变啊

------解决方案--------------------------------------------------------
add dx,[si] 字单元
data1 db 10,11,12,13,14,15,16,17 字节单元


再说你给SI赋值了么???
这么大的错误 ... 居然没发现
------解决方案--------------------------------------------------------
默认段前缀是DS
如果把SI当做指针你得给他赋值阿~要不汇编器怎么知道SI指向哪?
mov si,offset data1

lea si,data1

mov si,0
才能指向第一个数据 10

mov si,data1
这是把 10送入了SI

data1 db 10,11,12,13,14,15,16,17
DATA1 定义的是字节型数据 所以用DL做加法
add dl,[si]
mov dh,0
否则 ADD DX,[SI] 加的就是两个字节数据了
------解决方案--------------------------------------------------------
assume cs:code,ds:data
data segment
data1 db 10,11,12,13,14,15,16,17
data ends
code segment
start:
mov ax,data
mov ds,ax
xor ax,ax
mov si,offset data
mov cx,8
sum:
add dl,[bx]
adc dh,0
inc bx
loop sum
mov ah,4ch
int 21h
code ends
 end start
------解决方案--------------------------------------------------------
探讨
引用:
引用:
assume cs:code,ds:data
data segment
data1 db 10,11,12,13,14,15,16,17
data ends
code segment
start:
mov ax,data
mov ds,ax
xor ax,ax
mov si,offset ……
  相关解决方案