Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
308 / 61 / 12
Регистрация: 21.12.2011
Сообщений: 291
1

Нужно нарисовать флаг, и сделать проверку на то, чтобы при вводе числа 0 - программа закрывалась

12.10.2012, 13:38. Просмотров 1441. Ответов 6
Метки нет (Все метки)


Прошу помощи =)
Нужно нарисовать флаг, и сделать проверку на то, чтобы при вводе числа 0 - программа закрывалась, ну или выводилось сообщение и после нажатия программа закрывалась, или заново запускалась функция..
Программа нарисовки флага есть - нужно только сделать проверку.. Проверку я как понимаю, нужно делать после метки next:...
Пробовал делать - не совсем корректно получается
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
codesg SEGMENT
assume cs:codesg, ds:codesg
org 100h
begin:
    jmp short   main
    a       dw  320
    a2  dw  ?
 
main    proc    near
    mov dl,'a'  ;вывод
    mov ah,2    
    int 21h
    mov dl,'='  ;вывод
    mov ah,2    ;=
    int 21h
    ;-----ввод стороны а----------
    mov bx,0
    mov si,10
    mov cx,5
next:
    mov ah,1    ;ввод символа
    int 21h ;в AL
    cmp al,' '  
    je  back
    and ax,15   ;оставить цифру
    mov di,ax
    mov ax,bx
    mul si
    add ax,di   ;AX = 10*BX + цифра
    mov bx,ax
    loop    next
back:
    mov a,bx
    sar bx,1    ;BX = BX/2
    mov a2,bx
    ;-----сохранение и установка видеорежима
    mov ah,0Fh  ;сохранение
    int 10h
    push    ax
    mov ax, 0013h   ;установка
    int 10h
    mov dx,0    ;y
    mov cx,0    ;x
a30:
    mov al,15   ;x
    cmp dx,a2   ;y < a2?
    jb  pix ;если белый цвет
    mov al,4    ;красный
pix:
    mov ah,0Ch  ;вывод точки
    mov bh,0    ;страница
    int 10h ;CX = x, DX = y
    inc cx
    cmp cx,a
    jne a30
    mov cx,0
    inc dx
    cmp dx,200  ;DX >= 200?
    jae exit    ;да
    cmp dx,a    ;DX < a?
    jb  a30 ;да
exit:
    mov ax,0    ;ожидание
    int 16h
    pop ax  ;восстановление
    mov ah,0    ;видеорежима
    int 10h
    ret ;выход из программы
main endp
 
codesg ENDS
    end begin
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2012, 13:38
Ответы с готовыми решениями:

Как сделать, чтобы при вводе 0 программа закрывалась?
#include &lt;stdio.h&gt; int main() { int num=1,i,j,height,width; char h,w; while (num!=0){...

Что нужно сделать чтобы программа сразу не закрывалась
Что нужно сделать чтобы программа сразу не закрывалась, #include &lt;vcl.h&gt; #include &lt;iostream&gt;...

Нужно чтобы при вводе числа 0 программа завершала работу
Привет всем.Это моя первая тема:) У меня такая проблема,задание я сделал но вот не до конца.Нужно...

Как сделать чтобы программа не вылетала при вводе не числа?
Помогите пожалуйста, я начинающий программист и мне нужно сделать так чтобы при вводе в строку...

6
538 / 398 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
12.10.2012, 14:07 2
Что такое "ввод стороны а"? Какие символы и для чего вводятся? Флаг на весь экран? Обязательно через int 10h?
0
Клюг
7668 / 3183 / 382
Регистрация: 03.05.2011
Сообщений: 8,381
12.10.2012, 15:32 3
Nkey, тынц.

Dmitrinik, дык, why not?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    org 100h
    mov ax, 13h
    int 10h
    mov cx,320
    push    cx
    push    cx
    mov ax,0EDBh
    mov bx,0Fh
l1: int 10h
    loop    l1
    pop cx
    mov bx,01
l2: int 10h
    loop    l2
    pop cx
    mov bx,04
l3: int 10h
    loop    l3
    mov ah,0
    int 16h
    mov ax, 3
    int 10h
    int 20h
1
308 / 61 / 12
Регистрация: 21.12.2011
Сообщений: 291
13.10.2012, 14:41  [ТС] 4
Цитата Сообщение от Dmitrinik Посмотреть сообщение
Что такое "ввод стороны а"? Какие символы и для чего вводятся? Флаг на весь экран? Обязательно через int 10h?
Ввод стороны a - ввод размера в пикселях стороны квадрата, который выводится как флаг. Т.е. например размер стороны = 50, то он делится пополам по вертикали - верхняя половина - белый; нижняя - красный..

Символы должны вводится только положительные числа, без 0..

Флаг не на весь экран, а размером заданным стороной a... Появляющийся в окне.

Когда вводишь число 0 - то окрашивается всё окно в белый(или красный - не помню) цвет..
Также просходит с буквами
0
538 / 398 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
13.10.2012, 16:08 5
Могу предложить такой вариант. Здесь вводится не более, чем 3-значное число. Проверяется на 0 и на превышение 200
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
.286
codesg SEGMENT
assume cs:codesg, ds:codesg
begin:
  push cs
  pop  ds
init:
  mov  ax,0003h
  int  10h
  mov  dl,'b'
  mov  ah,2  
  int  21h
  mov  dl,'='
  mov  ah,2  
  int  21h
  xor  bx,bx
  mov  ah,1  
  mov  dx,3 ; не более трех цифр
m0:
  int  21h ; AL
  cmp  al,0Dh ;если нажали Enter
  jz   m1
  shl  bx,4
  and  al,0Fh
  or   bl,al ;сохраняем как упакованное
  dec  dx
  jnz  m0
m1:
  cmp  bx,0
  ja   m2
  mov  di,100  ;если введенная ширина = 0, делаем ее равной 100
  jmp  m4
m2:
  mov  cx,bx
  mov  di,cx
  and  di,000Fh
  mov  bx,10
;преобразуем в обычное число
m3:
  shr  cx,4
  jz   m4
  mov  ax,cx
  and  ax,000Fh
  mul  bx
  add  di,ax
  mov  ax,bx
  mul  bx
  mov  bx,ax
  jmp  m3
m4:
  cmp  di,200
  jb   m5
  mov  di,200  ;если введенная ширина >200, делаем ее равной 200
;начинаем рисовать
m5:
  mov  si,di
  shr  si,1
  mov  ax,0013h ;граф.режим
  int  10h
  mov  ah,0Ch
  xor  dx,dx
  mov  al,white ;белый
Mw1:
  xor  cx,cx
Mw2:
  int  10h
  inc  cx
  cmp  cx,di
  jb   Mw2
  inc  dx
  cmp  dx,si
  jb   Mw1
 
  shl  si,1
  mov  al,red ;красный
Mr1:
  xor  cx,cx
Mr2:
  int  10h
  inc  cx
  cmp  cx,di
  jb   Mr2
  inc  dx
  cmp  dx,si
  jb   Mr1
 
  mov  ax,0
  int  16h
  mov  ax,3
  int  10h
  mov  ax,4C00h
  int  21h
;main endp
    white db 15
    red   db  4
 
codesg ENDS
    end begin
1
308 / 61 / 12
Регистрация: 21.12.2011
Сообщений: 291
13.10.2012, 16:27  [ТС] 6
Цитата Сообщение от Dmitrinik Посмотреть сообщение
Могу предложить такой вариант. Здесь вводится не более, чем 3-значное число. Проверяется на 0 и на превышение 200
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
.286
codesg SEGMENT
assume cs:codesg, ds:codesg
begin:
  push cs
  pop  ds
init:
  mov  ax,0003h
  int  10h
  mov  dl,'b'
  mov  ah,2  
  int  21h
  mov  dl,'='
  mov  ah,2  
  int  21h
  xor  bx,bx
  mov  ah,1  
  mov  dx,3 ; не более трех цифр
m0:
  int  21h ; AL
  cmp  al,0Dh ;если нажали Enter
  jz   m1
  shl  bx,4
  and  al,0Fh
  or   bl,al ;сохраняем как упакованное
  dec  dx
  jnz  m0
m1:
  cmp  bx,0
  ja   m2
  mov  di,100  ;если введенная ширина = 0, делаем ее равной 100
  jmp  m4
m2:
  mov  cx,bx
  mov  di,cx
  and  di,000Fh
  mov  bx,10
;преобразуем в обычное число
m3:
  shr  cx,4
  jz   m4
  mov  ax,cx
  and  ax,000Fh
  mul  bx
  add  di,ax
  mov  ax,bx
  mul  bx
  mov  bx,ax
  jmp  m3
m4:
  cmp  di,200
  jb   m5
  mov  di,200  ;если введенная ширина >200, делаем ее равной 200
;начинаем рисовать
m5:
  mov  si,di
  shr  si,1
  mov  ax,0013h ;граф.режим
  int  10h
  mov  ah,0Ch
  xor  dx,dx
  mov  al,white ;белый
Mw1:
  xor  cx,cx
Mw2:
  int  10h
  inc  cx
  cmp  cx,di
  jb   Mw2
  inc  dx
  cmp  dx,si
  jb   Mw1
 
  shl  si,1
  mov  al,red ;красный
Mr1:
  xor  cx,cx
Mr2:
  int  10h
  inc  cx
  cmp  cx,di
  jb   Mr2
  inc  dx
  cmp  dx,si
  jb   Mr1
 
  mov  ax,0
  int  16h
  mov  ax,3
  int  10h
  mov  ax,4C00h
  int  21h
;main endp
    white db 15
    red   db  4
 
codesg ENDS
    end begin
хм.. .286 - что обозначает?) недавно начал работу с ассемблером..
в твоем коде - есть проверка на то, что если вводишь, например, "fasf" - выдавалась ошибка или т.п.?
0
390 / 178 / 2
Регистрация: 14.03.2012
Сообщений: 443
13.10.2012, 16:35 7
Цитата Сообщение от Nkey Посмотреть сообщение
.286 - что обозначает?
Это директива указывающая ассемблеpу использовать набоp инструкций для пpоцессоpа 80286.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2012, 16:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Нужно сделать так чтобы при неправильном вводе программа не прекращала работу, а предлагала заново ввести значение N
Вот собственно сам код #include&lt;ctime&gt; #include&lt;iostream&gt; using namespace std; int N,...

Как сделать так, чтобы программа не закрывалась при нажатии ALT+F4
У меня Visual Basic 2010 как сделать в нем так, чтобы созданная программа не закрывалась при...

Сделать, чтобы в меню при выборе выхода, запущенная программа полностью закрывалась
Доброй Ночи!) Подскажите пожалуйста, как сделать чтобы в меню при выборе выхода, запущенная...

Как сделать чтобы при нажатии на красный крестик программа не закрывалась а открывала нужную мне форму?
Как сделать чтобы при нажатии на красный крестик программа не закрывалась а открывала нужную мне...

Нужно, чтобы программа сама закрывалась
Здравствуйте! Нужно, чтобы программа сама закрывалась после ввода определенного текста ( пусть...

как сделать чтобы программа не закрывалась
Работаю в вижуале2010 на с++ Подскажите пожалуйста как сделать чтобы программа не закрывалась ни...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.