- •24. Ввод символа. Определить его позицию в строке и вывести на экран
- •Int 21h
- •30. Найти сумму элементов четных строк матрицы.
- •37. Перевод числа из одной системы счисления в другую. Данные вводить с клавиатуры.
- •Int 21h
- •42. Работа с окнами в текстовом режиме.
- •Inc si ;перейти к следующему элементу
- •Int 21h
- •59. Арифметические операции со знаковыми и беззнаковыми числами.
- •60. Процедуры в ассемблере, передача параметров, возврат значений.
- •61. Операции с файлами: создание, открытие, закрытие.
- •Int 21h ;открываем файл
- •Int 21h ;закрываем файл
- •62. Операции с файлами: чтение и запись данных.
- •Int 13h ;
- •Int 25h ;функция чтения секторов
37. Перевод числа из одной системы счисления в другую. Данные вводить с клавиатуры.
.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
38.Вычислить сумму столбцов матрицы с полным вводом/выводом (программа типа 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
39. Перевод строки в число.
.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
40. В сегменте данных дана матрица. Отсортировать ее побочную дигональ
.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