Скопировать в строку s2 каждый 3-ий символ из строки s1 - Assembler

Узнай цену своей работы

Формулировка задачи:

;Помогите пожалуйста , код может выводить только один третий символ , а мне нужно , что бы мог выводить каждый
 
.model small
.data
c1 db 'Enter the text',0Dh,0Ah,'$'
s1 db 255,?,255 dup (?)
s2 db 0Dh,0Ah,7 dup ('$')
nl db 10,13,'$'
.code
start:  mov ax,@data
    mov ds,ax
    mov es,ax
    mov ax,3
    int 10h
    mov ah,9
    
    mov dh,0
    
    mov dx,offset c1 
    int 21h
   
    mov ah,0Ah
    
    mov dx,offset s1 
    int 21h
    
    lea dx,nl 
    mov ah,09h 
    int 21h
    
    mov si,offset [s1+4] 
    mov di,offset s2
    lodsb
    stosb
    
    inc si
    mov ah,9
    
    mov dx,offset s2
    int 21h
 
    mov ah,0
    int 16h
    mov ah,4Ch
    int 21h
end start

Решение задачи: «Скопировать в строку s2 каждый 3-ий символ из строки s1»

textual
Листинг программы
;Помогите пожалуйста , код может выводить только один третий символ , а мне нужно , что бы мог выводить каждый
 
.model small
.stack 100h
.data
c1 db 'Enter the text',0Dh,0Ah,'$'
s1 db 255,?,255 dup (?)
s2 db 0Dh,0Ah,7 dup ('$')
nl db 10,13,'$'
.code
start:  mov ax,@data
    mov ds,ax
    mov es,ax
    mov ax,3
    int 10h
    mov ah,9
 
    mov dh,0
 
    mov dx,offset c1
    int 21h
 
    mov ah,0Ah
 
    mov dx,offset s1
    int 21h
 
    lea dx,nl
    mov ah,09h
    int 21h
 
    mov cx,0
    mov cl,[s1+1]
    jcxz @@SkipCopy
    mov ax,cx
    mov cl,3
    div cl
    mov cx,0
    mov cl,al
    jcxz @@SkipCopy
    lea si,[s1+2+2]
    lea di,[s2]
 
@@For:
        mov al,[si]
        mov [di],al
        add si,3
        add di,1
    loop @@For
@@SkipCopy:
 
    mov ah,9
 
    mov dx,offset s2
    int 21h
 
    mov ah,0
    int 16h
    mov ah,4Ch
    int 21h
end start

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

В этом коде происходит следующее:

  1. Строка ввода запрашивается с помощью mov ah,9 (функция ввода строки) и выводится в консоль с помощью mov dx,offset c1 int 21h (первая строка ввода).
  2. Затем происходит чтение строки с помощью mov dx,offset s1 int 21h (функция ввода строки).
  3. Далее начинается цикл, который проходит по каждому третьему символу в строке.
  4. Если символ найден, он копируется в строку s2 с помощью lea si,[s1+2+2] lea di,[s2] mov al,[si] mov [di],al add si,3 add di,1 loop @@For.
  5. После завершения цикла выводится строка s2 с помощью mov ah,9 mov dx,offset s2 int 21h.
  6. Затем программа завершается с помощью mov ah,0 int 16h (выход из программы).

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

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