汇编语言数组乘法代码分析(9)
2009-10-21 10:51
246 查看
来自于《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]中。
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]中。
相关文章推荐
- 汇编语言数组求和代码分析(1)
- 汇编语言数组中查找正数代码分析(3)
- 汇编语言数组求和代码分析
- 汇编语言16位随机整数填充数组代码分析(7)
- linux 内核源代码情景分析——linux 内核源码中的汇编语言代码
- 汇编语言实现递归阶乘算法代码分析(8)
- 王爽 汇编语言第二版 实验9 根据材料编程 代码及分析
- 高级语言的一段汇编代码分析
- C语言中的数组和指针汇编代码分析实例
- 汇编语言循环遍历链表代码分析(16)
- 32位汇编语言学习笔记(10)--分析for循环的汇编代码
- 汇编代码对应的高级语言分析
- 汇编语言字符串加密代码分析(2)
- 汇编语言求字符串长度代码分析(10)
- 汇编语言显示系统时间代码分析(14)
- 汇编语言32位控制台读取用户输入字符程序代码分析(17)
- 汇编代码对应的高级语言分析
- 32位汇编语言学习笔记(8)--分析do-while循环的汇编代码
- 汇编语言裁剪字符串代码分析(11)?
- 汇编语言写文件读文件代码分析(18)