source: xtideuniversalbios/trunk/Assembly_Library/Src/Util/Memory.asm@ 61

Last change on this file since 61 was 54, checked in by Tomi Tilli, 14 years ago

Changes to Assembly Library:
Drive selection moved to own dialog from File Dialog.
File Dialog now displays loading text for better usability in slow systems.
Moved some functions from Memory.asm to new Registers.asm.

File size: 3.3 KB
RevLine 
[41]1; File name : Memory.asm
2; Project name : Assembly Library
3; Created date : 14.7.2010
[54]4; Last update : 24.10.2010
[41]5; Author : Tomi Tilli
6; Description : Functions for memory access.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
[46]12; OPTIMIZE_STRING_OPERATION
[41]13; Parameters
[46]14; %1: Repeat instruction
15; %2: String instruction without size (for example MOVS and not MOVSB or MOVSW)
16; CX: Number of BYTEs to operate
17; DS:SI: Ptr to source data
18; ES:DI: Ptr to destination
[41]19; Returns:
[46]20; SI, DI: Updated by number of bytes operated
21; Corrupts registers:
[41]22; Nothing
[46]23;--------------------------------------------------------------------
24%macro OPTIMIZE_STRING_OPERATION 2
25 push cx
26
27 shr cx, 1 ; Operate with WORDs for performance
28 jcxz %%HandleRemainingByte
29 %1 %2w
30%%HandleRemainingByte:
31 jnc SHORT %%OperationCompleted
32 %2b
33
34ALIGN JUMP_ALIGN
35%%OperationCompleted:
36 pop cx
37%endmacro
38
39
40;--------------------------------------------------------------------
41; Memory_CopyCXbytesFromDSSItoESDI
42; Parameters
43; CX: Number of bytes to copy
44; DS:SI: Ptr to source data
45; ES:DI: Ptr to destination buffer
46; Returns:
47; SI, DI: Updated by number of bytes copied
[41]48; Corrupts registers:
[46]49; Nothing
[41]50;--------------------------------------------------------------------
51ALIGN JUMP_ALIGN
[46]52Memory_CopyCXbytesFromDSSItoESDI:
53 OPTIMIZE_STRING_OPERATION rep, movs
54 ret
[41]55
[46]56
[41]57;--------------------------------------------------------------------
[46]58; Memory_ZeroSSBPwithSizeInCX
[41]59; Parameters
[46]60; CX: Number of bytes to zero
[41]61; SS:BP: Ptr to buffer to zero
62; Returns:
63; Nothing
64; Corrupts registers:
65; Nothing
66;--------------------------------------------------------------------
67ALIGN JUMP_ALIGN
[46]68Memory_ZeroSSBPwithSizeInCX:
[50]69 push es
70 push di
[41]71 push ax
[54]72 call Registers_CopySSBPtoESDI
[46]73 call Memory_ZeroESDIwithSizeInCX
[41]74 pop ax
[50]75 pop di
76 pop es
[41]77 ret
78
79;--------------------------------------------------------------------
[46]80; Memory_ZeroESDIwithSizeInCX
[41]81; Parameters
[46]82; CX: Number of bytes to zero
83; ES:DI: Ptr to destination buffer
[41]84; Returns:
[50]85; DI: Updated by number of BYTEs stored
[41]86; Corrupts registers:
87; AX
88;--------------------------------------------------------------------
89ALIGN JUMP_ALIGN
[46]90Memory_ZeroESDIwithSizeInCX:
[41]91 xor ax, ax
[46]92 ; Fall to Memory_StoreCXbytesFromAccumToESDI
[41]93
94;--------------------------------------------------------------------
[46]95; Memory_StoreCXbytesFromAccumToESDI
[41]96; Parameters
97; AX: Word to use to fill buffer
[46]98; CX: Number of BYTEs to store
99; ES:DI: Ptr to destination buffer
[41]100; Returns:
[50]101; DI: Updated by number of BYTEs stored
[41]102; Corrupts registers:
103; Nothing
104;--------------------------------------------------------------------
105ALIGN JUMP_ALIGN
[46]106Memory_StoreCXbytesFromAccumToESDI:
107 OPTIMIZE_STRING_OPERATION rep, stos
[41]108 ret
109
110
111;--------------------------------------------------------------------
112; Memory_ReserveCXbytesFromStackToDSSI
113; Parameters
114; CX: Number of bytes to reserve
115; Returns:
116; DS:SI: Ptr to reserved buffer
117; Corrupts registers:
118; AX
119;--------------------------------------------------------------------
120ALIGN JUMP_ALIGN
121Memory_ReserveCXbytesFromStackToDSSI:
122 pop ax
123 push ss
124 pop ds
125 sub sp, cx
126 mov si, sp
127 jmp ax
Note: See TracBrowser for help on using the repository browser.