汇编语言数组乘法代码分析(9)

 

来自于《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]中。

 

 

 

 

 

你可能感兴趣的:(汇编语言)