BITS 16 ; Compares two strings ; IN si: the first (zero terminated) string ; IN di: the second (zero terminated) string ; OUT SF and ZF (same semantics as cmp) stringcompare: push bx push si push di .loop: mov bl, [si] mov bh, [di] cmp bl, bh jne .end test bl, bl ; bl and bh are the same, so bl = 0 => dl = 0 jz .end inc si inc di jmp .loop .end: pop di pop si pop bx ret zstring_to_integer: ;IN: si Pointer to string ;OUT: ax result in binary push bx push si push cx push dx xor ax, ax xor bx, bx xor cx, cx xor dx, dx mov bx, 10 .loop: mov cl, [si] cmp cl, 0 je .end sub cl,'0' cmp cl, 9 ja .end ; next number is not a number, or its a zero, and then we are done ; multiply by 10, and add the new number. mul bx add ax, cx inc si jmp .loop .end: pop dx pop cx pop si pop bx ret