С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
1

Готовим адрес буфера в ES:BX

09.04.2012, 10:18. Показов 3165. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Нашёл программку вывода содержимого сектора дискеты
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  .MODEL  tiny
  .DATA
 
; Буфер, в который будет прочитан сектор диска
buf db 512 dup (?)
 
  .CODE
  .STARTUP
 
  mov   ch, 00h   ; номер дорожки
  mov   cl, 01h   ; номер сектора
 
  mov   dh, 00h   ; номер головки  (стороны диска)
  mov   dl, 00h   ; номер НГМД, соответсвует 
                  ; устройству А:
 
; Готовим адрес буфера в ES:BX
  mov   ax, cs
  mov   es, ax
 
  mov   bx, OFFSET buf
 
; Готовим код функции
  mov   ah, 02h   ; код функции - чтение сектора
  mov   al, 01h   ; читаем 1 сектор
 
; Вызываем прерывание
  int   13h
  
  .EXIT   0
  END
Вроде работает.
Подскажите, пожалуйста
Assembler
1
2
3
; Готовим адрес буфера в ES:BX
  mov   ax, cs
  mov   es, ax
почему регистр сегмента кода посылается в es? для чего?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2012, 10:18
Ответы с готовыми решениями:

Переполнение буфера, адрес возврата
Подскажите пожалуйста, где можно найти адрес возврата при переполнении буфера. Visual Studio 2012...

Получить адрес буфера файла
как получить адрес буфера файла открытого с помощью std::ifstream?

Как, имея адрес буфера, записать что-то в него?
В данном вопросе я полный профан .В задаче сказано что в P1 хранится адрес буфера для пароля ,а в...

Как задать адрес буфера в памяти процессора? В каком виде?
Добрый день (или что-то иное, если у вас еще/уже не день). Возникла тут одна проблемка. Неким...

7
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
09.04.2012, 10:45 2
INT 13 02 - берет буфер именно из ES:BX

Добавлено через 13 минут
Цитата Сообщение от Роман_1985 Посмотреть сообщение
mov ax, cs
mov es, ax
Кстати здесь можно обойтись и без этих команд, в com сегментные регистры равны.
0
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
09.04.2012, 15:15  [ТС] 3
Это всё понятно, но ответ на вопрос не дан=)
получается что в регистре ES будет адрес сегмента кода.так? зачем это нужно?
0
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
09.04.2012, 15:34 4
Роман_1985
В данной программе вообще не нужно, т.к. это com программа. Она расположена в одном сегменте (CS=ES=DS=SS). Если бы была exe то в ES бы следовало занести тот сегмент, в котором размещен твой буфер (buf db 512 dup).
1
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
09.04.2012, 15:54  [ТС] 5
мне вообще хотелось бы разобраться, т.к делаю более сложную производную от этой программу(в ехе). Т.е правильлно я понял: на самом деле буфер(buf db 512 dup) находится в DS(сегменте данных), но в этой программе автор учитывает что CS=DS и пересылает CS. Т.е правильнее будет DS переслать?
0
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
09.04.2012, 16:12 6
Цитата Сообщение от Роман_1985 Посмотреть сообщение
на самом деле буфер(buf db 512 dup) находится в DS(сегменте данных)
В com буфер находится во всех сегментах.

Добавлено через 4 минуты
Там один единственный сегмент и в нём всё - код, данные, стэк.

Добавлено через 1 минуту
Если будеш писать exe, пусть строка будет у тебя в сегменте данных и код перед вызовом прерывание напишеш следующий [mov ax,ds/mov es,ax].
1
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
09.04.2012, 20:22  [ТС] 7
_lucius_,Спасибо=)
Систематизирую.
В ES:BX должен храниться физический адрес буфера. Помещаем в ES адрес сегмента, в котором определён буфер( mov sx,ds | mov es,ax), в BX - смещение буфера относительно этого сегмента (mov bx, offset buffer)
0
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
09.04.2012, 21:14 8
Роман_1985 Да, все правельно.
0
09.04.2012, 21:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2012, 21:14
Помогаю со студенческими работами здесь

Какой адрес сегмента должен быть для буфера клавиатуры в защищенном режиме
BUFER_descr db 0FFh,0FFh,??h,??h,??h,10010010b,01000000b,??h Кто знает какой...

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей...

Готовим видеокарту
BeE1LhQLkCw Объясните, что происходит.

Готовим флюс. Простой, но "вкусный".
Наткнулся в интернете еще в начале этого года на рецепт хорошего флюса, все не хватало времени его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru