Формирование одномерного массива слов по формуле - Assembler
Формулировка задачи:
Вот код программы, нужно было сделать следующее:
Разработайте программу на языке ассемблера, формирующую одномерный массив слов A{ai} (i=1..20), где ai вычисляется по формуле: ai = (i*3 – i*2) х 4.
При вывода на экран выдает какие-то иероглифы. В чем проблема?
data segment mas dw 20 dup (?) ends stack segment dw 128 dup(0) ends code segment start: mov ax, data mov ds, ax mov es, ax xor bx, bx mov di, 1 ffff: mov ax, di mov cx, 3 mul cx mov dx, ax mov cx, 2 mov ax, di mul cx sub dx, ax mov ax, dx mov cx, 4 mul cx mov mas[di], ax inc di cmp di, 20 je rrrr jmp ffff rrrr: mov di, 1 mov ah, 02h print: mov dx, mas[di] int 21h inc di cmp di, 20 je eeend jmp print eeend: mov ax, 4c00h int 21h ends end start
Решение задачи: «Формирование одномерного массива слов по формуле»
textual
Листинг программы
data segment mas dw 20 dup (?) data ends stk segment stack dw 128 dup('?') stk ends code segment assume cs:code,ds:data,ss:stk start: mov ax,data mov ds,ax mov di,1 mov si,0 ffff: mov ax,di mov cl,3 mul cl mov dx,ax mov ax,di mov cl,2 mul cl sub dx,ax mov ax,dx mov cl,4 mul cl mov mas[si],ax inc di inc si inc si cmp di,21 je rrrr jmp ffff rrrr: mov si,0 print: mov ax,mas[si] mov dl,10 div dl mov dx,ax mov ah,02h or dl,30h int 21h xchg dh,dl or dl,30h int 21h mov dl,' ' int 21h inc si inc si cmp si,40 je eeend jmp print eeend: mov ax,4C00h int 21h code ends end start
Объяснение кода листинга программы
В этом коде на языке Assembler формируется одномерный массив слов по формуле. Список действий:
- Переменная
mas
инициализируется 20 одинаковыми значениями (?). - Переменная
di
устанавливается равной 1, аsi
равной 0. - Начинается цикл
ffff
, который выполняется до тех пор, покаdi
меньше или равно 21. В каждой итерации цикла выполняется:dx
присваивается произведениеdi
на 3.ax
присваивается произведениеdi
на 2.dx
вычитается изax
.mas[si]
присваивается значениеax
.di
увеличивается на 1,si
увеличивается на 1, а затем на 1 снова.
- Если
di
больше или равно 21, то выполняется переход к меткеrrrr
. - Начинается цикл
print
, который выполняется до тех пор, покаsi
меньше или равно 40. В каждой итерации цикла выполняется:ax
присваивается значениеmas[si]
.- Выводится десятичное значение
ax
. dl
устанавливается равным пробелу (' ').- Выводится символьное значение
dl
. si
увеличивается на 1, затем на 1 снова.
- Если
si
больше или равно 40, то выполняется переход к меткеeeend
. - Завершается выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д