所以我试图要求并接收2个单独字符串的输入。现在它们最多为30并以换行符结尾。是的,我知道整个事情不要使用fgets(),但它适用于我想要做的事情。
无论如何,有了这两个字符串,我想调用一个汇编函数来计算字符串1是否“大于”字符串2.我已经在汇编本身完成了它并且它工作正常,但是试图从ac文件中获取它是工作不正常。我想这是因为我没有正确地将字符串加载到寄存器中。以下是两个文件中的代码:
stringgt.asm:
global stringgt
SECTION .text
stringgt:
push ebp ; setting upstack frame
mov ebp, esp
mov eax, [ebp+8] ; eax = start of string c
mov ecx, [ebp+12] ; ecx = start of string d
push edx
xor edx, edx ; index edx = 0
cld
top:
mov al, [eax + edx] ;comparing first element of two strings
cmp [ecx + edx], al
jb output_true ; jump to output_true if first is greater
ja output_false ; jump to output_false if second is greater
cmp al, 10 ; checking for newline
je output_false ; if newline, then they are either equal or 2nd is greater
; therefore first is not greater output false
inc edx ; increment index
jmp top ; back to start of loop
output_true:
mov eax, 1 ; eax = 1, eax is return value
jmp exit ; exit
output_false:
mov eax, 0 ; eax = 0, eax is return value
exit:
pop edx
mov esp, ebp
pop ebp
ret
现在string.c:
#include <stdio.h>
extern int stringgt(char* s1, char* s2);
int main()
{
char* c;
char* d;
printf("Type first string: ");
fgets(c, 30, stdin);
printf("Type second string: ");
fgets(d, 30, stdin);
int i = stringgt(c, d);
if (i != 0)
{
printf("True\n");
}
else
{
printf("False\n");
}
return 0;
}
问题似乎是它几乎所有事情都是假的。我确实认为我正在将字符串加载到eax和ecx中,可能第二个字符串不是位于ebp + 12而是位于其他地方?