Проблема с битовыми инструкциями.

Тема в разделе "WASM.BEGINNERS", создана пользователем Antoniosis, 18 авг 2010.

  1. Antoniosis

    Antoniosis New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    12
    Здравствуйте! Возникает непонятная ошибка при компиляции следующей инструкции:

    shr ax, 9

    код ошибки: A2070

    ax определяется только после выполнения некоторых команд, хотя изначально инициализирован 0.
    куда еще проще? =)
    как говорится падаю на ровном месте.
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Какое сообщение-то об ошибке? Код мало что говорит. И причём здесь инициализированность и т.п. ах?
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    "Error A2070: invalid instruction operands"
    очень странно, нужен полный код.
     
  4. Antoniosis

    Antoniosis New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    12
    Вот он код:
    только вместо ax стоит cx. Для реального режима.
    ___________________________________________________________________
    text segment use16
    assume CS:text
    _beg:
    mov ax, 0
    mov DS, ax
    mov ax, word ptr DS:[42h]
    mov DS, ax
    mov ax, 186ah
    mov ES, ax
    cld
    mov cx, 0
    mov si, word ptr DS:[40h]
    mov di, word ptr ES:0
    Cycle:
    cmp byte ptr DS:[si], 0CFh
    jz konec
    movsb
    inc cx
    jmp short Cycle
    konec:
    cmp cx, 1000000000b
    jnle l1
    mov cx, 1
    jmp short l2
    l1:
    shr cx, 9 ;---------------->> вот она заноза
    add cx, 1
    l2:
    mov ah, 03h
    mov al, cl
    mov ch, 9h
    mov cl, 0a8h
    mov dh, 0h
    mov dl, 0h
    mov bx, 0
    int 13h
    push ax
    mov ax, 0b800h
    mov ES, ax
    mov bx, 0
    pop ax
    mov word ptr ES:[bx], ax
    text ends
    end _beg
     
  5. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    А какой тип процессора указан? Если ничего, то по умолчанию, помнится, принимается 8086 -- а там не было сдвигов на фиксированное число разрядов, отличное от 1 (т.е. "shr регистр, число" использовать нельзя) -- такая возможность появилась вроде только в 80286 или даже позже. А судя по тексту, в нём процессор не указан; в командной строке, вероятно, тоже -- вот транслятор и ругается. Суньте в самое начало .386 -- тогда переварит.