目标是使用链式命令计算字符串中元素的乘积。
masm
model small
.data
matr dw 1,2,3
dw 4,5,6
dw 7,8,9
n dw 3
comp dw ?
.stack 256
.code
main proc
assume ds:@data,es:@data
mov ax,@data
mov ds,ax
mov es,ax
mov cx,n
LO:
; установка si на начало текущей строки
mov ax,n
sub ax,cx
mul n
mov bx,ax
add bx,bx
mov si,matr[bx]
; подсчёт произведения
push cx
mov cx,n
cld
mov comp,1
LI:
lodsw
mul comp
mov comp,ax
loop LI
; вывод результата
mov ax,comp
mov bx,10
mov cx,0
L1:
xor dx,dx
div bx
push dx
inc cx
cmp ax,0
jg L1
mov ah,2h
L2:
pop dx
add dl,30h
int 21h
loop L2
mov dl,' '
int 21h
pop cx
loop LO
mov ax,4C00h
int 21h
main endp
end main
问题是结果显示了难以理解的值,在本例中为“0 60 0”。通过测试,我们发现问题仅出在注释“产品计算”下的代码部分。似乎我正确使用了命令,并且在循环之前执行了所有必要的操作,但它不想正常工作。也许他们会在这里指出我的错误。
问题出在团队中
mov si, matr[bx]。该命令lods需要si包含存储单元的偏移量(在这种情况下,必须首先写入二维数组行首的地址),但是该命令mov si, matr[bx]写入的si不是存储单元的地址,而是此单元格的值。mov应替换为lea: