Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1440 | Дата выхода: | 28.04.2011, 15:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 215 / 65 | Вопросов / ответов: | 2 / 2 | Вопрос № 182915: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:Помогите с программой на ассемблере под Windows XP,Tasm.Программу прокомментировать. Дана целочисленная матрица в байтовом формате по строкам. Все операции обработки матрицы ... Вопрос № 182916: Здравствуйте! Прошу помощи в следующем вопросе:Помогите с программой на ассемблере под Windows XP,Tasm. Программу прокомментировать. Ввести произвольную символьную строку, представляющую номер телефона. Удалить из строки все черточки и записат... Вопрос № 182915: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:Помогите с программой на ассемблере под Windows XP,Tasm.Программу прокомментировать. Дана целочисленная матрица в байтовом формате по строкам. Все операции обработки матрицы реализовать только циклами. При необходимости использовать макросы. Размерность 4х4. Найти общую сумму элементов главной и побочной диагоналей. Отправлен: 23.04.2011, 14:38 Вопрос задал: Magma (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Magma! Вычисление реализовано с помощью макроса с параметрами. Не забываем, что главная диагональ идет с левого верхнего угла до правого нижнего, а побочная - с левого нижнего до правого верхнего.
Код: ;Дана целочисленная матрица в байтовом формате по строкам. ;Все операции обработки матрицы реализовать только циклами. ;При необходимости использовать макросы. ;Размерность 4х4. Найти общую сумму элементов главной и побочной диагоналей.
GET_NUM MACRO STRING local CetNumStart CetNumStart: lea dx, STRING ; строка приглашения call GetNum ; введем число в AX jc CetNumStart ; повторим, если ошибка endm
.mo del small .stack 100h .data
N equ 4 ;матрица array db 1, 2, 3, 4 db -1,-1,-1, 1 db 2, 1, 1, 1 db -1, 3, 2,-4
;строки сообщений sSum1 db 0dh,0ah,'Diagonal main sum = $' sSum2 db 0dh,0ah,'Diagonal secondary sum = $' sAny db 0dh,0ah,'Press any key$'
;макро для вычисления суммы диагонали ;параметры: ;off - начальное смещение первого байта ;deltaRow - приращение для перехода на следующую строку ;deltaColumn - приращение для перехода на следующий столбец ;string - адрес строки сообщения для вывода суммы SUMDIAG MACRO off, deltaRow, deltaColumn, string local sum_loop ;локальная метка mov bx, off ;база первого байта (строка) xor si, si ;смещение байта mov al, 0 ;сумма mov cx, N ;число элементов sum_loop: ;цикл суммирования add al, array[bx+si];складываем со следующим элементом add bx, deltaRow ;переходим на следующую строку add si, deltaColum n ;на следующий столбец loop sum_loop ;по всем элементам диагонали cbw ;преобразуем байт в слово lea dx, string ;адрес сообщения call PrintNum ;выведем ENDM
.code start: mov ax, @data ;настроим сегментные регистры mov ds, ax mov es, ax
;посчитаем сумму главной диагонали SUMDIAG 0, N, 1, sSum1 ;сумма побочной диагонали SUMDIAG ((N-1)*N), -N, 1, sSum2
lea dx, sAny ;выведем 'Press any key' mov ah, 9 int 21h
mov ah, 0 ; ждем нажатие на клавишу int 16h
mov ax,4c00h ; конец работы int 21h
PrintNum proc ; вывод знакового числа из AX push ax mov ah, 9 int 21h ; вывод строки (из DX) pop ax
test ax, ax ;проверим на знак jns form_str ;для положительного на вывод push ax ;для отрицательного выводим - и меняем знак mov dl,'-' ;знак - mov ah, 2 int 21h pop ax neg ax ;меняем знак числа на +, теперь оно положи тельное
form_str: mov bx, 10 ; будем делить на 10 xor cx, cx ; счетчик цифр div_loop: ; цикл получения десятичных разрядов xor dx, dx ; подготовимся для очередного деления div bx ; в dx остаток - очередной десятичный разряд push dx ; сохраним в стеке (от младшего к старшему) inc cx ; посчитаем test ax, ax ; есть еще десятичные разряды? jnz div_loop ; продолжим
mov ah, 2 pr_loop: ; цикл вывода десятичных цифр-символов pop dx ; востановим очередной разряд (от старшего к младшему) add dl, '0' ; символ цифры int 21h ; вывод loop pr_loop ; по всем цифрам
ret PrintNum endp ; end start
Вывод программы:
Код: Diagonal main sum = -3 Diagonal secondary sum = 3 Press any key ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 24.04.2011, 02:44 Номер ответа: 266812 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 266812 на номер 1151 (Россия) | Еще номера » | Вопрос № 182916: Здравствуйте! Прошу помощи в следующем вопросе:Помогите с программой на ассемблере под Windows XP,Tasm. Программу прокомментировать.
Ввести произвольную символьную строку, представляющую номер телефона. Удалить из строки все черточки и записать строку в виде последовательности цифровых символов с выводом на экран и в файл. Отправлен: 23.04.2011, 14:44 Вопрос задал: Magma (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Magma! Программа вводит строку. Затем, пропуская нецифры, формируется в том же буфере строка только из цифр. После чего, выводится на экран и в файл.
Код: ;Ввести произвольную символьную строку, представляющую номер телефона. ;Удалить из строки все черточки и записать строку в виде ;последовательности цифровых символов с выводом на экран и в файл.
.model small .stack 100h .data
;строки сообщений sGetNum db 0dh,0ah,'Enter phone number: $' sOut db 0dh,0ah,'Phone number = $' sAny db 0dh,0ah,'Press any key$' sFile db 'phone.txt',0
buf label byte ; буфер для приема строки с клавиатуры (по ф-и 0ah) max db 20 ; максимальная длина строки len db 0 ; реальная длина введенной строки string db 20 dup (?) ; сама строка
.code start: mov ax, @data ;настроим сегментные регистры mov ds, ax mov es, ax
lea dx, sGetNum ;приглашение для ввода строки mov ah, 9 int 21h
lea dx, buf ;вводим строку с номером телефона mov ah, 0ah int 21h
lea si, string ;адрес чтения строки mov di, si ;адрес, куда будем писать
num_loop: ;цикл по символам строки lodsb ;очередной символ cmp al, 0dh ;конец строки je output ;на вывод cmp al, '0' ;цифра? jb num_loop ;нецифру (любую) игнорируем cmp al, '9' ja num_loop stosb ;цифру сохраняем jmp num_loop ;продолжаем
output: ;выводим mov byte ptr [di], '$' ;закроем строку для функции 9 lea dx, sOut ;выводим строку 'Phone number =' mov ah, 9 int 21h lea dx, string ;номер из одних цифр int 21h
;сохраним в файле lea dx, sFile ;имя файла mov ah, 3ch ;создаем xor cx, cx ;без атрибутов int 21h mov bx, ax ;описатель файла lea dx, string ;адрес буфера mov cx, di ;адрес за буфером sub cx, dx ;отняв начало, получаем длину mov ah, 40h ;пишем int 21h mov ah, 3eh ;закрываем файл int 21h
lea dx, sAny ;выведем 'Press any key' mov ah, 9 int 21h
mov ah, 0 ; ждем нажатие на клавишу int 16h
mov ax,4c00h ; конец работы int 21h
end start
Вывод программы:
Код: Enter phone number: (123)123-12-12 Phone number = 1231231212 Press any key ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 24.04.2011, 03:10 Номер ответа: 266813 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 266813 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий