Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Изменяющееся слово при заданном кол-ве, FASM


Автор: neomax38 28.4.2013, 09:57
Задание в коде) 
Проблема с первым заданием...
1-диск
2-4-диска
5-20-дисков
21 и так далее уже повторяется. Не знаю как сделать Помогите=) 

Код

include 'minilib.inc'

.data
minilib_data

select_task db 'Выберите задание:', 0xA, \
  '1. Для целого 1<=K<=99 напечатать фразу: "У меня есть К дисков." (с возможными ', 0xA, \
  'изменениями последнего слова', 0xA, \
  '2. В векторе А[10] определить количество элементов, значения которых кратны', 0xA, \
  'заданной положительной величине С.', 0xA, \
  'Ваш выбор [1/2]: ', 0

bad_value db '[!!] Неверное значение.', 0xA, 0
input_k db 'Введите значение K: ', 0
input_c db 'Введите значение C: ', 0
input_element db 'Введите элемент ', 0

result db 'У меня есть ' , 0 
result2 db ' диск' , 0
result3 db ' диска' , 0
result4 db ' дисков' , 0
 
result_p db 'Кол-во элементов кратных C: ', 0
k dd ?
c dd ?
m rd 10
result1 dd ?
.code
startup
main:
select_task_loop:
print_string select_task
scan_uint
    cmp   eax, 1
    je    task1
    cmp   eax, 2
    je    task2
print_string bad_value
    jmp   select_task_loop

task1:
print_string input_k
scan_int
    mov   [k], eax
    cmp   eax, 1
    jle   output1
    cmp   eax, 2
    cmp   eax, 4
    jle   output2
    cmp   eax, 5
    cmp   eax, 99
    jle   output3
    
    jle   output1
    print_string bad_value
    jmp   select_task_loop
output1:
    mov   [result1], eax
print_string result
print_int [result1]
print_string result2
print_nl
    jmp   finish
    
output2:
    mov   [result1], eax
print_string result
print_int [result1]
print_string result3
print_nl
    jmp   finish
    
output3:
    mov   [result1], eax
print_string result
print_int [result1]
print_string result4
print_nl
    jmp   finish
    

task2:
    xor   ebx, ebx
    xor   edi, edi
    ;Ввод C    
    print_string input_c
    scan_uint 
    mov [c], eax
    
input_loop:
print_string input_element
print_int ebx
print_char ' '
scan_int
    
    mov   [m+ebx*4], eax
    inc   ebx
    cmp   ebx, 10
    jl    input_loop

    xor   esi, esi
    mov   ecx, 9
    ;Ввод элементов массива
scan_loop:
    xor   edx, edx
    mov   eax, [m+ecx*4]
    cdq 
    idiv [c]
    test edx, edx
;    cmp edx, 0
    je    ok
    jmp   scan_loop_end

ok:
;счетчик элементов, удовлетворющих условию
    inc   edi
scan_loop_end:
    dec   ecx
    jge   scan_loop
print_string result_p
print_int edi
print_nl
finish:
exit


.end start

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)