Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2011, 20:00   #1
aly-lucenko
Пользователь
 
Регистрация: 09.04.2010
Сообщений: 29
По умолчанию Пересылка в Assembler

Задание: написать фрагмент программы для исполнения операции:
операция - пересылка;
1-й операнд - регистр;
2-й операнд - 5-й элемент блока данных.


Начала анализировать, что пересылка исполняется с помощью mov.
Вопрос в том, что понимается под выражением 5-й элемент блока данных?
блок данных можно задать?

Последний раз редактировалось aly-lucenko; 22.05.2011 в 20:14.
aly-lucenko вне форума Ответить с цитированием
Старый 22.05.2011, 20:57   #2
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

есть какой то массив вот элемент под номером 5 нужно переслать
Код:
lea si, arr
mov al, [si + 4]
arr - это массив из элементов типа байт, +4 потому что нумерация идет с нуля
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 22.05.2011, 21:04   #3
aly-lucenko
Пользователь
 
Регистрация: 09.04.2010
Сообщений: 29
По умолчанию

спасибо)
а как можно задать элементы этого массива?
aly-lucenko вне форума Ответить с цитированием
Старый 22.05.2011, 21:22   #4
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Код:
arr: db 0,1,2,3,4,5,6,7,8,9
либо если без разница каким содержанием
Код:
arr: db 10 dup(?)
10 - длина массива

Желательно это делать в сегменте данных
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 22.05.2011, 21:28   #5
aly-lucenko
Пользователь
 
Регистрация: 09.04.2010
Сообщений: 29
По умолчанию

выскакивает oшибка : undefined symbol: arr
Код:
Код:
DATASG     SEGMENT    PARA
DB     16 DUP('@')
DATASG    ENDS
STACKSG     SEGMENT     PARA     'Stack'
DB        12 DUP(?)
STACKSG        ENDS
CODESG     SEGMENT     PARA     'Code'
ASSUME     SS:STACKSG,CS:CODESG,DS:DATASG
BEGIN PROC FAR	
lea si, arr
mov al, [si + 4]
RET
BEGIN	 ENDP	
CODESG	 ENDS	
END	 BEGIN
aly-lucenko вне форума Ответить с цитированием
Старый 22.05.2011, 22:07   #6
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

сравни как у меня записано и как у тебя

Код:
DATASG     SEGMENT    PARA
arr: DB     16 DUP('@')
DATASG    ENDS
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 23.05.2011, 00:14   #7
aly-lucenko
Пользователь
 
Регистрация: 09.04.2010
Сообщений: 29
По умолчанию

Прошу прощение за навящивость)
При правильной работе кода:
Код:
DATASG     SEGMENT    PARA
arr: DB  0,1,2,3,4,5,6,7,8,9
DATASG    ENDS
;STACKSG     SEGMENT     PARA     'Stack'
;DB        12 DUP(?)
;STACKSG        ENDS
CODESG     SEGMENT     PARA     'Code'
ASSUME     CS:CODESG,DS:DATASG
BEGIN PROC FAR
    lea si, arr
mov ax, [si+4]
RET
BEGIN	 ENDP	
CODESG	 ENDS	
END	 BEGIN
ax=0004

а получается совсем не то:
Изображения
Тип файла: jpg Безымянный.jpg (54.2 Кб, 115 просмотров)
aly-lucenko вне форума Ответить с цитированием
Старый 23.05.2011, 08:23   #8
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

для того что бы использовать Ax увеличил размер элментов массива, Прежде чем работать нужно иничциализировать сегментные регистры, из программы должен быть нормальный выход

Код:
DATASG     SEGMENT    PARA
arr: DW  0,1,2,3,4,5,6,7,8,9
DATASG    ENDS
;STACKSG     SEGMENT     PARA     'Stack'
;DB        12 DUP(?)
;STACKSG        ENDS
CODESG     SEGMENT     PARA     'Code'
ASSUME     CS:CODESG,DS:DATASG
BEGIN PROC FAR

    mov AX, DATASG
    mov DS, AX; обязательно иначе в ds неопределнное знчение
    lea si, arr
    mov ax, [si+4 * 2] ; размер элемента уже 2 байта поэтому и умножаем на 2
    mov AH, 4Ch
    int 21h ;Обязательно для нормального выхода
RET
BEGIN	 ENDP	
CODESG	 ENDS	
END	 BEGIN
Инициализация сегментного регистра обязательно нужна по следующей причине
команда mov ax, [si+4 * 2] в процессоре выполняется следующим образом mov ax, ds:[si+4 * 2] а так как сегментные регистр не определен то мы не попадаем в массив
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 23.05.2011, 09:07   #9
aly-lucenko
Пользователь
 
Регистрация: 09.04.2010
Сообщений: 29
По умолчанию

а если операция - пересылка;
1-й операнд - 5-й элемент блока данных;
2-й операнд - регистр

Я так понимаю не достаточно этого:
Код:
DATASG     SEGMENT    PARA
arr: DW  0,1,2,3,4,5,6,7,8,9
DATASG    ENDS
;STACKSG     SEGMENT     PARA     'Stack'
;DB        12 DUP(?)
;STACKSG        ENDS
CODESG     SEGMENT     PARA     'Code'
ASSUME     CS:CODESG,DS:DATASG
BEGIN PROC FAR

    mov AX, DATASG
    mov DS, AX; обязательно иначе в ds неопределнное знчение
    lea si, arr
    mov [si+4 * 2],  ax ; размер элемента уже 2 байта поэтому и умножаем на 2
    mov  4Ch, AH
    int 21h ;Обязательно для нормального выхода
RET
BEGIN	 ENDP	
CODESG	 ENDS	
END	 BEGIN
aly-lucenko вне форума Ответить с цитированием
Старый 23.05.2011, 10:05   #10
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

почему не достаточно сама операция пересылки это

Код:
    mov [si+4 * 2],  ax ; размер элемента уже 2 байта поэтому и умножаем на 2
все остальное только для того что бы заработала эта операция, точнее зработала так как это нам надо
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
assembler Fanton Помощь студентам 0 07.03.2011 10:50
ASSEMBLER AJIUM Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 18.03.2010 17:20
y=(a+b*b*c)/(tg(c-b)) assembler vlad_zasranec Помощь студентам 3 30.01.2010 01:11
Assembler cold-hands Помощь студентам 1 07.11.2009 19:56