На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Tasm , Сравнение строк
    Здравствуйте!Имеется следующая программа:
    ExpandedWrap disabled
      ;prg_12_2.asm
      MODEL   small
      STACK   256
      .data
      match   db  0ah,0dh,'Сравнение закончено','$'
      failed  db  0ah,0dh,'Строки не совпадают','$'
      string1 db  '0123456789',0ah,0dh,'$';исследуемые строки
      string2 db  '9123406780','$'
      .code
      ASSUME  ds:@data,es:@data   ;привязка DS и ES к сегменту данных
      main:
          mov ax,@data    ;загрузка сегментных регистров
          mov ds,ax
          mov es,ax   ;настройка ES на DS
      ;вывод на экран исходных строк string1 и string2
          mov ah,09h
          lea dx,string1
          int 21h
          lea dx,string2
          int 21h
      ;сброс флага DF - сравнение в направлении возрастания адресов
          cld
          lea si,string1  ;загрузка в si смещения string1
          lea di,string2  ;загрузка в di смещения string2
          mov cx,10   ;длина строки для префикса repe
      ;сравнение строк (пока сравниваемые элементы строк равны)
      ;выход при обнаружении не совпавшего элемента
      cycl:
          jcxz    end_hand    ;для последнего элемента
      repe    cmps    string1,string2
          je  end_hand    ; для последнего элемента
      ;не совпали
          mov ah,09h
          lea dx,failed
          int 21h ;вывод сообщения
      ;теперь, чтобы обработать не совпавший элемент в строке, необходимо  уменьшить значения регистров si и di
          dec si
          dec di
      ;сейчас в ds:si и es:di адреса несовпавших элементов
      ;здесь вставить код по обработке несовпавшего элемента
      ;после этого продолжить поиск в строке:
              mov ax,[di]
              mov [si],ax
          inc si
          inc di
          jmp cycl
      end_hand:          
          mov ah,09h  ;вывод сообщения
          lea dx,match
          int 21h
      exit:           ;выход
          mov ax,4c00h
          int 21h
      end main        ;конец программы

    А проблема моя следующая: при обработке последнего несовпавшего элемента в первую строку из второй копируется вместо одного элемента(0) два(0,$).В чем дело? :unsure:
    Сообщение отредактировано: Supervisor -
      Используй тег [ CODE ] !

      Цитата Zorg @
      mov ax,[di]
      mov [si],ax

      Символ занимает 1 байт, а ax - это слово.

      Замени на:
      ExpandedWrap disabled
        mov al,[di]
        mov [si],al
        Цитата Ct757 @
        Используй тег [ CODE ] !

        Цитата Zorg @
        mov ax,[di]
        mov [si],ax

        Символ занимает 1 байт, а ax - это слово.

        Замени на:
        ExpandedWrap disabled
          mov al,[di]
          mov [si],al

        Большое спасибо! ;)
          Привет всем! :) Не могу отлинковать программу следующего содержания:
          ExpandedWrap disabled
            ;prg_13_2.asm
            ;tlink /v /3 prg_12_2.obj
            MASM
            MODEL   small
            STACK   256
            .data           ;начало сегмента данных
            ;тексты сообщений:
            mes1    db  'не равен 0!$',0ah,0dh
            mes2    db  'равен 0!$',0ah,0dh
            mes3    db  0ah,0dh,'Элемент $'
            mas dw  2,7,0,0,1,9,3,6,0,8 ;исходный массив
            .code
            .486            ;это обязательно
            main:
                mov ax,@data
                mov ds,ax   ;связка ds с сегментом данных
                xor ax,ax   ;обнуление ax
            prepare:
                mov cx,10   ;значение счетчика цикла в cx
                mov esi,0   ;индекс в esi
            compare:
                mov dx,mas[esi*2]   ;первый элемент массива в dx
                cmp dx,0    ;сравнение dx c 0
                je  equal   ;переход, если равно
            not_equal:      ;не равно
                mov ah,09h  ;вывод сообщения на экран
                lea dx,mes3
                int 21h
                mov ah,02h  ;вывод номера элемента массива на экран
                mov dx,si
                add dl,30h
                int 21h
                mov ah,09h
                lea dx,mes1
                int 21h
                inc esi ;на следующий элемент
                dec cx  ;условие для выхода из цикла
                jcxz    exit    ;cx=0? Если да - на выход
                jmp compare ;нет - повторить цикл
            equal:      ;равно 0
                mov ah,09h  ;вывод сообщения mes3 на экран
                lea dx,mes3
                int 21h
                mov ah,02h
                mov dx,si
                add dl,30h
                int 21h
                mov ah,09h  ;вывод сообщения mes2 на экран
                lea dx,mes2
                int 21h
                inc esi ;на следующий элемент
                dec cx  ;все элементы обработаны?
                jcxz    exit
                jmp compare
            exit:
                mov ax,4c00h    ;стандартный выход
                int 21h
            end main    ;конец программы

          Tlink выдает след. сообщение:fatal: 32-bit record encountered in module prg13_2.asm :unsure:
          Сообщение отредактировано: Supervisor -
            Пользуйся TLINK32.exe
            И наконец тегами CODE ;)
              Zorg, у тебя ж в начале указано, как правильно линковать
              Цитата Zorg, 26.04.06, 19:14:19, 1089953
              ExpandedWrap disabled
                ;tlink /v /3 prg_12_2.obj
              вот и линкуй с ключом /3
                Цитата CBP @
                Zorg, у тебя ж в начале указано, как правильно линковать
                Цитата Zorg, 26.04.06, 19:14:19, 1089953
                ExpandedWrap disabled
                  ;tlink /v /3 prg_12_2.obj
                вот и линкуй с ключом /3

                Спасибо! ;)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0.0914 ]   [ 15 queries used ]   [ Generated: 12.10.26, 18:15 GMT ]