вопрос по прогремме на ассемблере для mcs51

сложение двух двухбайтных чисел 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

Reply to
Samodelkin
Loading thread data ...

Привет 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] Алексей М. ... Смотрю куда глаза глядят...

Reply to
Alex Mogilnikov

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

Reply to
Sergey Kadenkin

дело в том,что первый раз с таким сталкиваюсь,на 4 курсе начался предмет "микропроцессоры" и начали изучать mcs51.Программа отладчик/наладчик/сборщик и т.д. называется Keiltest.Еще куча методичек.Вот сижу изучаю,но трудно дается.А это моя первая лабораторная работа.Надеюсь,ваши ответы мне помогут.Вы уж извините :) Еще раз спасибо.

Reply to
Samodelkin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.