Читайте также: |
|
Создание одномерного массива на Ассемблере.
.model tiny
.code
org 100h
start:
push cs
pop ds
;---------------------------------------
mov cx,99;Значение счетчика циклов для команды loop
mov si,0;Индекс первого элемента, si так же будет и значением
ARR_loop:
mov array[si],si;array[0]=0,array[1]=1...array[n]=n
inc si
loop ARR_loop;цикл
int 20h
;---------------------------------------
array dw 99 dup (?);Не инициализированный массив
end start
Создание двухмерного массива на Ассемблере.
.model tiny
.code
org 100h
start:
push cs
pop ds;в сегмент данных заносим сегмент кода
mov si,0;Начальная строка
mov bx,0;Начальный столбец
;---------------------------------------
array_loop:
mov array[bx][si],bx;Заполняем элементы массива текущим индексом столбца
inc si;На следующий элемент строки
cmp si,10;Конец строки?
jz NextLine;если да, переходим на метку NextLine
jmp array_loop;иначе, продолжаем заполнять строку
NextLine:
mov si,0;Обнуляем индекс элемента строки
inc bx;Переходим на следующий столбец
cmp bx,10;Последний столбец?
jz exit;если да,выход
jmp array_loop;иначе, продолжаем заполнять следующею строку
exit:
;---------------------------------------
int 20h;Выход из com программы
;---------------------------------------
array dw 10 dup (10 dup (?))
end start
Поиск числа в двухмерном массиве на Ассемблере.
.model tiny
.code
org 100h
start:
push cs
pop ds;в сегмент данных заносим сегмент кода
mov si,0
mov bx,0
;Поиск----------------------------------
array_find:
mov ax,array[bx][si]
call Proverka
inc si;На следующий элемент строки
cmp si,2;Конец строки?
jz NLine;если да, переходим на метку NextLine
jmp array_find;иначе, продолжаем заполнять строку
NLine:
mov si,0;Обнуляем индекс элемента строки
inc bx;Переходим на следующий столбец
cmp bx,3;Последний столбец?
jz exit;если да,выход
jmp array_find;иначе, продолжаем заполнять следующею строку
exit:
;---------------------------------------
int 20h;Выход из com программы
;---------------------------------------
array dw 2 dup (3 dup (0))
message db "Yes ",0dh,0ah,'$'
;---------------------------------------
Proverka proc
cmp ax,0
jz YES
ret
YES: mov ah,9
mov dx,offset message
int 21h
ret
Proverka endp
end start
Пример расчета факториала на Ассемблере.
Пример расчета факториала, на мой взгляд, очень полезная программа для понимания работы стека.
.model small
.486
.stack 100h
.code
start:
mov ax,@data
mov ds,ax
mov res,1
push 5
call factorial
;-----------------------------------------------------
mov ax,4c00h
int 21h
;-----------------------------------------------------
factorial proc
push bp
mov bp,sp
mov cx,[bp+4]
mov ax,cx
mul res
mov res,ax
dec cx
jcxz end_p
push cx
call factorial
end_p:
mov sp,bp
pop bp
ret
factorial endp
;-----------------------------------------------------
.data
res dw 0
end start
Прямая запись в видео память на ассемблере.
Рисование горизонтальной линии, с помощью прямой записи в видео память.
.model tiny
.code
org 100h
start:
mov al,13h
int 10h
mov ax,0A000h
mov es,ax
mov dx,320*100+160;320*y1+x1(начальная точка)
mov cx,13;Длина линии
call gline
mov ah,10h
int 16h
ret
;------------------------------------------------------------
gline proc
mov di,dx
mov al,111b;color
rep stosb;копируем al в ES:DI, dec DI
ret
gline endp
;------------------------------------------------------------
end start
Дата добавления: 2015-07-16; просмотров: 193 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Программа 4. Сумма всех элементов массива | | | Вывод ASCII кодов на ассемблере. |