Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 22.09.2014
Сообщений: 32
1

Не работают переходы

22.11.2015, 01:24. Показов 1359. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уже долгое время воюю с организацией связи между Си и ассемблером. Пишу через Visual Studio. С подключением асм модулей в проэкт, организацией связи между функциями более-менее разобрался, теперь наткнулся на новую, уже необъяснимую проблему: не работают условные переходы. Выводил значения сравниваемых регистров dx и bx - все значения верны. Перебирал всевозможные варианты (dx>bx, dx<bx, dx=bx), и во всех трёх случаях по команде jbe , после сравнения, происходил переход на метку. При замене на jae - переходы не осуществяются. Значения регистров dx и bx разные (одинаковые только в случае, если 2 введённых слова одной длины) и совпадают с введённой информацией. Вот часть кода программы:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.Code
 
Scaning PROC C Point:word, n:byte
    
    ASSUME ss:stack,ds:Data
 
    mov di,Point         ;адрес строки в di
    mov al, 20h         ;В al пробел в 16 коде
    mov cl, n      ;Помещаем в cl количество введённых символов
    mov bl, n
    repne scasb       ;Сравниваем с 0, пока не найдём
    sub bx, cx          
    dec bx              ;В bx количество символов 1го слова
    next:
    mov dx, cx          ;Помещаем в dx, сколько символов осталось
    repne scasb      ;Ищем дальше пробелы
    
    sub dx, cx          
    dec dx              ;В dx количество символов в текущем слове
    cmp dx, bx          ;Сравниваем с bx
    jbe net             ;Переходим к следующему слову, если меньше
    add Sum, 1          ;Иначе в Sum прибавляем +1 слово
    net:
    cmp cx, 0
;   jne next            ;Переходим, пока не переберём все символы
    mov ax, Sum
mov ax,Sum
    ret
Scaning ENDP
П.С. 25 строчку закомментировал, так как на этом месте программа вылетает (нарушение прав доступа), а если продублировать код (т.е. это будет тоже самое, что переход на метку next), то не вылетает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2015, 01:24
Ответы с готовыми решениями:

Не работают переходы
Делал лабу по ассемблеру под intel 8086, тема лабы - сдвиги. Написал все формулы, препод сказал...

Не работают переходы во frame
В xaml есть фрейм. Есть переходы назад и вперед, которые не работают, потому что: &quot;cannot navigate...

Не работают переходы между страницами WP 8.1
Скачал VS 2013 express как я понял переход осуществляется в обработчике событий кликанья по кнопки...

Notepad++ не работают переходы по ссылкам в тексте
Сабж. В настройках указано делать ссылки кликабельными, но это не работает :( Что может быть?

3
593 / 390 / 70
Регистрация: 29.03.2013
Сообщений: 813
22.11.2015, 04:33 2
Цитата Сообщение от studibenker Посмотреть сообщение
mov cl, n ;Помещаем в cl количество введённых символов
mov bl, n
repne scasb ;Сравниваем с 0, пока не найдём
sub bx, cx
CX надо инициализировать, а не CL, ну и с BX вместо BL, соответственно. И ещё CLD на всякий случай в начало кода. Да, регистр ES чему равен? (команды типа SCASx используют регистровую пару ES:DI). Остальное не смотрел. И да, есть такая штука, очень помогает, ага.
0
642 / 151 / 60
Регистрация: 08.04.2015
Сообщений: 390
22.11.2015, 05:36 3
Цитата Сообщение от studibenker Посмотреть сообщение
Пишу через Visual Studio.
Принципиальный вопрос: вы исполняемый файл пытаетесь собрать 16- или 32-битный?
0
1 / 1 / 0
Регистрация: 22.09.2014
Сообщений: 32
22.11.2015, 14:21  [ТС] 4
Большое спасибо! Записал значения в cx и bx и всё заработало, хотя непонятно почему. Когда в ТД открывал программу, и заносил значения только в cl и bl, ch и bh не изменялись и цикл проходил ровно столько раз, сколько было записано в cl. На Си тоже, я постоянно выводил значения регистров, всё работало, конфликт происходил только на переходе. Но уже всё работает, большое спасибо за помощь)
0
22.11.2015, 14:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2015, 14:21
Помогаю со студенческими работами здесь

В NeroVision когда я режу видеоролик на части и вставляю между ними разные переходы, то эти они не работают
Народ, мне кто нибудь объяснит, почему в NeroVision когда я режу один и тот же видеоролик на части...

Не работают задние USB а передние работают как по маслу в чем дело.
Здравствуйте.Включил комп и заметил что не работает принтер подумал что отключил от питания а...

Материнка AsRock N68C-GS FX - не работают слоты DDR3 2 шт, DDR2 работают нормально
Здравствуйте, Материнка AsRock N68C-GS FX - не работают слоты DDR3 2 шт, хотя предусмотрены. DDR2...

Win 7 64, периодически не работают порты USB. Перезагрузив раза 2-3 комп, работают
Привет! у меня тоже проблема - в win 7 64 периодически не работают порты USB. Перезагрузив раза 2-3...

Кнопки регулировки громкости на клавиатуре иногда не работают и/или работают некорректно
Здравствуйте, у меня возникает некая неполадка/баг со звуком. Пользуюсь я данной клавиатурой, как...

СМА LG WD-80480S не работают исполнительные механизмы, не работают клапана ,мотор,насос
Стиралка LG WD-80480S по включении программы блокирует люк и стоит .Воду не набирает,барабан не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru