Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
а можно на код до "search:" глянуть?

:)

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 00:53 23-03-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
А да, пожалуйста

Код:
    xor ch, ch
    mov bh, str1+1
    mov bl, str2+1
 
    cmp bh, bl
    ja strlen2
    mov cl, str1+1
    jmp strlen1
    strlen2:
    mov cl, str2+1
    strlen1:
     
    lds si, str1+2
    les di, str2+2  
    xor bx, bx
    cld        
     
    search:
    repe cmpsb
    je not_edit
    mov str1+bx, '+' ; наугад пробую
    mov str2+bx, '-' ; всевозможные комбинации =)
    not_edit:
    inc bx
    jcxz str_end
    loop search
    str_end:

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 01:04 23-03-2012 | Исправлено: A1exSun, 01:12 23-03-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я бы всё-таки весь рег почистил
xor cx, cx
 
а так вроде Abs62 говорил, что это
mov str1+bx, '+'
относительно стека вычисляется...
 
может так?
  mov byte ptr ds:str1[bx], '+'
  mov byte ptr es:str2[bx], '-'

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 01:16 23-03-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
я бы всё-таки весь рег почистил  
 xor cx, cx

Так там потом в CL значение точно заноситься
 

Цитата:
может так?

Не работает. Еще варианты?
 
Добавлено:
Что-то я намутил вообще... После repe cmpsb нужно ZF=1 проверять, JE или? Почему проверка срабатывает даже когда байты равны? Вроде он другую область памяти проверяет, а не мои строки...

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 01:19 23-03-2012 | Исправлено: A1exSun, 01:34 23-03-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 mov byte ptr ds:str1[bx+si], '+'
  mov byte ptr es:str2[bx+di], '-'  
 
:)
 
ch не нужен, а все лупы по целому сх работают...
xor ch, ch -->
xor cx, cx

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 01:36 23-03-2012 | Исправлено: akaGM, 01:38 23-03-2012
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
а так вроде Abs62 говорил, что это  
mov str1+bx, '+'  
относительно стека вычисляется...

Относительно стека по умолчанию вычисляется bp, а не bx.
 
A1exSun
Ну, навскидку сразу видно, что сравнение начинается с str+2, а замена с str+0.
А так смотри под отладчиком, что и где там у тебя меняется.  
 

Цитата:
Что-то я намутил вообще... После repe cmpsb нужно ZF=1 проверять, JE или?

Выход из "repe cmpsb" произойдёт либо по CX=0, либо по ZF=0.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 01:37 23-03-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
ch не нужен, а все лупы по целому сх работают...  
 xor ch, ch -->  
 xor cx, cx

Дык я очищаю CH, а CL заношу свое значение. CX = CH + CL
 
Abs62

Цитата:
Ну, навскидку сразу видно, что сравнение начинается с str+2, а замена с str+0.

Это уже заметил... mov bx, 2 не помогло. Не понятно.
 
Добавлено:
Все исправил. Всем спасибо!

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 01:41 23-03-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
Дык я очищаю CH, а CL заношу свое значение
ну да, стормозил...
 

Цитата:
Все исправил.
показывай...

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 01:53 23-03-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Все оказалось проще:

Код:
    search:
    cmpsb
    je equal  
    mov str1[bx], '+'
    mov str2[bx], '-'
    equal:
    inc bx
    loop search
    strend:

Может медленнее конечно, но да ладно...
 
Добавлено:
Еще да, BX = 2.

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 01:57 23-03-2012
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
День добрый всем. Моя программа не разворачивает строку до конца. Если вводим "Hello everyone" то получаем "enoyreve olle". Последний символ где-то теряется. Помогите найти проблему.
Вот код

Код:
 
.MODEL SMALL
.STACK 100h
.DATA
mystr db'Hello everyone','$'
revstr db ($-mystr) dup(?)
len dw $-mystr ;length of mystr
.CODE
    assume ds:@DATA,ss:@STACK
start:
    mov ax,@DATA
    mov ds,ax
    mov si,len
    lea di,revstr
    mov cx,len
lp1:    mov al,mystr[si]
    mov [di],al
    inc di
    dec si
    loop lp1
    mov ax,4c00h
    int 21h
END start
 


----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 15:20 23-03-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
в длине строки есть последний доллар и обращаться она начинает с него
может просто добавить к len единичку?

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 16:39 23-03-2012
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM

Цитата:
в длине строки есть последний доллар и обращаться она начинает с него
может просто добавить к len единичку?  

Не, не поможет


----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 16:50 23-03-2012
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
Проблема номер раз:

Цитата:
len dw $-mystr ;length of mystr  

В этом самом len окажется суммарная длина mystr и revstr. Не пойдёт. Надо так:

Код:
len dw revstr-mystr ;length of mystr
 
Проблема номер два: завершающий '$' развороту не подлежит. Разворачивать надо строку до него, а его влепить в конец.
Проблема номер три: индексация начинается с 0, так что SI надо ещё уменьшить на 1.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 17:00 23-03-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Исправлено
Путем использования экстендера HX DOS by Japheth (http://www.japheth.de), удалось заставить работать MASM 7.10 из комплекта Visual Studio 2003, ML.EXE 7.10.3077 под pure DOS (!), работу выполняет на 5+. Немного не такие дефолты (COFF vs OMF), как в старых версиях. Но в целом вполне рабочий файл для DOS/Win3x/Win9x/NTx32/NTx64 (!). Если кому надо - брать тут (только необходимые файлы, остальное берем в общеизвестных местах - PWB, MSC7, SDK, DDK, masm32 и пр). Пароль стандартный.

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 21:05 25-03-2012 | Исправлено: MERCURY127, 15:31 27-03-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А теперь вопрос, интересующий меня уже много лет, и по которому гугль откровеннно партизанит! . Как известно, компиляторы обычно помещают .DATA в конец ЕХЕ файла. Например, при компиляции примера из предыдущего поста имеем: http://i.imgur.com/1nyqR.png. Классический ЕХЕ, ничего особенного... Теперь берем ЕХЕ из комплекта МС-ДОС 7.х, например, XCOPY.EXE: http://i.imgur.com/YQGnD.png
Ахалай-Махалай! Текстовые строки, например "Ошибка интерпретации параметров" - ВНУТРИ MZ ЗАГОЛОВКА! Один вопрос: КАК???
PS: /EXEPACK не помогает...

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 15:45 27-03-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 
 
а вот так. смотри No APM 1.2
 
Добавлено:
а блин у тебя 32 битное щаз
 
Добавлено:
блин не могу в один экран поместить.
 
Добавлено:
ты можешь вообще м блоки данных сам организовать как хочешь, сам выровнять по границе, выделить сегмент, и не пользоваться услугами компилятора

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:11 27-03-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz, ком я и сам умею! мне мз интересен!
Цитата:
Текстовые строки, например "Ошибка интерпретации параметров" - ВНУТРИ MZ ЗАГОЛОВКА! Один вопрос: КАК???

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 16:24 27-03-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помещеют же туда электронную подпись. правда я сам всегда делал это редактором. может есть команда для компилятора, а может надо патченный компилятор. как раньше было что компилятор вписывал номер машины в заголовок файла, чтоб вирусопейсателей ловить

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:33 27-03-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подпись все же немного не туда помещают - она ПОСЛЕ мз заголовка, и даже после кода - а это именно внутри, конкретно - внутри таблицы релокаций... можно спокойно выдрать эти строки, перевести их на другой язык, причем даже с изменением длин, и снова склеить файл - при этом не нужно будет рекомпилить прогу заново. Те это спец сделано для удобства локализации! там даже пометки есть - RUS, ENG... Мне интересно узнать, КАК именно это было сделано... Какой то дополнительный тулз - или все же достаточно самого компилера...

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 16:47 27-03-2012
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127
Что мешает указать компановщику смещение для секции?
Можно также написать самому MZ заголовок на ассемблере, а компановщику "приказать" не вставлять MZ заголовок.

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 10:55 28-03-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru