Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
64 / 64 / 10
Регистрация: 26.06.2010
Сообщений: 332
1

Ещё одна программа)

30.08.2011, 13:45. Показов 1453. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я уже разобрался с циклом, отладчиком и много чем ещё другим) Теперь ещё одна программа из книги, я попробую прокомментировать, а вы исправте ошибки и дополните.
Итак у меня есть программа которая будет читать определённый сектор диска C

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
MODEL   TINY - название
STACK 100h  - размер памяти которую будет использовать программа   
DATASEG - сегмент данных 
    data1 DD 512  - ???? вот тут обьясните пожалуйста как пользоваться переменными в ассемблере?? пока что я работал только с переменными типа string
CODESEG - сегмент кода
start: - начало
    mov ax,@data  -перемещаем в ax данные с DATASEG
    mov ds,ax - перемещаем с ax данные в datasegment
 
    mov al,3        ; - помещаем в младший байт регистра ax число три(насколько я понял это порядковый номер диска C? )
    mov dx,0  - помещаем в dx порядковый номер сегмента с которого мы начнём читать данные на диске
    mov cx,1  - помещаем в cx количество сегментов которое мы хотим считать
    mov bx,offset data1;   - помещаем в bx переменную data1 со смещением(в книге написано "DS:BX - буфер"  что это значит???)
    int 25h  - читаем с диска 
 
    mov bx,1            } 
    mov cx,512                }   а вот тут в этих трёх строках я ничерта не понял, объясните пожалуйста
    mov dx,offset data1 }
    mov ah,40h    }    
    int 21h           } выводим на экран данные с регистра ds
 
    mov ah,04Ch  }
    mov al,1h        } завершаем программу
    int 21h          }
end start
ответьте пожалуйста на мои три вопроса в коде
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2011, 13:45
Ответы с готовыми решениями:

Ни одна программа не компилируется - пишет, что ошибка в первой строке .MODEL Tiny
Доброго времени суток! Требуется помощь: скачал fasm, но ни одна программа не компилится - пишет,...

Использовать два модуля. Программа конкатенации двух строк. Одна в главном модуле, другая во вспомогательном.
Прочитал много книжек но сроки поджимают в инсте ребята помогите пожалуйста, научился скадывать...

Ещё одна ошибка
The name '%.*ls' is not permitted in this context. Only constants, expressions, or variables...

ещё одна графика
Вот ещё одна задача. Нарисовать раскачивающийся маятник, который со временем затухает.(то есть...

6
10 / 10 / 1
Регистрация: 26.02.2011
Сообщений: 112
30.08.2011, 14:23 2
Цитата Сообщение от _CyberHedgehog_ Посмотреть сообщение
Assembler
1
2
3
4
5
mov bx,1
mov cx,512
mov dx,offset data1
mov ah,40h
int 21h
Функция записи в файл
bx - номер (handle) файла
cx - число записываемых байт
dx - данные для записи
ah - номер функции (40h)
1
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
30.08.2011, 14:28 3
Цитата Сообщение от _CyberHedgehog_ Посмотреть сообщение
data1 DD 512 *- ???? вот тут обьясните пожалуйста как пользоваться переменными в ассемблере?? пока что я работал только с переменными типа string
По поводу использования переменных, наверное, лучше примеры в книгах по листать, так как использовать их можно разными способами. В данном случае создается переменная типа dd - двойное слово - 512 в данном случае, потому что длина сектора 512 байт, а в эту переменную. по идее, считывается содержимое сектора.

Цитата Сообщение от _CyberHedgehog_ Посмотреть сообщение
насколько я понял это порядковый номер диска C?
да

Цитата Сообщение от _CyberHedgehog_ Посмотреть сообщение
в книге написано "DS:BX - буфер" *что это значит???
в ds - должен быть адрес сегмента, а bx задает смещение относительно начала сегмента. Обычно в ds адрес сегмента данных, определенного в программе, а в bx - помещают переменную, определенную в этом сегменте данных. которая находится в сегменте

Я вообще советую вам почитать какие-нибудь справочники по прерываниям и функциям DOS, чтобы более свободно ориентироваться во всем этом
1
10 / 10 / 1
Регистрация: 26.02.2011
Сообщений: 112
30.08.2011, 14:46 4
Цитата Сообщение от _CyberHedgehog_ Посмотреть сообщение
data1 DD 512
db - 1 байт
dw - 2 байта
dd - 4 байта.

когда ты пишешь db, dw или dd ты говоришь ассемблеру вставить эти данные в программу. т.е если ты напишешь db A113h или mov ax,13h то никакой разницы не будет потому что A113h это машинный код mov ax,13h, а data1 это всего лишь метка.

то есть если ты пишешь mov dx,offset data1 ты заносишь в dx адрес метки, а если метка стоит перед data1 то ты получается задаешь адрес data1

например с помощью message db "Assembler" я вставляю в машынный код строку ассемблер

Добавлено через 9 минут
используйте справочники по ассемблеру и перерываниям дос. Это напиример Tech Help первая версия русская а дальше английские. Я например пользуюсь TechHelp 6 но он на английском, еслы вы хорошо разбираетесь в английском то магу вам посоветовать именно эту версию, она самая последняя
1
64 / 64 / 10
Регистрация: 26.06.2010
Сообщений: 332
30.08.2011, 15:07  [ТС] 5
Огромное спасибо вам обоим)))
Обязательно скачаю справочник по ассемблеру, но периодически буду и тут спрашивать.
Ещё раз спасибо

Добавлено через 7 минут
Assembler
1
2
3
4
5
mov bx,1
mov cx,512
mov dx,offset data1
mov ah,40h
int 21h
И ещё один вопрос, Илья Остапишен, как сделать тут вывод не на экран а в файл? пытался поставить путь, выкинуло ошибку
0
10 / 10 / 1
Регистрация: 26.02.2011
Сообщений: 112
31.08.2011, 14:28 6
Извините может что то не так работать очень спешил
Вложения
Тип файла: rar read.rar (576 байт, 13 просмотров)
0
10 / 10 / 1
Регистрация: 26.02.2011
Сообщений: 112
31.08.2011, 14:49 7
Читайте книгу Олега Калашникова "Ассемблер? Это просто! Учимся программировать"
или архив рассылки http://kalashnikoff.ru/Assembler/ (это когда то такая рассылка была)
0
31.08.2011, 14:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2011, 14:49
Помогаю со студенческими работами здесь

И ещё одна сортировка :)
День добрый, форумчане. Работаю со списком (помнится, просил в своё время даже совета по работе...

Ещё одна история с locker'om
При включении, вместо рабочего стола показывалось сообщение о блокировке компьютера, загрузочный...

А вот ещё одна фишка.
Недавно прогуливался по самым конкурентным запросам и наткнулся на вот-что. Один человек в своем...

Ещё одна тема про 3 из 4 Гб
Здравствуйте! Решил сделать рабочий компьютер из того, что было. Купил две планки оперативной...


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

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