Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2017, 18:39   #1
Bagggyy
Новичок
Джуниор
 
Регистрация: 25.11.2017
Сообщений: 1
По умолчанию Посмотрите пожалуйста код, Ассемблер

Есть готовый код, он делает следующее:
Вывести строку символов по центру экрана, обеспечить вертикальную бегущую волну из
атрибутов трех цветов: белого, красного и зеленого.

Мне не понятно как он работает, если кто-то знает, помогите пожалуйста,
напишите несколько комментариев к коду. Заранее СПАСИБО ОГРОМНОЕ!
(уже 5й час пытаюсь понять всё)

;================================== =============

;КОД:

data segment
string db 160,?,160 dup ('$');'HELP ME, PLEASE!!!' ;не более 40 символов, а то будет каша. кол-во символов прога вычислит сама.
lstr dw $ - string
data ends
code segment
assume cs:code,dsata
start:
mov ax,data
mov ds,ax
mov ah,0ah ;Считать строку символов из STDIN в буфер
lea dx, string
int 21h
mov cl, string[1]
mov ax,3
int 10h
mov ax,0b800h
mov es,ax

mov di,1990
mov bl,7
call OUT_STRING
mov ah,10h
int 16h

mov ah,4ch
int 21h
OUT_STRING proc
xor si,si
O1:
mov al,byte ptr string[si+2]
mov byte ptr es:[di],al
inc si
inc di
;inc bl
mov byte ptr es:[di],bl
inc di
cmp bl,4
;jl jll
je jel
ja jal
mov bl,7
jmp ex
jel:
mov bl,2
jmp ex
jal:mov bl,4
ex: loop O1
ret
OUT_STRING endp
code ends
end start

;================================== =============
Bagggyy вне форума Ответить с цитированием
Старый 25.11.2017, 19:41   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

код не удовлетворяет условию задания..
это не бегущая волна, а просто вывод:
Код:
data segment
string  db  160,?,160 dup ('$')  
lstr    dw  $ - string             ;<-- это не нужно! размер будет в "string+1"
data ends

code segment
assume cs:code,dsata
start:
mov ax,data
mov ds,ax 
mov ah,0ah          ; Считать строку символов из STDIN в буфер 
lea dx, string
int 21h

mov ax,3            ; в\режим 80х25 16-цветов
int 10h

mov cl, string[1]   ; CL = длина строки, CH нужно обнулить

mov ax,0b800h       ; ES:DI = видеобуфер, DI позиция на экране
mov es,ax
mov di,1990

mov bl,7            ; цвет символа
call OUT_STRING     ; вывод строки на экран

mov ah,10h          ; ожидание клавы
int 16h
mov ah,4ch          ; выход в DOS!
int 21h
;=========================
; Здесь лучше использовать LODSB/STOSB
OUT_STRING proc
xor si,si
O1:
mov al,byte ptr string[si+2]   ; AL = очередной байт из строки
mov byte ptr es:[di],al        ; запись его в видеобуфер
inc si                         ; сл.символ в строке..
inc di                         ; сл.позиция в окне..
;inc bl                        ; сл.цвет..
mov byte ptr es:[di],bl        ; записываем атрибут символа в в\буфер
inc di                         ; позиция +1
cmp bl,4                       ; цвет в диапазоне?
;jl jll                        ; ^^^
je jel                         ; ^^^
ja jal                         ; ^^^
mov bl,7                       ; ^^^
jmp ex                         ; всё нормально с цветом
jel:                           
mov bl,2
jmp ex
jal:mov bl,4                   ; иначе: сбросить его
ex: loop O1                    ; повторить для всей строки (СХ-раз)
ret
OUT_STRING endp
code ends
end start
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посмотрите пожалуйста мой код.Почему он не считает количество единиц в получившемся факториале? Станислав 6721 Visual C++ 0 05.11.2016 15:57
Посмотрите код! Spicus Visual C++ 6 30.01.2011 14:47
Посмотрите код Assemblerru Общие вопросы C/C++ 3 05.05.2010 17:57
посмотрите пожалуйста merets Помощь студентам 7 08.09.2009 23:54
Посмотрите пожалуйста lubafffka Общие вопросы C/C++ 1 12.05.2009 21:42