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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2012, 08:22   #1
JustRita
Новичок
Джуниор
 
Регистрация: 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. Причина: не всё дописано
JustRita вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать описание к коду программы sergey92 Помощь студентам 1 06.06.2011 06:00
Assembler. 2 программы с циклами fuzo Помощь студентам 0 24.02.2011 17:15
Комментарии к коду программы на Delphi Asblue Помощь студентам 3 20.11.2010 17:13
C++. нужни коментарии к коду программы Myau Thai Помощь студентам 1 04.06.2009 19:32