Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
balin
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
1

Ошибка в TASM, Operand types do not match

03.04.2016, 23:30. Просмотров 1249. Ответов 6

Появилась вот такая вот ошибка - Operand types do not match. Не знаю как исправить.
Само задание
Вычислить произведение numb1 и numb2. В произведении по-менять местами значения старших тетрад (полубайтов) из младшего байта и старшего байта. Затем сформировать код в двухбайтном регистре следующим образом: биты 15-13 сделать единичными, биты 12-6 —взять из соответствующих разрядов numb2, остальные биты нулевые.
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
.386
dseg segment use16
    numb1 db 7
    numb2 dw 25
dseg ends
 
eseg segment use16
        ea dw   ?
        eb dw   ?       
eseg ends
        
cseg segment use16
assume ds:dseg, cs:cseg, es:eseg
 
m1:
    mov cx,dseg
    mov ds,cx
    mov cx,eseg
    mov es,cx
    
    ;Выполняю умножение
    mov bx,numb1
    mov ax,numb2
    mul bx
    
    ;Выполняю перемещение из BH в BL и наоборот
    xor dx, dx ;обнулил
    mov dh,bl
    xor bl, bl ;обнулил
    mov bl,bh
    xor bh, bh ;обнулил
    mov bh,dh
    ;занесем в новый регистр
    mov es:eb, bx
    
    ; биты 15-13 делаем в 1, 12-6 из numb2, остальные в 0   
    xor cx, cx
    mov cx, ds: numb2
    and cl,11000000b
    or ch ,11100000b
    mov es:ea, cx
    ;Завершаем программу 
    mov ah, 4ch
    int 21h
    cseg ends
    end m1
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2016, 23:30
Ответы с готовыми решениями:

Ошибка Operand types do not match
Добрый вечер, помогите исрпавить ошибку в 23 строчке, суть программы заключается в том что я должен...

Ошибка при компиляции: Operand types do not match
MODEL SMALL STACK 100h DATASEG Question DB 10,13,'Close program? - $' Set_X DB ...

Ошибка "Operand types do not match" при вычислении значения выражения
Выражение: X=A2+(B2*C1) - (D2/E1) + K .model small .stack 100h .data A2 dw 0Ch B2 dw 0Eh C1...

Ошибка "Operand types do not match"
Здравствуйте. Есть такое задание "найти максимальное слово и вывести его". Однако при выполнении...

Исправить ошибку в коде (Operand types do not match)
data SEGMENT byte ;Сегмент даних a1 db 1 ;Елементи даних a2 db 2...

6
tahir_
160 / 101 / 25
Регистрация: 18.05.2015
Сообщений: 475
03.04.2016, 23:35 2
balin,

numb1 db 7 ? или dw? код не смотрел

и еще стек не определен
0
balin
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
03.04.2016, 23:55  [ТС] 3
@tahir_
Цитата Сообщение от balin Посмотреть сообщение
mov ax,numb2
Вот тут пишет

Добавлено через 1 минуту
#tahir_
Цитата Сообщение от balin Посмотреть сообщение
mov bx,numb1
Вот тут

Добавлено через 12 минут
tahir_ mov bx,numb1
все время на него ссылается
0
Mikl___
Автор FAQ
13385 / 6386 / 630
Регистрация: 11.11.2010
Сообщений: 11,551
04.04.2016, 03:51 4
Лучший ответ Сообщение было отмечено balin как решение

Решение

balin,
замени mov bx,numb1 на
Assembler
1
2
mov bh,0 
mov bl,numb1
1
balin
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
04.04.2016, 12:30  [ТС] 5
Mikl___, СПАСИБО большое!!!
0
proc3nt
волшебник
947 / 520 / 156
Регистрация: 26.05.2012
Сообщений: 1,471
04.04.2016, 18:29 6
Лучший ответ Сообщение было отмечено balin как решение

Решение

Цитата Сообщение от balin Посмотреть сообщение
Выполняю перемещение из BH в BL и наоборот
Цитата Сообщение от balin Посмотреть сообщение
В произведении по-менять местами
во первых, не те регистры меняешь. произведение будет находится в паре регистров dx:ax
Цитата Сообщение от balin Посмотреть сообщение
по-менять местами значения старших тетрад (полубайтов)
во вторых. заметь, полубайтов. это старшие четыре бита байтовых регистров, а не весь регистр целиком. делается это так
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    ;выполняем умножение
    mov bh,0
    mov bl,numb1
    mov ax,numb2
    mul bx
    
    mov bx,ax
    
    ;делаем первый обмен
    and bh,00001111b
    and bl,11110000b
    xor bh,bl
    
    ;делаем второй обмен
    and ah,11110000b
    and al,00001111b
    xor al,ah
    
    ;соединяем воедино два байта в регистре ax 
    mov ah,bh
    
    ;занесем в новый регистр
    mov es:eb,ax
1
balin
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
04.04.2016, 19:36  [ТС] 7
proc3nt, Ого, спасибо огромное, выручили
0
04.04.2016, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2016, 19:36

Ошибка "Operand sizes do not match"
Доброй ночи, всем активным участникам этого замечательного форума. помогите, пожалуйста, помочь...

Ошибка в коде "no match for 'operator[]' (operand types are 'Student' and 'int')"
Помогите пожалуйста разобраться, в чём проблема? Весь код: #include "windows.h" #include...

Ошибка на "cout <<" no match for operator operand types are std::basic_ostream char
Немного слов про код.Данный код создан для выдачи номера машины,цвета,марки при предоставлении...


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

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

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