Скопировать из строки 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

Объяснение кода листинга программы

  1. Копирование строки s1 в строку s2 второй и четвертый символы три раза В данном коде используется ассемблер для написания программы на языке ассемблера. Переменные: s1 - строка, в которую вводится строка из 10 символов, второй и четвертый символы которой мы хотим скопировать. s2 - строка, в которую мы хотим скопировать второй и четвертый символы строки s1. Процесс:
  2. Вводятся символы в строку s1 (61 символ).
  3. Копируются второй и четвертый символы строки s1 в строку s2 (14 символов).
  4. Копируются второй и четвертый символы строки s1 в строку s2 еще два раза.
  5. Выводится строка s2 на экран. Почему другие ответы неверны:
    • Нет использования стека или кучи для хранения данных.
    • Нет использования динамического формирования строки.
    • Нет использования циклов или условных операторов, кроме операторов перехода.
    • Нет обработки ошибок или исключений.
    • Нет использования функций для работы со строками.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы