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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2013, 15:26   #1
neomax38
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 72
Радость Вывод значения в текст и немного арифметики FASM

Здравствуйте. Задание написано в коде
Проблема такова:

1) Не знаю как вывести внутри текста какое то значение и как лучше изменять Дисков относительно их количества. Сделать для от 1 , 2-4 , 5-99 сделать отдельные фразы и вычисления с переходами?
2) Не могу осилить сам

Код:
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  
result_p db 'Кол-во элементов кратных: ', 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 
	cmp   eax, 99
	jle   output1
	print_string bad_value
	jmp   select_task_loop
output1:
    mov   [result1], eax
print_string result
print_int [result1]
print_nl
    jmp   finish
task2:
    xor   ebx, ebx
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
    xor   edi, edi
    mov   ecx, 9
;	mov   [c], eax
;print_string input_c
scan_loop:
    mov   eax, [m+ecx*4]
    test  eax, eax
    jl    less
    je    scan_loop_end
    add   esi, eax
    jmp   scan_loop_end
    
scan_loop_end:
    dec   ecx
    jge   scan_loop
    mov   [result1], esi
print_string result_p
print_int [result1]
print_nl
finish:
exit
.end start
neomax38 вне форума Ответить с цитированием
Старый 12.04.2013, 07:11   #2
neomax38
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 72
По умолчанию

Первую проблемку уже решил
Код:
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 'Кол-во элементов кратных: ', 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
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
    xor   edi, edi
    mov   ecx, 9

;	mov   [c], eax
;print_string input_c

scan_loop:
    mov   eax, [m+ecx*4]
    test  eax, eax
    jl    less
    je    scan_loop_end
    add   esi, eax
    jmp   scan_loop_end
less:
    add   edi, eax
scan_loop_end:
    dec   ecx
    jge   scan_loop

    mov   [result1], esi
    
print_string result_p
print_int [result1]
print_nl


finish:
exit

.end start
neomax38 вне форума Ответить с цитированием
Старый 12.04.2013, 07:34   #3
neomax38
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 72
По умолчанию

Исправил все недочеты
Код:
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
neomax38 вне форума Ответить с цитированием
Старый 01.05.2013, 10:50   #4
neomax38
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 72
По умолчанию

Ошибочка вышла со первым заданием( помогите
neomax38 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить текст возвращаемого значения вместо кода sectors70 Win Api 5 16.09.2012 00:23
Поиск значения (текст) и сложение ячейки справа Cheezo Microsoft Office Excel 1 01.07.2012 22:37
Fasm вывод ответа chronoknight Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 06.12.2011 14:28
Чем отличаеться fasm от fasm editor&? TotKtoNado Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 07.11.2011 17:00
Вывод значения time_t и значения uid_t и gid_t papos Помощь студентам 0 23.02.2011 21:49