【发布时间】:2018-09-02 20:25:03
【问题描述】:
我在为我的一个课程做的 C 代码上创建 gets() 函数时遇到了一些问题。所以我已经有一个getchar() 函数,但是在汇编中,我使用extern 从C 调用它问题是,在我运行代码的那一刻,我输入了一个字符串,但它没有显示完整的字符串而是一些字符。
这是我的自动取款机代码: C代码:
extern char getchar(void);
extern void putchar(char data);
void gets(char *str);
void puts(char *str);
void new_line();
char string[20];
int main(){
while(1){
gets(string);
new_line();
puts(string);
}
return 0;
}
void new_line(){
putchar(0xD);
putchar(0xA);
}
void gets(char *str){
unsigned char i = 0;
while((*str = getchar()) != 0xD){
str[i] = getchar();
i++;
}
}
void puts(char *str){
while(*str){
putchar(*str++);
}
}
还有我的 ASM 代码以防万一:
.MODEL tiny
.CODE
public _putchar
public _getchar
_putchar PROC
push bp
mov bp, sp
mov dl, [bp + 4]
mov ah, 2
int 21h
pop bp
ret
_putchar ENDP
_getchar PROC
push bp
mov bp, sp
mov ah, 1
int 21h
mov [bp + 4], al
pop bp
ret
_getchar ENDP
END
我正在使用 MTTTY 和我们老师提供的 8086 解释器在 Arduino Mega 上运行代码。
我有什么方法可以用gets() 函数解决这个问题,以便正确显示输入字符串?
例如,如果我输入“hello world”,它只会打印“l ol”
【问题讨论】:
-
看了一眼,
gets中的 while 条件似乎与正文不匹配。这:(*str = getchar()) != 0xD意味着正文应该是str++。