Всякие лабы / LabRab_2
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра вычислительной техники
ОТЧЕТ по лабораторной работе №2
по дисциплине «Организация ЭВМ и систем » Тема: «Условные переходы, циклы, сдвиги»
Студентка гр. 6361 |
Чемякина Д.С. |
Преподаватель |
Манирагена В. |
Санкт-Петербург
2017
Цель работы.
Изучить использование команды условного и безусловного переходов. Используя команды условного перехода и сдвига определить номер
младшего из установленных в единицу разрядов в регистре DL (если все нули, то результат — 8) и вывести результат.
Экспериментальные результаты.
Адрес |
Мнемокод |
Двоичный код |
Изменения |
Комментарий |
|
|
|
регистров |
|
0073 |
CALL [0000] |
байт 1: |
В AL введённое |
|
|
|
111010000(опер. |
с клавиатуры |
Корректный вызов |
|
|
вызова |
значение |
подпрограммы |
|
|
подпрограммы) |
|
|
|
|
байт2:10001010 (адрес |
|
|
|
|
подпрограммы) |
|
|
0076 |
MOV DH, AL |
1:10001010 (опер. |
DH=05 |
Правильное |
|
|
присваивания) |
|
исполнение |
|
|
2:11110000 (рег. АН) |
|
|
0078 |
MOV AL, FE |
1:10110000 (опер. |
Al = FE |
Правильное |
|
|
присваивания и рег |
|
исполнение |
|
|
AL) |
|
|
007A |
MOV BL, 01 |
1:10110011 (опер. |
BL = 01 |
Правильное |
|
|
присваивания и рег. |
|
исполнение |
|
|
BL) |
|
|
007C |
MOV CL, 01 |
1:10110001 (опер. |
CL = 00 |
Правильное |
|
|
присваивания и рег. |
|
исполнение |
|
|
AL) |
|
|
007E |
CMP CL, 08 |
1:10000000 (опер. |
P = 0 |
Правильное |
|
|
сравнения) |
|
исполнение |
|
|
2:11111001 (рег. СL) |
|
|
0081 |
JE 0096 |
1:11101000 (опер. |
|
Правильное |
|
|
условного перехода) |
|
исполнение |
|
|
2:00010011 (адрес |
|
|
|
|
метки) |
|
|
0083 |
MOV DL, DH |
1:10001010 (опер. |
DL = 00 |
Правильное |
|
|
присваивания) |
DL = 05 |
исполнение |
|
|
2: 11010110 |
|
|
0085 |
OR DL, AL |
1: 00001010 (опер. |
DL = 05 |
Логическое «ИЛИ» |
|
|
логическое «ИЛИ») |
DL = FF |
для содержимого |
|
|
2: 11010000 |
C = 0 |
регистров DL и AL |
0087 |
AND DL, BL |
1:22 00100010 |
DL = FF |
|
|
2:D3 11010011 |
DL = 01 |
0089 |
CMP DL, 00 |
1:80 10000000 |
|
|
|
2:FA11111010 |
|
|
|
3:00 |
|
008C |
JNE [0096] |
1:75 11101001 |
|
|
|
2:08 |
|
Взаимодействие с пользователем.
После запуска программа просит ввести число (рис. 1).
Рис. 1 Далее программа выводит на экран номер первой единицы в двоичном
представлении введенного числа (рис. 2).
Рис. 2
Вывод.
В ходе выполнения лабораторной работы были изучены методы использования условных переходов и сдвигов. Также была реализована программа, выдающая номер первой единицы в двоичном представлении введенного числа.
Приложение 1. Исходный код.
TITLE LAB2
.Model Small
.STACK 100h
.Data
message1 db 'Enter number: ','$' message2 db 'Result: ','$'
a db ? b db ?
buff db ?
error db 'ERROR $'
.Code
input proc mov ah,0Ah xor di,di
lea dx, [buff] mov [buff], 6 int 21h
mov dl,0Ah mov ah,02 int 21h xor ax,ax mov bx,10
lea si,[buff+2]
metka_2:
mov cl, [si] cmp cl, 0Dh jz endin
cmp cl, '-' jz mt
cmp cl,'0' jb er
cmp cl, '9' ja er
sub cl,'0'
mul bx add ax,cx inc si
jmp metka_2
mt:
mov di,1 inc si
jmp metka_2
er:
lea dx, error mov ah, 09 int 21h
int 20h
endin:
cmp di, 1 jz ng
ret
ng: neg ax ret
input endp
output proc xor cx,cx mov bx,10
metka_1: xor dx,dx div bx push dx
inc cx test ax,ax
jnz metka_1
mov ah, 02h
loop1: pop dx
add dl,'0' int 21h loop loop1
ret
output endp
begin:
mov ax, @data mov ds, ax
lea dx, message1 mov ah, 09
int 21h
call input mov dh,al mov al,254 mov bl,1 mov cl,0
metka: cmp cl,8 jz goOut mov dl,dh OR dl,al AND dl,bl cmp dl,0
jnz goOut inc cl
ROL al,1 ROL bl,1 jmp metka
goOut: push dx push ax
lea dx, message2 mov ah, 09
int 21h pop ax pop dx
mov al,cl call output
mov ax, 4c00h int 21h
end begin