Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решить задачу 
V
    Опции темы
flow11
Дата 9.5.2010, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2010

Репутация: нет
Всего: нет



Ребят, помогите пожалуйста.
user posted image 
 Написать модуль на языке Ассемблера для обработки строк (в виде процедуры или макроса).
 Написать на языке Ассемблера программу корректного ввода исходных данных.
PM MAIL   Вверх
iff
Дата 9.5.2010, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата

для обработки строк 

но функция, предложенная вами работает с числами... (Y, a и b). По какому алгоритму обрабатывать строки?

Цитата

ввода исходных данных

Для ввода a и b?
числа a и b имеют какой тип?


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
flow11
Дата 9.5.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2010

Репутация: нет
Всего: нет



Это весь текст задания, наверное числа a и b - действительные
PM MAIL   Вверх
Mikl_
Дата 11.5.2010, 12:37 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Цитата(flow11)
наверное числа a и b - действительные

 smile ошибаетесь! были бы они действительными, было бы написано 2.0*a/b+1.0 и (b+5.0)/a исходить нужно от того объясняли ли вам как программировать FPU или нет, а судя по заданию "Написать модуль на языке Ассемблера для обработки строк (в виде процедуры или макроса).
 Написать на языке Ассемблера программу корректного ввода исходных данных." smile  это целочисленное программирование
PM MAIL   Вверх
iff
Дата 11.5.2010, 18:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Для TASM. Пограмма типа COM. Системные требования: процессор не ниже 286, ОС семейства ДОС.
Работает с целыми знаковыми числами размерностью слово
Код

        .MODEL  TINY
        .CODE
        .286
        ORG     100H
MAIN    PROC    NEAR

;********************************* Ввод данных ********************************

        LEA     DX, A_PRMPT             ;Приглашение для ввода
        CALL    INPUT                   ;Ввод
        MOV     A, AX                   ;Результат ввода в a

        LEA     DX, B_PRMPT             ;Приглашение для ввода
        CALL    INPUT                   ;Ввод
        MOV     B, AX                   ;Результат ввода в b

;************************************ Ядро ************************************

        ;AX содержит b
        CMP     AX, A                   ;Сравнить b и a
        JG      MENSHE                  ;Перейти если a<b
        JL      BOLSHE                  ;Перейти если a>b

ROVNO:  MOV     AX, -445                ;Выполняется если a=b, Y в AX
        JMP     EXIT

MENSHE: ADD     AX, 5                   ;Выполняется если a<b, Y в AX
        IDIV    A
        JMP     EXIT

BOLSHE: MOV     AX, A                   ;Выполняется если a>b, Y в AX
        IMUL    AX, 2
        IDIV    B
        INC     AX

;******************************* Вывод результата *****************************

EXIT:   MOV     WORD PTR Y_STR+6, 0A0DH ;Добавить в строку для вывода символы
        MOV     Y_STR+8, '$'            ;   перевода каретки и конца вывода

        LEA     DI, Y_STR+5             ;Адрес строки для вывода
        PUSH    AX
        CMP     AX, 0                   ;Число меньше 0?
        JNL     OUT0
        NEG     AX                      ;   если да, то поменять знак
OUT0:   MOV     BX, 10
OUT1:   XOR     DX, DX
        DIV     BX                      ;Разделить на 10
        OR      DL, 00110000B           ;Преобразовать двоичный остаток в цифру
        MOV     [DI], DL                ;Добавить в строку для вывода 
        CMP     AX, 0                   ;Частное отделения равно 0?
        JE      OUT2                    ;   если да, то выход
        DEC     DI                      ;Следующий символ
        JMP     OUT1                    ;Повторить

OUT2:   POP     AX
        CMP     AX, 0                   ;Число было меньше 0?
        JNL     OUT3                    ;   если да, то поставить знак минус
        DEC     DI
        MOV     BYTE PTR [DI], '-'

OUT3:   MOV     AH, 9                   ;Приглашение для вывода Y
        LEA     DX, Y_PRMPT
        INT     21H
        MOV     DX, DI                  ;Вывод Y
        INT     21H
        MOV     AH, 7                   ;Пауза
        INT     21H
        RET                             ;Возвратить управление ДОС

MAIN    ENDP

;*********************** Подпрограмма ввода ASCII-чисел ***********************

INPUT   PROC    NEAR
        MOV     AH, 9                   ;Приглашение для ввода
        INT     21H
        MOV     AH, 0AH                 ;Ввод строки
        LEA     DX, P_LIST
        INT     21H
        MOV     MFACT, 1                ;Элемент данных, хранит степень 10
        MOV     MVALUE, 0               ;Элемент данных, хранит результат
        LEA     DI, KB_DATA             ;Адрес строки для чтения
        MOV     CL, ACT_LEN             ;Длина строки
        ADD     DI, CX
INP1:   DEC     DI                      ;Следующая цифра
        XOR     AX, AX
        MOV     AL, [DI]                ;Загрузить цифру в аккумулятор
        CMP     AL, '-'                 ;Это минус?
        JNE     INP2
        NEG     MVALUE                  ;   если да, то поменять знак
        JMP     INP3                    ;   результата и выйти
INP2:   AND     AL, 00001111B           ;Преобразовать цифру в двоичное число
        MUL     MFACT                   ;Умножить на 10 в степени n
        ADD     MVALUE, AX              ;Добавить к результату
        MOV     AX, 10                  ;Следующая степень 10
        MUL     MFACT
        MOV     MFACT, AX
        LOOP    INP1                    ;Повторить
INP3:   MOV     AX, MVALUE              ;В AX результат
        RET                             ;Возвратить управление программе
INPUT   ENDP

;*********************************** Данные ***********************************

A_PRMPT DB      'a = $'                 ;Приглашения для ввода и вывода
B_PRMPT DB      0DH, 0AH, 'b = $'
Y_PRMPT DB      0DH, 0AH, 'Y = $'

P_LIST  LABEL   BYTE                    ;Область данных для ввода с клавиатуры
MAX_LEN DB      7
ACT_LEN DB      ?
KB_DATA DB      7 DUP (?)

MFACT   DW      ?                       ;Необходима подпрограмме преобр. чисел
MVALUE  DW      ?                       ;Необходима подпрограмме преобр. чисел

A       DW      ?                       ;Значение a
B       DW      ?                       ;Значение b
Y_STR   DB      9 DUP (?)               ;Значение Y в формате ASCII-числа

        END     MAIN


Это сообщение отредактировал(а) iff - 12.5.2010, 16:31

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  ZADACHA.ZIP 1,83 Kb


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
flow11
Дата 11.5.2010, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2010

Репутация: нет
Всего: нет



iff, спасибо Вам огромное!
PM MAIL   Вверх
iff
Дата 11.5.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



ВНИМАНИЕ!!!
Я решил немного отредактировать прошлый вариант. а именно, те 2 части кода, которые выводят приглашение перед вводом переменных a и b, и те части которые осуществляют ввод строк с клавиатуры, добвены в подпрограмму, т.к. они повторяется.
Поэтому исполняемый файл стал меньше весить, а код выглядит более понятно.

Получившийся новый вариант скачайте из аттача выше и просмотрите его код тамже, в моём прошлом сообщении.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
flow11
Дата 11.5.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2010

Репутация: нет
Всего: нет



iff, спасибо! скачал обновленный вариант, в коде в принципе разобралсяsmile
PM MAIL   Вверх
Ruso
Дата 12.5.2010, 11:13 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.5.2010

Репутация: нет
Всего: нет



Помогите пожалуйста сделать это задание
первый вариант решить все 5 задач !!! Зарание Спосибо

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  ___________.jpg 473,60 Kb
PM MAIL   Вверх
Mikl_
Дата 12.5.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Ruso
тебе даже лень задание набирать, а почему кто-то его должен для тебя бесплатно решать? Тем более что, задания простейшие, ничего интересного
PM MAIL   Вверх
iff
Дата 12.5.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



flow11, Ой, я тут ошибку нашел в 111 и 113 строках. в 111 строке переменная MAX_LEN содержит значение, равное максимальному количеству введенных символов. я забыл что оно должно быть на 1 больше реального количества (из-за добавляемого символа 0DH) т.е. не 6, а 7. В строке 113 соответственно нужно области KB_DATA отвести ещё один байт для этого символа 0DH.
Ну и ещё 2 маленькие недочета, которые устранены: в строке 27 я убрал инструкцию mov ax, b, т.к. ax уже содержит b. И в строке 38 исправил: там нужно помещать не 0D0AhH, а 0A0DH, т.к. байты меняються местами, когда храняться в оперативной памяти. короче ещё раз скачивай smile


Ruso, что представляет собой само задание? нужно посчитать при помощи математического сопроцессора? Программа должно запрашивать данные с клавиатуры и выводить результат на экран или же только просто посчитать и всё?


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
iff
Дата 12.5.2010, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



там на картинке внизу справа задание написано, я не прочитал. судя по всему это целые числа (со знаком наверно).
Вот для первого:
Код

.data
a dw -5
b dw 500
c dw 8
d dw 2
result dw ?

.code
mov ax, a
add ax, b
sub ax, c
idiv d
mov result, ax


Для второго:
Код

.data
a dw 300
b dw -7
c dw 1000
result dw ?

.code
mov ax, a
imul b
imul c
imul c
mov result, ax


3)
Код

.data
a dw 100
b dw -100
c dw 70
result dw ?

.code
mov ax, b
imul c
mov dx, a
sub dx, ax
mov result, dx


4)
Код

.data
b dw -70
c dw 3
result dw ?

.code
mov ax, 5
imul b
push ax
mov ax, c
mov cx, 4
m: imul c
loop m
pop dx
sub dx, ax
mov result, dx


5)
Код

.data
a dw 30
b dw 10
c dw -600
result dw ?

.code
muv ax, a
idiv b
sub ax, c
mov result, ax



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1357 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.