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

Last change on this file since 63 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
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.