![]() |
#2
yuki2006-07-01 08:58
虽然没有人回复,但还是要谢谢大家的关注。 .model small _strcmp PROC C s1: PTR BYTE, s2: PTR BYTE #ifdef __cplusplus EXT int strcmp(char *s1,char *s2); char *tbl[] = {"Equal to","Less than", "Greater than"}; int main() { [此贴子已经被作者于2006-7-1 9:10:01编辑过] |
刚学了两天的汇编非常的菜,做了个两个等长字符串的比较程序,用C语言混编的,由于TASM不支持SIZEOF伪指令,我不知道如何获得用户输入字符串的长度,想做一个变长的字符串的比较程序,请各位高手指点,谢谢啦。
下面贴上源代码:
; t1.asm
PUBLIC _strcmp
.model small
.186
.code
_strcmp PROC C s1:BYTE, s2:BYTE, c:WORD
push bx ; save registers
push si
push di
mov si,OFFSET s1 ; address to s1
mov di,OFFSET s2 ; address to s2
mov cx,c ; set counter to c
L:
mov ah, [si] ; indirect access
mov bh, [di]
cmp ah,bh ; compare two character
jne RES1 ; if not equal
inc si ; move pointer by 1
inc di
loop L ; loop the label
mov ax,1 ; two strings are completely equal
pop di ; restore registers
pop si
pop bx
ret
RES1:
mov ax,0 ; no equal
pop di ; restore registers
pop si
pop bx
ret
_strcmp ENDP
END
/* test1.cpp */
#include <stdio.h>
extern "C" int strcmp(char *s1, char *s2, int size);
int main() {
char *s1 = "Hello", *s2 = "Hello";
printf("%s\n",strcmp(s1,s2,5) ? "Equal" : "Not Equal");
return 0;
}
编译方法:
打开BC或者TC的IDE,创建一个PROJECT,将这两个文件添加进去,然后RUN就可以了。