Консультация № 193532
09.09.2018, 22:18
0.00 руб.
09.09.2018, 23:06
0 4 1
Здравствуйте! У меня возникли сложности с таким вопросом:
Требуется написать программу на языке программирования Assembler ,которая бы высчитывала результат двух оперантов по следующей формуле: z=(oper1+oper2)*oper1/oper2-oper1
Примерно задача решена так:

[code lang=asm]SEG1 SEGMENT
A DB 14
D DB 6
REZ DB ?
SEG1 ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:SEG1
START:
mov al, D
mul al
mov bx, ax
mov al, A
mul al
sub bx, ax
mov ax, bx
mov al, D
mul al
mul bx
mov chisl, ax
mov al, D
add al, A
mul al
mov znam, ax
mov ax, chisl
div znam
sub ax, dif
mov REZ, al
CODE ENDS
END START[/code]

Однако результат 32 не был так и получен:( В чё же ошибки помогите их найти и справить?
Ассемблер(MASM.EXE)
DOS(16-bit CPU) модель памяти(SMALL)
Размер переменных(байт)

Заранее благодарю!

Обсуждение

давно
Старший Модератор
31795
6196
09.09.2018, 23:14
общий
Адресаты:
Вы точно получили работающий код?
**Error** 180909.ASM(20) Undefined symbol: CHISL
**Error** 180909.ASM(24) Undefined symbol: ZNAM
**Error** 180909.ASM(25) Undefined symbol: CHISL
**Error** 180909.ASM(26) Undefined symbol: ZNAM
*Warning* 180909.ASM(26) Argument needs type override
**Error** 180909.ASM(27) Undefined symbol: DIF

Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
09.09.2018, 23:24
общий
Адресаты:
1) настройка регистра DS
2) переменные см. выше
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
7438
7205
10.09.2018, 11:12
общий
Адресаты:
Я бы даже сказал: программа вообще не решает поставленную задачу:
z=(oper1+oper2)*oper1/oper2-oper1
Такое стойкое чувство, что Вы взяли код у одногруппника (или еще где), добавили свой сегмент данных, и дали нам, как решение...
Может все же попытаемся самостоятельно написать? А мы Вам поможем (поможем, а не сделаем за Вас!)
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
10.09.2018, 12:22
общий
это ответ
Здравствуйте, MrKsi!

Формула, реализованная в программе

И она не равна формуле с задания:

Если Вы пытались упростить формулу, то сделали это не правильно.

Код который реализует задание:
[code lang=asm]model small
.data
A db 14
D db 6
.stack
.code
;настраиваем сегмент
begin: mov ax,@data
mov ds,ax
;загружаем данные
mov al,A
mov bl,D
;формула задания
mul al ;=A^2
div bl ;=A^2/D
;выводим на экран
aam
or ax,'00'
push ax
;старшую цифру
mov al,ah
int 29h
;младшую цифру
pop ax
int 29h
;выходим
mov ax,4c00h
int 21h
end begin[/code]
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа