8086 Ошибка сборки

Я написал эту программу в сборке 8086, и я могу получить некоторые ошибки, которые я не понимаю. А именно в строках 26 и 27 я получаю сообщение об ошибке "Незаконное немедленное", а в строках 31,37,38,43,44 я получаю сообщение об ошибке "Не удается преобразовать в указатель". Я новичок в этом языке программирования, но я думал, что эти строки были действительны. Может кто-нибудь пролить свет на то, что я могу делать неправильно? Большое спасибо.

заголовочные файлы в заголовке; название программы; ------------------------------------------------- ------------------------------------
StacksG сегмент пара стека "стек"; определить стек
    db  32 dup (0);32 байта, возможно, потребуется увеличить
Stacksg заканчивается; ------------------------------------------------- ------------------------------------
сегмент данных, пункт "Данные", сегмент данных

первый дБ 0
второй дб 1
петлит dw 12

конец данных; ------------------------------------------------- ------------------------------------
сегмент кода, пункт "Код", сегмент кода
основной процесс далеко; основная процедура
    предположим, что ss:stacksg, ds:datasg, cs:codesg; определить регистры сегментов


    MOV AL, сначала; перемещает 0 в AL
    MOV AH, второй, двигается 1 в AH


    MOV CX, петлит; устанавливает ограничение в 12 (флаг четности)

    MOV [200],AL; перемещает 0 в ячейку памяти 200
    MOV [201],AH; перемещает 1 в ячейку памяти 201

    MOV BL,202; переходит 200 в BL
    ДОБАВИТЬ AH, AL; добавляет 0 и 1, AH по-прежнему 1
    MOV [BL],AH; перемещает 1 в ячейку памяти 202
    INC BL; увеличивает BL, BL теперь 203

    MOV CL,201; перемещает 201 в CL
    MOV CH, 202; переходит 202 в CH

    ДОБАВИТЬ AH,[CL], добавляет 1 и 1, AH теперь 2
    MOV [BL], AH; перемещает 2 в ячейку памяти 203 (косвенно через BL)
    INC BL; увеличивает BL, BL теперь 204

loopSection:
    INC CL; увеличивает CL
    ДОБАВИТЬ AH,[CL]; добавляет то, что находится в ячейке памяти CL в AH
    MOV [BL], AH; перемещает то, что находится в BH, в область памяти (косвенно через BL)
    INC BL; увеличивает BL

    DEC CX; уменьшает на 1

    jnz loopSection



основной конец; конец процедуры
кодекс заканчивается
    конец основной

1 ответ

Решение
   Instruction Prefix                0 oder 1 Byte
   Segment Prefix                    0 oder 1 Byte
   Opcode                            1 oder 2 Byte
-> Mod R/M                           0 oder 1 Byte
   Displacement                      0, 1, 2 Byte
   Immediate                         0, 1, 2 Byte

-> Mod R/M-Byte = MM RRR MMM

MM  - Memeory addressing mode
RRR - Register operand address
MMM - Memoy operand address

RRR Register Names
Filds  8bit  16bit
000    AL     AX
001    CL     CX
010    DL     DX
011    Bl     BX
100    AH     SP
101    CH     BP
110    DH     SI
111    BH     DI

MMM   Default MM Field
Field Sreg     00        01          10             11=MMM is reg
000   DS       [BX+SI]   [BX+SI+o8]  [BX+SI+o16]
001   DS       [BX+DI]   [BX+DI+o8]  [BX+DI+o16]
010   SS       [BP+SI]   [BP+SI+o8]  [BP+SI+o16]
011   SS       [BP+DI]   [BP+DI+o8]  [BP+DI+o16]
100   DS       [SI]      [SI+o8]     [SI+o16]
101   DS       [DI]      [DI+o8]     [SI+o16]
110   SS       [o16]     [BP+o8]     [BP+o16]
111   DS       [BX]      [BX+o8]     [BX+o16]
Note: MMM=110,MM=0 Default Sreg is DS !!!!
Другие вопросы по тегам