Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Шпаргалка по "Программированию"

Автор:   •  Октябрь 22, 2019  •  Шпаргалка  •  1,561 Слов (7 Страниц)  •  393 Просмотры

Страница 1 из 7

1. Инициализация exe-программы

CODESG    SEGMENT PARA 'CODE'

BEGIN     PROC FAR

ASSUME CS:CODESG,DS:DATASG,SS:STACKG

PUSH DS       ;Записать DS в стек

SUB       AX,AX       ;Установить ноль в AX

PUSH      AX       ;Записать ноль в стек

MOV       AX,DATASG      ;Занести адрес

MOV DS,AX     ; DATASG в DS

RET                    ;Возврат в DOS

BEGIN ENDP

CODESG ENDS

END BEGIN

2. Инициализация сегмента «data»

Если СОМ-программа, то стэк, данные и код в одном сегменте. Если ЕХЕ-программа то используют регистры сегментов: CS (регистр сегмента кода), DS (регистр сегмента данных), SS (регистр сегмента стека), ES (регистр сегмента дополнительных данных).

Непосредственно адрес в сегментный регистр передать невозможно. Поэтому адрес сперва передается в "обычный" регистр АХ, а потом из регистра АХ в сегментный регистр

Без инициализации сегмента данных невозможно правильно обращаться к переменным, которые находятся в этом сегменте.

Значение регистра изменяется только через другие регистры.

Для указания сегмента данных используется регистр DS. То есть этот регистр должен указывать на начало данных в программе или на сегмент DATASEG.

@data - это идентификатор DATASEG при компиляции и сборки приложения на место этого слова будет поставлено реальное смещение сегмента, в котором находятся данные.

.286 ;директива - указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.MODEL Small ;действующая модель малая

.STACK  100h ;установка размера стека

.DATA ;начало сегмента данных программы

.CODE ;начало сегмента кода

Start:

        ; пролог

mov ax,@data ;в регистре АХ сегмент данных

mov ds,ax    ;регистр DS стал равен АХ (т.е. = сегменту)

...

        ;эпилог

mov ax,4C00h       ;завершение программы

int 21h            ;выходим из программы

END Start

3. Вывод на экран надписи «enter»

DOSSEG          ;директива

.MODEL SMALL ;действующая модель малая

   .STACK 100h  ;установка размера стека

   .DATA  ;начало сегмента данных программы

Message  DB 'enter',13,10,'$'

   .CODE  ;начало сегмента кода

   mov    ax,@Data  ;в регистре АХ сегмент данных

   mov    ds,ax   ;регистр DS стал равен АХ (т.е. = сегменту)               

   mov    ah,9                     ; функция DOS вывода строки

   mov    dx,OFFSET Message       ; ссылка на сообщение "enter"

   int    21h ; вывести "enter" на экран

   mov    ah,4ch  ; функция DOS завершения программы

   int    21h   ; завершить программу

   END

4. Считывание c клавиатуры

.286 ;директива - указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.model small ;действующая модель малая

.stack 100h   ;установка размера стека

.data ;начало сегмента данных программы

Buffer db 60,?,60 dup (?) ; db (директива)

.code ;начало сегмента кода

start: mov ax,@data ;в регистре АХ сегмент данных

mov ds,ax ;регистр DS стал равен АХ (т.е. = сегменту)

mov ah,0Ah

mov dx,offset buffer

int 21h ;ввод строки с клавиатуры

mov ah,4Ch ;завершение программы

int 21h  ;завершить программу

end start

5. Подготовка регистров к проведению цикла сравнения строк fam и tabs

.286 директива- указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.model small ;действующая модель малая

.data ;начало сегмента данных программы

PASSWORD DB 'qwerty',0Dh ;строка для сравнения

BUFFER_KLAV DB 50,?,50 DUP (?) ;буфер клавиатуры

str1 db 'Введите пароль',13,10,'$'

str2 db 13,10,'пароль неверный!$'

str3 db 13,10,'пароль угадан!$'

.code ;начало сегмента кода

start:  mov ax,@data

mov ds,ax     ;настроили сегметы данных

mov es,ax

mov ax,3      ;очистили экран

int 10h

mov ah,9

mov dx,offset str1

int 21h

mov ah,0Ah

mov dx,offset BUFFER_KLAV

int 21h

CLD ;просмотр строки в направлении возрастания адресов

MOV CX,10 ;длина цепочки

cmp cl,BUFFER_KLAV+1

JNZ M1; длина строк разная - на выход

MOV SI,OFFSET PASSWORD ;в DS:SI адрес пароля

MOV DI,offset BUFFER_KLAV+2 ;в ES:DI адрес буфера клавиатуры

REPE CMPSB ;сравнивать, пока равны, если не конец

JNZ M1 ; строки, то встретились разные элементы

mov dx,offset str3;действия, если элементы строки совпали

jmp m2

M1: ;действия, если элементы строки не совпали

mov dx,offset str2

m2: mov ah,9    ; выводим на экран

int 21h

mov ah,0;ждем нажатия на клавиатуру

int 16h

mov ah,4Ch;завершаем программу

int 21h

end start

6. Сравнение строк fam и tabs

.286 ;директива - указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.model small ;действующая модель малая

.data ;начало сегмента данных программы

PASSWORD DB 'qwerty',0Dh ;строка для сравнения

BUFFER_KLAV DB 50,?,50 DUP (?) ;буфер клавиатуры

str1 db 'Введите пароль',13,10,'$'

str2 db 13,10,'пароль неверный!$'

str3 db 13,10,'пароль угадан!$'

.code ;начало сегмента кода

start:  mov ax,@data

mov ds,ax     ;настроили сегметы данных

mov es,ax

mov ax,3      ;очистили экран

int 10h

mov ah,9

mov dx,offset str1

int 21h

mov ah,0Ah

mov dx,offset BUFFER_KLAV

int 21h

CLD ;просмотр строки в направлении возрастания адресов

MOV CX,10 ;длина цепочки

cmp cl,BUFFER_KLAV+1

JNZ M1; длина строк разная - на выход

MOV SI,OFFSET PASSWORD ;в DS:SI адрес пароля

MOV DI,offset BUFFER_KLAV+2 ;в ES:DI адрес буфера клавиатуры

REPE CMPSB ;сравнивать, пока равны, если не конец

JNZ M1 ; строки, то встретились разные элементы

mov dx,offset str3;действия, если элементы строки совпали

jmp m2

M1: ;действия, если элементы строки не совпали

mov dx,offset str2

m2: mov ah,9    ; выводим на экран

int 21h

mov ah,0;ждем нажатия на клавиатуру

int 16h

mov ah,4Ch;завершаем программу

int 21h

end start

7. Очистка экрана

.286 ;директива- указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.model small  ;действующая модель малая

.code  ;начало сегмента кода

start:

mov ax,@data

mov ds,ax    

mov CH,0

mov CL,0

mov DH,25

mov DL,80

mov BH,07

mov AH,06

mov AL,0

int 10h

end start

8. Установка (текстового) курсора

.286 ;директива- указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.model small ;действующая модель малая

.code ;начало сегмента кода

start: mov ax,3

int 10h ;установлен текстовый режим 80х25

mov ah,2

mov dx,0

int 10h ;курсор мигает в левом верхнем углу

mov ah,0 ;нажимаем на любую клавишу

int 16h

mov ah,2

mov dx,0C28h

int 10h ;курсор мигает в центре экрана

mov ah,0 ;нажимаем на любую клавишу

int 16h

mov ah,2

mov dx,184Fh

int 10h ;курсор мигает в правом нижнем углу

mov ah,0 ;нажимаем на любую клавишу

int 16h

mov ah,4Ch ;программа завершается

int 21h

end start

9. Вывод на экран содержимого младшего байта AX

.286 ;директива- указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.model small ;действующая модель малая

.data ;начало сегмента данных программы

a db 'AL=000$'

.code ;начало сегмента кода

start: mov ax,@data

mov ds,ax ;настроили сегмент данных

mov ax,3 ;очистили экран

int 10h

mov ax,25AFh ;вставляем любое число

and ax,0FFh ;избавляемся от содержимого старшей половины регистра

aam ;переводим из 16-ричного вида в 10-чный

add a+3,al

shr ax,8

aam

add a+5,ah

add a+4,al

mov dx,offset a

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

int 21h

mov ah,0;ждем нажатия на клавиатуру

int 16h

mov ah,4Ch ;завершаем программу

int 21h

end start

[pic 1]

10. Определение позиции курсора

.286 ;директива- указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.data ;начало сегмента данных программы

sing db "Jingle bells, jingle bells",13,10

db "Jingle all the way",13,10

db "Oh, what fun it is to ride",13,10

db "In a one-horse open sleigh$"; первые строки новогодней песенки

X db ?;место под Х координату курсора

Y db ?;место под Y координату курсора

str2 db 13,10,"X=",?,?," Y=",?,?,"$";строка с координатами курсора

.code ;начало сегмента кода

start:  mov ax,@data

    mov ds,ax

    mov ax,3

    int 10h;чистим экран

    mov ah,9

    mov dx,offset sing

    int 21h;выводим песенку, курсор на 4  строке в 26 колонке при выводе отсчет с нуля

    mov ah,0

    int 16h;ждем пока не нажмут на клавиатуру

    mov ah,3

    int 10h;получаем координаты курсора

    mov X,dh

    mov Y,dl;сохраняем координаты

    mov al,X

    aam

    add ax,"00"

    mov str2+4,ah

    mov str2+5,al

    mov al,Y

    aam

    add ax,"00"

    mov str2+9,ah

    mov str2+10,al

    mov ah,9

    mov dx,offset str2

    int 21h;выводим координаты в 10-ричном виде

    mov ah,0

    int 16h;ждем пока не нажмут на клавиатуру

    mov ah,4Ch

    int 21h;завершаем программу

end start

11. Подготовка к выводу на экран содержимого старшего байта AX

.286 ;директива- указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.model small ;действующая модель малая

.data ;начало сегмента данных программы

a db 'AH=000$'

.code ;начало сегмента кода

start:  mov ax,@data

mov ds,ax     ;настроили сегмент данных

mov ax,3      ;очистили экран

int 10h

mov ax,0ABCDh ;вставляешь любое число

shr ax,8   ;избавляемся от содержимого младшей половины регистра

aam;переводим из 16-ричного вида в 10-чный

add a+5,al

shr ax,8

aam

add a+3,ah

add a+4,al

mov dx,offset a

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

int 21h

mov ah,0;ждем нажатия на клавиатуру

int 16h

mov ah,4Ch;завершаем программу

int 21h

end start

12. Вывод на экран содержимого старшего байта AX

.286 ;директива- указывает ассемблеру что в данной программе могут встречаться команды не только процессора 8086, но и 80286

.model small ;действующая модель малая

.data ;начало сегмента данных программы

a db 'AH=000$'

.code ;начало сегмента кода

start: mov ax,@data

mov ds,ax ;настроили сегмент данных

mov ax,3 ;очистили экран

int 10h

mov ax,25AFh ;вставляем любое число

shr ax,8 ;избавляемся от содержимого младшей половины регистра

aam ;переводим из 16-ричного вида в 10-чный

add a+3,al

shr ax,8

aam

add a+5,ah

add a+4,al

mov dx,offset a

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

int 21h

mov ah,0 ;ждем нажатия на клавиатуру

int 16h

mov ah,4Ch ;завершаем программу

int 21h

end start

[pic 2]

...

Скачать:   txt (15.1 Kb)   pdf (185.9 Kb)   docx (34.7 Kb)  
Продолжить читать еще 6 страниц(ы) »
Доступно только на Essays.club