Контрольная работа по основам программирования на ассемблере вариант1

Автор Administrator   
01:08:2008 г.
Задание:

1. Предположим, что регистр AX содержит 9 в ASCII коде, а регистр BX -7 также в ASCII коде. Объясните и дайте точный результат для следующих несвязанных операций:
а) ADD AX,33H б) ADD AX,BX
AAA AAA
в) SUB AX,BX г) SUB AX,0DH
AAS AAS
2. Запишите двоичное дополнение и обратный код для двоичного числа, а также 10-чное и 16-ричное их представление:
01100001
3. Составить программу, выводящую на экран запрос на ввод двух чисел, с выводом результата их деления- целую часть и остаток в шестнадцатеричном коде.
4. Составить программу, выводящую на экран два сообщения, запрашивающие ввести после каждого по одному произвольному слову, которые после конкатенации выводятся в следующей строке экрана.
5. Составить программу, выводящую на экран запрос на цвет, рисующую затем дугу (не прямую линию) этого цвета произвольного расположения.
1. а) ADD AX,33H ; прибавить к ax 33h
AAA ; Коррекция после ASCII-сложения.
Результат: ax =0102
б) ADD AX,BX; прибавить к ах вх
AAA ;Коррекция после ASCII-сложения.
Результат: ax=0106
в) SUB AX,BX ; отнять от ах вх
AAS ;Коррекция после ASCII-вычитания.
Результат: ax=0002
г) SUB AX,0DH; отнять от ах 0dh
AAS;Коррекция после ASCII-вычитания.
Результат: ax=FE06
2.
Исходное число: 01100001
Двоичное дополнение 10011111
Десятичное представление исходного числа: 97
Десятичное представление дополнения: 159
Шестнадцатиричное представление исходного числа: 61
Шестнадцатиричное представление дополнения: 9F

3 Листинг программы:
.model tiny
.code
org 100h
.286
start:
mov dx,offset mes1
mov ah,9
int 21h ; вывести приглашение ко вводу message1
;читаем введенную строку и преводим её в 16-ное число в регистре ах
mov dx,offset buffer
mov ah,0Ah
int 21h ; считать строку символов в буфер
mov dx,offset crlf
mov ah,9
int 21h ; перевод строки
; 76 перевод числа в ASCII-формате из буфера в бинарное число в АХ
xor di,di ; DI = 0 - номер байта в буфере
;mov ах,0h ; АХ = 0 - текущее значение результата
mov ax,0h
mov cl,blength
xor ch,ch
xor bx,bx
mov si,cx ; SI - длина буфера
mov cl,10 ; CL = 10, множитель для MUL
asc2hex:
mov bl,byte ptr bcontents[di]
sub bl,'0' ; цифра = код цифры - код символа "0",
mul cx ; иначе: умножить текущий результат на 10,
add ax,bx ; добавить к нему новую цифру,
inc di ; 90 увеличить счетчик
cmp di,si ; если счетчик+1 меньше числа символов -
jb asc2hex ; продолжить (счетчик считается от 0)
push ax
mov dx,offset mes2
mov ah,9
int 21h ; вывести приглашение ко вводу message1
;читаем введенную строку и преводим её в 16-ное число в регистре ах
mov dx,offset buffer
mov ah,0Ah
int 21h ; считать строку символов в буфер
mov dx,offset crlf
mov ah,9
int 21h ; перевод строки
; 76 перевод числа в ASCII-формате из буфера в бинарное число в АХ
xor di,di ; DI = 0 - номер байта в буфере
;mov ах,0h ; АХ = 0 - текущее значение результата
mov ax,0h
mov cl,blength
xor ch,ch
xor bx,bx
mov si,cx ; SI - длина буфера
mov cl,10 ; CL = 10, множитель для MUL
asc2hex2:
mov bl,byte ptr bcontents[di]
sub bl,'0' ; цифра = код цифры - код символа "0",
mul cx ; иначе: умножить текущий результат на 10,
add ax,bx ; добавить к нему новую цифру,
inc di ; 90 увеличить счетчик
cmp di,si ; если счетчик+1 меньше числа символов -
jb asc2hex2 ; продолжить (счетчик считается от 0)
mov bx,ax

mov dx,offset mes3
mov ah,9
int 21h

pop ax
div bl

push ax
mov ah,0

mov bx,16
xor di,di
l2:
xor dx,dx
div bx
add dl,030h
dec di
cmp dl,58
jnz a7
mov dl,'A'
a7:
cmp dl,59
jnz a8
mov dl,'B'
a8:
cmp dl,60
jnz a9
mov dl,'C'
a9:
cmp dl,61
jnz a10
mov dl,'D'
a10:
cmp dl,62
jnz a11
mov dl,'E'
a11:
cmp dl,63
jnz a12
mov dl,'F'
a12:
mov buf_end[di],dl
cmp ax,00h
jnz l2
lea dx,buf_end[di]
mov ah,09h
int 21h

mov dx,offset mes4
mov ah,9
int 21h

pop ax
mov al,ah
mov ah,0

mov bx,16
xor di,di
l3:
xor dx,dx
div bx
add dl,030h
dec di
cmp dl,58
jnz a1
mov dl,'A'
a1:
cmp dl,59
jnz a2
mov dl,'B'
a2:
cmp dl,60
jnz a3
mov dl,'C'
a3:
cmp dl,61
jnz a4
mov dl,'D'
a4:
cmp dl,62
jnz a5
mov dl,'E'
a5:
cmp dl,63
jnz a6
mov dl,'F'
a6:
mov buf_end[di],dl
cmp ax,00h
jnz l3
lea dx,buf_end[di]
mov ah,09h
int 21h

e1:
mov ah, 0; ожидание символа
int 16h
int 20
ret
buf db 16 dup (?)
buf_end db'$'

mes1 db "Vvedite pervoe chislo: $"
mes2 db "Vvedite vtoroe chislo: $"
mes3 db "Celay chast' ot deleniya ravna: $"
mes4 db " Ostatok ot deleniya ravna: $"
crlf db 0Dh,0Ah,'$'
buffer db 6 ; максимальный размер буфера ввода
blength db ? ; размер буфера после считывания
bcontents: ; содержимое буфера располагается за
; концом СОМ-файла
a dw 0
b dw 0
end start
Результаты работы программы:
Vvedite pervoe chislo: 23
Vvedite vtoroe chislo: 2
Celay chast' ot deleniya ravna: B Ostatok ot deleniya ravna: 1



4 Листинг программы:
masm
.model small
.model tiny
.code
org 100h
.286
start:
;очистить экран
c1: cmp a1,50
jz ec1
c2:
cmp b1,80
jz ec2
mov ah,2
mov dh,a1
mov dl,b1
int 10h
mov ah,02
mov bl,10h
mov dl,' '
int 21h
inc b1
jmp c2
ec2:
inc a1
mov dl,0
mov b1,dl
jmp c1
ec1:
mov ah,2
mov dh,4
mov dl,15
int 10h
mov ah,09h
mov dx,offset mes1
int 21h
mov ah,0ah ;Запрос функции ввода
lea dx,F ;Загрузить адреса списка параметров
int 21h ;Вызвать DOS
mov ah,2
mov dh,6
mov dl,15
int 10h
mov ah,09h
mov dx,offset mes2
int 21h
mov ah,0ah ;Запрос функции ввода
lea dx,F2 ;Загрузить адреса списка параметров
int 21h ;Вызвать DOS
mov ah,2
mov dh,8
mov dl,15
int 10h
mov cx,6
cikl1:
mov bx,6
sub bx,cx
mov dl,offset GrFLD1[bx]
mov ah,02
int 21h
loop cikl1
mov cx,6
cikl2:
mov bx,6
sub bx,cx
mov dl,offset GrFLD2[bx]
mov ah,02
int 21h
loop cikl2
mov ah, 0; ожидание символа
int 16h
ret
mes1 db 'Vvedite slovo iz 6 bukv: ','$'
mes2 db 'Vvedite eshe slovo iz 6 bukv: ','$'
F LABEL BYTE ;Список параметров:
MAXLEN1 DB 10 ; Максимальная длина
ACTLEN1 DB ? ; Реальная длина
GrFLD1 DB 20 DUP ('$') ;
F2 LABEL BYTE ;Список параметров:
MAXLEN2 DB 10 ; Максимальная длина
ACTLEN2 DB ? ; Реальная длина
GrFLD2 DB 20 DUP ('$') ;
a db 0
b db 0
a1 db 0
b1 db 0
end start

Результаты работы программы:

Vvedite slovo iz 6 bukv: slovo1

Vvedite eshe slovo iz 6 bukv: slovo2

slovo1slovo2






5 Листинг программы:
masm
.model small
.model tiny
.code
org 100h
.286
start:
mov ah,9
lea dx,mes1
int 21h
mov ah,0
int 16h
push ax
mov ah,00h
mov al,12h
int 10h
pop ax
mov dx,10
mov cx,30
sub al,30
mov dx, 100
mov cx, 100
mov ah, 0ch
int 10h
mov dx, 101
mov cx, 101
mov ah, 0ch
int 10h
mov dx, 102
mov cx, 102
mov ah, 0ch
int 10h
mov dx, 103
mov cx, 103
mov ah, 0ch
int 10h
mov dx, 104
mov cx, 103
mov ah, 0ch
int 10h
mov dx, 105
mov cx, 102
mov ah, 0ch
int 10h
mov dx, 106
mov cx, 101
mov ah, 0ch
int 10h
mov dx, 107
mov cx, 101
mov ah, 0ch
int 10h
;задержка
mov cx,0f000h
q1:
push cx
MOV CX, 0f000h
HERE: LOOP HERE
pop cx
loop q1
mov ax,0003h
int 10h
ret
mes1 db 'Vvedite cvet ','$'
end start
  online viagra . Online Gambling legal Gambling usa Online.