Другие языки программирования и технологии

Помогите с Ассемблером пожалуйста

Задание: Двухбайтовые двоично-десятичные числа массива 20H-2FH РПД пробразовать в двухбайтовые двоичные числа массива 30H-3FH.
Мой вариант http://pastebin.com/BG5fQc2K
Но он не работает и не компилируется, подскажите в чем ошибки и как их устранить?
Это микроконтроллер MCS-51 (Intel 8051)?
10-минутное изучение документации на данный микроконтроллер показало, что в его системе команд отсутствует умножение аккумулятора на произвольный регистр (MUL AR2), умножение регистра B на что-нибудь вообще (MUL BR4) и обмен местами тетрад регистра B (SWAP B).
Также мнемоника MOV Rn,d означает загрузку в регистр Rn содержимого ячейки памяти по адресу d, а не непосредственно значение d, как видимо вы считали (последнее записывается как MOV Rn,#d).
И очень интересно, каким образом вы хотели разместить в 8-разрядном регистре R2 10-разрядное число 1000?
А как у вас в памяти хранятся двухбайтные числа: Little-Endian (младшими байтами вперёд) или Big-Endian (старшими байтами вперёд) ?

Напрашивается сюда подпрограмма умножения на 10 и добавления очередной цифры двоично-десятичного числа.
Для чисел Little-Endian:

ORG 0
SJMP START

MULADD: PUSH ACC
MOV A,R3
MOV B,#10
MUL AB
MOV R3,A
MOV R5,B
MOV A,R2
MOV B,#10
MUL AB
ADD A,R5
MOV R2,A
POP ACC
ADD A,R3
MOV R3,A
MOV A,R2
ADDC A,#0
MOV R2,A
RET

START: MOV R7,#8
MOV R0,#20H
MOV R1,#30H
CYCLE: CLR A
MOV R2,A
MOV R3,A
INC R0
MOV R4,#2
LOOP: MOV A,@R0
SWAP A
ANL A,#0FH
ACALL MULADD
MOV A,@R0
ANL A,#0FH
ACALL MULADD
DEC R0
DJNZ R4,LOOP
MOV A,R3
MOV @R1,A
INC R1
MOV A,R2
MOV @R1,A
INC R1
INC R0
INC R0
DJNZ R7,CYCLE
END

Дали бы ссылку на компилятор и отладчик, с помощью которых вы пишете программу, а то проверить и отладить программу для незнакомого микроконтроллера на листке бумаги просто невозможно.

P.S. Формирование двоичного числа в программе производится по схеме Горнера.
Kamil Jumanazarov
Kamil Jumanazarov
51 590
Лучший ответ
Задай вопрос на форуме, посвященному ассемблеру:
http://wasm.ru/forum/
Сергей Фистин
Сергей Фистин
40 015