РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1594 | Дата выхода: | 14.04.2016, 09:51 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 17 / 8 | Вопросов / ответов: | 3 / 3 | Консультация # 189124: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Написать программу на ассемблере, для решения данного уравнения Программная реализация на TASM, DOS, формат ехе.... Консультация # 189125: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Доброго времени суток, уважаемые эксперты! Мне нужна ваша помощь! Суть задания заключается в следующем: реализовать программу со строками. Слова в строке могут быть разделены пробелами и знаками препинания. Удалить в каждом слове строки повторяющиеся в нем буквы. Помогите, пожалуйста. ... Консультация # 1 89126: Здравствуйте! У меня возникли сложности с таким вопросом: Помогите написать программу на языке ассемблер, для решения уравнения ... Консультация # 189124: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Написать программу на ассемблере, для решения данного уравнения  Программная реализация на TASM, DOS, формат ехе. Дата отправки: 08.04.2016, 13:07 Вопрос задал: nikolan2012 (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Зенченко Константин Николаевич (Модератор): Здравствуйте, nikolan2012!
Смотрите приложение:
model small data a dw 34 b dw 260 c dw 2 d dw 170 e dw 3 f dw 36 g dw 8 h dw 5 i dw 6 j dw 7 dbRes db 10,13,'Result:$' stack 100h code start: mov ax,@data mov ds,ax;настраиваем сегмент ;получаем знаменатель mov ax,h;загружаем 5 xor dx,dx; mul i;умножаем на 6 mov bx,f;загружаем 36 add bx,g;суммируем с 8 shr bx,1;делим на 2 add bx,ax;суммируем (36+8)/2+5*6 ; mov ax,d;загружаем 170 xor dx,dx mul e;умножаем на 3 mov cx,b;загружаем 260 shr cx,1;делим на 2 add ax,cx;суммируем 170*3+260/2 add ax,a;суммируем 34+170*3+260/2 ; xor dx,dx div bx;получаем первую дробь ;(34+170*3+260/2)/((36+8)/2+5*6) push ax;сохраняем в стеке ; mov ax,i;загружаем 6 add ax,j;суммируем с 7 mov si,a;загружаем 34 shr si,1;делим на 2 xor dx,dx mul si;получаем второе число pop bx;востанавливаем первое число add ax,bx;суммируем ; mov si,10;система счисления xor cx,cx;счетчик в стеке @@01: xor dx,dx div si;получаем младшую цифру push dx;запоминаем в стеке inc cx;считаем or ax,ax;повторяем пока не ноль в ах jnz @@01 mov ah,9 lea dx,dbRes int 21h;выводим сообщение @@02: pop ax;извлекаем цифру add al,'0';переводим в символ int 29h;выводим на экран loop @@02 xor ax,ax;ожидаем любую клавишу int 16h mov ah,4Ch;выход int 21h end start Комментариев достаточно, если что спрашивайте в мини-форуме. Удачи!  | Консультировал: Зенченко Константин Николаевич (Модератор) Дата отправки: 08.04.2016, 17:42 5 Спасибо, все работает! ----- Дата оценки: 09.04.2016, 10:10 | Рейтинг ответа: 0 | Консультация # 189125: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Доброго времени суток, уважаемые эксперты! Мне нужна ваша помощь! Суть задания заключается в следующем: реализовать программу со строками. Слова в строке могут быть разделены пробелами и знаками препинания. Удалить в каждом слове строки повторяющиеся в нем буквы. Помогите, пожалуйста. Буду очень благодарен за помощь. Добра и позитива! Дата отправки: 08.04.2016, 13:10 Вопрос задал: Maxim (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Maxim! Где-то так... Идея такая: 1) ищем слова, состоящие из латинских букв. Все остальное - разделители 2) обнуляем в каждом слове одинаковые буквы 3) сжимаем строку, удаляя из нее нули Комментариев более чем достаточно. Смотрите. С вопросами - в мини-форум
;реализовать программу со строками. ;слова в строке могут быть разделены пробелами и знаками препинания. ;удалить в каждом слове строки повторяющиесЯ в нем буквы. .model small .data ;структура для ввода строки по функции 0ah max db 80 ;максимальная длина строки len db 0 ;реальная длина введенной строки string db 80 dup (0) ;сама строка, заканчивается кодом 0dh sEnter db 'Enter string: $' sResult db 0dh,0ah,'Result : $' sAny db 0dh,0ah,'Press any key$' .code start: mov ax, @data ;настроим сегментные регистры mov ds, ax mov es, ax ;ввод строки ;введенная строка в структуре max,len,string call EnterString ;решаем задачу call DelRepeats ;выводим преобразованную строку lea dx, sResult ;выведем Result: mov ah, 9 int 21h lea dx, string ;строка mov ah, 9 int 21h Exit: ;выход lea dx, sAny mov ah, 9 int 21h mov ah, 0 ;подождем нажатия на любую клавишу int 16h mov ax, 4c00h int 21h EnterString proc ;ввод строки lea dx, sEnter ;выведем приглашение mov ah, 9 int 21h lea dx, max ;вводим строку mov ah, 0ah int 21h ret EnterString endp isLetter proc ;проверка на букву cmp al, 'A' ;считаем, что буквы - только английские! jb not_letter ; большие и маленькие cmp al, 'Z' jbe letter cmp al, 'a' jb not_letter cmp al, 'z' ja not_letter letter: inc bp ;помечаем, что найдена буква очередного слова stc ;помечаем, что буква ret not_letter: clc ;не буква ret isLetter endp ;поиск и обнуление повторяющихся букв в слове ;BX - адрес начала слова ;SI - адрес за словом isRepeat proc test bp, bp ;было ли слово? jne isRepeat_ext_loop ret ;повтор разделителей, которые не трогаем isRepeat_ext_loop: ;будем искать все буквы слова с начала слова ; во всех последующих cmp bx, si ;дошли до конца слова? jae isRepeat_ret ;на выход mov al, [bx] ;очередная буква cmp al, 0 ;уже обнуленную пропускаем je isRepeat_ext_next lea di, [bx+1] ;со следующего адреса isRepeat_int_loop: cmp di, si ;до конца слова jae isRepeat_ext_next cmp al, [di] ;сравниваем jne isRepeat_int_next mov byte ptr[bx], 0 ;одинаковые обнуляем! mov byte ptr[di], 0 isRepeat_int_next: inc di ;на следующий адрес jmp isRepeat_int_loop isRepeat_ext_next: inc bx ;на адрес следующей буквы, которую будем искать jmp isRepeat_ext_loop isRepeat_ret: xor bp, bp ;сбросим флаг найденного слова ret isRepeat endp DelZeros proc ;сожмем строку, выбросим все нулевые байты lea si, string ;адрес начала строки DelZeros_loop: mov al, [si] inc si cmp al, '$' je DelZeros_ret ;дошли до конца строки cmp al, 0 jne DelZeros_loop ;ненулевые обходим mov di, si ;адрес за нулевым байтом DelZeros_shift_loop: ;сдвигаем строку на одну букву назад mov al, [di] ;тем самым затираем нуль mov [di-1], al inc di cmp al, '$' ;до конца строки jne DelZeros_shift_loop dec si ;на одну букву сдвинули назад, поэтому надо проверить ; символ на позиции бывшего нуля jmp DelZeros_loop ;на проверку очередного символа DelZeros_ret: ret DelZeros endp DelRepeats proc ;удаление букв, которые повторяются в словах lea si, string ;адрес начала строки xor bx, bx ;вставим в конец строки символ '$' (для функции 9) mov bl, len ;длина строки mov [bx+si], byte ptr '$' xor bp, bp ;флаг отсутствия слова words_loop: ;цикл по словам mov bx, si ;запоминаем начало слова word_loop: ;поиск слова mov al, [si] inc si cmp al, '$' ;дошли до конца je DelRepeat_ret call isLetter ;буква? jc word_loop ;да - ищем небукву ;нет - конец слова dec si ;si - адрес за разделителем, уменьшим на 1 ; чтобы был адрес за словом call isRepeat ;обнуляем повторы букв в слове (если они есть) inc si ;адрес - за первым разделителем jmp words_loop ;на поиск следующего слова DelRepeat_ret: ;в конце надо еще проверить на наличие слова перед '$' dec si call isRepeat ;проверяем последнее слово call DelZeros ;удаляем нулевые байты в строке ret DelRepeats endp end start ;точка входа  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 08.04.2016, 16:29 5 нет комментария ----- Дата оценки: 08.04.2016, 19:39 | Рейтинг ответа: 0 | Консультация # 189126: Здравствуйте! У меня возникли сложности с таким вопросом: Помогите написать программу на языке ассемблер, для решения уравнения
Дата отправки: 08.04.2016, 13:10 Вопрос задал: vitya-titya (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Зенченко Константин Николаевич (Модератор): Здравствуйте, vitya-titya!
Смотрите приложение:
model small data a dw 123 b dw 4 c dw 6 d dw 3 e dw 5 f dw 36 g dw 34 dbRes db 10,13,'Result:$' stack 100h code start: mov ax,@data mov ds,ax;настраиваем сегмент ;считаем числитель дроби числителя mov ax,a; sub ax,b; xor dx,dx mul b;(123-4)*4 push ax mov ax,c; sub ax,d; xor dx,dx; mul e;(6-3)*5 pop bx add bx,ax; ;считаем знаменатель дроби числителя mov ax,b xor dx,dx mul e;5*4 xchg ax,bx xor dx,dx div bx;((123-4)*4+(6-3)*5)/(5*4) mov bx,ax ;считаем знаменатель mov ax,b; xor dx,dx; mul d;4*3 add ax,f;36+4*3 xchg bx,ax; div bx;((123-4)*4+(6-3)*5)/(5*4))/(36+4*3) sub ax,g;((123-4)*4+(6-3)*5)/(5*4))/(36+4*3)-34 ; xor di,di test ax,8000h jz @@00 mov di,1 not ax inc ax @@00: mov si,10;система счисления xor cx,cx;счетчик в стеке @@01: xor dx,dx div si;получаем младшую цифру push dx;запоминаем в стеке inc cx;считаем or ax,ax;повторяем пока не ноль в ах jnz @@01 mov ah,9 lea dx,dbRes int 21h;выводим сообщение or di,di jz @@02 mov al,'-' int 29h @@02: pop ax;извлекаем цифру add al,'0';переводим в символ int 29h;выводим на экран loop @@02 xor ax,ax;ожидаем любую клавишу int 16h mov ah,4Ch;выход int 21h end start Удачи!
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий