前面《二维数组简介》一节中已经展示了如何计算字节矩阵中单个行的总和。尽管这个解决方案有些冗长,现在还是要看看能否用宏来简化任务。首先,我们来回顾一下 calc_row_sum 过程:
;------------------------------------------------------------
; calc_row_sum
; 计算字节矩阵中一行的和数
; 接收: EBX = 表偏移量, EAX = 行索引
; ECX = 按字节计的行大小
; 返回: EAX 为和数
;------------------------------------------------------------
calc_row_sum PROC uses ebx ecx edx esi
mul ecx ; 行索引 * 行大小
add ebx,eax ; 行偏移量
mov eax,0 ; 累加器
mov esi,0 ; 列索引
L1: movzx edx,BYTE PTR[ebx + esi] ; 取一个字节
add eax,edx ; 与累加器相加
inc esi ; 行中的下一个字节
loop L1
ret
calc_row_sum ENDP
从把 PROC 改为 MACRO 开始,删除 RET 指令,把 ENDP 改为 ENDM。由于没有宏与 USES 伪指令功能相当,因此插入 PUSH 和 POP 指令:
mCalc_row_sum MACRO
push ebx ;保存被修改的寄存器
push ecx
push esi
mul ecx ;行索引x行