Примери за програмиране на асемблер - Blagin Константин

Един прост пример за обработка на съобщение от страна на мишката.
За да се справят с послания на мишката в DOS`e ние трябва да се прекъсне 33з.

Вход: брадва = 0000h
Изход: брадва = 0000h, ако една мишка или мишка шофьор не е инсталиран.






брадва = 0ffffh, шофьор и мишка комплект.
Вх = броят на бутоните:
0002 или 0ffffh - две
0003 - три
0000 - друг номер

вътр 33з
Вход: брадва = 0001h

вътр 33з
Вход: брадва = 0002h


Задайте манипулатор събитие:

Водачът е регистрирана като отдалечения вход процедура ос - съдържа състояние на повикване, BX - състояние на бутони, CX и DX - х и у координати на курсора, Si и ди - брояч последния ход хоризонтално и вертикално, DS - мишка сегмент данни водача.

Com ще направи програмата използване TASM, съставител и свързващи опции са:


бин \ TASM mouse.asm
бен \ tlink / т / х mouse.obj

/ T - за да създадете файл от тип .com

/ X - за да не се създаде карта файл (карта)

Масивите в събрание

Създаването на един едномерен масив в монтажа.

.модел малка
.код
орг 100h
започнете:
натиснете CS
поп DS
; ---------------------------------------
Mov CX 99; контур брояч стойност линия команда
Mov си, 0, първият индекс елемент, SI е същата стойност и
ARR_loop:
Mov масив [си], SI; масив [0] = 0, масив [1] = 1. масив [п] = N
вкл си
контур ARR_loop; цикъл
Int 20h
; ---------------------------------------
масив DW 99 DUP (?); не инициализира масив
край старт

Създаване на двумерен масив в монтажа.







.модел малка
.код
орг 100h
започнете:
натиснете CS
поп ДС; сегмент данни в код сегмент занасяне на
Mov си, 0; стартовата линия
Mov BX, 0; първоначалната колона
; ---------------------------------------
array_loop:
Mov масив [BX] [си], BX; запълни елементи на индекса на масива колона
Inc SI; следващия ред елемент
СМР си, 10; Край на линия?
JZ NextLine; ако да, отидете на етикета NextLine
JMP array_loop, в противен случай да продължи да попълните онлайн
NextLine:
Mov си, 0; Null индекс елемент ред
вкл BX; Преминаване към следващата колона
СМР ВХ, 10; последната колона?
JZ изход; ако да, добив
JMP array_loop, в противен случай да продължи да попълните следващия ред
изход:
; ---------------------------------------
Int 20h; Out програма COM
; ---------------------------------------
масив DW 10 DUP (10 DUP (?))
край старт

Търсене числа в двумерен масив в събрание.

.модел малка
.код
орг 100h
започнете:
натиснете CS
поп ДС; сегмент данни в код сегмент занасяне на
Mov си, 0
Mov BX, 0
; Търсене ----------------------------------
array_find:
Mov брадва, масив [BX] [си]
обадете proverka
Inc SI; следващия ред елемент
СМР си, 2; Край на линия?
JZ NLine; ако да, отидете на етикета NextLine
JMP array_find, в противен случай да продължи да попълните онлайн
nLine:
Mov си, 0; Null индекс елемент ред
вкл BX; Преминаване към следващата колона
СМР BX, 3, последната колона?
JZ изход; ако да, добив
JMP array_find, в противен случай да продължи да попълните следващия ред
изход:
; ---------------------------------------
Int 20h; Out програма COM
; ---------------------------------------
масив ст 2 DUP (3 DUP (0))
съобщение db "Да", 0DH, 0Ah, '$'
; ---------------------------------------
proverka Proc
CMP брадва, 0
JZ ДА
кисна
ДА: Mov ах, 9
Mov DX, офсетов съобщение
вътр 21ч
кисна
proverka endp
край старт

Mov Al, 13Н
Int 10h
Mov брадва, 0A000h
MOV ове, брадва
Mov DX, 320 * 100 + 160; 320 * y1 + x1 (начална точка)
Mov CX, 13; Line Length
повикване gline
Mov ах, 10h
Int 16h

Изходна ASCII код на асемблер.

.модел малка
.код
орг 100h
започнете:

навигация в публикациите