синтаксическая ошибка ассемблера "операнды не совпадают" - PullRequest
0 голосов
/ 11 ноября 2018

Я написал этот код в сборке, чтобы вычислить (4*7)+5, но я получаю следующие ошибки:

(18) неверные параметры: MOV ax, m1
(18) операнды не совпадают: 16-битный регистр и 8-битный адрес.

 .MODEL SMALL
.stack 100h
.data
m1 DB 4
m2 DB 7
m3 DB 5
m4 DB ?
.code
main PROC
    mov ax,@data
    mov ds,ax
    mov ax,m1
    mul ax,m2
    add ax,m3
    mov m4,ax 

     BEGIN ENDP
      END main

1 Ответ

0 голосов
/ 11 ноября 2018

Поскольку все задействованные числа {4,7,5} очень малы, вы получаете определения данных, используя db.
Но это также означает, что вычисления должны быть в байтах.

Напишите это вместо:

mov al, m1
mul m2        ;Leaves m1 * m2 in AX (4*7=28 so AL=28 and AH=0)
add al, m3
mov m4, al

Если вы используете операнд байтового размера ( m2 ) с инструкцией mul, тогда AL умножается на нее, а произведение двойной длины сохраняется в AX.

...