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

Last change on this file since 103 was 103, checked in by krille_n_@…, 13 years ago

Optimizations to Assembly Library.

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