Новичок
Джуниор
Регистрация: 11.01.2012
Сообщений: 2
|
отчёт по коду программы на Assembler
Программа рисует ромб с диагоналями,запрашивая их.нужен отчёт.не могу составить,т.к. вообще плохо понимаю по какому принципу работает программу!!(
Код:
.model small
.stack 100h
.data
mes1 db 'Введи половину диагонали по горизонтали:$'
mes2 db 'Введи половину диагонали по вертикали :$'
.code
x dw ?
y dw ?
mov ax, @data
mov ds, ax
mov ah,9
mov dx, offset mes1
int 21h
mov cx, 3 ;количество цифр(повтор цикла loop)
label1:
mov ah,1 ;функция ввода символов с клавиатуры
int 21h ;прерывание для ввода
mov dl, al ;заносим в dl значения из al
sub dl,48 ;вычесть 48 = ASCII ('0 '), чтобы получить числовое значение
shl x, 4 ;сдвиг битов в лево на 4 разряда
mov dh, 0 ;
add x, dx ;значение резистра dx помещаем в переменную x
loop label1 ;переход в метке 1
shr x, 1 ;сдвиг битов на 1 в право
mov ah, 02h ;
mov dl, 10 ;переход на новую строку
int 21h ;
mov ah,9 ;функция и прерывание для вывода сообщения
mov dx, offset mes2 ;вывод сообщения
int 21h
mov cx, 3 ;количество цифр(повтор цикла loop)
label3:
mov ah,1
int 21h
mov dl, al
sub dl,48
shl y, 4
mov dh, 0
add y, dx
loop label3
shr y, 1
mov ax, 0012h ;установка графического режима
int 10h ;640 на 480 точек, 16 цветов
mov di, 0 ;присваиваем di значение 0(шаг)
linii:
mov ax, di ;помещаем значение di в ax
mov dx, 0 ;помещаем значение 0 в dx
mul x ;умножаем на x
div y ;делим на y
mov si, ax ;помешаем с si значение коэффициента
mov dx, 240 ;устанавливаем координату y по середине
add dx, di ;придавляем шаг
mov cx, 320 ;устанавливаем координату x по середине
sub cx, x ;вычитаем от середины половину диагонали
add cx, si ;помешаем значение коэффициента в cx
mov ax, 0c04h ;функция и перерывание для вывода
int 10h ;
mov dx, 240
add dx,y
sub dx, di
mov cx, 320
add cx, si
mov ax, 0c04h
int 10h
mov dx, 240
sub dx, di
mov cx, 320
add cx,x
sub cx,si
mov ax, 0c04h
int 10h
mov dx, 240
sub dx, y
add dx, di
mov cx, 320
sub cx, si
mov ax, 0c04h
int 10h
inc di ;увеличиваем di на 1
cmp di, y ;сравниваем шаг с половинкой диагонали
jne linii ;если не равно, то переход по метке
;___________________________________диагонали_________________________________
mov di,0 ;устанавливаем шаг равный 0
label5:
mov cx,320 ;устанавливаем местоположениекоординаты x
sub cx,x ;отнимаем от середины половину диагонали
add cx,di ;прибавляем шаг
mov dx,240 ;координата у всегда равна 240
mov ax, 0c04h ;функция и прерывание для вывода точки на экран
int 10h ;
inc di ;увеличиваем шаг
mov ax,x ;значение x помещаем в регистр ax
add ax,x ;увеличиваем половинку диагонали в 2 раза
cmp di,ax ;сравниваем шаг с длинной диагонали
jne label5 ;если не равно, то переход по метке
mov di,0
label6:
mov cx,320
mov dx,240
sub dx,y
add dx,di
mov ax, 0c04h
int 10h
inc di
mov ax,y
add ax,y
cmp di,ax
jne label6
mov ah, 08h ;ожидание нажатия клавиши
int 21h ;
mov ax, 0003h ;переход в текстовый режим
int 10h ;
mov ah, 4ch ;запершение программы
int 21h ;
END
___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
Последний раз редактировалось Serge_Bliznykov; 11.01.2012 в 08:55.
Причина: не всё дописано
|