Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Вниз

Assembler   Найти похожие ветки 

 
Хенд   (2005-03-09 21:06) [0]

Уже час ломаю голову. Есть строка:
msg db "Assembler"
Как в регистр AL записать пятую букву (m)?


 
wicked ©   (2005-03-09 21:08) [1]

mov al, byte ptr [msg + 4]


 
Хенд   (2005-03-09 21:16) [2]

Спасибо. Только это мне не очень помогло :)
Необходимо загрузить в AL букву, номер которой указан в CX.
Если написать просто
mov al, byte ptr [msg+cx-1]
то происходит ошибка Illegal indexing mode
Как можно реализовать?

P.S. Просьба строго не судить, так как изучаю ASM только второй день


 
Anton_K ©   (2005-03-09 21:23) [3]

Для 16-битного режима:

add cx,offset msg
mov al,byte ptr [cx]


 
Хенд   (2005-03-09 21:27) [4]

А если не изменяя CX? В моем случае код находится в цикле loop (cx используется в качестве счетчика)...


 
Anton_K ©   (2005-03-09 21:31) [5]

Полностью опиши, что ты хочешь сделать. Мне кажется, что тебе надо цепочные команды использовать.


 
begin...end ©   (2005-03-09 21:34) [6]

> Хенд   (09.03.05 21:27) [4]

mov si,cx
mov al,mes[si]


 
Хенд   (2005-03-09 21:36) [7]

Необходимо вывести строку двумя способами: напрямую в видеобуфер и через прерывание BIOS (при чем выводить сверху вниз). Пока пытаюсь реализовать через запись в видеобуфер...
СSEG Segment
assume CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG
org 100h
Start:
len=9
call Video
call Bios
mov ah,10h
int 16h
int 20h

Video proc
mov ax,0B800h
mov es,ax
mov di,0
mov cx,len
l1:
mov ax,es:[di]
mov al, byte ptr [msg+len-cx]
and ah,11110000b
add ah,00001111b
mov es:[di],ax
add di,160
loop l1
ret
Video endp

Bios proc
ret
Bios endp

msg db "Assembler"

CSEG ends
end Start


 
Хенд   (2005-03-09 21:43) [8]

Посмотрите. Так должно работать правильно?

CSEG Segment
assume CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG
org 100h
Start:
len=9
call Video
call Bios
mov ah,10h
int 16h
int 20h

Video proc
mov ax,0B800h
mov es,ax
mov di,0
mov cx,len
l1:
mov ax,es:[di]
mov si,len
sub si,cx
mov al,msg[si]

mov ah,31
;and ah,11110000b
;add ah,00000000b
mov es:[di],ax
add di,160
loop l1
ret
Video endp

Bios proc
ret
Bios endp

msg db "Assembler"

CSEG ends
end Start


 
Anton_K ©   (2005-03-09 21:43) [9]


Video proc
mov ax,0B800h
mov es,ax
mov di,0
mov si,offset msg
mov cx,len
cld
rep movsb
ret
Video endp


Вроде так...


 
Andy BitOff ©   (2005-03-09 21:44) [10]

При первом взгляде:

msg db "Assembler"
len equ $-msg


 
Хенд   (2005-03-09 22:01) [11]

Всем спасибо. Приведенный мною вариант с SI работает...
Для проверки приходится загружать DOS с дискеты, так как в XP вывод в видеобуфер не отображается, а установить DOS на жесткий диск нет возможности, так как файловая система NTFS... Вот и приходится каждый раз для проверки грузится в Win98StartDisk :)

Всё же не понятно, почему нельзя использовать CX напрямую, вместо SI...

2Andy BitOff
Спасибо. Сразу хотел так сделать, только не смог вспомнить :)


 
begin...end ©   (2005-03-09 22:19) [12]

> Хенд   (09.03.05 21:43) [8]

Если уж НЕ использовать цепочечные команды, то примите к сведению:

> mov cx,len
> l1:
> ...
> mov si,len
> sub si,cx
> mov al,msg[si]
> ...
> loop l1

   mov cx,len
   xor si,si
l1:
   ...
   mov al,msg[si]
   ...
   inc si
   loop l1


 
SammIk ©   (2005-03-09 22:38) [13]

mov cx,len
l1:
...
mov al,msg[cx]
...
loop l1


 
DrPass ©   (2005-03-10 00:47) [14]


> Хенд   (09.03.05 22:01) [11]
> Для проверки приходится загружать DOS с дискеты, так как
> в XP вывод в видеобуфер не отображается, а установить DOS
> на жесткий диск нет возможности, так как файловая система
> NTFS... Вот и приходится каждый раз для проверки грузится
> в Win98StartDisk :)

В оффтоп:
Скачай с сайта Microsoft полезную вещь - Virtual PC 2004. Незаменимый инструмент, если нужно писать что-то под другие ОС, а машина только одна.


 
Хенд   (2005-03-10 07:20) [15]

2SammIk
Так не работает. Проверил первым делом.
mov al,msg[cx]

2DrPass
Спасибо за наводку. Поищу.


 
Kerk ©   (2005-03-10 07:25) [16]


> mov al,msg[cx]

насколько я понимаю

mov al,[offset msg + cx]


 
Bless ©   (2005-03-10 09:46) [17]

Хенд  (09.03.05 22:01) [11]>
>Всё же не понятно, почему нельзя использовать CX напрямую, вместо
>SI...

Дело в том, что в реальном режиме процессора использовать в качестве индексных можно только регистры si, di, bx, bp, причем если используешь сразу два, то нельзя использовать пары si/di bx/bp. То есть
mov ax, msg[si][di] - нельзя
mov ax, msg[si][bx] - можно

В защищенном режиме можно использовать не только указанные 4 регистра, но вообще любые.

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


 
SammIk ©   (2005-03-10 11:15) [18]

Во про реальный режим не знаю
а про не реальный забыл поставить[ecx-1] тогда рыботать будет.
Но копить будет в обратном порядке. Может можно так[cx-1]


 
Хенд   (2005-03-10 23:00) [19]

А есть какой-нибудь краткий справочник по ассемблеру, содержащий основные функции различных прерываний, коды символов и т.д. и т.п. Чтобы не рыться в огромном кол-во учебников, а всегда иметь самое важное под рукой...


 
Andy BitOff ©   (2005-03-10 23:09) [20]

Вот одно из наиболее приятных вариянтов:
http://duncanmr.chat.ru/guide/start.htm



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.042 c
3-1109087328
Dyusha
2005-02-22 18:48
2005.03.27
Удаление всех записей при помощи ADOQuery


4-1107413722
Chaser
2005-02-03 09:55
2005.03.27
Как отловить перерисовку экрана?


9-1104933755
Trof
2005-01-05 17:02
2005.03.27
Glscene - вход в здания.


3-1109168158
Dyusha
2005-02-23 17:15
2005.03.27
ADOQuery и QReport - создание отчета


1-1110914816
Derail
2005-03-15 22:26
2005.03.27
Не показываются компоненты!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский