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

Discussion in 'WASM.BEGINNERS' started by Antoniosis, Aug 18, 2010.

  1. Antoniosis

    Antoniosis New Member

    Blog Posts:
    0
    Joined:
    Aug 7, 2010
    Messages:
    12
    Здравствуйте! Возникает непонятная ошибка при компиляции следующей инструкции:

    shr ax, 9

    код ошибки: A2070

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

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

    Blog Posts:
    0
    Joined:
    Oct 31, 2007
    Messages:
    1,483
    Location:
    Подмосковье
    Какое сообщение-то об ошибке? Код мало что говорит. И причём здесь инициализированность и т.п. ах?
     
  3. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    "Error A2070: invalid instruction operands"
    очень странно, нужен полный код.
     
  4. Antoniosis

    Antoniosis New Member

    Blog Posts:
    0
    Joined:
    Aug 7, 2010
    Messages:
    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 Воин против дзена

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