2015-04-10 2 views
-1

Я получаю сообщение об ошибке в своей первой программе TASM. Эти 2 ошибки, броски:Ошибка TASM при попытке инициализировать переменную с адресом

В моей .DATA

LisData db 10,20,30,40,50 
    Inicio db [LisData] ;ERROR! expecting scalar type 

, а затем в .Code

mov Bx, Inicio ;ERROR! operand types don't match 

Может быть, это очень очевидная ошибка, но я знаю слишком мало TASM и будет Благодарим Вас за помощь

Наконец это файл соперничают .asm

.MODEL SMALL 
.STACK 100H 
.DATA 
Long db 5 
Sumver db 0 
LisData db 10,20,30,40,50 
Inicio db [LisData] 
.CODE 
CALCULO: 
    mov Ch, 0 
    mov Cl, Long 
    mov Bx, Inicio 
    mov Al, [Bx] 
    CICLO: 
    add Bx, 1 
    add Al, [Bx] 
    loop CICLO 
    mov Sumver, Al 
    mov ah, 004ch 
    int 21h 
END 

Я хочу адрес памяти LisData на Inicio, указатель, чтобы я мог перемещать значения в нем (10,20,30), чтобы добавить их и сохранить сумму на Sumver.

+0

Непонятно, что вы даже хотели сделать. Скажите, какое значение вы хотите иметь в «Inicio». – Jester

+0

Я хочу адрес памяти LisData, указатель, чтобы я мог перемещать значения в нем (10,20,30), чтобы добавить их и сохранить сумму в Sumver –

ответ

1

Я хочу, чтобы адрес памяти LisData, указатель, так что я могу двигаться через значения в нем

Тогда вам нужно слово, а не байт, а вам нужно сам адрес, например как:

Inicio dw LisData 
+0

да! это сработало. Но теперь компоновщик выбрасывает: Fatal: Нет точки входа в программу –

+1

Вам не хватает точки входа. Добавить конец CALCULO в конце вашего кода. – Jester

+0

Большое вам спасибо! желаю, чтобы вы были моим учителем ASM! jaja –

-1

Ваша запись Inicio не требуется, вы можете использовать адрес непосредственно:

MOV BX,LisData 

Причина, по которой «типы операндов не совпадают», заключается в том, что вы определяете байт (8 бит), но пытаетесь присвоить его регистру слов BX (16 бит)

+0

Действительно, 'Inicio' не требуется, но ваш предложенный код неверен, поскольку он попытается загрузить первые два байта из' LisData' в 'BX', а не адрес. 'lea bx, [LisData]' или 'mov bx, offset LisData' было бы лучше. – Jester

+0

ахх это правильно. мой ASM более чем ржавый –