Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 116
от 17.04.2005, 23:00

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 2


Вопрос № 19576: Здравствуйте, господа! Подскажите, как в ассемблерной программе для dos получить параметры из командной строки. Если можно, с примером кода. Спасибо....
Вопрос № 19606: Здравствуйте! Ни разу не приходилось с созданием графики на ассемблере. Необходимо сделать следующее: Составить программу для 16-разрядного процессора, реализующую следующие возможности: Быстрый показ двух разных произвольных изображений,...

Вопрос № 19576
Здравствуйте, господа! Подскажите, как в ассемблерной программе для dos получить параметры из командной строки. Если можно, с примером кода. Спасибо.
Отправлен: 12.04.2005, 15:50
Вопрос задал: Белоусов Алексей Юрьевич (статус: 1-ый класс)
Всего ответов отправлено: 1

Отвечает: Евгений Иванов
Здравствуйте, Белоусов Алексей Юрьевич!
AdrCmdLine = 128 ;начало командной строки
cmdstr1:
mov si,AdrCmdLine
lodsb
or al,al
jz help
mov cl,al
sub ch,ch
push si cx ;увеличиваем регистр букв (делаем одинаковыми)
mov bx,ofs tabl_small_big
mov di,si
m101a:
lodsb
xlat
stosb
dec cx
jnz m101a
pop cx si
mov ah,79
mov di,ofs name1
call get_name
jc help
cmp [w name1],'?/'
jz help
;==============
;IN:AH=максим.размер буфера,куда переписывать данные командной строки.
;DS:DI=адрес буфера.
;DS:SI=адрес начала участка командной строки.
;CX=размер оставшейся части командной строки.
;OUT:CF=1-ошибка,код ошибки в AL(0-нет символов,1-переполнение буфера)
;CF=0-все хорошо.
;AH=число символов скопированных.
proc get_name ;=1g
push bx ax
xor bx,bx
jcxz m171g
m151g:
lodsb
cmp al,33
jnc m201g
loop m151g
m171g:
pop ax
mov al,0
exit_g_n2:
push ax
stc
jmp exit_g_n
m161g:
pop ax
mov al,1
jmp exit_g_n2
m201g:
dec si
inc ah
m251g:
lodsb
cmp al,33
jc m271g
dec ah
jz m161g
dec cx
stosb
inc bx
jmp m251g
m271g:
dec si
pop ax
mov ah,bl
push ax
clc
exit_g_n:
mov al,0
stosb
pop ax bx
ret
endp
tabl_small_big:
db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
db 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
db 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47
db 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
db 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
db 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95
db 96,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
db 80,81,82,83,84,85,86,87,88,89,90,123,124,125,126,127
db 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143
db 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159
db 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143
c_1 = 176
rept 3*16
db c_1
c_1 = c_1+1
endm
db 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159
db 240,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 12.04.2005, 18:54


Вопрос № 19606
Здравствуйте!
Ни разу не приходилось с созданием графики на ассемблере. Необходимо сделать следующее:
Составить программу для 16-разрядного процессора, реализующую следующие возможности:
Быстрый показ двух разных произвольных изображений, изменяя одно, пока на экране находится другое, своего рода эффект плавной анимации.
Просьба, набросайте что-то простенькое.
Спасибо.
Отправлен: 12.04.2005, 22:59
Вопрос задал: MMM72 (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Евгений Иванов
Здравствуйте, MMM72!
Это небольшой кусочек двух подпрограмм из игры Калах.
http://superforest.narod.ru/rar/kalah.rar
;Записывает экран в память;
;IN -> SI-адрес параметров (4 слова:координаты прямоугольника X1,Y1,X2,Y2);
;OUT -> AX-сегмент памяти с сохраненным экраном;
proc SaveScrToMem ;====================================================
pusha
push si
lodsw
mov cx,ax
xchg ax,di
shr di,3
mov ax,Xmax/8
mul wptr [si]
add di,ax
lodsw
xchg ax,dx
lodsw
sub ax,cx
ror ax,3
or ah,ah
jnz @@m1
dec ax
@m1:
inc ax
sub ah,ah
xchg ax,cx
lodsw
sub ax,dx
inc ax
mov bx,ax
push ax
;CX-количество байт по X,BX-количество строк по Y,DI-адрес начала;
mul cx
add ax,1 ;4 байта:2-адрес параметров,2-адрес видеопамяти
adc dx,0
mov bx,4
div bx
inc ax
mov bx,ax ;Выделим память для 4 слоев
mov ah,48h
int 33
jc err_mem_gr
mov wptr [bp+Zip1-dat],ax
pop bx dx
push ds es es
pop ds
mov es,ax
mov si,di
sub di,di
mov ax,3CEh
xchg ax,dx
stosw ;Адрес параметров
mov ax,si
stosw ;Адрес видеопамяти
mov ax,304h ;Начнем с 3 слоя
push bp
mov bp,cx
@m5:
push ax bx si
out dx,ax
mov ax,Xmax/8
sub ax,bp
@m6:
mov cx,bp
add cx,di
jc @@m7
mov cx,bp
@m8:
rep movsb
add si,ax
dec bx
jnz @@m6
pop si bx ax
dec ah
jns @@m5 ;И завершим 0-ым
pop bp es ds
popa
mov ax,wptr [bp+Zip1-dat]
ret
@m7:
mov cx,di
neg cx
push cx
rep movsb
mov cx,es
add cx,1000h
mov es,cx
pop cx
sub cx,bp
neg cx
jmp @@m8
endp
;Выводит на экран из памяти для сегмента AX;
;! Пока без масок в начале и в конце,позже сделать;
;IN -> AX-сегмент памяти с экраном;
proc LoadMemToScr ;====================================================
pusha
push ds ax
pop ds
sub si,si
lodsw
xchg ax,bx
lodsw
xchg ax,di
mov si,bx
lods wptr [ss:si]
xchg ax,cx
lods wptr [ss:si]
xchg ax,dx
lods wptr [ss:si]
sub ax,cx
ror ax,3
or ah,ah
jnz @@m1
dec ax
@m1:
inc ax
sub ah,ah
xchg ax,cx
lods wptr [ss:si]
sub ax,dx
inc ax
xchg ax,bx
; CX-байт на линию,BX-линий,DI-адрес видеопамяти
mov si,4
mov dx,3C4h
mov ax,802h
push bp
mov bp,cx
@m5:
push di bx ax
out dx,ax
mov ax,Xmax/8
sub ax,bp
@m6:
mov cx,bp
add cx,si
jc @@m7
mov cx,bp
@m8:
rep movsb
add di,ax
dec bx
jnz @@m6
pop ax bx di
shr ah,1
jnc @@m5
mov ah,0Fh
out dx,ax
;D маску...
pop bp ds
popa
ret
@m7:
mov cx,si
neg cx
push cx
rep movsb
mov cx,ds
add cx,1000h
mov ds,cx
pop cx
sub cx,bp
neg cx
jmp @@m8
endp

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 13.04.2005, 05:58


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное