Вопрос № 183642: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Задан массив из 6 чисел. Найти все числа которые заканчиваются на цифру 7 и поместить их в отдельный массив. Исходные числа положительные и заданы в байтовом формате, массив задаётся одним адресом....
Вопрос № 183640: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Дана целочисленная матрица в байтовом формате по строкам. Все операции обработки матрицы реализовать только циклами. При необходимости использовать макросы. Размерность 4х4. Найти общую сумму элемен...
Вопрос № 183641: Здравствуйте! Прошу помощи в следующем вопросе: Дана двухбайтовая двоичная строка. Проинвертировать первый полубайт строки, сложить по модулю 2 со вторым полубайтом и записать на место четвертого полубайта.Прошу как можно подробнее расписать коммента...
Вопрос № 183639: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Ввести произвольную символьную строку. Выделить из нее (с удалением из исходной строки) все цифры, сделать из них отдельную строку и записать их в файл....
Вопрос № 183642:
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Задан массив из 6 чисел. Найти все числа которые заканчиваются на цифру 7 и поместить их в отдельный массив. Исходные числа положительные и заданы в байтовом формате, массив задаётся одним адресом. Прошу как можно подробнее расписать комментарии к программе. Заранее благодарен.
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Посетитель - 377712! Числа ищем делением на 10 и проверкой остатка, равно ли 7-ми. Программа записывает все такие числа в отдельный массив и считает их количество. Массив задан в программе. Результат смотрим в отладчике.
Код :
;Задан массив из 6 чисел.
;Найти все числа которые заканчиваются на цифру 7 и поместить их в отдельный массив.
;Исходные числа положительные и заданы в байтовом формате, массив задаётся одним адресом.
.model small
.stack 100h
.data
array db 66, 17, 23, 207, 7, 55 ;массив чисел
N equ $-array ;длина массива (=6)
array7 db N dup (?) ;сюда запишем найденные числа
.code
main proc
mov ax, @DATA ;настроим сегментные регистры
mov ds, ax ;на сегмент данных
mov es, ax
lea si, array ;исходный массив
lea di, array7 ;сюда будем писать числа, которые заканчиваются на 7
mov cx, N ;количество исходных чисел
mov bl, 10 ;будем делить на 10 и смотреть остаток
xor dx, dx ;счетчик чисел, которые заканчиваются на 7
mainLoop: ;по всем
lodsb ;очередное число, si=si+1
mov ah, 0 ;сделаем из байта слово
div bl ;делим на 7, al - частное, ah - остаток
cmp ah, 7 ;остаток = 7 - число заканчивается на 7
jne next ;не равен - игнорируем
mov al, [si-1] ;равен - прочитаем его еще раз
stosb ;сохраним
inc dx ;посчитаем
next:
loop mainLoop ;по всем
mov ax, dx ;ax = чисел, которые заканчиваются на 7
mov ax,4c00h ;выход в ДОС
int 21h
main endp
end main
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 16.06.2011, 14:55
Номер ответа: 267758 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267758
на номер 1151 (Россия) |
Еще номера »
Вопрос № 183640:
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Дана целочисленная матрица в байтовом формате по строкам. Все операции обработки матрицы реализовать только циклами. При необходимости использовать макросы. Размерность 4х4. Найти общую сумму элементов последнего столбца и последней строки. Прошу как можно подробнее расписать комментарии к программе. Заранее благодарен.
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Посетитель - 377712! Программа ничего не вводит и не выводит. Матрица задана в программе, результат смотрим в отладчике. Байты-числа знаковые, т.е. должны быть в интервале -128<N<+127. Будут вопросы - задавайте в мини-форуме.
Код :
;Дана целочисленная матрица в байтовом формате по строкам.
;Все операции обработки матрицы реализовать только циклами.
;При необходимости использовать макросы. Размерность 4х4.
;Найти общую сумму элементов последнего столбца и последней строки.
.model small
.stack 100h
N equ 4 ;размерность матрицы
.data
array db 3, 100, 3, 4;примерная матрица 4х4
db -1, -2,-3, -4
db 0, 19, 2, 3
db -20, 120, 1, 127
.code
main proc
mov ax, @DATA ;настроим сегментный регистр
mov ds, ax ;на сегмент данных
xor dx, dx ;искомая сумма
;посчитаем сумму элементов последненго столбца
mov si, N-1 ;индекс столбца
mov cx, N ;число элементов в слолбце
xor bx, bx ;база строки матрицы (0, 4, 8, 12)
LastColumnsSum:
mov al, array[bx+si]; очередной байт
cbw ;превратим знаковый байт al в знаковое слово ax
add dx, ax ;складываем
add bx, N ;на следующую строку
loop LastColumnsSum ;по всем элементам столбца
;добавим сумму элементов последней строки
xor si, si ;индекс столбца
mov cx, N ;число элементов в строке
mov bx, N*(N-1) ;база последней строки матрицы (12)
LastRowSum:
mov al, array[bx+si]; очередной байт
cbw ;превратим знаковый байт al в знаковое слово ax
add dx, ax ;складываем
inc si ;на следующий элемент в строке
loop LastRowSum ;по всем элементам столбца
mov ax, dx ;искомая сумма в регистре AX
mov ax, 4c00h ;выход в ДОС
int 21h
main endp
end main
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 16.06.2011, 14:00
Номер ответа: 267756 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267756
на номер 1151 (Россия) |
Еще номера »
Вопрос № 183641:
Здравствуйте! Прошу помощи в следующем вопросе: Дана двухбайтовая двоичная строка. Проинвертировать первый полубайт строки, сложить по модулю 2 со вторым полубайтом и записать на место четвертого полубайта.Прошу как можно подробнее расписать комментарии к программе. Заранее благодарен.
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Посетитель - 377712! Полубайты нумеруем следующим образом: первый - младшие 4 бита младшего байта, вторый - старшие 4 бита младшего байта, третий - младшие 4 бита старшего байта, четвертый - старшие 4 бита старшего байта.
Двоичная строка задана в программе. Результат смотрим в отладчике.
Будут вопросы - обращайтесь в мини-форум
Код :
;Дана двухбайтовая
двоичная строка.
;Проинвертировать первый полубайт строки, сложить по модулю 2 со вторым полубайтом
;и записать на место четвертого полубайта.
.model small
.stack 100h
.data
bstring dw 1011001111100010b ;наша строка
.code
.186 ;чтобы можно было использовать команду shl al,4
main proc
mov ax, @DATA
mov ds, ax ;настроим сегмент данных
mov bx, bstring ;исходная двоичная строка
mov al, bl ;первый полубайт (старший игнорируем)
not al ;инвертируем байт
shl al, 4 ;младший стал старшим, заместо младшего нули
mov ah, bl ;второй полубайт
and ah, 0f0h ;оставляем только старшую (вторую) тетраду
xor al, ah ;складываем по модулю 2 старшую тетраду, в младшей 0
and bh, 0fh ;оставляем только третью (младшую) тетраду
or bh, al ;заместо старшей (четвертой) заносим результат пред опер
mov bstring, bx ;сохраняем на место
mov ax,4c00h ;выход в ДОС
int 21h
main endp
end main
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 16.06.2011, 14:33
Номер ответа: 267757 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267757
на номер 1151 (Россия) |
Еще номера »
Вопрос № 183639:
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Ввести произвольную символьную строку. Выделить из нее (с удалением из исходной строки) все цифры, сделать из них отдельную строку и записать их в файл.
1) Удаляем цифры, получаем две строки: исходную, без цифр, и строку из одних цифр 2) Выводим на экран обе строки (для наглядности) 3) Имя файла задаем в теле, как digits.txt, и выводим туда строку из цифр 4) В случае отсутствия символов любого типа (типа все цифры или ни одной цифры), выводится соответствующее сообщение
Код :
;Ввести произвольную
символьную строку.
;Выделить из нее (с удалением из исходной строки) все цифры,
;сделать из них отдельную строку и записать их в файл.
.model small
.stack 100h
.code
main proc
mov ax, @data ;настроим сегменты данных
mov ds, ax
mov es, ax
lea dx, sIn ;строка приглашения 'Enter string:'
mov ah, 9
int 21h
lea dx, buf ;введем строку
mov ah, 0ah
int 21h
lea si, string ;адрес строки
lea di, digits ;адрес, куда запишем цифры
mov bx, si ;по старому адресу будем писать все остальные символы
MainLoop: ;цикл по строке
lodsb ;читаем очередной
cmp al, 0dh ;конец строки?
je PrintResult ;на вывод результата
cmp al, 30h ;'0'
jb SaveOther ;другие сохраним по адресу [bx]
cmp al, 39h ;'9'
ja SaveOther ;другие сохраним по адресу [bx]
stosb ;заглавные сохраняем по адресу [di]
jmp MainLoop ;на следующий символ
SaveOther: ;остальные
mov [bx], al ;сохраняем
inc bx ;инкремент адреса
jmp MainLoop ;на следующий символ
PrintResult: ;вывод результата
push di ;сохраним адрес конца в буфере цифр
;di - адрес конца выводимого буфера (цифр)
lea dx, sDigitsOut ;адрес строки 'Digits:'
lea bp, digits ;адрес начала выводимой строки цифр
call OutMessage ;выводим данные
mov di, bx ;di - адрес конца выводимого буфера (остальных символов)
lea dx, sOtherOut ;адрес строки 'Other:'
lea bp, string ;адрес начала выводимой строки остальных букв
call OutMessage ;выводим данные
pop di ;восстановим адрес конца в буфере заглавных букв
call OutFile ;выведем заглавные буквы в файл
PressAny:
lea dx, sAny ;выведем 'Press any key'
mov ah, 9
int 21h
mov ah, 0 ; ждем нажатие на клавишу
int 16h
mov ax,4c00h ; конец работы
int 21h
main endp
OutMessage proc ;вывод строки с заголовком
mov ah, 9 ;вывод заголовка, адрес в dx
int 21h
mov si, bp ;адреса начала строки
mov cx, di ;адрес конца
sub cx, si ;длина строки
mov ah, 2 ;функция вывода символа из dl
jcxz NoMessage ;пустая строка?
OutLoop:
lodsb ;символ
mov dl, al ;для вывода
int 21h ;выводим
loop OutLoop ;по всем cx символам
ret
NoMessage: ;сообщение 'Not found'
lea si, sNotFound ;начало строки
mov cx, len_sNotFound;длина
jmp OutLoop ;на вывод
OutMessage endp
OutFile proc ;вывод строки в файл
lea dx, sName ;имя файла 'digits.txt'
xor cx, cx ;без атрибутов
mov ah, 3ch ;создаем
int 21h
jc CreateError ;ошибка создания?
mov bx, ax ;описатель файла
lea dx, digits ;адрес строки цифр
mov cx, di ;адрес конца
sub cx, dx ;длина
jcxz NoDigits ;есть цифры?
Write:
mov ah, 40h ;выводим
int 21h
jc WriteError ;ошибка записи
mov ah, 3eh ;закрываем файл
int 21h
ret
NoDigits: ;сообщение 'Not found'
lea dx, sNotFound ;начало строки
mov cx, len_sNotFound;длина
jmp Write ;на вывод
WriteError: ;ошибка записи
mov ah, 3eh ;файл закрываем
int 21h
lea dx, sWriteErr ;сообщение об ошибке
jmp PrintError
CreateError: ;ошибка создания
lea dx, sCreateErr ;сообщение об ошибке
PrintError:
mov ah, 9 ;выводим сообщение
int 21h
ret
OutFile endp
.data
;строки сообщений
sIn db 0dh,0ah,'Enter string: $'
sDigitsOut db 0dh,0ah,'Digits: $'
sOtherOut db 0dh,0ah,'Other : $'
sAny db 0dh,0ah,'Press any key$'
sName db 'digits.txt',0 ;имя файла
sCreateErr db 0dh,0ah,'File create error!$'
sWriteErr db 0dh,0ah,'File write error!$'
sNotFound db 'Not found' ;сообщение о ненахождении
len_sNotFound equ $-sNotFound ;длина сообщения
buf label byte ; буфер для приема строки с клавиатуры (по ф-и 0ah)
max db 128 ; максимальная длина строки
len db 0 ; реальная длина введенной строки
string db 128 dup (?) ; сама строка
digits db 128 dup (?) ;сюда запишем цифры
end main
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 16.06.2011, 13:42
Номер ответа: 267755 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267755
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.