2016-11-06 3 views
-1

Я должен научиться ассамблеей для моего университета, и мне нужно сделать это:операнда не соответствует ошибке

(a+b+c+1) *(a+b+c+1) /((a-b+d)*(a-b+d)). 

Когда я пытаюсь создать исполняемый файл с помощью команды «TASM» я получаю это сообщение:

**Error** lab1.ASM(14) Operand types do not match 
**Error** lab1.ASM(15) Operand types do not match 
**Warning* lab1.ASM(30) Open segment:Data 

Вот мой код:

assume cs:code,ds:data 
data segment 
a db 1 
b db 2 
c db 3 
d db 4 
code segment 
start: 
mov ax,data 
mov ds,ax 
mov al,a 
mov ah,0 
add ax,b ;ax=a+b 
add ax,c ;ax=a+b+c 
add ax,1 ;ax=a+b+c+1 
mov bx,ax ;bx=ax 
mul bx ;dx:ax=(a+b+c+1) *(a+b+c+1) 
mov al,a 
mov ah,0 
sub al,b ; al=a-b 
add al,d ; al=a-b+d 
mov bl,al ; bl=al 
mul bl ; ax=(a-b+d)*(a-b+d) 
mov bx,ax 
div bx ; dx:ax :bx =(a+b+c+1) *(a+b+c+1) /((a-b+d)*(a-b+d)) 
mov ax,4c00h 
int 21h 
code ends 
end start 
+1

Это не совсем понятно «что вам нужно сделать», и не ясно, на какие строки ссылаются ваши сообщения об ошибках. –

ответ

0

AX это слово размера; A и B - размер байта.

заметить, что вы не имеете такую ​​же проблемы позже в коде, где вы вычитать B из AL, например (как байтового размера)

Смежные вопросы