сложение двух двухбайтных чисел 2341 +2341 ,мне надо их расположить во внутренней или внешней памяти начиная с определенного адреса.Как это сделать? name test cseg at 0000h org 0000h mov dptr,#2341 mov r2,dph mov r3,dpl mov dptr,#2341 mov r4,dph mov r5,dpl mov a,r2 add a,r4 mov r6,a mov a,#0 mov a,r3 add a,r5 mov r7,a end
вопрос по прогремме на ассемблере для mcs51
Oct 19, 2003
3 Replies
Привет Samodelkin!
19 Oct 03 14:52, Samodelkin писал All:S> сложение двух двухбайтных чисел 2341 +2341 ,мне надо их расположить во S> внутренней или внешней памяти начиная с определенного адреса.Как это S> сделать?
Во внутреннюю память данные помещают с помощью mov, во внешнюю - с помощью movx.
S> mov dptr,#2341 S> mov r2,dph S> mov r3,dpl S> mov dptr,#2341 S> mov r4,dph S> mov r5,dpl S> mov a,r2 S> add a,r4 S> mov r6,a S> mov a,#0 S> mov a,r3 S> add a,r5 S> mov r7,a
Ты бы это, систему команд получше изучил, да книжки какие-нибудь по программированию с примерами почитал, для mcs51 их много разных. Сложение ты написал вдвое длиннее чем можно было бы, да еще и выдает оно неправильный результат. Типичное сложение обычно выглядит так:
mov a, arg1 add a, arg2 mov res, a mov a, arg1 + 1 adc a, arg2 + 1 mov res + 1, a
А еще было бы неплохо задавать вопросы более понятно. Может быть для "расположения чисел в памяти" тебе нужны вовсе не команды процессора, а хороший линкер. Кстати, рекомендую ассемблер с линкером из комплекта SDCC (sdcc.sourceforge.net кажется), заодно там и неплохой компилятор С...
Всего наилучшего, [Team PCAD 2000] Алексей М. ... Смотрю куда глаза глядят...
Hello Samodelkin.
Воскресенье, Октябрь, 19, 2003 14:52:18, Samodelkin wrote to All:
S> сложение двух двухбайтных чисел 2341 +2341 ,мне надо их расположить во S> внутренней или внешней памяти начиная с определенного адреса.Как это S> сделать? S> name test S> cseg at 0000h S> org 0000h S> mov dptr,#2341 S> mov r2,dph S> mov r3,dpl S> mov dptr,#2341 S> mov r4,dph S> mov r5,dpl S> mov a,r2 S> add a,r4 S> mov r6,a S> mov a,#0 S> mov a,r3 S> add a,r5 S> mov r7,a S> end
Жуть! Во-первых писать с начала строки нельзя, а то оператор будет считаться как метка. Потом ты старший со младшим байты через dptr раскладываешь, это совсем не к чему, константу можно сразу в регистр заслать. Далее сложение старших байт надо через addc, а то перенос теряется. И порядок сложения сначала младшие, а не наоборот. Я думаю тебе сначала надо ознакомиться с конкретным ассемблером, поглядеть примерчики. Hе знаю какой у тебя асм, но скажем на AD 2500 твой случай так выглядит:
.SYMBOLS .RSECT org 20h summa ds 2 .CODE start: mov a,#<1234 add a,#<1234 mov summa,a mov a,#>1234 addc a,#>1234 mov summa+1,a
В результате младшее значение суммы по адресу 20h, старшее - по 21h
Sergey
дело в том,что первый раз с таким сталкиваюсь,на 4 курсе начался предмет "микропроцессоры" и начали изучать mcs51.Программа отладчик/наладчик/сборщик и т.д. называется Keiltest.Еще куча методичек.Вот сижу изучаю,но трудно дается.А это моя первая лабораторная работа.Надеюсь,ваши ответы мне помогут.Вы уж извините :) Еще раз спасибо.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required