来自于《Intel汇编语言程序设计》(第四版)第八章,主要用到以下两条指令:
STOSB,STOSW和STOSD指令将AL/AX/EAX的内容存储在EDI指向的内存单元中,同时EDI的值将根据方向标志的值增加或减少。
LODSB,LODSW和LODSD指令从ESI指向的内存位置向AL/AX/EAX中装入一个值,同时ESI的值根据方向标志值增加或减少。
以下为程序源代码,使用了LODSD和STOSD:
TITLE Multiply an Array (Mult.asm)
; This program multiplies each element of an array
; of 32-bit integers by a constant value
INCLUDE Irvine32.inc
.data
array DWORD 1,2,3,4,5,6,7,,8,9,10
multiplier DWORD 10
.code
main PROC
cld ; direction = forward
mov esi, OFFSET array ; source index
mov edi,esi ; destination index
mov ecx,LENGTHOF array ; loop counter
L1: lodsd ; load [ESI] into EAX
mul multiplier ; multiply by a value
stosd ; store EAX into [EDI]
loop L1
exit
main ENDP
END main
每次将[ESI]的值赋值给EAX中,然后调用mul指令进行乘法运算,然后结果会保存在EAX中,然后stosd指令将EAX中的值保存到[EDI]中。