Не получается запускать ГОТОВУЮ подпрограмму написанную на ассемблере из C++, в ходе подпрограммы на ассемблере вводятся вначале строка, а потом символ, а нужно их вводить в C++ - вопрос №4084206

и эти введенные на C++ данные, при запуске подпрограммы должны быть туда переданы. После он должен получить результат и я его должен вывести в C++

Задание какое было: В исходную строку вставить после заданного символа все символы, предшествующие ему. Оставшуюся часть строки оставить без изменения.

model small
szStr equ 250
.data
dbInpStr db 10,13,'Enter string:$'
dbInpSim db 10,13,'Enter simbol:$'
dbRes db 10,13,'Result:$'
dbErr db 10,13,'String not found$'
dbNot db 10,13,'Simbol not found$'
dbMax db szStr
dblen db ?
dbStr db 2*szStr dup(?)
.stack 256
.code
; настариваем сегментные регистры
begin: mov ax,@data
mov ds,ax
mov es,ax
; просим ввести строку
mov ah,9
lea dx,dbInpStr
int 21h
; вводим
mov ah,10
lea dx,dbMax
int 21h
; просим ввести символ
mov ah,9
lea dx,dbInpSim
int 21h
; вводим
mov ah,1
int 21h
; читаем длину введенной строки
xor ch,ch
mov cl,dbLen
lea si,dbStr
mov bx,cx
; для функции вывода строки
mov byte ptr [bx+si],'$'
; пустая стока
lea dx,dbErr
jcxz outStr
; начнем работу со строковыми командами
mov di,si
cld
repne scasb
; нет символа в строке
lea dx,dbNot
or cx,cx
jz outStr
; начинаем копирование
mov dx,si
push di
push cx
add si,bx; в конец строки
mov di,si
add di,bx; освобождаем свободное место
dec di; адресация с нуля — коррекция
sub di,cx
inc cx; кооректируем адресацию с нуля
; копируем строку
std
rep movsb;
; востанавливаем параметры поиска
pop cx
pop si
dec si; корректируем от куда копируем
sub bx,cx; считаем количество копируемых символов
mov cx,bx
; копируем начальнуе символы
rep movsb
; выводим результат
outStr: push dx
mov ah,9
lea dx,dbRes
int 21h
mov ah,9
pop dx
int 21h
xor ax,ax
int 16h
mov ax,4C00h
int 21h
end begin

30.11.20
0 ответов
Ответов пока нет
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store