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

Використовуючи логічні операції знайти контрольну суму рядка символів. Контрольна сума – це кількість одиниць у двійковому записі кодів символів.

.8086

.model small

.stack 200h

.data

; вхідна бітова послідовність в символах

bit_string db "6476c8"

len_bit_string=$-bit_string

adr_bit_string dd bit_string

tabl_16 dw 256 dup (0) ; CRC-таблиця

len_tabl_16=$-tabl_16

adr_tabl_16 dd tabl_16

polinom dw 1021h

.code

.startup

; розраховуємо CRC-таблицю

les di, adr_tabl_16

add di, len_tabl_16-2

std ; рухаємося по таблиці в зворотньому напрямкуmov bx, polinom

m1:

xor ax, ax

mov ah, cl ; індекс в таблиці для обчислення CRC

push cx ; вкладені цикли

mov ax, 8

m2:

;shi ax, cx

jnc m3 ; старші розряди не рівні – виконуємо зсув (частка нас не цікавить)

; якщо старші розряди рівні – виконуємо XOR:

xor ax, bx ; ax XOR polinom

m3: loop m2

pop cx

stosw

loop m1

; закінчили розрахунок CRC-таблиці

;хоr ах, ах

xor bx, bx

lds si, adr_bit_string

mov cx, len_bit_string

m4: mov bl, ah

shl ax, 8

xor bl, si

inc si

loop m4

.exit 0

END

Ввести речення. Відредагувати його так, щоб між словами було не більше одного пропуску.

.8086

.model small

.stack 200h

.data

n=50

buf db n,?,n DUP (' ')

msg db 'Vvedit rechenia(<50)','$'

.code

.startup

mov ah, 9h ; Введення невідредагованого речення на екран

lea dx, msg

int 21h

mov ah, 0Ah

lea dx, buf

int 21h

mov al, 0

mov cx, 0

d1:

scasb

je enddl

inc cx

jmp d1

enddl:

lea dx, buf

; організація послідовного за символами перегляду рядка

cycl1:

jcxz endcl

mov al, ' '

scasb

jne mb

dec dx

mov al, ' '

stosb

mb:

dec dx

mov al, ' '

scasb

jne m1

dec dx

mov al,' '

stosb

m1:

dec cx

jmp cycl1

endcl:

mov ah, 9h ; виведення результату на екран

lea dx, buf

int 21h

.exit 0

END

Виконати перетворення неупакованого BCD-формату цілого числа в упакований формат.

Ввести речення з клавіатури і порахувати кількість прогалин у реченні.

Написати програму на мові Assembler, яка переводить ціле число у вісімкову систему.

.8086

.model small

.stack 200h

.data

a dw 635

res dw ?

msg1 db 'Converting 635 from decimal to octal:$'

msg2 db 'the number 635 in octal: $'

.code

.startup

mov ax,a ;заношу в ах число 635 у десятковій системі

mov bx,8 ;заношу в bx дільник 8

mov dx,0 ;занулюю dx

mov cx,0 ;занулюю сх

m1:

div bx ;ділю число 635 на 8

push dx ;запам'ятати регістр dx у стеку

mov dx,0 ;занульовую dx

inc cx ;збільшую к-сть лічильника сх

cmp ax,0 ;порівнюю ах з нулем

jnz m1 ; перейти на m1, якщо ах не рівне 0

m2:

pop dx ;отримати зі стеку регістр dx

add dx,30h

mov ah,2

int 21h

loop m2

mov ah,9h ;номер функції виведення даних

lea dx,msg1 ;занесення в dx адресу повідомлення, яке буде виводитись

int 21h ;вивести повідомлення

mov ah,9h ;номер функції виведення даних

lea dx,msg2 ;номер функції виведення даних

int 21h ;вивести повідомлення

;виведення числа 635 у вісімковій системі числення

mov ah,40h ;номер функції DOS для виведення даних

mov bx,1 ;дескриптор дисплею

mov dx,ax ;адреса для виведення числа у вісімковій системі

mov res,ax ;записую виведення числа у змінну результа

int 21h ;вивести повідомлення

.exit 0

End

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]