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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2023, 16:50   #1
alolay
Новичок
Джуниор
 
Регистрация: 15.01.2023
Сообщений: 1
Сообщение Замените в строке STRING символ & на символ пробела.

Объяснить назначение специальных цепочечных команд. используемых для обработки специальных символьных данных и выполнить следующие задания:
1. Замените в строке STRING символ & на символ пробела.

STRING DB ‘ASSEMBLER IS&POWER'

2. Имеются следующие определения:

STRING1 DB 'TO INFINITY AND BEYOND'
STRING2 DB 22 DUP(")

Используя команды обработки строк, выполнить:
2.1 Пересылку данных из STRING1 в STRING2 слева направо:
2.2 Пересылку данных из STRING1 в STRING2 справа налево;
2.3 Загрузку третьего и четвертого байтов области STRING1 в регистр АХ и сохранение содержимого регистра AХ в области по адресу STRING2 +4. Вывести измененную STRING2.
2.4 Сравнение данных в области STRING1 и STRING2. Вывести сообщение с результатом сравнения.
alolay вне форума Ответить с цитированием
Старый 15.01.2023, 20:02   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
.ideal
.model small
.data
  STRING DB 'ASSEMBLER IS&POWER$'
.code
  startup:
    mov ax, @data
    mov ds, ax
    mov es, ax

; Поиск конца строки, хотя для константной строки можно и не выполнять
    cld
    mov al, '$'
    lea di, STRING
    mov cx, -1
    mov dx, di
    repne scasb

; Замена в строке всех символов & на пробел
    lea cx, [di - 1]
    mov di, dx
    mov al, '$'
    sub cx, dx
  replace_loop: repne scasb
    jnz not_found
    mov byte ptr [di - 1], ' '
    jmp replace_loop
  not_found:
    mov ah, 9
    lea dx, STRING
    int 33
    xor al, al
    int 32

end startup
Код:
.ideal
.model small
.data
  STRING1 DB 'TO INFINITY AND BEYOND'
  STRING2 DB 22 DUP(' ')
  RESULT_ABOVE DB 'STRING1 > STRING2$'
  RESULT_EQUAL DB 'STRING1 == STRING2$'
  RESULT_BELOW DB 'STRING1 < STRING2$'
.code
  startup:
    mov ax, @data
    mov ds, ax
    mov es, ax

; Слева направо
    cld
    mov bx, STRING2 - STRING1
    lea si, STRING1
    lea di, STRING2
    mov cx, bx
    rep movsb

; Справа налево (инверсия, если я правильно понял)
    lea si, STRING1
    lea di, STRING2[bx]
    mov cx, bx
movs_loop:
    lodsb
    dec di
    mov [es:di], al
    loop movs_loop

; Загрузка и перемещение
    mov ax, STRING1[2]
    mov STRING2[4], ax

; Сравнение строк
    lea si, STRING1
    lea di, STRING2
    mov cx, bx
    repe cmpsb
    mov cx, bx
    jz equal_str
    jc below_str
    lea bx, RESULT_ABOVE
    jmp write_result

below_str:
    lea bx, RESULT_BELOW
    jmp write_result

equal_str:
    lea bx, RESULT_EQUAL

write_result:
    lea si, STRING2

print_str:
    lodsb
    mov ah, 14
    mov bx, 7
    int 16
    loop print_str
    mov dx, bx
    mov ah, 9
    int 33
    xor al, al
    int 32
    
end startup
macomics вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ansi символ NUL в std::string mihalech19 Общие вопросы C/C++ 1 26.06.2014 20:27
Assembler!!! Заменить на символ ‘!’ каждый 3тий символ в строке. Leon9313 Помощь студентам 0 24.04.2012 13:02
Символ пробела в старшем и младшем байте Толстой Общие вопросы C/C++ 0 13.12.2011 15:42
удвоить символ в строке Alexander1205 Общие вопросы C/C++ 1 01.04.2011 00:56
Каждый символ string в ComboBox1 ? newprog12 Помощь студентам 1 24.01.2010 16:38