Скопировать из строки s1 в строку s2 второй и четвертый символы три раза - Assembler
Формулировка задачи:
Всем доброго времени суток! Только познаю азы ассемблера, так что не серчайте за лузерство=)
Задача у меня следующая:
-Ввести строку s1 длиной не менее 10 символов.
-Скопировать из строки s1 в строку s2 второй и четвертый символы три раза.
-Вывести на экран строки s1 и s2.
Что я сделал:
Заранее спасибо за помощь!
.model small .stack 100h .data s1 db 'Vvedite stroku ne menee 10 simvolov:',0Dh,0Ah,'$' s2 db 255,?,255(?) .code start: mov ax,@data mov ds,ax mov es,ax mov ah,9 mov dx,offset s1 ;вывел строку s1 на экран int 21h mov ah,0Ah mov dx,offset s2 mov si,dx int 21h ;ввел строку s2, использую функцию 0Ah mov al,s1+1 mov s2,al ;копирую второй символ из s1 и помещаю его в s2 mov bl,s1+1 mov bh,0 ;помещаю в bx количество введенных символов ;comment = ;далее нужно повторить это с четвертым символом? ;т.е. mov al,s1+3 ; mov s2+1,al ; ; mov bl,s1+3 ; mov bh,0 ;= mov byte ptr s2+2,'$' ;помещаю символ конца строки mov s1[bx],’$’ ;подскажие как вывести строки? Девятой функцией? а как быть с переносом строк? ;лучше добавить в память строку: new_line DB 10,13,’$’ ;или добавить лучше символ переноса в строки: mov byte ptr строка,0Ah ;??????????? ;с завершением уже справился) mov ax,4c00h int 21h end start
забыл про повтор ввода 3 раза. повтор, используя dup наверное можно сделать тоже в конце?
Решение задачи: «Скопировать из строки s1 в строку s2 второй и четвертый символы три раза»
textual
Листинг программы
.186 .model small .stack 100h .data msg1 db 'Vvedi stroku simvolov dlinoi minimum v 10 simvolov i klikni',0dh,0ah,'$' msg2 db 'Vivod pervoi stroki s1:',0dh,0ah,'$' msg3 db 'Vivod vtoroi stroki s2:',0dh,0ah,'$' s1 db 14,?,14 dup (?) s2 db 0dh,0ah,7 dup (?) new_l db 10,13, '$' .code mov ax,@data mov ds,ax mov ax,0600h mov bh,0ah mov cx,0000 mov dx,184fh int 10h mov ah,02 mov bh,00 mov dh,01 mov dl,00 int 10h mov ah,40h lea dx,msg1 ;vivodim msg1 na ekran mov bx,1 ;в bx хранится дескриптор стандартного выходного потока mov cx,61 ;в cx – количество выводимых символов int 21h mov ah,3fh lea dx,s1 mov bx,0 mov cx,14 int 21h ;vvodim stroku s1 ;peremes4aem simvoli ispolizuia stek push word ptr s1[3] push word ptr s1[3] push word ptr s1[3] push word ptr s1[1] push word ptr s1[1] push word ptr s1[1] pop word ptr s2 pop word ptr s2+1 pop word ptr s2+2 pop word ptr s2+3 pop word ptr s2+4 pop word ptr s2+5 mov ah,40h lea dx,msg2 ;vivodim msg2 na ekran mov bx,1 mov cx,23 int 21h call waitkey call newl mov ah,40h lea dx,s1 ;vivodim s1 na ekran mov bx,1 mov cx,14 ;в cx – количество выводимых символов int 21h call newl call newl mov ah,40h lea dx,msg3 ;vivodim msg2 na ekran mov bx,1 mov cx,23 ;в cx – количество выводимых символов int 21h call newl call waitkey mov ah,40h lea dx,s2 ;vivodim msg2 na ekran mov bx,1 mov cx,6 ;в cx – количество выводимых символов int 21h call waitkey mov ah,4ch ;zavershenie programmi int 21h waitkey proc mov ah,10h int 16h ret waitkey endp newl proc mov ah,40h lea dx,new_l ;vivodim msg2 na ekran mov bx,1 mov cx,2 ;в cx – количество выводимых символов int 21h ret endp newl end
Объяснение кода листинга программы
- Копирование строки s1 в строку s2 второй и четвертый символы три раза В данном коде используется ассемблер для написания программы на языке ассемблера. Переменные: s1 - строка, в которую вводится строка из 10 символов, второй и четвертый символы которой мы хотим скопировать. s2 - строка, в которую мы хотим скопировать второй и четвертый символы строки s1. Процесс:
- Вводятся символы в строку s1 (61 символ).
- Копируются второй и четвертый символы строки s1 в строку s2 (14 символов).
- Копируются второй и четвертый символы строки s1 в строку s2 еще два раза.
- Выводится строка s2 на экран.
Почему другие ответы неверны:
- Нет использования стека или кучи для хранения данных.
- Нет использования динамического формирования строки.
- Нет использования циклов или условных операторов, кроме операторов перехода.
- Нет обработки ошибок или исключений.
- Нет использования функций для работы со строками.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д