中国开发网: 论坛: 程序员情感CBD: 贴子 562081
好望角
第一题
int strcmp (char *s1, char *s2) {
int Result;
if (!s1 && !s2) return 0;
if (!s1) return +1;
if (!s2) return -1;

while(*s1 && *s2) {
Result = s1 - s2;
if (Result) return Result;
s1++;
s2++;
}

if (!*s1 && !*s2) return 0;
if (!*s1) return -1;
if (!*s2) return +1;
return 0;
}


int main (int argc, char *argv[]) {
char * s1;
char * s2;

return strcmp(s1, s2);
}

.file "s.c"
.text
.align 2
.global strcmp
.type strcmp, %function
strcmp:
@ args = 0, pretend = 0, frame = 16
@ frame_needed = 1, uses_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #16
str r0, [fp, #-16]
str r1, [fp, #-20]
ldr r3, [fp, #-16]
cmp r3, #0
bne .L2
ldr r3, [fp, #-20]
cmp r3, #0
bne .L2
mov r3, #0
str r3, [fp, #-28]
b .L1
.L2:
ldr r3, [fp, #-16]
cmp r3, #0
bne .L3
mvn r3, #0
str r3, [fp, #-28]
b .L1
.L3:
ldr r3, [fp, #-20]
cmp r3, #0
bne .L5
mov r3, #1
str r3, [fp, #-28]
b .L1
.L5:
ldr r3, [fp, #-16]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
beq .L6
ldr r3, [fp, #-20]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
beq .L6
ldr r2, [fp, #-16]
ldr r3, [fp, #-20]
rsb r3, r3, r2
str r3, [fp, #-24]
ldr r3, [fp, #-24]
cmp r3, #0
beq .L7
ldr r3, [fp, #-24]
str r3, [fp, #-28]
b .L1
.L7:
ldr r3, [fp, #-16]
add r3, r3, #1
str r3, [fp, #-16]
ldr r3, [fp, #-20]
add r3, r3, #1
str r3, [fp, #-20]
b .L5
.L6:
ldr r3, [fp, #-16]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
bne .L8
ldr r3, [fp, #-20]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
bne .L8
mov r3, #0
str r3, [fp, #-28]
b .L1
.L8:
ldr r3, [fp, #-16]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
bne .L9
mvn r3, #0
str r3, [fp, #-28]
b .L1
.L9:
ldr r3, [fp, #-20]
ldrb r3, [r3, #0] @ zero_extendqisi2
cmp r3, #0
bne .L10
mov r3, #1
str r3, [fp, #-28]
b .L1
.L10:
mov r3, #0
str r3, [fp, #-28]
.L1:
ldr r0, [fp, #-28]
sub sp, fp, #12
ldmfd sp, {fp, sp, pc}
.size strcmp, .-strcmp
.align 2
.global main
.type main, %function
main:
@ args = 0, pretend = 0, frame = 16
@ frame_needed = 1, uses_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #16
str r0, [fp, #-16]
str r1, [fp, #-20]
ldr r0, [fp, #-24]
ldr r1, [fp, #-28]
bl strcmp
mov r3, r0
mov r0, r3
sub sp, fp, #12
ldmfd sp, {fp, sp, pc}
.size main, .-main
.ident "GCC: (GNU) 3.4.1"

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录