У меня возникла проблема с чтением в буфер с использованием fgets в assemmbly. Я знаю, что цифры равны ASCII-значению ATM, и это не проблема. Я не могу получить реальную ценность ввода пользователя. Перед использованием fgets мне нужно напечатать строку: «calc:», и я думаю, что она возится с моим реальным входом.получение ввода с использованием fgets в сборке
section .rodata
CALC: DB "calc:" , 10 , 0 ;format string
section .bss
buffer: resb 80 ;store my input
; .... больше данных, не соответствующие
push CALC ;push string to stuck
call printf
add esp, 4 ;remove pushed argument
push dword [stdin] ;fgets need 3 param
push dword 80 ;max lenght
push dword buffer ;input buffer
call fgets
add esp, 12 ;remove 3 push from stuck
mov ecx, [buffer] ;THIS IS FOR GDB
stop_here:
Теперь проблема заключается в том, что значение в буфере не то, что пользователь поставил на входе. когда я использовал отладчик GDB для лучшего понимания я получил следующие результаты:
input 0 --> ecx value is: 2608 (should be 48)
input 1 --> ecx value is: 2609 (should be 49)
input 10 --> ecx value is: 667697 (should be 48+49)
input 34 --> ecx value is: 668723 (should be 51+52)
EDIT: я судимый используя вместо этого получает, и теперь он работает! может кто-нибудь ПОЖАЛУЙСТА, объясните мне почему ?!
привет, цистерны для ответа, это помогает, – lolu
но вы можете объяснить, почему он сделал работу с получает? – lolu
Да, потому что 'gets' не помещает фид строки в буфер :) См.' Man gets': _gets() читает строку из stdin в буфер, на который указывает s, до тех пор, пока не будет завершающая новая строка или EOF, которую она заменяет с нулевым байтом – Jester