Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler, MASM, TASM

Войти
Регистрация
Восстановить пароль
 
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
#1

Написать программу, котрая присваивает результат вычисления функции переменной F - Assembler

17.11.2012, 20:31. Просмотров 863. Ответов 9
Метки нет (Все метки)

Добрый вечер. В универе дали задание: написать прогу, котрая присваивает результат вычисления функции переменной F. Даны ЗНАКОВЫЕ переменны A,B,C,D (их значения могут быть любыми: -128..127) и формула: F=(6(a+c)^3)/b+(b(3b-d^2))/2d
Вот что написал я:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.model  small
.186
.stack  100h
.data
        A   db 127
        B   db 127
        C   db 127
        D   db 127
        F   dd 0
.code
Start:
    mov ax,@data
    mov ds,ax
    mov ax,0
 
        mov     al, A   ;помещаем A в AL
        mov     bl, B     ;помещаем B в BL
        add al,bl      ;складываем A+B
        mov         bl,al      ;сохраняем результат (для умножения (A+B)*(A+B) на (A+B))
        mul al         ;возводим результат в квадрат (A+B)*(A+B)
        mov         cx,ax    ;сохраняем квадрат суммы
 
           mov  ah,4Ch
           int  21h
end Start
Далее нужно преобразовать bl в bx, т.е.
Assembler
1
2
mov al,bl
cbw
Но вот проблема.. после выполнения команды cbw все биты bh станут либо 1 (если в al старший бит = 1), либо 0 (если в al старший бит = 0). А вдруг сумма равна 254 (FE)? тогда в ah все биты станут равны 1, следовательно ax=FFFE. А это число не равно 254..
Вопрос: как преобразовать байт в слово так, чтобы значение получившегося слова совпадало с его младшим байтом? Например: байт FE (254) -> слово 00FE (254), а не FFFE...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 20:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать программу, котрая присваивает результат вычисления функции переменной F (Assembler):

Написать программу вычисления значения функции при любом X - Assembler
Написать программу вычисления значения функции при любом X. Написать на языке Assembler

Составить программу для вычисления выражения A/24. Результат поместить в память - Assembler
Помогите пожалуйста!Составить программу для вычисления выражения A/24. Результат поместить в память.

Написать программу вычисления числа Фибоначчи - Assembler
Помогите, пожалуйста, студентке! Скоро экзамены, нужно решить билетные задачи на ассемблере, нужны только тексты, запускать их не нужно...

Написать программу, которая выполняет вычисления по формуле - Assembler
х=(а*2+b*c+5)(a*d+3) вот что получилось: .model small .stack 100h .data a db ? b db ? c db ? d db ? x dw ?

Написать программу, вычисляющую значение переменной R при указанных значениях - Assembler
Всем привет. Прошу помощи. В технаре через 2 дня НОК (Независимая оценка качества), с министерства образования привезли задания, а там надо...

написать программу, вычисляющую значение переменной R при указанных значениях - Assembler
R =m · x+y+n · z, где a=m+m · r, y=n2+m2 m=3,-1; n=8,36

9
sh2ezo
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
17.11.2012, 20:45 #2
читал-читал,но так и не понял, зачем вам надо использовать cbw. bl - это младшая половина bx, а al - это младшая половина ax, т.е., если мы обнуляем ah(старшая половина ax), у нас значение в AX становится равным AL и значение в AL становится равным AX.

Все философские познания можно почерпнуть из литературы по ссылке: http://www.intel.com/content/www/us/...r-manuals.html
0
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
17.11.2012, 21:23  [ТС] #3
Ах да.. Спасибо..
Но всё равно.. Как не пытался, не могу возвести число в куб Помогите пожалуйста.
0
Charles Kludge
Клюг
7637 / 3152 / 364
Регистрация: 03.05.2011
Сообщений: 8,382
17.11.2012, 22:58 #4
genock94, кмк, всё предельно просто:
Assembler
1
2
3
4
5
6
7
8
9
    movsx   eax, A          ;помещаем A в EAX
    movsx   ebx, B          ;помещаем B в EBX
    mov ecx, ebx
    add eax, ebx        ;складываем A+B
    mov ebx, eax        ;сохраняем результат (для умножения (A+B)*(A+B) на (A+B))
    imul    eax, eax        ;возводим результат в квадрат (A+B)*(A+B)
    imul    eax, ebx        ;возводим результат в куб (A+B)*(A+B)*(A+B)
    imul    eax, 6          ;
    idiv    ecx                 ; eax = (6(a+c)^3)/b
1
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
18.11.2012, 12:09  [ТС] #5
если бы мы работали в 32 разрядном процессоре) мы в 16- разрядном.. и тут всё посложнее..

Добавлено через 1 час 43 минуты
еще мы работаем в 186.. так что movsx вызовет ошибку
0
Charles Kludge
18.11.2012, 12:20
  #6

Не по теме:

Цитата Сообщение от genock94
еще мы работаем в 186
ЯНХНП. У вас что, препод - мракобес и вы пишете под процы 30-летней древности?

0
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
18.11.2012, 12:34  [ТС] #7
мы пытаемся понять как всё работает.. я вот некоторые моменты понимаю, но всё равно.. результаты не совпадают
0
Charles Kludge
Клюг
7637 / 3152 / 364
Регистрация: 03.05.2011
Сообщений: 8,382
18.11.2012, 12:51 #8
Цитата Сообщение от genock94
мы пытаемся понять
Дык, может начать с понимания того, что 32бита - штатный режим работы нонешних процов, а 16бит - эмуляция(оставленная из коммерческих соображений), накладывющая свои ограничения и требующая извратов, а посему 16бит можно рассматривать лишь как частный случай? Про защищенный режим реча пока не идёт, к тому же 4Гб памяти доступно и из нереального(unreal) режима.
0
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
18.11.2012, 12:55  [ТС] #9
это вопрос не ко мне) а к преподу)) моя задача понять как возвести в куб знаковое число в 16-разрядном проце, используя команды cbw cwd add adc sub sbb mul imul div idiv... ну и еще ptr.. я написал прогу, но она не работает при пограничных значениях, значит задача не решена.. 3-ий день мозг ломаю... толку немного.
0
Charles Kludge
Клюг
7637 / 3152 / 364
Регистрация: 03.05.2011
Сообщений: 8,382
18.11.2012, 13:27 #10
Дык, разве не так?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    mov al, [A]     ;помещаем A в AX
    mov bl, [B]     ;помещаем B в BX
    xor ah, ah
    xor bh, bh
 
; как вариант со знаком
;   mov al, [B]     ;помещаем B в BX
;   cbw
;   mov bx, ax
;   mov al, [A]     ;помещаем A в AX
;   cbw
;
 
    mov cx, bx
    add ax, bx      ;складываем A+B
    mov bx, ax      ;сохраняем результат (для умножения (A+B)*(A+B) на (A+B))   
    imul    ax, ax      ;возводим результат в квадрат (A+B)*(A+B)
    imul    ax, bx      ;возводим результат в куб (A+B)*(A+B)*(A+B)
    imul    ax, 6       ;
    idiv    cx          ; eax = (6(a+c)^3)/b
1
18.11.2012, 13:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 13:27
Привет! Вот еще темы с ответами:

Составить программу для вычисления функции у(х) - Assembler
Составить программу для вычисления функции у(х): |x/4, если х кратно 4 y(x)=|4х, иначе Протестировать программу при следующих...

Написать программу для вычисления факториала числа (MASM) - Assembler
Написать программу для вычисления факториала числа (MASM) и вывода результата на экран(факториал задается в самой программе)

Составить алгоритм вычисления и написать программу арифметического выражения - Assembler
Составить алгоритм вычисления и написать программу арифметического выражения a·(b+2)-3·c+b/7+21 a=-2 b=11 c=34

Составить программу для вычисления значения функции y = f(x) - Assembler
Доброго времени суток. такой вопрос: Составить программу для вычисления значения функции y = f(x). Реализовать полным ветвлением. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.