ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Ввести с клавиатуры массив чисел. Найти суммы положительных и отрицательных чисел. Вывести результат.

.model small

.stack 256

.data

mas dw 8 dup(0)

zz db 0Dh, 0Ah,'-$'

.code

start:

mov ax,@data

mov ds,ax

mov cx,8

mas_in:

xor bx,bx

num_s_in:

cmp bx,6

je end_num_s_in

mov ah,01h

int 21h

cmp al,0Dh

je end_num_s_in

inc bx

xor ah,ah

push ax

jmp num_s_in

end_num_s_in:

mov bp,1

xor di,di

num_p:

cmp bx,1

je end_num_p

pop ax

sub al,'0'

mul bp

add di,ax

mov ax,bp

mov bp,10

mul bp

mov bp,ax

dec bx

jmp num_p

end_num_p:

pop ax

cmp al,'-'

jne ee

neg di

ee:

mov ax,cx

;sub ax,2

shl ax,1

mov si,offset mas

add si,ax

mov word ptr [si],di

loop mas_in

____SOBSTVENNO SLOGENIE____

mov di,offset mas

xor ax,ax ;summa bolhih 0

xor bx,bx ;summa menshih 0

mov cx,9

add_num:

cmp word ptr[di],0

jl add_less_zero

add ax,word ptr [di]

jmp e

add_less_zero:

add bx,word ptr [di]

e:

add di,2

loop add_num

___VYVOD_______

div_num_s:

mov cx,10

xor bp,bp

div_num:

cmp ax,0

je end_div_num

xor dx,dx

div cx

add dx,'0'

push dx

inc bp

jmp div_num

end_div_num:

vyvod:

cmp bp,0

je end_vyvod

pop ax

mov ah,02h

mov dl,al

int 21h

dec bp

jmp vyvod

end_vyvod:

cmp bx,0

je exit

neg bx

mov ah,9

mov dx,offset zz

int 21h

mov ax,bx

xor bx,bx

jmp div_num_s

exit:

mov ax,4C00h

int 21h end start

Дан массив строк. Найти строку с max длинной и вывести ее на экран.

.model small

.stack 100h

.data

str0 db "Hello",'$'

str1 db "Good day",'$'

str2 db "Hi!",'$'

str3 db "How do you do?",'$'

str4 db "I greet you",'$'

StrArray dw offset str0

dw offset str1

dw offset str2

dw offset str3

dw offset str4

StrCount dw 5

.code

program:

mov ax, @data

mov ds, ax

mov si, offset StrArray ; si - начало массива строк

mov cx, StrCount ; инициализация счетчика

xor ax, ax ; в ax - макс. длина строки

calc_length:

mov bx, [si] ; bx - смещение текущей строки

add si, 2 ; si сдвигается на следующую строку

push cx ; сохраняем счетчик

call str_len ; определяем длину строки

cmp ax, cx

ja end_loop ; если найденная длмна больше макс.

mov ax, cx ; сохраняем эту длину в ax

mov dx, bx ; сохраняем в dx смещение строки

end_loop:

pop cx ; восстанавливаем счетчик

loop calc_length

mov ah, 9 ; выводим макс. строку на экран

int 21h

mov ax, 4c00h

int 21h

; Находит длину строки

; bx - смещение строки

; Результат: cx - искомая длина

str_len proc near

push bx

push ax

xor cx, cx

mov al, '$'

mov ah, 0

len_lp:

cmp al, [bx]

je end_len

cmp ah, [bx]

je end_len

inc cx

inc bx

jmp len_lp

end_len:

pop ax

pop bx

ret

str_len endp

end program

Перевод числа из одной системы счисления в другую. Данные вводить с клавиатуры.

.modl small

.stack 256

.data

Mess1 db 'Enter number in 10c: $'

Mess2 db 0Dh, 0Ah,'Result in 16c: $'

.code

start:

mov ax,@data

mov ds,ax

mov ah,9

mov dx,offset Mess1

int 21h; Выводим первое сообщение

xor bx,bx

num_in:

; Вводим символы числа, пока не нажмется энтэр

mov ah,01h

int 21h

cmp al,0Dh

je end_num_in

sub al,'0' ; переводим в десятичный вид

xor ah,ah

push ax ; и ложим его в стек

inc bx

jmp num_in

end_num_in:

mov cx,1

num_preobr:

cmp bx,0

je end_num_preobr ; если цифры ;числа закончились, то переходим на ;end_num_preobr

pop ax

xor dx,dx ; умножаем на число в cx (1, 10, 100, 1000, …)

mul cx

; и добавляем к конечному числу

add di,ax

dec bx

; умножаем на 10, чтобы получить 10, 100, 1000, …

mov ax,10

mul cx

mov cx,ax

jmp num_preobr

end_num_preobr:

; Выводится сообщение 2

mov ah,9

mov dx,offset Mess2

int 21h

; начало коныертации в 16 систему

mov ax,di

mov bx,0

mov cx,16

num_convert:

; непосредственно перевод

cmp ax,0

je end_convert

xor dx,dx

; делим на систему счисления

div cx

; сравниваем остаток от деления с 9, если больше, добавляем ‘7’, иначе ‘0’

cmp dx,9

ja above_9

add dx,'0'

jmp next

above_9:

add dx,'7'

next:

push dx

inc bx

jmp num_convert

end_convert:

out_num:

; если цифры закончились, то переходим ;на end_out_num

cmp bx,0

je end_out_num

pop dx

mov ah,02h

int 21h

dec bx

jmp out_num

end_out_num:

mov ax,4C00h

int 21h

end start

Вычислить сумму столбцов матрицы с полным вводом/выводом (программа типа exe)

.model small

.stack 300h

.code

endl macro

push ax dx

mov ah, 02h

mov dl, 0Ah

int 21h

mov dl, 0Dh

int 21h

pop dx ax

endm

outint macro value

local outint_l1, outint_l2

push ax bx cx dx

mov ax, value

mov bx, 10

xor cx, cx

outint_l1:

xor dx, dx

div bx

push dx

inc cx

cmp ax, 0

jne outint_l1

mov ah, 02h

outint_l2:

pop dx

add dl, '0'

int 21h

loop outint_l2

pop dx cx bx ax

endm

proc readint

push cx si bx dx

mov buf_str, 8

mov ah, 0Ah

lea dx, buf_str

int 21h

xor cx, cx

mov si, 2

xor ax, ax

mov bx, 10

in_loop:

mul bx

mov dl, [buf_str+si]

sub dl, '0'

add ax, dx

inc si

inc cl

cmp cl, [buf_str+1]

jl in_loop

pop dx bx si cx

endl

ret

endp

start:

mov ax, @data

mov ds, ax

 

xor cx, cx

xor dx, dx

xor di, di

input_loop:

push dx

mov ah, 09h

lea dx, str_1

int 21h

outint cx

lea dx, str_2

int 21h

mov si, sp

mov dx, [ss:si]

outint dx

lea dx, str_3

int 21h

call readint

mov word ptr matrix[di], ax

add di, 2

pop dx

inc cx

cmp cx, N

jl input_loop

xor cx, cx

inc dx

cmp dx, N

jl input_loop

xor ax, ax

cont_summ:

mov si, ax

shl si, 1

xor dx, dx

cont_summ_2:

add dx, word ptr matrix[si]

add si, N*2

cmp si, N*N*2

jl cont_summ_2

outint dx

endl

 

inc ax

cmp ax, N

jl cont_summ

 

mov ax, 4C00h

int 21h

.data

N equ 3

matrix db N*N*2 dup(?)

buf_str db 10 dup(?)

str_1 db "Input matrix[$"

str_2 db "][$"

str_3 db "]:",10,13,"$"

sum1 dw 0

sum2 dw 0

end start

Перевод строки в число.

.model small

.stack 100h

.data

num dw ?

c10 db 10

.code

begin:

mov ax,@data

mov ds,ax

xor bx,bx

again:

mov ah,1

int 21h

cmp al, 0dh ; если энтер, то закончим ввод

je con

sub al,'0' ; вычитаем ‘0’ из символа для

xor ah,ah ;

mov si,ax

mov ax,bx ; помещаем конечный на данный момент результат в ax

mul c10 ; и умножаем его на 10

add ax,si ; добавляем к полученному значению введенную только что цифру

mov bx, ax ; формируем в bx конечное на данный момент значение

jmp again ; зацикливаем

con:

mov num,bx ; полученное число

mov ax, 4c00h

int 21h

end begin

В сегменте данных дана матрица. Отсортировать ее побочную дигональ

.model small

.stack 100h

.data

razmer equ 4

matrix dw 1,2,3,13

dw 5,6,10,8

dw 9,7,11,12

dw 4,14,15,16

.code

start:

mov ax,@data

mov ds,ax

mov cx,razmer

dec cx

mov bx,cx

shl bx,1 ; bx - смещение (длина строки -2)

loop1:

mov si,bx

push cx

loop2:

mov dx,matrix[si] ;

mov di,matrix[si][bx] ; перестановка

cmp dx,di ;

jl cont_loop2

mov matrix[si],di

mov matrix[si][bx],dx

cont_loop2:

add si,bx ;

loop loop2 ; смещение на следующую строку

pop cx ;

loop loop1

lea dx,matrix

mov ah,4ch

int 21h

end start

Вводится матрица чисел. Найти сумму элементов по каждой диагонали и вывести на экран.

.model small

.stack 300h

.code

endl macro

push ax dx

mov ah, 02h

mov dl, 0Ah

int 21h

mov dl, 0Dh

int 21h

pop dx ax

endm

outint macro value

local outint_l1, outint_l2

push ax bx cx dx

mov ax, value

mov bx, 10

xor cx, cx

outint_l1:

xor dx, dx

div bx

push dx

inc cx

cmp ax, 0

jne outint_l1

mov ah, 02h

outint_l2:

pop dx

add dl, '0'

int 21h

loop outint_l2

pop dx cx bx ax

endm

proc readint

push cx si bx dx

mov [buf_str], 8

mov ah, 0Ah

lea dx, buf_str

int 21h

xor cx, cx

mov si, 2

xor ax, ax

mov bx, 10

in_loop:

mul bx

mov dl, [buf_str+si]

sub dl, '0'

add ax, dx

inc si

inc cl

cmp cl, [buf_str+1]

jl in_loop

pop dx bx si cx

endl

ret

endp

start:

mov ax, @data

mov ds, ax

 

xor cx, cx

xor dx, dx

xor di, di

input_loop:

push dx

mov ah, 09h

lea dx, str_1

int 21h

outint cx

lea dx, str_2

int 21h

mov si, sp

mov dx, [ss:si]

outint dx

lea dx, str_3

int 21h

 

call readint

mov word ptr matrix[di], ax

add di, 2

pop dx

inc cx

cmp cx, N

jl input_loop

xor cx, cx

inc dx

cmp dx, N

jl input_loop

xor si, si

xor ax, ax

count_sum1:

add ax, word ptr matrix[si]

add si, N*2+2

cmp si, N*N*2

jl count_sum1

mov sum1, ax

mov si, N*2-2

xor ax, ax

count_sum2:

add ax, word ptr matrix[si]

add si, N*2-2

cmp si, N*(N-1)*2+2

jl count_sum2

mov sum2, ax

mov ah, 09h

lea dx, str_4

int 21h

outint sum1

lea dx, str_5

int 21h

outint sum2

lea dx, str_6

int 21h

mov ax, 4C00h

int 21h

.data

N equ 3

matrix db N*N*2 dup(?)

buf_str db 10 dup(?)

str_1 db "Input matrix[$"

str_2 db "][$"

str_3 db "]:",10,13,"$"

str_4 db "Sum1=$"

str_5 db 10,13,"Sum2=$"

str_6 db 10,13,"$"

sum1 dw 0

sum2 dw 0

end start

Работа с окнами в текстовом режиме.

Работа с окнами в текстовом режиме. (результат работы проги: синее окно,

;в нем - зеленое окно, в зеленом окне - текст :))

.MODEL small

.STACK 100h

.DATA

str_ db 'TEXT'

len equ $-str_

.CODE

main:

mov ax, @data

mov ds, ax

mov es, ax

mov ah, 06h ;очистка окна

mov al, 00h ;режим окна

mov bh, 17h ;видео-атрибут для пустых строк

mov cx, 0000h ;очистка экрана от (00;00) до (24;79)

mov dx, 1b4fh

int 10h

mov ax, 0600h ;в ah - 06h в al - 00h

mov bh, 20h

mov cx, 0a1ch

mov dx, 0c31h

int 10h

mov ah, 13h ;вывод на экран в позиции курсора

mov al, 0 ;не менять положение курсора

mov bh, 0 ;номер страницы

mov bl, 07h ;цвет выводимого текста

mov cx, len

mov dx, 0b25h ;координаты на экране (dh - y, dl - x)

lea bp, str_ ;адрес выводимой строки

int 10h

mov ah, 4ch

int 21h

end main

Сложение и вычитание длинных чисел.

.model small

.stack 100h

.data

num1 dw 1234h, 5678h

num2 dw 8765h, 4321h

res1 dw 0,0

res2 dw 0,0

.code

start:

mov ax, @data

mov ds, ax

; сложение

mov ax, num1[0]

add ax, num2[0]

mov res1[0], ax

mov ax, num1[2]

adc ax, num2[2]

mov res1[2], ax

; вычитание

mov ax, num1[0]

sub ax, num2[0]

mov res2[0], ax

mov ax, num1[2]

sbb ax, num2[2]

mov res2[2], ax

mov ax, 4C00h

int 21h

end start

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти