Ассемблирование и отладка готовых программ. Изучение системы команд и способов адресации операндов. Вариант 4, страница 2

*Warning* MOV.ASM(41) Argument needs type override

Аргумент SI нуждается в конкретизации

     42     003A  BB 0002                                                   mov bx,2

     43     003D  8B 80 0004r                                             mov ax,[bx+si+w_x]          ;[21]

     44     0041  C7 80 0004r 0080                                     mov [word bx+si+w_x],128 ;[22]

     45                                                                                 ;Применение команды lea

     46     0047  8D 9C 0004r                                             lea bx,[w_x+si]                  ;[23];bx=OFFSET w_x+si

     47                                                                                 ;Команды push и pop

     48     004B  53                                                             push bx                         ;Сохранить bx и       si

Turbo Assembler              Version 4.1             15/03/04 08:58:45             Page 2

MOV.ASM

Команды             MOV и режимы адресации.Файл Mov.asm

     49     004C  56                                                             push si                          ;в стеке

     50     004D  BB 0010                                                   mov bx,10h                  ;Установить тестовые

     51     0050  BE 0020                                                    mov si,20h                    ;значения

     52     0053  5E                                                              pop si                            ;Восстановить из стека

     53     0054  5B                                                             pop bx                          ;сохранённые значения

     54     0055  B4 4C                           Exit:      mov ah,04Ch     ;Ф-ция DOS    4Сh:выход из программы

     55     0057  A0 0000r                                                   mov al,[exCode] ;Возврат кода ошибки

     56     005A  CD 21                                                       int 21h                 ;Вызов DOS. Останов

     57                                                                                 END Start            ;Конец программы/точка входа

**Error** MOV.ASM(16) Illegal use of segment register

**Error** MOV.ASM(18) Constant too large

**Error** MOV.ASM(24) Operand types do not match

**Error** MOV.ASM(25) Need address or register

**Error** MOV.ASM(39) Undefined          symbol: OPERAND

*Warning* MOV.ASM(39) Pointer expression needs brackets

**Error** MOV.ASM(42) Undefined          symbol: SI?

*Warning* MOV.ASM(42) Pointer expression needs brackets

*Warning* MOV.ASM(42) Argument needs type override

3. Анализ машинных кодов ассемблерных команд с указанием используемых видов адресации.


Файл Mov.asm


Команда № 15

movax,[bx+2] - пересылка

Команда имеет структуру  mov r, r/m с 16-битовым  регистром и 8-битовым внутрикомандным  смещением disp L:

Cop_w        md_reg_r/m     disp L

1000101_1    01_000_111     00000010

w = 1, так как команда оперирует словами

md = 01 в соответствии с таблицей «Определение эффективного адреса» (bx + d8)

операнд-приёмник: reg = 000 (ax)

операнд-источник: ячейка памяти, определяемая адресным выражением [bx+2].

r/m = 111

внутрикомандное смещение:disp L = 02h

Значение адреса disp H: disp L – 00h:02h

100010110100011100000010

Машинный код, таким образом, равен: 8B 47 02

Команда № 16

mov [word bx+2], 24 - пересылка

Команда  имеет структуру mov  r/m, d  с 16-битовым  непосредственным  операндом и 8-битовым внутрикомандным  смещением disp L:

cop_w        md_000_r/m     disp L      data L      data H

1100011_1    01_000_111     00000010    00011000    00000000

w = 1 – оперируем словами

–  операнд-источник константа 24 = 00 18h

–  операнд-приёмник: ячейка памяти, определяемая адресным выражением [wordbx + 2]

md = 01

r/m = 111

dispL = 02h

1100011101000111000000100001100000000000

Машинный код, таким образом, равен:  C7 47 02 18 00

Команда № 18

moval,[si+b_x] - пересылка

Команда имеет структуру mov r, r/m с 8-битовым  регистром и 16-битовым внутрикомандным  смещением disp L:

                   cop_w        md_reg_r/m     disp L                disp H

        1000101_0    10_000_100     00000001     00000000  

Кодировка обозначенных полей команды

w=  0 – оперируем байтом  (работаем с регистром al)

- операнд-источник:  [si+b_x]

- операнд-приёмник  определяется как операнд в памяти по адресу  EA = (al)

md= 10

reg = 000

r/m= 100

10001010100001000000000100000000

3. Машинный код, таким образом, равен: 8A 84 01 00



Файл Logical.asm


Команда № 6

andax,[w_mask] – логическое И

Команда имеет структуру and r,r/m:

cop_w        md_reg_r/m       disp L        disp H

0010001_1    00_000_110      00000011               00000000

w = 1 оперируем словами

-  операнд-источник:  [w_mask] 

-  операнд-приёмник  определяется  как операнд в памяти по адресу  EA = (ax)

поля постбайта: md = 00,  r/m = 110

reg = 000 (ax)

00100011000001100000001100000000

Машинный код, таким образом, равен: E8 0C 00

Команда № 7

orbx,[w_mask] – логическое ИЛИ

Команда имеет структуру or  r, r/m:

cop_w        md_reg_r/m     disp L       disp H

0000101_1    00_011_110    00000011             00000000

w = 1 оперируем словами

- Операнд-источник:  [w_mask].

- Операнд-приёмник  определяется как операнд в памяти по адресу  EA = (bx)

поэтому поля постбайта: md = 00, r/m = 110

reg = 011 (bx)

00001011000111100000001100000000

Машинный код, таким образом, равен: 0B 1E 03 00

Команда № 10

rol [oper],1 – Циклический сдвиг влево

Команда имеет структуру rol  r/m,1:

cop_w        md_000_r/m     disp L            disp H

1101000_0    00_000_110    00000101        00000000

w= 0 оперируем байтом

- Операнд-источник:  1.

- Операнд-приёмник  определяется как операнд в памяти по адресу  EA = [oper]

поэтому поля постбайта: md = 00,  r/m = 110

11010000000001100000010100000000

Машинный код команды  равен   D0 06 05 00