Форум: "Потрепаться";
Текущий архив: 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 l1mov 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