You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

54 lines
1.1 KiB

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
}