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

Last change on this file since 194 was 194, checked in by gregli@…, 12 years ago

ifdef'd out more unused code. Also added a tool for looking through the listing and the output of the precompiler to aid in finding dead code. Some changes in the files are to add annotations for the tool to avoid false positives.

File size: 3.3 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;--------------------------------------------------------------------
[131]47%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[41]48ALIGN JUMP_ALIGN
[46]49Memory_CopyCXbytesFromDSSItoESDI:
50    OPTIMIZE_STRING_OPERATION rep, movs
51    ret
[131]52%endif
[41]53
[46]54
[41]55;--------------------------------------------------------------------
[46]56; Memory_ZeroSSBPwithSizeInCX
[41]57;   Parameters
[46]58;       CX:     Number of bytes to zero
[41]59;       SS:BP:  Ptr to buffer to zero
60;   Returns:
61;       Nothing
62;   Corrupts registers:
63;       Nothing
64;--------------------------------------------------------------------
65ALIGN JUMP_ALIGN
[46]66Memory_ZeroSSBPwithSizeInCX:
[50]67    push    es
68    push    di
[41]69    push    ax
[105]70    call    Registers_CopySSBPtoESDI
[46]71    call    Memory_ZeroESDIwithSizeInCX
[41]72    pop     ax
[50]73    pop     di
74    pop     es
[41]75    ret
76
77;--------------------------------------------------------------------
[46]78; Memory_ZeroESDIwithSizeInCX
[41]79;   Parameters
[46]80;       CX:     Number of bytes to zero
81;       ES:DI:  Ptr to destination buffer
[41]82;   Returns:
[50]83;       DI:     Updated by number of BYTEs stored
[41]84;   Corrupts registers:
85;       AX
86;--------------------------------------------------------------------
87ALIGN JUMP_ALIGN
[46]88Memory_ZeroESDIwithSizeInCX:
[41]89    xor     ax, ax
[46]90    ; Fall to Memory_StoreCXbytesFromAccumToESDI
[41]91
92;--------------------------------------------------------------------
[46]93; Memory_StoreCXbytesFromAccumToESDI
[41]94;   Parameters
95;       AX:     Word to use to fill buffer
[46]96;       CX:     Number of BYTEs to store
97;       ES:DI:  Ptr to destination buffer
[41]98;   Returns:
[50]99;       DI:     Updated by number of BYTEs stored
[41]100;   Corrupts registers:
101;       Nothing
102;--------------------------------------------------------------------
103ALIGN JUMP_ALIGN
[46]104Memory_StoreCXbytesFromAccumToESDI:
105    OPTIMIZE_STRING_OPERATION rep, stos
[41]106    ret
107
108
109;--------------------------------------------------------------------
110; Memory_ReserveCXbytesFromStackToDSSI
111;   Parameters
112;       CX:     Number of bytes to reserve
113;   Returns:
114;       DS:SI:  Ptr to reserved buffer
115;   Corrupts registers:
116;       AX
117;--------------------------------------------------------------------
[194]118%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[41]119ALIGN JUMP_ALIGN
120Memory_ReserveCXbytesFromStackToDSSI:
121    pop     ax
122    push    ss
123    pop     ds
124    sub     sp, cx
125    mov     si, sp
126    jmp     ax
[194]127%endif
Note: See TracBrowser for help on using the repository browser.