[emu8086] Создать матрицу по заданному образцу (переделать образец для emu8086) - Assembler
Формулировка задачи:
Нужно данный код переделать для ему8086. Задать матрицу по заданному образцу
@stack segment para stack db 1024 dup(?) @stack ends @data segment N dw 7 CrLf db 0Dh, 0Ah, '$' @data ends @code segment assume cs:@code, ds:@data, ss:@stack main proc ;инициализация сегментного регистра данных mov ax, @data mov ds, ax mov si, 0 mov cx, [N] @@ForI: mov di, 1 push cx mov cx, [N] @@ForJ: mov bx, [N] inc bx mov ax, si add ax, di cmp ax, bx mov bx, 0 sbb bx, 0 and ax, bx call Show_AX inc di loop @@ForJ mov ah, 09h lea dx, [CrLf] int 21h pop cx inc si loop @@ForI ;завершение программы mov ax, 4C00h int 21h main endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push si push di mov cx, 10 ;основание системы счисления xor di, di ; di - кол. цифр в числе xor si, si ; si - признак отрицательного числа ; если число в ax отрицательное, то ;1) напечатать (запомнить в стеке) символ '-' ;2) сделать ax положительным or ax, ax jns @@Conv mov si, 1 neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ;если число отрицательное - помещаем символ "-" в строку or si, si jz @@Positive mov dx, '-' push dx inc di @@Positive: ; выводим из стека на экран ; - сначала пробелы для выравнивания по правому краю mov cx, 8 sub cx, di mov ah, 02h mov dl, ' ' @@LeftPad: int 21h loop @@LeftPad ;сохранённые символы цифр @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop si pop dx pop cx pop bx pop ax ret Show_AX endp @code ends end main
Решение задачи: «[emu8086] Создать матрицу по заданному образцу (переделать образец для emu8086)»
textual
Листинг программы
model small .data;????Вы ничего из этой модели памяти не пользуете .stack .code n equ 9 begin: mov cx,n xor si,si @@01: push cx push si mov dx,n sub dx,cx @@02: inc si mov ax,si or al,'0' int 29h loop @@02 mov cx,dx jcxz @@04 @@03: mov al,'0' int 29h loop @@03 @@04: mov al,10 int 29h mov al,13 int 29h pop si inc si pop cx loop @@01 mov ax,4C00h int 21h end begin
Объяснение кода листинга программы
- model small - устанавливает модель памяти, в данном случае, маленькую.
- .data - сегмент данных.
- .stack - сегмент стека.
- .code - сегмент кода.
- n equ 9 - переменная
n
равна 9. - begin: mov cx,n - переменной
cx
присваивается значение переменнойn
. - xor si,si - переменная
si
устанавливается в 0. - @@01: push cx - значение
cx
сохраняется на стеке. - push si - значение
si
сохраняется на стеке. - mov dx,n - переменной
dx
присваивается значение переменнойn
. - sub dx,cx - из
dx
вычитаетсяcx
. - inc si - значение
si
увеличивается на 1. - mov ax,si - переменной
ax
присваивается значение переменнойsi
. - or al,'0' - в
al
устанавливается значение 0. - int 29h - выполняется звуковой код (вероятно, для воспроизведения звука).
- loop @@02 - выполняется цикл, пока
si
не станет равным 0. - mov cx,dx - переменной
cx
присваивается значение переменнойdx
. - jcxz @@04 - если
cx
не равно 0, то выполняется код с меткой @@04. - mov al,'0' - в
al
устанавливается значение 0. - int 29h - выполняется звуковой код (вероятно, для воспроизведения звука).
- loop @@03 - выполняется цикл, пока
si
не станет равным 0. - mov al,10 - в
al
устанавливается значение 10. - int 29h - выполняется звуковой код (вероятно, для воспроизведения звука).
- mov al,13 - в
al
устанавливается значение 13. - int 29h - выполняется звуковой код (вероятно, для воспроизведения звука).
- pop si - значение
si
берется из стека. - inc si - значение
si
увеличивается на 1. - pop cx - значение
cx
берется из стека. - loop @@01 - выполняется цикл, пока
si
не станет равным 0. - mov ax,4C00h - переменной
ax
присваивается значение 4C00h. - int 21h - выполняется функция, соответствующая прерыванию 21h (вероятно, для завершения программы).
- end begin - конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д