Tasm
, Сравнение строк
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
Перед отправкой сообщения внимательно прочтите правила раздела!!!

Tasm
, Сравнение строк
|
|
|
|
|
Здравствуйте!Имеется следующая программа:
![]() ![]() ;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,$).В чем дело? |
|
Сообщ.
#2
,
|
|
|
|
Используй тег [ CODE ] !
Цитата Zorg @ mov ax,[di] mov [si],ax Символ занимает 1 байт, а ax - это слово. Замени на: ![]() ![]() mov al,[di] mov [si],al |
|
Сообщ.
#3
,
|
|
|
|
Цитата Ct757 @ Используй тег [ CODE ] ! Цитата Zorg @ mov ax,[di] mov [si],ax Символ занимает 1 байт, а ax - это слово. Замени на: ![]() ![]() mov al,[di] mov [si],al Большое спасибо! |
|
Сообщ.
#4
,
|
|
|
|
Привет всем!
Не могу отлинковать программу следующего содержания:![]() ![]() ;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 |
|
Сообщ.
#5
,
|
|
|
|
Пользуйся TLINK32.exe
И наконец тегами CODE |
|
Сообщ.
#6
,
|
|
|
|
Zorg, у тебя ж в начале указано, как правильно линковать
Цитата Zorg, 26.04.06, 19:14:19, 1089953 вот и линкуй с ключом /3 ![]() ![]() ;tlink /v /3 prg_12_2.obj |
|
Сообщ.
#7
,
|
|
|
|
Цитата CBP @ Zorg, у тебя ж в начале указано, как правильно линковать Цитата Zorg, 26.04.06, 19:14:19, 1089953 вот и линкуй с ключом /3![]() ![]() ;tlink /v /3 prg_12_2.obj Спасибо! |