В чем дело? (Прямая адресация в память)

Тема в разделе "WASM.ASSEMBLER", создана пользователем tonygard, 22 ноя 2008.

  1. tonygard

    tonygard New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2008
    Сообщения:
    2
    В Pascal написал функцию вывода символа "*" в указаное место на экране (задается координатами x-столбец, y-строка). Ввожу (0,0), попадаю в нужное место, ввожу (24,79) и видно, что символ не там где надо. Почему так?

    program Project2;
    uses CRT;
    Procedure Draw(x,y:integer);
    var z:integer;
    begin
    asm
    mov ax,y
    mov bx,80
    mul bx
    mov z,ax
    add ax,y
    mov z,ax
    mov ax,z
    mov bx,2
    mul bx
    mov z,ax
    mov ax,0B800h
    mov es,ax
    mov di,z
    mov byte ptr es:[di],'*'
    end;
    end;

    var
    z,x,y:word;
    show_ax:boolean;

    begin
    ClrScr;
    Writeln('Please enter the number of column');
    Readln(x);
    Writeln('Please enter the number of row');
    Readln(y);
    ClrSCr;
    Draw(x,y);
    readln;
    end.
     
  2. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    tonygard
    в отладчике не смотрел?
     
  3. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    опечатка?
    где-то должен быть x, не правда ли?)
    И не перепутались ли координаты: x = 24, y = 79 или наоборот?
     
  4. CRONUZ

    CRONUZ New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2007
    Сообщения:
    101
    а чем gotoxy() не устраивает?
     
  5. rvlab

    rvlab New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2008
    Сообщения:
    2
    А если так попробовать:
    Код (Text):
    1.                xor  dx,dx
    2.                mov ax,y
    3.                mov bx,80
    4.                mul bx
    5.                add ax,x
    6.                mov di,ax
    7.                shl di,1
    8.                mov ax,0B800h
    9.                mov es,ax
    10.                mov byte ptr es:[di],'*'
     
  6. tonygard

    tonygard New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2008
    Сообщения:
    2
    Сделал как посоветовал rvlab все заработало. Спасибо!
    Да, тему можно удалять
     
  7. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    rvlab xor dx, dx явно лишний :-[