Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
18.10.2022
Размер:
4.6 Кб
Скачать
SECTION .data
hello_string db "Введите число A (A < B): "
hello_string_len equ $-hello_string
space db "", 10
spaceLen equ $-space
num_B_quest db "Введите число В (B > A): "
num_B_quest_len equ $-num_B_quest
SECTION .bss
number_A resb 10
number_A_len resd 1
A resd 1
number_A_int_len resd 1

number_B resb 10
number_B_len resd 1
B resd 1
number_B_int_len resd 1

new resb 4 ; выделение памяти
new_len resb 1
str_num resb 4
str_num_len resb 1
SECTION .text
GLOBAL _start
_start:

.m:
mov eax, 4
mov ebx, 1
mov ecx, hello_string
mov edx, hello_string_len
int 80h

mov eax, 3
mov ebx, 0
mov ecx, number_A
mov edx, 10
int 80h

dec eax ;увеличиваем eax на 1
mov [number_A_len], eax ; сохраняем количество введенных пользователем символов

mov eax, 4
mov ebx, 1
mov ecx, num_B_quest
mov edx, num_B_quest_len
int 80h

mov eax, 3
mov ebx, 0
mov ecx, number_B
mov edx, 10
int 80h

dec eax
mov [number_B_len], eax

.get_nam_a:
mov esi, number_A ; помещаем в esi адрес
xor ebx, ebx ; обнуляем
xor ecx, ecx
mov edx, [number_A_len] ; помещаем в edx длинну строки по адресу

.next_char_a: ; преобразование строки в число
movzx eax, byte [esi] ; берем первый символ
sub eax, '0'
imul ebx, 10
add ebx, eax
inc ecx
inc esi
cmp ecx, edx
jb .next_char_a
mov [A], ebx ; поместили результат по этому адресу


.get_nam_b:
mov esi, number_B
xor ebx, ebx
xor ecx, ecx
mov edx, [number_B_len]

.next_char_b: ; преобразование строки в число
movzx eax, byte [esi]
sub eax, '0'
imul ebx, 10
add ebx, eax
inc ecx
inc esi
cmp ecx, edx
jb .next_char_b
mov [B], ebx

.cmp:
mov eax, [A] ; помещаем число а
mov ebx, [B] ; помещаем число б
cmp eax, ebx ; сравниваем
jg .m ; если больше/не меньше и не равно то переходи к .m
mov [new], eax ; записываем в eax содерживое new

.circle:
mov eax, [new] ; помещаем число
mov ebx, [B]
cmp eax, ebx ; сравниваем
je .end ;если равны или ноль то переходим к .end
inc eax ; увеличиваем на 1
mov [new], eax ; записываем результат

.toStr:
mov eax, [new] ; помещаем полученное (преобразованное) число в память по адресу new
mov ebx, 10 ; устанавливем делитель
mov edi, str_num ; помещаем в EDI адрес строки str_num
add edi, 10 ; прибавляем 10
mov [edi], byte 10 ;помещаем текущий символ строки в edi
dec edi ; уменьшаем на 1 адрес, таким образом выполняем переход к предыдущему символу в строке
xor ecx, ecx

.next_dig:
xor edx, edx
inc ecx ;увеличиваем на 1 счетчик цикла
div ebx ;делим
add edx, 48 ; выполняем преобразование цифры в символ, путем добавления к цифре ASCII-кода нуля
mov [edi], dl ; сохраняем полученный ASCII-код символа в памяти
dec edi ; уменьшаем на 1 адрес, таким образом выполняем переход к предыдущему символу в строке
cmp eax, 0
jne .next_dig ;если не равно нулю, то переходим к метке .next_digit

.print: ; вывод
mov eax, 4
mov ebx, 1
mov ecx, str_num
mov edx, 10
int 80h
; далее переход на след строку (Пробел)
mov eax, 4
mov ebx, 1
mov ecx, space
mov edx, spaceLen
int 80h
jmp .circle ; пока не закончится цикл повторять

.end:
mov eax, 1
mov ebx, 0
int 80h
Соседние файлы в папке новая папка