汇编程序提示两条错误,应该怎么改?

来源:百度知道 编辑:UC知道 时间:2024/06/14 00:40:25
这个程序是用来把a,b段的数据对应相加然后放到c段中,可是有两个错误不知道怎么改,希望高手能够教我一下~~
assume cs:code,ds:a,es:b,ss:c

a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start: mov ax,a
mov ds,ax
mov ax,0
mov bx,b
mov es,bx
mov bx,0
mov cx,8
s:mov bl,es:[bl]
add al,bl
inc ax
inc bx
loop s
mov ax,0008h
mov bx,c
mov ss,bx
mov sp,0008h
mov cx,4
s0:push [ax]
sub ax,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
是很乱~~

s:mov bl,es:[bl]
bl肯定是不行的3,BX才是基址寄存器。
s0:push [ax] 寄存器间接寻址里面的寄存器没有包含AX哈。有这四个:SI,DI,BX,BP。

改:
1.s:mov bl,es:[bx]

2.
mov bx,c
mov ss,bx
mov sp,0008h
mov bx,0008h
mov cx,4
s0:push [bx]
sub bx,2
loop s0

另外程序逻辑是有问题的哈。
s:mov bl,es:[bl]
add al,bl
inc ax
inc bx
loop s
这段代码肯定不能对应相加的。

这段程序很乱,我重写下。
assume cs:code,ds:a,es:b,ss:c
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
mov cx,c
mov es,cx;c段放到附加段
mov bx,0;寄存器间接寻址
lp: ;循环8次
mov cx,a
mov ds,cx;a段地址放到ds
mov al,ds:[bx];取a段的数据
mov cx,b
mov ds,cx;b段地址放到ds
mov ah,ds:[bx];取b段的数据
add al,ah;相加
mov es:[bx],al;放到c段
inc bx ;准备下一个数据
cmp bx,8
jb lp;循环
mov ax,4c00h
i