1;------------------------------------------------------------------------------ 2; 3; Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> 4; This program and the accompanying materials 5; are licensed and made available under the terms and conditions of the BSD License 6; which accompanies this distribution. The full text of the license may be found at 7; http://opensource.org/licenses/bsd-license.php. 8; 9; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11; 12; Module Name: 13; 14; SetMem.Asm 15; 16; Abstract: 17; 18; SetMem function 19; 20; Notes: 21; 22;------------------------------------------------------------------------------ 23 24 .code 25 26;------------------------------------------------------------------------------ 27; VOID * 28; EFIAPI 29; InternalMemSetMem ( 30; IN VOID *Buffer, 31; IN UINTN Count, 32; IN UINT8 Value 33; ) 34;------------------------------------------------------------------------------ 35InternalMemSetMem PROC USES rdi rbx 36 push rcx ; push Buffer 37 mov rax, r8 ; rax = Value 38 and rax, 0ffh ; rax = lower 8 bits of r8, upper 56 bits are 0 39 mov ah, al ; ah = al 40 mov bx, ax ; bx = ax 41 shl rax, 10h ; rax = ax << 16 42 mov ax, bx ; ax = bx 43 mov rbx, rax ; ebx = eax 44 shl rax, 20h ; rax = rax << 32 45 or rax, rbx ; eax = ebx 46 mov rdi, rcx ; rdi = Buffer 47 mov rcx, rdx ; rcx = Count 48 shr rcx, 3 ; rcx = rcx / 8 49 cld 50 rep stosq 51 mov rcx, rdx ; rcx = rdx 52 and rcx, 7 ; rcx = rcx & 7 53 rep stosb 54 pop rax ; rax = Buffer 55 ret 56InternalMemSetMem ENDP 57 58 END 59