Консультация № 159414
02.02.2009, 16:57
0.00 руб.
0 9 1
Здравствуйте уважаемые эксперты! Помогите пожалуйста с такой задачкой!
Скопировать вторую половину ASCIIZ-строки, расположенную по адресу в AX, в буфер с адресом в BX. Признак чётности/нечётности элементов строки сохранить для её второй половины. Заранее спасибо за любую помощь!

Обсуждение

давно
Посетитель
7438
7205
02.02.2009, 17:00
общий
О каком "признаке чётности/нечётности элементов строки" идет речь?
Выскажу предположение: чтобы первая половина имела четное число элементов,
чтобы скопированная строка была выровнена на слово одинаково с первой половиной.
Так или нет?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
02.02.2009, 17:07
общий
да очень интересно и куда её сохранять
давно
Посетитель
7438
7205
02.02.2009, 17:18
общий
Airyashov:
Куда сохранять, как раз понятно, "в буфер с адресом в BX",ясное дело, в текущем сегменте...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
02.02.2009, 17:38
общий
имел в виду четность
давно
Посетитель
7438
7205
02.02.2009, 17:54
общий
Ну да, не въехал сразу...
Ждем-с автора...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
02.02.2009, 19:00
общий
Если чесно я сам этого не понял, просто такое условие задания .
Неизвестный
02.02.2009, 19:06
общий
меня интересует только копирование второй половины строки.
давно
Посетитель
7438
7205
03.02.2009, 00:32
общий
это ответ
Здравствуйте, Artem--ua!
Программа в приложении.
Чтобы сохранить "признак чётности/нечётности элементов строки для её второй половины",
высчитываем длину первой половины такой, чтобы она была четной

Приложение:
;tasm copy.asm
;tlink copy /t
;Копируем вторую половину строки (по адресу в AX) в буфер (по адресу BX)
;Первая половина имеет четное число байт,
;чтобы сохранить "признак чётности/нечётности" для второй половины

.model tiny
.data
sFirst db 'Before: ',0
sSecond db 0dh, 0ah,'After : ',0
string db '123456789',0
second db 5 dup (?)

.code
.startup
lea ax, string
lea bx, second
call CopySecondPart

lea si, sFirst
call PrintASCIIZ
lea si, string
call PrintASCIIZ
lea si, sSecond
call PrintASCIIZ
lea si, second
call PrintASCIIZ

mov ax, 4c00h
int 21h

CopySecondPart proc
mov si, ax ;адрес строки
mov di, ax
mov al, 0
mov cx, 0ffffh
repne scasb ;ищем конечный 0
lea ax, [di-1] ;адрес конечного 0
sub ax, si ;длина строки
shr ax, 1 ;половина длины строки
and ax, 0fffeh ;вторая половина на границе слова
add si, ax ;адрес второй половины
CLoop: ;копируем, включая завершающий 0
lodsb
mov [bx], al ;адрес выходного буфеа
inc bx
cmp al, 0
jne CLoop
ret
CopySecondPart endp

PrintASCIIZ proc ;вывод на экран ASCIIZ строки
lodsb
cmp al, 0
jz PARet
int 29h
jmp PrintASCIIZ
PARet:
ret
PrintASCIIZ endp

end
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
03.02.2009, 00:58
общий
Спасибо!
Форма ответа