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 !!!!