[TASM] Выделение из исходной строки подстроки символов заданной длины с указанного номера позиции - Assembler

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

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

Доброго времени суток! Нужно написать программу (выделения из исходной строки подстроки символов заданной длины с указанного номера позиции.(ввод данных с клавиатуры)). Выделения из исходной строки подстроки символов заданной длины я сделала, но как мне сделать так, чтобы прога выводила подстроку с указанного номера позиции не понимаю. Помогите, пожалуйста!!!
STACKS SEGMENT PARA STACK 'STACK'
db 64 dup(?)
STACKS ENDS
 
DATA SEGMENT PARA 'DATA'
buf db 50,?,50 dup(?) 
mes1 db 'Vvedite ishodnyu stroku:','$' 
mes2 db 'Vvedite dliny iskomoy podstroki:','$' 
mes3 db 'Vvedite nomer pozicii:','$' 
n db 3,?,3 dup(?)
DATA ENDS
 
CODE SEGMENT PARA 'CODE'
ASSUME  CS:CODE,DS: DATA,SS:STACKS
start:
MAIN PROC FAR
        mov ax,DATA
        mov ds,ax
        
        mov ah,09h ;выводим сообщение 1
        mov dx,offset mes1
        int 21H 
        call enterr
 
        mov ah,0Ah; вводим исходную строку
        mov dx,offset buf
        int 21h
 
        mov ah,09h; выводим исходную строку
        mov bl,[buf+1h] 
        add bl,02h 
        xor bh,bh 
        mov [buf+bx],'$' 
        mov dx,offset buf+2h
        int 21H
        call enterr
 
        mov ah,09h;выводим сообщение 2
        mov dx,offset mes2
        int 21H
        call enterr
        
        mov ah,0ah;вводим длину искомой подцепочки
        mov dx,offset n
        int 21h   
        xor cx,cx  
        mov cl,[n+2]
        sub cx,30h
        xor ax,ax
        mov al,10
        mul cl  
    add al,[n+3]
    sub ax,30h
    mov [buf],al
    mov bl,[buf]
        call enterr
        
        mov ah,09h ;выводим подцепочку 
    add bl,2h
        xor bh,bh 
        mov [buf+bx],'$'
        mov dx,offset buf+2h
        int 21h
        call enterr
 
        mov ah,4ch
        mov al,0
        int 21h
        
MAIN endp
 
enterr proc near 
        mov ah,02h  
        mov dx,10 
        int 21h  
        mov dx,13 
        int 21h
        ret
enterr endp
CODE ends
end start

Решение задачи: «[TASM] Выделение из исходной строки подстроки символов заданной длины с указанного номера позиции»

textual
Листинг программы
msg db '123456789$'
.....
mov dx, offser msg
mov ah, 9
int 21h                 ;на экране будет 123456789
mov dx, offset msg+8
int 21h                 ;на экране будет 89

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

В данном коде на языке Assembler происходит следующее:

  1. Переменная msg содержит строку символов '123456789$'.
  2. Переменная dx используется для хранения смещения (оффсета) строки msg.
  3. Переменная ah используется для передачи номера функции в систему.
  4. Команда int 21h используется для вызова функции обработки строк символов в системе. При этом на экране отображается строка '123456789'.
  5. Затем переменная dx изменяется, чтобы указать на следующий символ в строке msg.
  6. Команда int 21h снова используется для вызова функции обработки строк символов в системе. При этом на экране отображается строка '89'.

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

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