Вопрос № 183247: Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста со следующим заданием. Задание на фото ниже ...
Вопрос № 183248: Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста со следующим заданием. Задание на фото ниже ( Нужен один из 6 представленных вариантов)
Вопрос № 183249: Здравствуйте! У меня возникли сложности с таким вопросом: Помогите пожалуйста со следующим заданием. Задание подробно описано в текстовом документе. Нужно выполнить 1 из 12 предложенных вариантов(на ваше усмотрение) Просьба писать комментари...
Вопрос № 183250: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и...
Вопрос № 183247:
Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста со следующим заданием. Задание на фото ниже
№1 1) размер операндов не совпадает 123h - слово, а не байт 2,3)нормально 4)не правильный индексный регистр и нужно указывать тип операнда 5)нормально 6)не правильно: передача данных пернеменная-переменная 7)не правильно: одноверменное использование сегментных регистров 8)непосредственное указание сегментного адреса 9)не правильно: передача данных пернеменная-переменная 10)нормально
№2 +3/32=0.00011 -9/16=1.0111 -0
= не определено
№3 AX=20H
№4 0110'0010'1010'0000=AX 1001'1101'0101'0000=+ = 1111'1111'1111'0000=AX устатновлен флаг SF, остальные сброшены. Удачи!
----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч
Ответ отправил: Зенченко Константин Николаевич (Модератор)
Ответ отправлен: 23.05.2011, 16:01
Номер ответа: 267313 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267313
на номер 1151 (Россия) |
Еще номера »
Вопрос № 183248:
Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста со следующим заданием. Задание на фото ниже ( Нужен один из 6 представленных вариантов)
Реализован поиск по правилу 2: быть числами < 7 Те, которые < 7, переносятся в RES (с удалением из исходного), >=7 остаются в MAS После вызова ф-и OBRAB в AX адрес массива RES, в CX - число перенесенных чисел, в BX - число оставленных чисел
main.asm
Код :
extrn OBRAB:near ;чтобы было доступно из данного модуля
cseg segment para public 'code' ;сегмент кода
assume cs:cseg, ds:dseg, es:dseg ;свяжем сегментные регистры с указанными сегментами
start: mov ax, dseg ;загрузим сегментные регистры DS, ES
mov ds, ax ; адресом сегмента данных
mov es, ax
call OBRAB ;вызовем п/п анализа массива
mov ax, 4c00h ;выход в ДОС
int 21h
cseg ends
public MAS, MASend ;чтобы были доступны извне
extrn RES:byte ;чтобы было доступно из данного модуля
dseg segment public 'data'
MAS db -6, -1, 7, 'n', 8, -3, 9, 0, 'N', 4
MASend label byte ;зададим для подсчета длины строки в модуле SORT
dseg ends
end start
sort.asm
Код :
cseg segment para public 'code' ;сегмент кода
assume cs:cseg, ds:dseg, es:dseg ;свяжем сегментные регистры с указанными сегментами
public OBRAB ;чтобы была доступна извне
OBRAB proc near ;п/п анализа массива из модуля MAIN
lea si, MAS ;адрес массива
lea cx, MASend ;адрес конца
sub cx, si ;длина массива
lea di, RES ;адрес, куда переместим элементы
xor dx, dx ;количество найденных и перемещенных элементов
mov bx, si ;адрес исходного массива, куда будем писать оставленные элементы
obrabLoop: ;цикл по всем
lodsb ;очередной элемент массива
cmp al, 7 ;сравниваем с 7
jge obrabSave ;сравнение знаковое!
stosb ;все, кто меньше 7 (-6,-1,-3,0,4) переносим
inc dx ;считаем
jmp obrabNext
obrabSave:
mov [bx], al ;остальных оставляем
inc bx ;адрес конца оставленных
obrabNext:
loop obrabLoop ;по всем
mov cx, dx ;вернем количество перенесенных в cx
lea ax, RES ;адрес массива в ax
sub bx, offset MAS ;в bx - количество оставленных
ret
OBRAB endp
cseg ends
extrn MAS:byte, MASend:byte ;адреса, определенные в другом модуле
public RES ;адрес, определенный в данном, будет доступен извне
dseg segment public 'data'
RES db 10 dup (?) ;результирующий массив
dseg ends
end
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 20.05.2011, 14:49
Номер ответа: 267269 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267269
на номер 1151 (Россия) |
Еще номера »
Вопрос № 183249:
Здравствуйте! У меня возникли сложности с таким вопросом: Помогите пожалуйста со следующим заданием. Задание подробно описано в текстовом документе. Нужно выполнить 1 из 12 предложенных вариантов(на ваше усмотрение) Просьба писать комментарии к каждой операции.
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Посетитель - 349343! Вот и программа Реализовал вариант 1: по таймеру (прерыванию 1сh) выводится сообщение Чтобы не было слишком часто, сделал, чтобы выводилось раз в 2 секунды Выходит из программы по нажатию на любую клавишу
Код :
.model small
assume cs:code, ds:data, ss:stack
stack segment para public 'stack'
dw 1024 dup (?)
stack ends
MAX_COUNT equ 36 ;прерывание будет рисовать сообщение каждые MAX_COUNT/18 секунды
data segment para public 'data'
count dw MAX_COUNT
sPress db 0dh,0ah,'Press any key for exit...$'
string db 0dh, 0ah, 'Hi from interrupt!',0
Off_1c dw ? ;указатель на старый обработчик вектора 1ch
Seg_1c dw ?
data ends
code segment para public 'code'
start:
jmp Init ;на инициализацию
new_1c: ;подпрограмма отработки 1ch
push ds ;сохраним использованные регистры
push ax
push si
mov ax, data ;ds=data
mov ds, ax
dec count ;уменьшваем счетчик
jnz call_old_1c ;если не 0, то ничего не делаем
mov count, MAX_COUNT;загрузим заново
lea si, string ;адрес строки
mov ah, 0eh ;ф-я вывода телетайпом
str_loop: ;выводим строку
lodsb ;читаем символ
cmp al, 0 ;проверим на конец
je call_old_1c
int 10h ;выводим на экран
jmp str_loop
call_old_1c:
pushf ;вызовем старый обработчик, сначала надо pushf, т.к. выход по iret!
call dword ptr Off_1c;адрес переменной в сегменте данных
pop si
pop ax
pop ds ;восстановим регистры
iret ;возврат из прерывания
Init: ;инициализация
mov ax, data
mov ds, ax ;ds = data
mov ax, 351ch
int 21h ;узнаем вектор 1ch в es:bx
mov Off_1c, bx ;сохраним старый адрес в сегменте данных
mov Seg_1c, es
push ds
lea dx, new_1c ;установим новый адрес
push cs ;обработчика прерывания 1ch
pop ds ;ds:dx
mov ax, 251ch
int 21h
pop ds
lea dx, sPress ;выведем приглашение нажать на любую клавишу
mov ah, 9
int 21h
mov ah, 0 ;ждем
int 16h
cli ;воcстановим старый обработчик вектора 1ch
push ds ;ds
lds dx, dword ptr Off_1c ;ds:dx - адрес старого вектора
mov ax, 251ch
int 21h ;восстановим!
pop ds ;ds = data
sti
mov ax, 4c00h
int 21h ;выход в ДОС
code ends
end start
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 20.05.2011, 15:37
Номер ответа: 267272 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267272
на номер 1151 (Россия) |
Еще номера »
Вопрос № 183250:
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и вывод результата. Задача- удалить подстроку из строки. Ассемблер-TASM. EXE. Очень надеюсь, что Вы мне поможете.
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Дмитрий! Вот Вам программа. Думаю, разберетесь... Если что непонятно, обращайтесь в мини-форум
Код :
.model small, C ;параметры обрабатываются, как в С
.data
;буфер для приема основной строки по ф-и 0ah
buf1 db 80
cnt1 db 0
str1 db 80 dup (?)
;буфер для приема удаляемой подстроки по ф-и 0ah
buf2 db 80
cnt2 db 0
str2 db 80 dup (?)
sStr db 'Enter main string: ',0
sSubStr db 0dh, 0ah, 'Enter substring: ',0
sRes db 0dh, 0ah, 'Result: ',0
sAny db 0dh, 0ah, 'Press any key',0
.code
.186 ;чтобы было возможно push <число>
start:
mov ax, @DATA
mov ds, ax
mov es, ax
;введем основную строку
call GetStr, offset buf1, offset sStr
;введем подстроку
call GetStr, offset buf2, offset sSubStr
;удалим подстоку
call DelSubStr, offset str1, offset str2
;выведем результат
call Print, offset sRes
call Print, offset str1
;ждем нажатия на любую клавишу
call Print, offset sAny
mov ah, 0
int 16h
;выход в ДОС
mov ax, 4c00h
int 21h
;вывод строки ASCIIZ
Print proc string:word
mov si, string
PrintLoop:
lodsb
cmp al, 0 ;конец строки?
je PrintRet
int 29h ;вывод байта из al
jmp PrintLoop
PrintRet:
ret
Print endp
;ввод строки
GetStr proc sBuf:word, sTitle:word
call Print, sTitle ;вывод приглашения
mov dx, sBuf ;ввод строки
mov si, dx ;сохраним адрес структуры
mov ah, 0ah
int 21h
xor bx, bx ;заменим последний байт 0dh на 0
mov bl, byte ptr [si+1] ;длина строки
mov byte ptr [bx+si+2], 0 ;меняем
ret
GetStr endp
strlen proc pstr:word ;длина строки ASCIIZ
push di
mov di, pstr
mov cx, 0ffffh ;побольше
mov al, 0
repne scasb ;ищем завершающий 0
mov ax, di ;di показывает на байт за 0
sub ax, pStr ;длина строки + 1
dec ax ;0 не учитываем
pop di
ret
strlen endp
;поиск подстроки и если найдена, то удаление
;s1 - основная строка
;s2 - подстрока
DelSubStr proc s1:word, s2:word
call strlen, s2 ;ищем длину под строки
mov bx, ax ;сохраним
call strlen, s1 ;длина основной
mov dx, ax ;сохраним
mov cx, ax ;посчитаем варианты вхождения
sub cx, bx ;равно разнице длин
jl DSS_ret ;если подстрока длиннее, то на выход
mov di, s1 ;адрес основной
mov si, s2 ;адрес подстроки
DSS_Search: ;цикл поиска
push cx ;сохраним ренистры
push si
push di
mov cx, bx ;длина подстроки
repe cmpsb ;сравниваем, пока равно
pop di ;восстановим
pop si
pop cx
je DSS_found ;если равно, то на удаление
inc di ;увеличиваем начало поиска в основной строке
jcxz DSS_ret ;все ли варианты вхождения прошли
dec cx
jmp DSS_Search ;на повтор
DSS_found: ;нашли подстроку!
lea si, [bx+di] ;адрес начала хвоста, который надо переписать
; на место найденной подстроки
mov cx, dx ;длина основной строки
sub cx, si ;cx = cx - (si - s1)
add cx, s1 ;cx - длина хвоста
inc cx ;вместе с 0
rep movsb ;копируем
DSS_ret:
ret
DelSubStr endp
end start
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 20.05.2011, 16:56
Номер ответа: 267275 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267275
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.