Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2016, 13:16   #1
K1905
 
Регистрация: 11.02.2010
Сообщений: 7
По умолчанию Работа со строками в памяти [Tasm]

Помогите найти ошибку при отладке программы TASM
Код:
 
Input string....: 0123456789
Output string...: 56789 01234
===================================
Operation completed !!!

Код:
  use16
  org 100h
  jmp start

  mUser1  db  13,10,' Input string....: $'
  mUser2  db  13,10,' Output string...: $'
  mUser3  db  13,10,' ==================================='
          db  13,10,' Operation completed !!! $'

  start:
     mov  dx,mUser1      ; приглашение на ввод
     call message        

     cld                 ; флаг направления для 'lodsb' (обсудим позже)
     push di             ; сохраним указатель на начало строки

     mov  cx,10          ; длинна строки (цикл)
  istr:
     call presskey       ; ждём символ с клавиатуры
     int  29h            ; печатаем его
     stosb               ; сохраняем символ в 'DI'
     loop istr           ; мотаем цикл 10 раз. Строка считана. ES:DI = 0B35:0009

     mov  dx,mUser2      ; мессага юзеру с результатом
     call message        

     pop  si             ; теперь SI указывает на строку 
     add  si,5           ; переместим указатель на вторую половину строки

     mov  cx,5           ; выводим 5 символов
  ostr:
     lodsb               ; читаем символ..
     int  29h            ; печатаем его
     loop ostr           ; мотаем цикл, пока CX не обнулится

     mov  al,' '         ; вставим пробел..
     int  29h

     mov  si,-2          ; переместим указатель на начало строки
     mov  cx,5           ; выводим первые(5) символов
  ostr:
     lodsb               ; читаем символ..
     int  29h            ; печатаем его
     loop ostr           ; мотаем цикл, пока CX не обнулится

     mov  dx,mUser3      ; выводим юзеру "Operation completed"
     call message

     call presskey       ; ждём клавишу, чтоб осмотреться
     int  20h            ; выходим из программы

  ;------- знакомые лица! ------------------------------------|
  message:
     mov  ah,9
     int  21h
  ret
  presskey:
     xor  ax,ax
     int  16h
  ret
Не получается вывод пяти первых символов в завершении программы
при отладке и вывода сообщения "Operation completed" на экране консоли получается такой вывод.
Код:
 Input string....: 0123456789
 Output string...: 56789   012   012
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 16.12.2016 в 13:21.
K1905 вне форума Ответить с цитированием
Старый 16.12.2016, 13:26   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

K1905, это глючный код.
Нужен буфер в секции данных и натравить на него DI.
При выводе первой половины, просто выставить SI на начало буфера
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 16.12.2016, 22:15   #3
K1905
 
Регистрация: 11.02.2010
Сообщений: 7
По умолчанию

Но данный код является правильным *.com-файлом и при открытии его через
cmd.exe редактором получаем правильный ответ показанный ниже
C:\>edit 3.com
ыn
Input string....: $0123456789
Output string...: $56789 01234
===================================
Operation completed !!! $║☻☺ш9 №W╣
ш6 ═)кт°║↑☺ш& ^Г╞♣╣♣ м═)т√░ ═)╛■*╣♣ м═)ть║.☺ш♣ ш• ═ ┤ ═!├1└═▬├
K1905 вне форума Ответить с цитированием
Старый 17.12.2016, 06:38   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

А чем Вы его собираете, Тасмом? Это-же фасмовский код..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 17.12.2016, 17:28   #5
K1905
 
Регистрация: 11.02.2010
Сообщений: 7
По умолчанию Работа со строками в памяти [Tasm]

Файл *com в отладчике TASM я пропускаю через файл td.exe и он проводит всю таксировку команд команд программы,показывает действия регистров и флагов, можно также работать с файлом *exe.
K1905 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler, tasm цепочечные команды для работы с строками D9bolic Помощь студентам 2 12.05.2012 13:24
TASM работа с файлами Dimon12345 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 12.12.2010 03:44
Работа со строками на ассемблере (TASM) crashX Помощь студентам 3 03.06.2009 09:22