|
|
- void strcpy (destination, destination_segment, source, source_segment );
-
- void strcpy (destination, destination_segment, source, source_segment )
- char *destination;
- int destination_segment;
- char *source;
- int source_segment;
- {
- #asm
- ; copy two strings
- ; IN si: the first (zero terminated) string
- ; IN di: the second (zero terminated) string
- ; OUT SF and ZF (same semantics as cmp)
-
- #define DESTINATION 4[bp];
- #define DESTINATION_SEGMENT 6[bp];
- #define SOURCE 8[bp];
- #define SOURCE_SEGMENT 10[bp];
-
- push bp
- mov bp,sp
- stringcompare:
- push ax
- push bx
- push di
- push es
- push si
- push ds
- mov ax, DESTINATION;
- mov di, ax
- mov ax, DESTINATION_SEGMENT;
- mov es, ax
- mov ax, SOURCE;
- mov si, ax
- mov ax, SOURCE_SEGMENT;
- mov ds, ax
- mov cx, 0x050 // TODO(Jørn) Hardcded number of bytes to copy
- .loop:
- movsb
- cmp cx, 0x0
- je .end
- dec cx
- jmp .loop
- .end:
- pop ds
- pop si
- pop es
- pop di
- pop bx
- pop ax
- pop bp
-
- #endasm
- }
|