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

Last change on this file since 54 was 54, checked in by aitotat, 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
Line 
1; File name     :   Memory.asm
2; Project name  :   Assembly Library
3; Created date  :   14.7.2010
4; Last update   :   24.10.2010
5; Author        :   Tomi Tilli
6; Description   :   Functions for memory access.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
12; OPTIMIZE_STRING_OPERATION
13;   Parameters
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
19;   Returns:
20;       SI, DI: Updated by number of bytes operated
21;   Corrupts registers:
22;       Nothing
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
48;   Corrupts registers:
49;       Nothing
50;--------------------------------------------------------------------
51ALIGN JUMP_ALIGN
52Memory_CopyCXbytesFromDSSItoESDI:
53    OPTIMIZE_STRING_OPERATION rep, movs
54    ret
55
56
57;--------------------------------------------------------------------
58; Memory_ZeroSSBPwithSizeInCX
59;   Parameters
60;       CX:     Number of bytes to zero
61;       SS:BP:  Ptr to buffer to zero
62;   Returns:
63;       Nothing
64;   Corrupts registers:
65;       Nothing
66;--------------------------------------------------------------------
67ALIGN JUMP_ALIGN
68Memory_ZeroSSBPwithSizeInCX:
69    push    es
70    push    di
71    push    ax
72    call    Registers_CopySSBPtoESDI
73    call    Memory_ZeroESDIwithSizeInCX
74    pop     ax
75    pop     di
76    pop     es
77    ret
78
79;--------------------------------------------------------------------
80; Memory_ZeroESDIwithSizeInCX
81;   Parameters
82;       CX:     Number of bytes to zero
83;       ES:DI:  Ptr to destination buffer
84;   Returns:
85;       DI:     Updated by number of BYTEs stored
86;   Corrupts registers:
87;       AX
88;--------------------------------------------------------------------
89ALIGN JUMP_ALIGN
90Memory_ZeroESDIwithSizeInCX:
91    xor     ax, ax
92    ; Fall to Memory_StoreCXbytesFromAccumToESDI
93
94;--------------------------------------------------------------------
95; Memory_StoreCXbytesFromAccumToESDI
96;   Parameters
97;       AX:     Word to use to fill buffer
98;       CX:     Number of BYTEs to store
99;       ES:DI:  Ptr to destination buffer
100;   Returns:
101;       DI:     Updated by number of BYTEs stored
102;   Corrupts registers:
103;       Nothing
104;--------------------------------------------------------------------
105ALIGN JUMP_ALIGN
106Memory_StoreCXbytesFromAccumToESDI:
107    OPTIMIZE_STRING_OPERATION rep, stos
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.