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

Do you have a question? Post it now! No Registration Necessary

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




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

Re: вопрос по прогремме на ассемблере для mcs51
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.Еще куча методичек.Вот сижу изучаю,но трудно
дается.А это моя первая лабораторная работа.Надеюсь,ваши ответы мне
помогут.Вы уж извините :)
Еще раз спасибо.



Site Timeline