mov bl,a
mov al,c
mov ah,0
mov cl,3
mul cl
sub bl,al
mov al,bl
mov cl,4
mul cl
sub al,1
mov x,al
mov al,b
mov cl,2
mul cl
add x,al
Assembler_Простая программа
Разработать программу на ассемблере реализующую указанную формулу, исполниь программу с несколькими (три - четыре) наборами исходных данных, проверить правиьность результатов. X=2B-1+4(A-3C)
P.S. Тему в "студенты"!
Цитата: Lone Wolf
Что такое А, B,C? Байты, слова, двойные слова? Целочисленые значения или с плав. точкой(подразумевает использывание мат. сопроцессора)
P.S. Тему в "студенты"!
P.S. Тему в "студенты"!
байты
какой ассемблер )
С - байт
A -слово
B -двойное слово
Цитата: Lone Wolf
только тут надо учеть что операция mul проводимая над байтами вернет слово(3*120=360. 120 -байт 360 -слово). По этому внимательно нужно следить за входными данными. Что-бы быть увереным, что результат будет байтом. Иначе ,как я вижу должно быть так
С - байт
A -слово
B -двойное слово
С - байт
A -слово
B -двойное слово
какая разница какой ассемблер
тк в задании ничего не сказано я считал что все поместилось в байт
насчет какая разница какой ассемблер
зависимо под какой процессор вы пишите
приблизим пример
я использовал одноместную mul
а есть mul от трех операндов появившаяся в процессорах 80186 и старше соответственно в 8086 ее не было ))))
так что далеко ходить не нужно
Цитата: nilbog
забыл добавить:
тк в задании ничего не сказано я считал что все поместилось в байт
насчет какая разница какой ассемблер
зависимо под какой процессор вы пишите
приблизим пример
я использовал одноместную mul
а есть mul от трех операндов появившаяся в процессорах 80186 и старше соответственно в 8086 ее не было ))))
так что далеко ходить не нужно
тк в задании ничего не сказано я считал что все поместилось в байт
насчет какая разница какой ассемблер
зависимо под какой процессор вы пишите
приблизим пример
я использовал одноместную mul
а есть mul от трех операндов появившаяся в процессорах 80186 и старше соответственно в 8086 ее не было ))))
так что далеко ходить не нужно
нужно наподобии вот этого:
Вычислить Х = 3А + ( В + 5 ) / 2 - С - 1,
где А, В, С, Х- целые знаковые числа занимающие слово, написать программу реализующую данную формулу.
Распишем формулу по отдельным операциям:
Код:
АХ ← А ; значение А в регистре АХ
АХ ← 2 *( АХ ) ; 2А в АХ
АХ ← ( АХ ) + А ; 3А в АХ
ВХ ← В ; В в ВХ
ВХ ← 5 + ( ВХ ) ; В+5 в ВХ
ВХ ← (ВХ ) / 2 ; ( В+5) / 2 в ВХ
АХ ← (BX ) + ( AX ) ; 3А+( В+5 ) / 2 в АХ
АХ ← ( АХ ) - С ; 3А+( В+5 ) / 2 - С в АХ
АХ ← ( АХ ) -1 ; 3А+( В+5 )/2 - С - 1 в АХ
Х ← ( АХ ) ; 3А+( В+5 )/2 - С - 1 в Х
АХ ← 2 *( АХ ) ; 2А в АХ
АХ ← ( АХ ) + А ; 3А в АХ
ВХ ← В ; В в ВХ
ВХ ← 5 + ( ВХ ) ; В+5 в ВХ
ВХ ← (ВХ ) / 2 ; ( В+5) / 2 в ВХ
АХ ← (BX ) + ( AX ) ; 3А+( В+5 ) / 2 в АХ
АХ ← ( АХ ) - С ; 3А+( В+5 ) / 2 - С в АХ
АХ ← ( АХ ) -1 ; 3А+( В+5 )/2 - С - 1 в АХ
Х ← ( АХ ) ; 3А+( В+5 )/2 - С - 1 в Х
Ниже приведена типичная структура простой программы на ассембле-ре.
2.6.1.1 Текст программы:
Код:
data segment
a dw 10
b dw 20
c dw 5
x dw ?
data ends
code segment
assume cs: code, ds: data
start: mov ax, data
mov dx, ax ; загрузить адрес
mov ax, a ; сегмента данных
sal ax, 1
add ax, a
mov bx, b
add bx, 5
sar bx, 1
add ax, bx
sub ax, c
dec ax
mov x, ax ; запись результата в память
quit:
mov ax, 4c00h ; код завершения 0
int 21 ; выход в dos
code ends
end start
a dw 10
b dw 20
c dw 5
x dw ?
data ends
code segment
assume cs: code, ds: data
start: mov ax, data
mov dx, ax ; загрузить адрес
mov ax, a ; сегмента данных
sal ax, 1
add ax, a
mov bx, b
add bx, 5
sar bx, 1
add ax, bx
sub ax, c
dec ax
mov x, ax ; запись результата в память
quit:
mov ax, 4c00h ; код завершения 0
int 21 ; выход в dos
code ends
end start
а при чем тут "какой ассемблер"? поисчи в инете, как команда mul работает. если операнды байты она возвращает слово, если слова - двойное слово, если же операнды двойные слова - результат 8 байт.
Цитата: Lone Wolf
а при чем тут "какой ассемблер"? поисчи в инете, как команда mul работает. если операнды байты она возвращает слово, если слова - двойное слово, если же операнды двойные слова - результат 8 байт.
я что спорю что умножение байтов дает слово )
только если не было переполнения ( OF=0 ) то я просто возьму байт ))
хитрая реализация... избавились от процедуры умножения..
как же теперь обработать в мс дос
имеете ввиду ввод вывод?
ну да, компоновка, отладка, ошибки....
Большая просьба пожалуйста пишите коментарии. А проц какой стоит, т.е. Какого семействая я не знаю как определить, может кто подскажет как это сделать?
а б и с это двойные слова, нужно с двойными словами
с двойными словами муторно нужно пословам арифметику делать..
Цитата: nilbog
охо - ничего себе то были байты а тут двойные слова
с двойными словами муторно нужно пословам арифметику делать..
с двойными словами муторно нужно пословам арифметику делать..
скажи как???
Код:
A dd ?
B dd ?
B dd ?
их сложить уже командой add не удасться придется складывать по частям старшие и младшие
Код:
wp equ word ptr
add wp a, wp b; сложили младшие разряды и выработали CF флаг
adc wp a+2, wp b+2; --- старшие команда adc a,b делает так a=a+b+CF
add wp a, wp b; сложили младшие разряды и выработали CF флаг
adc wp a+2, wp b+2; --- старшие команда adc a,b делает так a=a+b+CF
в таком ключе - при умножении нарисуйте как умножени "столбиком" и посмотрите как свести к операциям над словам
ps так как я рассматриваю masm 4.0 то не знаю может если есть в старших команды для дв слов - поправьте меня
Помогите расписать формулу X=2B-1+4(A-3C) по отдельным операциям
- [COLOR=black]прочтите правила раздела Студентам[/COLOR]
- [COLOR=black]если необходимость в создании темы не отпадет то, тогда создавайте тему ПОСЛЕ ТОГО КАК вы ТОЧНО будете знать, что вам задали.[/COLOR]
[COLOR=red]во второй можно попасть в бан.[/COLOR]
Цитата: OlgaKr
Nethead, [COLOR=red]у меня к вам большая просьба: ПРЕЖДЕ чем создавать тему:[/COLOR]
[COLOR=red]во второй можно попасть в бан.[/COLOR]
- [COLOR=black]прочтите правила раздела Студентам[/COLOR]
- [COLOR=black]если необходимость в создании темы не отпадет то, тогда создавайте тему ПОСЛЕ ТОГО КАК вы ТОЧНО будете знать, что вам задали.[/COLOR]
[COLOR=red]во второй можно попасть в бан.[/COLOR]
Это задание по теме, посмотрите на привер выполнения работы....
(Asm) Арифметическии операции над длинными числами.
Дальнейшии дебаты только через личные сообщения. читайте правила форума.