我的代码是:
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
------解决方案--------------------------------------------------------