Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
p7gam
7 / 7 / 3
Регистрация: 06.12.2009
Сообщений: 33
1

Вычисление значения выражения (2c-42)/(c+a-1)

23.12.2009, 20:37. Просмотров 1820. Ответов 9
Метки нет (Все метки)

Дано вот такое выражение:
(2c-42)/(c+a-1).
Нужно вычислить его значение.
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
26
27
28
29
30
MASM
MODEL SMALL
.STACK 100h
.DATA
.CODE
main PROC
    MOV AL, 11
        MOV CL, 33
        MOV DL, 44
        CBW
        XCHG AX, CX
        CBW
        ADD AX, CX
        DEC AX
        XCHG AX, DX
        MOV CL, 4
        IMUL CL
        XCHG AX
        MOV DL, 5
        IMUL DL
        SUB AX, DL
        CWD
        IDIV DX
        NOP         
 
exit:
    MOV AX, 4c00h
    INT 21h
main ENDP
END main
У меня в процессе компиляции TASM не создает бинарного файла, а всего лишь листинг с ошибками:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Turbo Assembler  Version 4.1        22/12/09 22:03:37       Page 1
prog.asm
 
 
 
      1                  MASM
      2 0000                 MODEL SMALL
      3 0000                 .STACK 100h
      4 0000                 .DATA
      5 0000                 .CODE
      6 0000                 main PROC
      7 0000  B0 0B              MOV AL, 11
      8 0002  B1 21              MOV CL, 33
      9 0004  B2 2C              MOV DL, 44
     10 0006  98                 CBW
     11 0007  91                 XCHG AX, CX
     12 0008  98                 CBW
     13 0009  03 C1              ADD AX, CX
     14 000B  48                 DEC AX
     15 000C  92                 XCHG AX, DX
     16 000D  B1 04              MOV CL, 4
     17 000F  F6 E9              IMUL CL
     18 0011  87 06 0000             XCHG AX
**Error** prog.asm(18) Too few operands to instruction
     19 0015  B2 05              MOV DL, 5
     20 0017  F6 EA              IMUL DL
     21 0019  2B C2              SUB AX, DL
**Error** prog.asm(21) Operand types do not match
     22 001B  99                 CWD
     23 001C  F7 FA              IDIV DX
     24 001E  90                 NOP
     25
     26 001F                 exit:
     27 001F  B8 4C00                MOV AX, 4c00h
     28 0022  CD 21              INT 21h
     29 0024                 main ENDP
     30                  END main
Turbo Assembler  Version 4.1        22/12/09 22:03:37       Page 2
Symbol Table
 
 
 
 
Symbol Name           Type   Value
 
??DATE                Text   "22/12/09"
??FILENAME            Text   "prog    "
??TIME                Text   "22:03:37"
??VERSION             Number 040A
@32BIT                Text   0
@CODE                 Text   _TEXT
@CODESIZE             Text   0
@CPU                  Text   0101H
@CURSEG               Text   _TEXT
@DATA                 Text   DGROUP
@DATASIZE             Text   0
@FILENAME             Text   PROG
@INTERFACE            Text   000H
@MODEL                Text   2
@STACK                Text   DGROUP
@WORDSIZE             Text   2
EXIT                  Near   _TEXT:001F
MAIN                  Near   _TEXT:0000
 
Groups & Segments         Bit Size Align  Combine Class
 
DGROUP                Group
  STACK               16  0100 Para   Stack   STACK
  _DATA               16  0000 Word   Public  DATA
_TEXT                 16  0024 Word   Public  CODE
Turbo Assembler  Version 4.1        22/12/09 22:03:37       Page 3
Error Summary
 
 
 
    XCHG AX
**Error** prog.asm(18) Too few operands to instruction
    SUB AX, DL
**Error** prog.asm(21) Operand types do not match
Прошу помощи. Буду очень благодарен.
0
Изображения
 
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2009, 20:37
Ответы с готовыми решениями:

Вычисление значения выражения (x^3-15)
Прошу помощи с задачей: "Необходимо ввести с клавиатуры число X и вычислить...

Вычисление значения выражения
Здравствуйте. Просматриваю код через дебаг и почему то у меня регист dx...

Вычисление значения выражения: (с/d + 3*а/2)/(c - а + 1)
Помогите пожалуйста, вычислить (с/d + 3*а/2)/(c - а + 1) для исходных данных...

Вычисление значения выражения (debug)
F=12569-(12+(Х-un long)-(Y-un char))+(Z-un int)+3699 Mov ax,1000 ;...

Вычисление значения выражения в виде текста (сложение и вычитание)
помогите написать внешнюю процедуру на ЯВУ - Вычисление значения выражения...

9
Goodwin98
2521 / 817 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
23.12.2009, 22:38 2
Ну так он же пишет что за ошибки.
Assembler
1
XCHG AX
Должно быть два операнда.

Assembler
1
 SUB AX, DL
один регистр 16разрядный, а другой восьми. Должна быть одинаковая разрядность
1
p7gam
7 / 7 / 3
Регистрация: 06.12.2009
Сообщений: 33
25.12.2009, 00:03  [ТС] 3
А какие ещё есть ошибки?

Добавлено через 3 часа 49 минут
Прошу помощи в решении.
0
Goodwin98
2521 / 817 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
25.12.2009, 00:43 4
Assembler
1
2
3
4
5
6
7
8
9
10
11
mov cx,[C]
add cx,cx
mov ax,42
mul [d]
sub cx,ax
mov ax,cx
mov bx,[C]
add bx,[A]
dec bx
cwd
div bx
1
p7gam
7 / 7 / 3
Регистрация: 06.12.2009
Сообщений: 33
25.12.2009, 07:07  [ТС] 5
Цитата Сообщение от Goodwin98 Посмотреть сообщение
Assembler
1
2
3
4
5
6
7
8
9
10
11
mov cx,[C]
add cx,cx
mov ax,42
mul [d]
sub cx,ax
mov ax,cx
mov bx,[C]
add bx,[A]
dec bx
cwd
div bx
Извиняюсь за тупость, но не могли бы подсказать:
то что в скобках ([c], [a] это регистры CL и AL или что это?)
0
Kastaneda
Jesus loves me
Эксперт С++
4940 / 3016 / 346
Регистрация: 12.12.2009
Сообщений: 7,612
Записей в блоге: 2
Завершенные тесты: 1
25.12.2009, 09:48 6
В квадратных скобках - это адреса. Т.е. [C] значит использовать значение которое находится по адресу С. Если ты хочешь, чтоб по этим адресам что-нибудь находилось, то нужно писать еще код, который, например, принимает значение вводимое с клавиатуры и помещает его по адресу С, чтоб потом этим значением оперировать.

Добавлено через 13 минут
Я вот не совсем понял: зачем здесь cwd ? Goodwin98, объясни если не сложно
1
p7gam
7 / 7 / 3
Регистрация: 06.12.2009
Сообщений: 33
25.12.2009, 10:15  [ТС] 7
Цитата Сообщение от Kastaneda Посмотреть сообщение
В квадратных скобках - это адреса. Т.е. [C] значит использовать значение которое находится по адресу С. Если ты хочешь, чтоб по этим адресам что-нибудь находилось, то нужно писать еще код, который, например, принимает значение вводимое с клавиатуры и помещает его по адресу С, чтоб потом этим значением оперировать.

Добавлено через 13 минут
Я вот не совсем понял: зачем здесь cwd ? Goodwin98, объясни если не сложно
наверное для перевода результата из байта в двойное слово.
0
Goodwin98
2521 / 817 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
25.12.2009, 10:27 8
При делении командой div на слово, делится пара регистров dx:ax.
cwd расширяет ax до такого состояния, т.е. в dx не будет мусора.

A,C,D - это переменные.
0
p7gam
7 / 7 / 3
Регистрация: 06.12.2009
Сообщений: 33
16.01.2010, 12:38  [ТС] 9
Цитата Сообщение от Kastaneda Посмотреть сообщение
В квадратных скобках - это адреса. Т.е. [C] значит использовать значение которое находится по адресу С. Если ты хочешь, чтоб по этим адресам что-нибудь находилось, то нужно писать еще код, который, например, принимает значение вводимое с клавиатуры и помещает его по адресу С, чтоб потом этим значением оперировать.
Можно пример пожалуйста, если не сложно.
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
16.01.2010, 15:12 10
; (2*c-42) / (c+a-1)

Assembler
1
2
3
4
5
6
7
8
mov   ax, [C]
mov   bx, ax
add   ax, ax 
add   bx, [A]
sub   ax, 42
dec   bx 
cwd         
idiv   bx
0
16.01.2010, 15:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2010, 15:12

Вычисление выражения
вычислить выражение (с / 4-d / 62) / (a * a + 1)

Вычисление выражения
Помогите написать программу для вычисления выражения. Данные для переменных...

Вычисление выражения A*B/C
Выручайте, напишите плиз программу -> Вычисление выражения D=A*B/C, где A=6,...


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

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

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