我想读取第一个数字并将其转换为十进制...我的代码是这样的
%include "asm_io.inc"
segment .text
global _asm_main
_asm_main:
enter 0,0
pusha
call read_int
cmp al,'b'
je vypis
vypis:
call print_int
koniec:
popa ; terminate program
mov EAX, 0
leave
ret
当输入以第一个开头(例如10101010b)时程序正常工作但是当输入从零开始时它不能正常工作......
我的问题我做错了什么或我怎样才能做得更好?
print_int和read_int是已经提供给我们的函数,它们100%工作... 我可以使用的其他函数是read_char,print_char和print_string ...
read_int:
enter 4,0
pusha
pushf
lea eax, [ebp-4]
push eax
push dword int_format
call _scanf
pop ecx
pop ecx
popf
popa
mov eax, [ebp-4]
leave
ret
print_int:
enter 0,0
pusha
pushf
push eax
push dword int_format
call _printf
pop ecx
pop ecx
popf
popa
leave
ret
答案 0 :(得分:0)
在我看来,read_int
只是返回eax
读取的整数值(scanf
})。我不确定为什么你期望该整数的最低有效字节为'b'
(?)。
虽然我不知道您正在使用哪个scanf
实现,但我还没有看到任何直接读取二进制数的内容。尽管如此,实现这些功能还是相当容易的
以下是C中的一些示例代码,显示了原理:
char bin[32];
unsigned int i, value;
scanf("%[01b]", bin); // Stop reading if anything but these characters
// are entered.
value = 0;
for (i = 0; i < strlen(bin); i++) {
if (bin[i] == 'b')
break;
value = (value << 1) + bin[i] - '0';
}
// This last check is optional depending on the behavior you want. It sets
// the value to zero if no ending 'b' was found in the input string.
if (i == strlen(bin)) {
value = 0;
}