1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 100
|
||||||
1 | ||||||
Сравнение символов в строке22.04.2015, 15:44. Показов 3371. Ответов 10
Метки нет (Все метки)
Здравствуйте, помогите пожалуйста. Почему выводятся различные значения ведь edi указывает на начало строки? При выводе через %c выводится единица в обоих случаях. И можно ли использовать cmp для сравнения символов?
0
|
22.04.2015, 15:44 | |
Ответы с готовыми решениями:
10
Сравнение символов в строке Сравнение и замена символов в строке Сравнение символов в строке со списком разрешенных YASM сравнение символов в строке с заданным символом |
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||||||
22.04.2015, 16:22 | 2 | |||||
0
|
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 100
|
||||||
22.04.2015, 16:52 [ТС] | 3 | |||||
0
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||||||
22.04.2015, 17:05 | 4 | |||||
Что не проходит? Код который я приложил, это результат работы компилятора, а именно директива invoke.
У Вас выводит 49 и 12337, в первом случае число хранится в регистре, во втором в памяти. По адресу, который хранится в edi будет прочитано двойное слово, а это 0х00003031, т.е. 12337, если Вы перепишите
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
22.04.2015, 17:07 | 5 |
deleted
0
|
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 100
|
|
22.04.2015, 17:11 [ТС] | 6 |
Понял . а как получить 1 значение из строки? и почему он считывает двойное слово'1',0,0,0 а не '1' '0'
0
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||||||
22.04.2015, 17:27 | 7 | |||||
Вы создаете программу в WIN32, там все регистры, стек и адресация, по умочанию 32-х битная.
Загружаете в другой регистр, и обнуляете старшие биты.
1
|
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 100
|
||||||
22.04.2015, 17:31 [ТС] | 8 | |||||
Спасибо. Я думал можно только регистры одинаковой размерности использовать в команде а сейчас наткнулся на чужой код и вы написали
0
|
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
||||||
22.04.2015, 18:05 | 9 | |||||
Тут должен быть cinvoke - printf использует сюшную конвенцию вызова из-за переменного кол-ва аргументов.
0
|
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 100
|
|
22.04.2015, 18:12 [ТС] | 10 |
invoke что то не правильно делает в задаче? или просто нужно использовать cinvoke при разном количестве аргументов
0
|
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|
22.04.2015, 18:26 | 11 |
Угу. для printf/scanf (cscanf, fscanf, sscanf, vcscanf, vfscanf, vscanf, vsscanf, _bprintf, cprintf, fprintf, sprintf, _vbprintf, vcprintf, vfprintf, vprintf, vsprintf) стек от параметров должна очищать вызывающая прога.
2
|
22.04.2015, 18:26 | |
22.04.2015, 18:26 | |
Помогаю со студенческими работами здесь
11
В строке символов выяснить, имеется ли в строке пара одинаковых символов до первого восклицательного знака Строку из n символов распечатать по m символов. Если в последней строке нет m символов, то ее не печатать В строке символов найти максимальное число одинаковых символов стоящих подряд При смещении символов в строке выдается результат в виде кривых символов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |