问题描述
已知在m * n的矩阵A的元素Aij 按照行优先排序存放在BUFA为首址的字节存储区域, 试编写程序,求每行元素之和Si
问题解答
.386
stack segment use16 stack
db
100 dup(
0)
stack ends
data segment use16
bufA db
11h,
12h,
13h,
14h,
15h
db
21h,
22h,
23h,
24h,
25h
db
31h,
32h,
33h,
34h,
35h
db
41h,
42h,
43h,
44h,
45h
M =
4
N =
5
buf dw M dup(
0)
data ends
code segment use16
assume cs:code, ds:data, ss:stack
main:
mov ax, data
mov ds, ax
mov bx, M
mov di,
0
mov si,
0
lopI:
mov cx, N
lopJ:
mov al, bufA[si]
inc si
movsx ax, al
add dx, ax
loop lopJ
mov buf[di], dx
add di,
2
dec bx
jnz lopI
mov ah,
4ch
int
21h
code ends
end main
总结
使用行优先遍历行优先的二维矩阵的时候,直接使用变址寻址即可,可以省寄存器, 并且控制也更简单在循环次数已知的情况下,尽可能使用倒计数控制循环; 多层循环过程中, 内存循环的控制使用cx寄存器, 使用loop指令控制循环,可以提高执行效率。可以使用取数或者送数寄存器,作为循环控制, 如上面的代码可以更改为如下的方式
.386
stack segment use16 stack
db
100 dup(
0)
stack ends
data segment use16
bufA db
11h,
12h,
13h,
14h,
15h
db
21h,
22h,
23h,
24h,
25h
db
31h,
32h,
33h,
34h,
35h
db
41h,
42h,
43h,
44h,
45h
M =
4
N =
5
buf dw M dup(
0)
data ends
code segment use16
assume cs:code, ds:data, ss:stack
main:
mov ax, data
mov ds, ax
mov cx, M
mov di,
0
lopA:
mov si,
0
lopB:
mov al, bufA[si][bx]
inc si
movsx ax, al
add dx, ax
cmp si, N
jb lopB
mov buf[di], dx
add di,
2
add bx, N
loop lopA
exit:
mov ah,
4ch
int
21h
code ends
end main
转载请注明原文地址: https://ju.6miu.com/read-8029.html