Задание: Двухбайтовые двоично-десятичные числа массива 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. Формирование двоичного числа в программе производится по схеме Горнера.
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. Формирование двоичного числа в программе производится по схеме Горнера.
Задай вопрос на форуме, посвященному ассемблеру:
http://wasm.ru/forum/
http://wasm.ru/forum/
Похожие вопросы
- Помогите по ассемблеру
- Архитектура ЭВМ помогите с ассемблером
- Помогите с ассемблером
- Помогите с ассемблером (задачей про матрицы) внутри...
- Помогите найти ошибку. Пожалуйста. Ассемблер.
- Помогите с ассемблером
- помогите с Ассемблером
- помогите с ассемблером. если можно с объяснениями...огромное спасибо
- помогите с ассемблером (i8085) Программа должна считать количество нулей в ячейке. Какие команды использовать?
- Помогите!!! задача ассемблер.