Добавление двух шестнадцатеричных значений на языке ассемблера (EASy68K)

Я хочу создать программу, которая складывает вместе два шестнадцатеричных значения, используя ADD.B, ADD.W и ADD.L, и посмотреть, в чем разница. Я новичок в программировании на ассемблере, поэтому я не могу понять это правильно. Ошибок нет, но когда я запускаю программу, результат не отображается. Также, похоже, что в регистре D3 нет никаких значений. Может ли кто-нибудь сказать мне, что я делаю неправильно? Большое спасибо за любую помощь.

START   ORG     $1000       Program starts at loc $1000
        MOVE    $374D1FC4,D2     [D0] <- $374D1FC4
        MOVE    $F22C4663,D3    [D1] <- $F22C4663
        ADD.B   D2,D3           [D1] <- [D0] + [D1] 
*       ADD.W   D2,D3           [D1] <- [D0] + [D1]
*       ADD.L   D2,D3           [D1] <- [D0] + [D1]
        MOVE    D3,R
* The following three instructions will display [R] to Output Window
* Task number 3 of trap #15 is to display D1.L as a signed decimal
    MOVE    R,D1    [D1] <- R
    EXT.L   D1  Extend sign bit to presreve the sign
    MOVE    #3,D0   Assign task number to [D0]
    TRAP    #15 Ask "OS" to perform the task

    STOP    #$2700  Stop execution

* Data section
R   DS.W    1   int R;
    END START

person Bryan    schedule 23.10.2013    source источник


Ответы (1)


Easy68K дает вам подсказку о том, в чем проблема, когда вы пытаетесь запустить программу: "Ошибка адреса: инструкция по адресу 1006 для доступа к адресу f22c4663".

Эти строки:

    MOVE    $374D1FC4,D2     [D0] <- $374D1FC4
    MOVE    $F22C4663,D3     [D1] <- $F22C4663

следует изменить на:

    MOVE    #$374D1FC4,D2     [D0] <- $374D1FC4
    MOVE    #$F22C4663,D3     [D1] <- $F22C4663

предполагая, что вы хотите загрузить непосредственные значения $374D1FC4 и $F22C4663.

person Michael    schedule 23.10.2013