34, 45, 56, 67, 78, 89
arraySize DW 8
choice DB ?
newline DB 13, 10, '$'
.CODE
start:
MOV AX, @DATA
MOV DS, AX
MOV CX, arraySize
mov SI, 0
menu:
mov ah, 09h
mov dx, offset menuMsg
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov choice, al
cmp al, '1'
je forward_line
cmp al, '2'
je reverse_line
cmp al, '3'
je forward_column
cmp al, '4'
je reverse_column
cmp al, '5'
je clear_screen
cmp al, '6'
je exit_program
jmp menu
forward_line:
call print_line
jmp menu
reverse_line:
call print_reverse_line
jmp menu
forward_column:
call print_column
jmp menu
reverse_column:
call print_reverse_column
jmp menu
clear_screen:
mov ah, 06h
mov al, 0
mov bh, 07h
mov cx, 0
mov dx, 184Fh
int 10h
jmp menu
exit_program:
MOV AH, 4Ch
INT 21h
print_line:
mov SI, 0
print_loop:
mov ax, array[SI]
call print_num
add SI, 2
loop print_loop
ret
print_reverse_line:
MOV SI, OFFSET array
ADD SI, (arraySize - 1) * 2 ; ?????????? ????????? ?? ????????? ??????? ???????
print_reverse_loop:
MOV AX, [SI]
CALL print_num
SUB SI, 2
CMP SI, OFFSET array ; ?????????, ???????? ?? ?????? ???????
JAE print_reverse_loop
RET
print_column:
mov CX, arraySize
mov SI, 0
print_column_loop:
mov ax, array[SI]
call print_num
call print_newline
add SI, 2
loop print_column_loop
ret
print_reverse_column:
MOV SI, OFFSET array
ADD SI, (arraySize - 1) * 2 ; ?????????? ????????? ?? ????????? ??????? ???????
print_reverse_column_loop:
MOV AX, [SI]
CALL print_num
CALL print_newline
SUB SI, 2
LOOP print_reverse_column_loop
RET
print_num:
MOV CX, 10
DIV CX ; Делим AX на 10
ADD DL, '0' ; Преобразуем полученное число в символ
DEC SI ; Корректируем указатель на 1 назад для записи символа в нужное место
MOV [SI], DL ; Сохраняем символ в массив или выводим на экран
MOV DL, AH ; Помещаем остаток от деления в DL для следующего деления
ADD DL, '0' ; Преобразуем остаток от деления в символ
DEC SI ; Корректируем указатель на 1 назад
MOV [SI], DL ; Сохраняем символ остатка
RET
print_newline:
mov dx, offset newline
mov ah, 09h
int 21h
ret
menuMsg DB 13, 10, "Choose an option:", 13, 10
DB "1. Print in forward line", 13, 10
DB "2. Print in reverse line", 13, 10
DB "3. Print in forward column", 13, 10
DB "4. Print in reverse column", 13, 10
DB "5. Clear Screen", 13, 10
DB "6. Exit Program", 13, 10, '$'
END start
Это чат гпт?
Обсуждают сегодня