Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ассемблер.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
49 Кб
Скачать
☆

14Написать программу, в которой определены две переменных х и у двойные слова и подпрограмму, вычисляющую разность х - у. Параметры передаются через регистры процессора

.model small

.stack 100h

.data

X DD 10

Y DD 5

Z DD ?

.code

START: MOV AX,@data

MOV DS,AX

XOR AX,AX

MOV BX,offset X

MOV AX,[BX]

MOV DX,[BX+2]

MOV BX,offset Y

MOV BP,[BX]

MOV SP,[BX+2]

MOV BX,offset Z

CALL FUNCTIONAL

MOV DL,[BX]

ADD DL,30H

XOR AX,AX

MOV AH,2

INT 21H

MOV AX,4C00h

INT 21h

FUNCTIONAL PROC

SUB AX,BP

SUB DX,SP

MOV [BX],AX

MOV [BX+2],DX

RET

FUNCTIONAL ENDP

END START

17Написать программу на языке ассемблер IA-16, в которой определено натуральные числа M и N, размерностью слово (2 байта). Написать подпрограмму, которая корректно (с обработкой арифметических ошибок) вычисляет MN. Параметры и результат передаются через стек.

.model small

.stack 100h

.data

n dw 12

m dw 5

er db 'Perepolnenie$'

otv dw ?

.code

start:

mov ax, @data

mov ds, ax

push n

push m

call mimi

pop otv

cmp otv, 0

jne k4

mov dx, offset er

mov ah, 09h

int 21h

k4:

mov ax, 4C00h

int 21h

mimi proc

pop ax

pop bx

pop cx

push ax

mov ax, 1

k3:

cmp cx, 0

je k1

mul bx

jo k2

dec cx

jmp k3

k2:

mov ax, 0

k1: pop bx

push ax

push bx

ret

mimi endp

end start

19Написать программу, в которой определены две переменных х и у двойные слова и подпрограмму, вычисляющую сумму х + у. Параметры передаются через регистры процессора..

.model small

.stack 100h

.data

X DD 4

Y DD 5

Z DD ?

.code

START: MOV AX,@data

MOV DS,AX

XOR AX,AX

MOV BX,offset X

MOV AX,[BX]

MOV DX,[BX+2]

MOV BX,offset Y

MOV BP,[BX]

MOV SP,[BX+2]

MOV BX,offset Z

CALL FUNCTIONAL

MOV DL,[BX]

ADD DL,30H

XOR AX,AX

MOV AH,2

INT 21H

MOV AX,4C00h

INT 21h

FUNCTIONAL PROC

ADD AX,BP

ADD DX,SP

MOV [BX],AX

MOV [BX+2],DX

RET

FUNCTIONAL ENDP

END START

10Написать программу на языке ассемблер IA-16, в которой определены натуральные числа, размерностью двойные слова (4 байта) x и y. Написать подпрограмму, которая находит минимальное из них. Параметры и результат передаются через стек.

.model small

.stack 100h

.data

x dd 10000h

y dd 14532h

z dd ?

.code

start:

mov ax, @data

mov ds, ax

mov bx, offset x

push [bx]

mov bx, offset y

push [bx]

mov bx, offset x+2

push [bx]

mov bx, offset y+2

push [bx]

call mimi

mov bx, offset z+2

pop [bx]

mov bx, offset z

pop [bx]

mov ax, 4C00h

int 21h

mimi proc

pop dx

pop ax

pop bx

cmp ax, bx

jb k2

ja k1

mov cx, ax; нужный старший записали сразу в сх

pop ax

pop bx

cmp ax, bx

ja finish

mov bx, ax

jmp finish

k1: mov cx, bx; старшая часть в сх

pop ax; достаём ненужный у

pop bx; достаём младшую часть числа

jmp finish

k2: mov cx, ax; записываем старшую часть в сх

pop bx

pop ax

jmp finish

; по окончанию старшая часть числа в сх, а младшая в bx, а мы это дело, потом, в стек закидываем

finish: push bx

push cx

push dx; адрес возврата

ret

mimi endp

end start

11, 12Написать программу на языке ассемблер IA-16, в которой определено натуральное число N, размерностью слово (2 байта). Написать подпрограмму, которая подсчитывает количество его цифр, если бы оно было представлено в десятичной системе счисления. Параметры и результат передаются через стек.

.model small

.stack 100h

.data

n dw 5892

otv dw ?

.code

start:

mov ax, @data

mov ds, ax

push n

call mimi

pop otv

MOV AX, 4C00h

INT 21h

mimi proc

pop dx

pop ax

push dx

mov si, 0

k1:

mov bx, 10

mov dx, 0

div bx

inc si

cmp ax, 0

jne k1

pop dx

push si

push dx

ret

mimi endp

END START

15Написать программу на ассемблере, осуществляющую при произвольных нажатиях на клавиши клавиатуры ввод в память компьютера букв только латинского алфавита. ASCII коды букв возьмите у преподавателя.

.model small

.stack 100h

.data

mas db 50 dup('$')

.code

start:

mov ax, @data

mov ds, ax

mov si, 0

read:

mov ax, 0

mov ah, 01h

int 21h

cmp al, 0Dh; чтоб выйти можно было (это энтр)

je k1

cmp al, 41h

jb k2

cmp al, 5Ah

ja k2

jmp k3

k2: cmp al, 61h

jb read

cmp al, 7Ah

ja read

k3: mov mas[si], al

inc si

jmp read

; в масиве нужне

k1:

mov ah, 09h

mov dx, offset mas

int 21h

MOV AX, 4C00h

INT 21h

END START