Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Матрицы, адреса, OFFSET 
V
    Опции темы
Metalex
Дата 24.10.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Доброго времени суток всем!
Задание было таково: используя попеременно, если это возможно, или команду загрузки абсолютного адреса или OFFSET заполнить таблицу TablAdr так, чтоб каждый элемент представлял собой адрес соотвествующего элемента таблицы TablB.
Я сделал так:
Код

title lab2.8

sseg segment para stack 'stack'
db 256 dup (?)
sseg ends

Eseg segment para public 'ext'
TablB db 10 dup (4 dup ('G'))
TablAdr dd 40 dup ('H')
Eseg ends

cseg segment para public 'code'
assume cs:cseg, ss:sseg, es:Eseg

start proc far


mov bx,Eseg
mov es,bx
mov si, 0
mov cl, 20

loop8:
mov dl, [TablB[si]]
mov TablAdr[si], [dl]
inc si
mov bx, OFFSET TablB[si]
mov TablAdr[si], [bx]
inc si
loop loop8


ret
start endp

cseg ends
end start


Но не компилится!

Выложу листинг:
Код

Turbo Assembler     Version 4.1        24/10/10 13:34:40        Page 1
lab28.asm
lab2.8


      1
      2    0000                 sseg segment para stack 'stack'
      3    0000  0100*(??)             db    256 dup    (?)
      4    0100                 sseg ends
      5
      6    0000                 Eseg segment para public 'ext'
      7    0000  0A*(04*(47))         TablB db 10 dup (4    dup ('G'))
      8    0028  28*(00000048)         TablAdr dd    40 dup ('H')
      9    00C8                 Eseg ends
     10
     11    0000                 cseg segment para public 'code'
     12                     assume cs:cseg, ss:sseg, es:Eseg
     13
     14    0000                 start proc    far
     15
     16
     17    0000  BB 0000s             mov bx,Eseg
     18    0003  8E C3             mov es,bx
     19    0005  BE 0000             mov si, 0
     20    0008  B1 14             mov cl, 20
     21
     22    000A                 loop8:
     23    000A  26: 8A 94    0000r         mov dl, [TablB[si]]
     24    000F  26: 89 94    0028r         mov TablAdr[si], [dl]
**Error** lab28.asm(25)    Can't convert to pointer
     25    0014  46             inc si
     26    0015  26: 8B 9C    0000r         mov bx, OFFSET TablB[si]
     27    001A  26: 89 9C    0028r         mov TablAdr[si], [bx]
**Error** lab28.asm(28)    Illegal    memory reference
     28    001F  46             inc si
     29    0020  E2 E8             loop loop8
     30
     31
     32    0022  CB             ret
     33    0023                 start endp
     34
     35    0023                 cseg ends
     36                     end start
 Turbo Assembler     Version 4.1        24/10/10 13:34:40        Page 2
Symbol Table
lab2.8



Symbol Name              Type     Value

??DATE                  Text     "24/10/10"
??FILENAME              Text     "lab28      "
??TIME                  Text     "13:34:40"
??VERSION              Number 040A
@CPU                  Text     0101H
@CURSEG                  Text     CSEG
@FILENAME              Text     LAB28
@WORDSIZE              Text     2
LOOP8                  Near     CSEG:000A
START                  Far     CSEG:0000
TABLADR                  Dword     ESEG:0028
TABLB                  Byte     ESEG:0000

Groups & Segments          Bit Size Align  Combine Class

CSEG                  16  0023 Para      Public  CODE
ESEG                  16  00C8 Para      Public  EXT
SSEG                  16  0100 Para      Stack      STACK
 Turbo Assembler     Version 4.1        24/10/10 13:34:40        Page 3
Error Summary
lab2.8


**Error** lab28.asm(25)    Can't convert to pointer
**Error** lab28.asm(28)    Illegal    memory reference
 


Помогите исправить ошибки! Спасибо огромное!


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
iff
Дата 24.10.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Ошибки заключаются в том, что в строках 25 и 28 оба операнда инструкции mov обращаются к памяти. Так делать нельзя. Только 1 операнд может быть памятью, другой либо регистр, либо непосредственное значение.

Что же касается исправления ошибок, то я не могу понять структуру массивов.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Metalex
Дата 24.10.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Один - 10 на 4, другой - 40. Но ведь все равно они линейны обое в памяти.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
iff
Дата 25.10.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Данный код заполняет массив адресов адресами в формате сегмент:смещение.
Код

xor si, si ;mov si,0
xor di,di ;mov di,0
mov cl, 40

loop8:
mov word ptr TablAdr[di+2], Eseg
lea ax, TablB[si]
mov word ptr TablAdr[di], ax
add di, 4
inc si
loop loop8

Цитата(Metalex @  24.10.2010,  17:45 Найти цитируемый пост)
команду загрузки абсолютного адреса 

чтоже это за команда такая? lea?
Размер элементов массива TablAdr - двойное слово, т.е. адрес записывать в формате сегмент:смещение?
Вообщето абсалютный адрес = сегмент * 16 + смещение, тогда логично было бы сделать элементы массива TablAdr размером 1 слово.



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Mikl_
Дата 28.10.2010, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Цитата(Metalex)
используя попеременно, если это возможно, или команду загрузки абсолютного адреса или OFFSET заполнить таблицу TablAdr так, чтоб каждый элемент представлял собой адрес соотвествующего элемента таблицы TablB
, 
Код
.286
.model small
.stack 256
.code
start:    mov bx,@data
    mov ds,bx
    mov si,0
    mov di,0
    mov cx,40    
@@:    lea bx,TablB[si]
    mov TablAdr[di],bx
    inc si
    add di,2
    loop @b
    mov ah,4Ch
    int 21h
.data
TablB db 40 dup ('G')
TablAdr dw 40 dup (?)
end start
 smile 
PM MAIL   Вверх
iff
Дата 29.10.2010, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Mikl_, но вроде как ему надо абсолютный адрес загружать... Или может быть...


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.