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

Int 21h ; Вызов 21 прерывания dos

lea dx, string ; Загрузка адреса списка параметров

mov ah, 0ah ; Запрос функции ввода

Int 21h ; Вызов 21 прерывания dos

mov dh, 12 ; Установка позиции курсора

mov dl, 40

mov bh, 00

mov ah, 02h ; Вызов функции установки курсора

int 10h

mov bl,real ; Поместить указатель на конец строки

mov bh,00

mov all[bx],'$'

lea dx, string+2

mov ah, 09h

Int 21h ; Вызов 21 прерывания dos

mov ah,4ch ; Выход в DOS в 21 прерывании

int 21h

start endp

codesg ends

end begin

  1. Ввести с клавиатуры натуральное число. Найти сумму его первой и последней цифры и вывести на экран. Выполните трассировку программы.

codes SEGMENT para 'code'

assume cs:codes,ds:codes,es:codes,ss:codes

org 100h

main:

jmp begin

str1 db 10,?,10 dup (?)

mes db "Введите число : ","$"

newline db 13,10,'$'

begin:

mov ah,09h ;выводим приглашение

lea dx,mes

int 21h

mov ah,0ah ;вводим строку

lea dx,str1

int 21h

mov ah,09h ;переход на новую строку

lea dx,newline

int 21h

mov cl,str1+2 ;вычисляем сумму 1 и второго символа

sub cl,30h

xor bx,bx

mov bl,str1+1

dec bx

add cl,str1+2[bx]

sub cl,30h

cmp cl,10 ;если сумма больше 10 выводим сначала '1'

jb prod ;затем сумму-10 (сумма всегда маньше 20)

mov dl,'1'

mov ah,02h

int 21h

sub cl,10

prod:

mov dl,cl

add dl,30h

mov ah,02h

int 21h

mov ah,4ch

int 21h

codes ends

end main

  1. Напишите программу, запрашивающую у оператора строку из pусских букв, а затем выводящую ее на экран, предварительно изменив строчные буквы на заглавные, а заглавные - на стpочные. Выполните трассировку программы.

codesg segment para 'code'

assume cs:codesg, ds:codesg, ss:codesg, es:codesg

org 100h

begin:

jmp start

message db 'Vvedite stroku: ','$'

string label byte

symb db 80

real db ? ;

str1 db 80 dup ('$');

start: mov dh, 0

mov dl, 0

mov bh, 00

mov ah, 02h

int 10h

mov ah, 09h

lea dx, message

int 21h

lea dx, string

mov ah, 0ah

int 21h

mov dh, 1

mov dl, 0

mov bh, 00

mov ah, 02h

int 10h

xor cx,cx

xor dx,dx

mov bx,0

mov cl,real

l1:mov dl,str1[bx]

test dl,00100000b

jz m1

jnz m2

k1:mov ah,02h

int 21h

inc bx

loop l1

mov dh, 2

mov dl, 0

mov bh, 00

mov ah, 02h

int 10h

mov ah, 09h

lea dx,str1

int 21h

mov ah,04ch

int 21h

m1:or dl,00100000b

jmp k1

m2:and dl,11011111b

jmp k1

codesg ends

end begin

  1. Напишите программу, запрашивающую у оператора строку, а затем выводящую ее на экран, предварительно изменив заглавные английские буквы на строчные. Выполните трассировку программы.

.MODEL tiny

.DATA

Text db 'Input string:$'

Input LABEL BYTE

Max db 60

Real db ?

Buffer db 61 DUP('$'),'$'

.CODE

ORG 100h

Main PROC

LEA dx, Text

MOV ah, 9h

INT 21h

LEA dx, Input

MOV ah, 0ah

INT 21h

CALL Convert

MOV ah, 02h;переход на новую строку

MOV dl, 0ah

INT 21h

MOV ah, 02h

MOV dl, 0dh

INT 21h

LEA dx, Buffer;выводим готовую строку на экран

MOV ah, 9h

INT 21h

MOV ah, 8h

INT 21h

MOV ah, 4ch

INT 21h

Main ENDP

Convert PROC

MOV cl, Real

MOV ch, 0

MOV bx, 0;индекс в массиве

Start:

MOV ah, DS:[Buffer+bx];выбор символа из массива

CMP ah, 65;если меньше 65 - пропускаем

JB Finish

CMP ah, 90;если больше 90 - пропускаем

JA Finish

OR ah, 00100000b;выставляем 5 бит

MOV DS:[Buffer+bx], ah

Finish:

INC bx

LOOP Start

RET

Convert ENDP

END Main