Ошибка в TASM, Operand types do not match - Assembler
Формулировка задачи:
Появилась вот такая вот ошибка - Operand types do not match. Не знаю как исправить.
Само задание
Вычислить произведение numb1 и numb2. В произведении по-менять местами значения старших тетрад (полубайтов) из младшего байта и старшего байта. Затем сформировать код в двухбайтном регистре следующим образом: биты 15-13 сделать единичными, биты 12-6 —взять из соответствующих разрядов numb2, остальные биты нулевые.
.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
Решение задачи: «Ошибка в TASM, Operand types do not match»
textual
Листинг программы
;выполняем умножение 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
Объяснение кода листинга программы
Список не более 20 элементов:
- Выполняем умножение
- Делаем первый обмен
- Делаем второй обмен
- Соединяем воедино два байта в регистре ax
- Занесем в новый регистр
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д