- •1Написать программу на ассемблере ia-16, вычисляющую максимальное значение числа n, при котором n! не
- •4Написать программу, вычисляющую максимальное значение числа n, при котором n! не переполняет 4 байта
- •7Напишите последовательность команд, корректно работающую со стеком без использования команд pop и push с применением базой индексной адресации и выполняющую перечисленные ниже задачи:
- •8Написать программу на ассемблере ia-16, вычисляющую максимальное значение числа n, при котором n!
- •9Написать программу на языке ассемблер ia-16, в которой определены две переменных х и у двойные слова и подпрограмму, вычисляющую разность х - у. Параметры передаются через стек процессора
- •13Написать программу для ввода с клавиатуры натурального числа порядка n с последующим его преобразованием в машинное представление
- •14Написать программу, в которой определены две переменных х и у двойные слова и подпрограмму, вычисляющую разность х - у. Параметры передаются через регистры процессора
- •16. Написать программу на языке ассемблер ia-16, преобразующую строку байтов длинной n, являющихся ascii-кодами десятичных цифр, в машинное представление
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
