IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Пара вопросов
Client
сообщение 28.03.2009 15:05
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Изучение ассемблере что-то не очень дается, поэтому появляется много вопросов, вот некоторые из них
1) Какого размера регистр и что в него можно положить (мы заносили туда даже строку, но не пойму как она туда помещается)?
2)как описать вещ число?
3)как сделать цикл в цикле (цикл ведь работает только с регистром cx?)?
Вот такие пока вопросы, кому не сложно ответьте пожалуйста
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 1.04.2009 8:53
Сообщение #2


Гость






Цитата
как его переделать для MASM?
Вот это (файл client_1.asm)
.model small
.stack
.data
a db '*$'
;i db ?
.code
_start:
mov ah, 6h ; очистка окна
mov al, 0 ; при AL = 0 заданное окно очищается _полностью_
mov ch, 0 ; строка - начало окна
mov cl, 0 ; столбец - начало окна
mov dh, 24 ; строка - конец окна
mov dl, 79 ; столбец - конец окна
mov bh, 02h ; цвет

; вызываем, собственно, прерывание, которое выполнит функцию
; с номером, хранящимся в AH (в твоем случае это очистка экрана)
int 10h

mov ah, 2h ; функция 02 - изменить положение курсора
mov bh, 0h
mov dh, 1 ; переход на строку
mov dl, 2 ; переход на столбец
int 10h ; теперь выполнится ф-я 02 прерывания 10H

mov ax, SEG a ; заносим в AX сегментную часть адреса строки
mov ds, ax ; и копируем ее в DS (напрямую занести "SEG a" в DS тебе не позволят)
mov dx, OFFSET a ; в DX - заносим вторую часть адреса строки: смещение

; таким образом, после всего сделанного полный адрес строки хранится в DS:DX
; что нам и нужно для вывода на экран
mov ah, 09h ; функция вывода на экран
int 21h ; вызываем в-ю 09h

mov ax, 4c00h ; завершение работы программы и выход
int 21h ; <-- выполняем вышесказанное

end _start
прекрасно компилируется и собирается MASM-ом:
F:\test>D:\masm32\bin\ml.exe /c client_1.asm
F:\test>D:\masm32\bin\link16.exe client_1.obj
(только замени путь к MASM-у на свой, правильный)

Я надеюсь, на твой первый вопрос я комментариями ответил? А dup - это от duplicate (повторять), то есть ты здесь:
.data
arr db 20 dup(?)
выделишь не один байт, а 20. Поэтому я и убрал 1 dup, это смысла не имеет (повторять 1 раз? Лучше вообще не указывать количество повторов)...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 13:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"