Я понимаю, что это может быть немного поздно, и вы, возможно, уже решили это или перешли к чему-то другому, но я столкнулся с этим вопросом, когда гуглял что-то связанное, и подумал, что могу помочь всем, кто сталкивается с этим.
Проблема, с которой, я думаю, вы столкнулись, заключается в том, что «5», которую вы передаете своей программе, не сохраняется как целое число 5, как можно предположить.Аргумент передается вашей программе в виде символа, и, как указал Энди, у вас будет указатель на байт, содержащий 0x35, который является целочисленным значением, представляющим символ ASCII 5, а не указатель на целочисленное значение 5.
Чтобы использовать ваш аргумент в качестве целого числа, вам нужно будет преобразовать байт в его целочисленный эквивалент, как определено в таблице ASCII - в противном случае вы обнаружите, что вы передаете символ 5, но все математические операции, которые вы пытаетесь выполнитьс этим будет использовать 53 (0x35), потому что это представляет 5 в ASCII.
Пример того, как выполнить это преобразование, можно найти в функции rsi_to_bin в примере программы asm здесь .После того, как вы преобразовали код ascii в его действительный целочисленный эквивалент, у вас будет правильное число, которое вы передали, и вы сможете выполнять с ним любую арифметику, какую захотите.Чрезвычайно простым примером будет просто вычесть 48 из входных данных - это будет работать, если вы передадите только одно целое число со значением 0-9.