Языки программирования высокого уровня (Ассемблер)
Факультет Довузовского Образования
Сибирского института школы бизнеса и
информационных технологий
Итоговый тест
Предмет: Языки программирования
высокого уровня (Ассемблер)
1. Напишите битовые представления ASCII-кодов для следующих
однобитовых символов:
а) Р;
б) р;
в) #;
г) 5.
А)
ASCII символ P - 080 в десятичной
Битовое представление для ASCII кода P - 1010000
Б)
ASCII символ p - 112 в десятичной
Битовое представление для ASCII кода p - 1110000
В)
ASCII символ # - 035 в десятичной
Битовое представление для ASCII кода # - 100011
Г)
ASCII символ 5 - 053 в десятичной
Битовое представление для ASCII кода 5 - 110101
. Напишите битовые представления для следующих чисел:
а) 5; б) 13; в) 21; г) 27.
. Сложите следующие двоичные числа:
. Определите двоичные дополнения для следующих двоичных
чисел:
. Определите положительные значения для следующих
отрицательных двоичных цифр:
. Определите шестнадцатеричные представления для следующих
значений:
а) ASCII-символа 0; - 30h
б) ASCII-символа 7; - 37h
в) двоичного числа 01011101; - D5
г) двоичного числа 01110111. - 77
. Сложите следующие шестнадцатеричные числа:
. Определите шестнадцатеричные представления для следующих
десятичных чисел:
а) 19; б) 33; в) 89; г) 255; д) 4095; е) 63398.
Проверь также полученные результаты, преобразовав
шестнадцатеричные значения в двоичные и сложив единичные биты.
А)
Частное Остаток Шестнадцатеричное
/16 1 3 3
/16 0 1 1
Шестнадцатеричное представление для десятичного 19 - число 13
Проверка:
*16=16+3=19
Б)
Частное Остаток Шестнадцатеричное
/16 1 3 3
/16 0 1 1
Шестнадцатеричное представление для десятичного 33 - число 21
Проверка:
*16=32+1=33
В)
Частное Остаток Шестнадцатеричное
/16 5 9 9
/16 0 5 5
Шестнадцатеричное представление для десятичного 89 - число 59
Проверка:
*16=80+9=89
Г)
Частное Остаток Шестнадцатеричное
/16 15 15 15
/16 0 15 F
Шестнадцатеричное представление для десятичного 255 - число F15
*16=240+15=255
Д)
Частное Остаток Шестнадцатеричное
/16 255 15 15
/16 15 15 15
/16 0 15 F
Шестнадцатеричное представление для десятичного 4095 - число FFF
Проверка:
15*16=240+15=255*16=4080+15=4095
Е)
Частное Остаток Шестнадцатеричное
63398/16 3962 6 6
3962/16 247 10 A
247/16 15 7 7
15/16 0 0 F
Шестнадцатеричное представление для десятичного 63398 - число
F7A6.
Проверка:
*16=240+7=247*16=3952+10=3962*16=63392+6=63398.
. Что представляют собой три типа сегментов, каковы их
максимальные размеры и адреса, с которых они начинаются?
Сегмент кодов. Сегмент кодов содержит машинные команды,
которые будут выполняться. Обычно первая выполняемая команда находится в начале
этого сегмента и операционная система передает управление по адресу данного
сегмента для выполнения программы. Регистр сегмента кодов (CS) адресует данный
сегмент.
Сегмент данных. Сегмент данных содержит определенные данные,
константы и рабочие области, необходимые программе. Регистр сегмента (DS) адресует данный
сегмент.
Сегмент стека. Стек содержит адреса возврата как для
программы для возврата в операционную систему, так и для вызовов подпрограмм
для возврата в главную программу. Регистр сегмента (SS) адресует данный
сегмент.
Начальный адрес - 0000.
Максимальный размер - 64 Кб.
. Какие регистры можно использовать для следующих целей:
а) сложения и вычитания; - регистры add и sub
б) подсчета числа циклов; - регистр cx
в) умножения и деления; - регистры (imul, mul) и (idiv, div)
г) адресации сегментов; - регистры cs, ds и ss
д) индикации нулевого результата; - флаги
е) адресации выполняемой команды? - ip
. Что представляют собой два основных типа памяти компьютера
и каково их основное назначение?
ПЗУ или ROM (read-only memory) - представляет собой специальную микросхему.
Основное назначение: во-первых, (как это следует из названия) используется
только для чтения. Во-вторых, поддержка начальной загрузки: при включения
питания компьютера ROM выполняет различные проверки и загружает в оперативную память (RAM) данные из системной
дискеты (например DOS).
ОЗУ или RAM (Random Access Memory) - оперативная память,
которая представляет собой область, где находятся программы и данные при
выполнении. Ее назначение - используется для чтения и записи.
. Напишите машинные команды для:
а) пересылки значения 4629Н в регистр АХ;
б) сложения 036АН с содержимым регистра АХ.
А) Б)
В829460 A3600
. Имеется программа, которая выполняет следующее:
а) пересылает значения 25Н в регистр AL;
б) сдвигает содержимое регистра AL на один бит влево (в
результате в AL будет 4A);
в) пересылает значения 15Н в регистр BL;
4г) умножает содержимое
регистра AL на содержимое регистра BL.
Какое значение будет в регистре AX после выполнения
программы?
Программа:
mov al,10010bl,110101al,bl
14. Напишите результат выполнения следующей программы:
MOVBX,25
ADDBX,30
SHLBX,01
SUBBX,22
Результат:
23
15. Какие команды заставляют Ассемблер печатать заголовок в
начале каждой страницы листинга?
Директивы - TITLE и PAGE
. Какие из следующих имен неправильны:
а) PC_AT;
б) $50;
в) @$_Z;
г) 3487;
д) AX?
а), б) и в) корректны; г) неверно, так как начинается с
цифры;
д) корректно только при ссылке на регистр AX.
. Каково назначение каждого из трех сегментов: сегмента кода,
сегмента данных, сегмента стека?
Назначения
сегментов:
Сегмент кода - для выполняемых команд.
Сегмент данных - для определения данных и рабочих областей.
Сегмент стека - для хранения адресов возврата.
. Что конкретно подразумевает директива END, если она завершает:
а) программу; - End
б) процедуру; - Endp
в) сегмент? - Ends
Команда указывает ассемблеру какое действие
должен выполнить данный оператор
Директива управляет процессом ассемблирования и
формированием листинга.
20. Укажите различия в назначении RET и END.
RET - обеспечивает выход из пользовательской
программы и возврата в DOS
END - Завершает программу.
. Для сегментов кода, данных и стека даны имена CDSEG, DATSEG и STKSEG соответственно.
Сформируйте директиву ASSUME.
ASSUME - это ассемблерная директива, которая
устанавливает для ассемблера соответствие между конкретными сегментами и
сегментными регистрами.
ASSUME CS: CDSEG,DS: DATSEG,SS: STKSEG.
22. Напишите три команды для сохранения в стеке регистра DS и нуля.
PUSH DSAX, AXAX
23. Какова длина в байтах для элементов данных, определенных
директивами:
а) DW; - 2 байта
б) DD; - 4 байта
в) DT; - 10 байт
г) DB; - 1 байт
д) DQ? - 8 байта
. Определите следующие числовые значения в элементах данных с
именами от FLDA до FLDE:
a) четырехбайтового элемента, содержащего шестнадцатеричный
эквивалент десятичного числа 115;
б) однобайтового элемента, содержащего шестнадцатеричный эквивалент
десятичного числа 25;
в) двухбайтового элемента, содержащего неопределенное
значение;
г) однобайтового элемента, содержащего двоичный эквивалент
десятичного числа 25;
д) директивы DW, содержащей последовательные значения 16, 19,
20, 27, 30.
А) Б) В) Г)
FLDA DD 73H FLDA DW 19h FLDS DW ? FLDA DB
11001
Д)
FLDE DW 16, 19, 20, 27, 30
25. Покажите сгенерированный шестнадцатеричный объектный код
для:
а) DB '26' и
б) DB 26.
А) Б)
FLDA DB ‘26’ FLDA DB 26
26. Определите ассемблерный шестнадцатеричный объектный код
для:
а) DB 26h;
б) DW 2645h;
в) DD 25733Ah;
г) DQ 25733Ah.
А) Б) В) DB
26h FLDA DW 2645h FLDA DD 25733Ah
Г)
FLDA DQ 25733Ah
27. Закодируйте следующие команды с непосредственными
операндами:
а) загрузить 320 в регистр АХ;
б) сравнить поле FLDB с нулем;
в) прибавить 40h к содержимому регистра ВХ;
г) вычесть 40h из регистра СХ;
д) сдвинуть содержимое поля FLDB на один бит влево;
е) сдвинуть содержимое регистра СН на один бит вправо.
Напишите команду вызова Ассемблера с параметром получения LST-файла (листинга).
А) Б)
В) Г) Д) Е)
mov ax,320 cmp FLDB,0 add bx,40h sub cx,40h shl FLDB,1 shr ch,128. Каков максимальный
размер СОМ-файла?
Максимальный размер - 64 Кб
. Какие сегменты можно определить в программе, которая будет
преобразована в СОМ-файл?
Сегмент кода.
. Определение стека в СОМ-файлах отсутствует. Как ведет себя
СОМ-файл с учетом этого обстоятельства?
COM-файл всегда автоматически определяет стек.
. Какое максимальное количество байтов могут обойти команды
короткий JMP, LOOP и относительный переход?
. +127 и - 128. Операнд представляет собой однобайтовое
значение от 00Н до 7FH (от 0 до + 127) и от 80Н до 0FFH (от - 128 до - 1).
. Напишите программу для вычисления 12 чисел Фибоначчи: 1, 1,
2, 3, 5, 13,. (каждое число представляет собой сумму двух предыдущих чисел).
MOV AX,00
MOV BX,01CX,12DX,00
В20:
ADD AX,BX; Номер в AX
MOV BX,DXDX,AX B20
. Предположим, что регистры AX и BX содержат знаковые данные,
а CX и DX - беззнаковые.
Определите команды CMP (где необходимо) и команды безусловного перехода для следующих
проверок:
а) значение в DX больше, чем в CX?
б) значение в BX больше, чем в AX?
в) CX содержит нуль?
г) было ли переполнение?
д) значение в BX равно или меньше, чем в AX?
е) значение в DX равно или меньше, чем в CX?
А) Б) В) Г) Д)
mov cx,6mov bx,+9cmp cxmov bx,+10dx,cxjmp
ax,bxjmp ax,bx
Е)dx,9cx,12 dx,cx
. На какие флаги воздействуют следующие события и какое
значение этих флагов:
а) произошло переполнение; - O
б) результат отрицательный; - S
в) результат нулевой; - Z
г) обработка в одношаговом режиме; - T
д) передача данных должна быть справа налево. - D
. Какая разница между кодированием в директиве PROC операнда с типом FAR и с типом NEAR?
Far - дальний, означает использование полного
32-разрядного адреса ("сегмент: смещение")
Near - ближний, означает использование
16-разрядных смещений.
. Каким образом может программа начать выполнение процедуры?
Вызовом CALL
37. В EXE-программе процедура A10 вызывает B10, B10 вызывает C10, а C10 вызывает D10. Сколько адресов,
кроме начальных адресов возврата в DOS, содержит стек?
Ответ:
Три (по одному на каждый вызов CALL).
. Предположим, что регистр BL содержит 11100011 и поле
по имени BOONO содержит 01111001. Определите воздействие на регистр BL для следующих команд:
а) XOR BL, BOONO;
б) AND BL, BOONO;
в) OR BL, BOONO;
г) XOR BL, 11111111B;
д) AND BL, 00000000B.
А)
Б) В)bl,11100011 mov bl,11100011
mov bl,11100011BOONO,01111001 mov BOONO,01111001 mov BOONO,0111bl,BOONO
AND bl,BOONO OR bl,BOONO
Г)
Д)bl,11100011 mov bl,11100011 BOONO,01111001
mov BOONO,01111001 bl, 11111111B
AND bl,00000000b
ассемблер сегмент двоичное однобитовый
39. Предположим, что регистр DX содержит 10111001, а
регистр CL - 03. Определите содержимое регистра DX после следующих
несвязанных команд:
а) SHR DX,1;
б) SHR DX,CL;
в) SHL DX,CL;
г) SHL DL,1;
д) ROR DX,CL;
е) ROR DL,CL;
ж) SAL DH,1.
А) Б)
В)
mov dx,10111001 mov
dx,10111001 mov dx,10111001
mov cl,03 mov
cl,03 mov cl,03dx,1 SHR dx,cl SHL dx,cl
Г) Д)
Е)
Mov dx,10111001 mov dx,10111001 mov dx,10111001
Mov cl,03 mox
cl,03 mox cl,03 dl,1 ROR dx,cl ROR dl,cl
Ж)dx,10111001cl,03 dh,1
40. Используя команды сдвига, пересылки и сложения, умножьте
содержимое регистра АХ на 10.
1.
Команда сдвига
mov cl,03ax, 20ax,10ax,cl
41. Напишите программу, которая умножает содержимое пары
регистров DX: AX на 2. Измените программу для:
а) умножения на 4;
б) деления на 4;
в) умножения 48 бит в регистрах DX: AX: BX на 2.
А) Б) В)
SHL AX,1 SHL AX,1 SHL AX,1
RCL DX,1 RCR DX,1 SHL BX,1 DX,1 RCR DX,1 RCL DX,1
42. Какие шестнадцатеричные значения строки и столбца
соответствуют нижнему правому углу экрана 25х45?
Строка - 18
Столбец - 4F
. Напишите команды для установки курсора по координатам:
строка 12, столбец 8.
mov ah,02bh,00dh,12 dh,8
int 10h
. Напишите команды для очистки экрана, начиная с 0-го столбца
12-й строки до 79-го столбца 22-й строки.
mov 0600hal,12bh,07cx,0000dx,79 dx,22
int 10h
. Составьте необходимые элементы данных и команды для вывода
запроса "Введите дату (дд/ммм/гг.)". Используйте для вывода функцию
базовой версии DOS.
MSSGE DB
'What Is the date
(mm/dd/yy)?',07H,'$'
MOV
AH,09
MOV DX,MSSGE
INT 21H
46. Укажите вызовы функций: а) для ввода с клавиатуры; б)
вывода на экран (середина 15 строки; очистка строк от 0 до 15); в) вывода на
принтер.
А) Б) В)
MOV AH,0AH DISAREA DB 20
DUP(' ') INT 05H
LEA DX,NAMEPAR MOV AH,40H
INT 21H MOV BX,01
MOV
CX,20
INT 21H
47. Объясните назначение каждого из следующих файлов:
а) file. ASM; - Файл для ввода программы
б) file. LST; - файл листинга ассемблирования с исходным и
объектным кодом
в) file. OBJ; - файл объектного кода
г) file. EXE. - Загрузочный файл, для выполнения программы.
. Напишите две команды для инициализации регистра DS, полагая, что имя
сегмента данных DATSEG.
MOV AX,DATSEGDS,AX
49. Составьте ассемблерную программу для:
а) пересылки 30Н (непосредственное значение) в регистр AL;
б) сдвига содержимого регистра AL на один бит влево
(команда SHL);
в) пересылки 18Н (непосредственное значение) в регистр BL;
г) умножения регистра AL на BL (команда MUL BL).
А) Б) В) Г)al,30h mov
al,001111 mov bl,18h mov al,110001
shl
al,1 mov bl,11100011
mul
al,bl
50. Модифицируйте программу из предыдущего вопроса 51 для:
a)
определения
однобайтовых элементов (директива DB) по имени FLDА, содержащего 28Н, и по
имени FLDB, содержащего 14h;
b)
определения
двухбайтового элемента (директива DW) по имени FLDC, не имеющего значения;
c)
пересылки
содержимого поля FLDA в регистр AL и сдвига на один бит;
d)
умножения
содержимого регистра AL на значение в поле FLDB (MUL FLDB);
e)
пересылки
результата из регистра AX в поле FLDC.
A) B) C) D)
FLDA OB 28H FLDA OB 28H mov
FLDA,25 mov al,2
FLDB DB 14H FLDB DB 14H mov
al,FLDA mov FLDB,20
DB ? FLDC DW ? shl
al,1 imul FLDB,al
E)
mov ax,120
mov FLDS,ax
51. Составьте процедуры для:
а) установки вида курсора, начинающегося на 5-й линии
сканирования и заканчивающегося на 12-й линии;
б) прокрутки экрана на 10 строк.
А) Б)ah,01 mov
ax,0610h
Mov ch,5 mov
bh,07cl,12 mov cx,0000 10h mov dx,184fh
Int 10h
. Закодируйте команды для умножения (MUL):
а) слова DATAX на слово DATAY;
б) двойного слова, начинающегося по адресу DATAX, на слово DATAY.
А)
c10mul proc
mov ax,datax
imul datay
ret
c10mul endp
Б)
eioxmul proc
mov ax,datax+2
mul datay
mov product+4,ax
mov product+2,dx
mov ax,datax
Mul datay
add product+2,ax
adc product,dx
ret
eioxmul endp
53. Какой делитель, кроме 0, вызывает ошибку переполнения?
Делитель: - 1
. Закодируйте команды для деления (DIV):
а) слова DATAX на 23;
б) двойного слова, начинающегося по адресу DATAX, на слово DATAY.
. Выполните вручную:
а) преобразование ASCII 46328 в двоичный формат (покажите результат в
шестнадцатеричном виде);
б) преобразование полученного шестнадцатеричного значения
обратно в ASCII-формат.
А)
Десятичное Шестнадцатеричное
*1 8 8
*10
20 14
*100 300 12C
*10000 40000 9C40
Результат: 46328 B4F8
. Определите таблицу, которая содержит имена дней недели,
начиная с воскресенья.
STOKTBL DB 1’SUNDAY’
DB 2
‘MONDAY’
DB 3 ‘TUESDAY’
DB 4
‘WEDNESDAY’
DB 5
‘THURSDAY’
DB 6
‘FRIDAY’
DB 7 ‘SATURDAY’
57. Предполагая, что воскресенье равно 1 и что под каждое имя
отведено по 11 символов, напишите команды прямого доступа к таблице,
определенной в вопросе 60.
page 60,132
TITLE DIRECT (COM)
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG 100H
BEGIN: JMP SHORT MAIN
;
------------------------------------------------
THREE DB 3
MONIN DB '11'
ALFMON DB '???','$'
MONTAB DB
'MON','TUE','WED','THU','FRI','SAT'
DB 'SUN'
;
------------------------------------------------
MAIN PROC NEAR
CALL C10CONV
CALL D10LOC
CALL F10DISP
RET
MAIN ENDP
58. Напишите функции базовой версии DOS для следующих
операций:
а) создание файла; - mov ah, 16h
lea dx, FCBname
int 21h
б) установка DTA; - mov ah, 1ah
lea dx, DTAname
int 21h
в) последовательной записи; - mov ah,15
lea dx, FCBname
int 21h
г) открытие файла; - MOV Ah, OFH
LEA
DX,FCBname
INT 21h
д) последовательного чтения. - MOV AH, 14H
LEA
DX,FCBname
INT 21h
59. Напишите программу, которая создает дисковый файл.
; page 60,132
;--------------------------------------
stacksg segment para stack 'stack'
dw 80 dup(?)ends
;-------------------------------------- segment
para 'data'
reclen equ 32label byte
maxlen db reclen
db ? db reclen dup(' ')
label byte db 04
db 'namefile' db 'dat'
dw 0000 dw ?
dd ?
dw ?
dt ?
db 00
dd ?
crlf db 13,10,'$'
errcde db 00 db 'name?
','$'
row db 01 db '*** open
error ***', '$' db '*** write error ***', '$'ends
;-------------------------------------- segment
para 'code' proc far cs:codesg,ds:datasg,ss:stacksg,es:datasg
push ds
sub ax,ax
push ax
mov ax,datasg
mov ds,ax
mov es,ax
mov ax,0600h
call q10scr
call q20curs
call c100pen
cmp errcde,00
jz a20loop
retloop:
call d10proc
cmp namelen,00
jne a20loop
ret
begin endp
60. Напишите программу, которая выводит файл на экран.
c100pen proc near
mov ah,16h
lea dx,fcbrec
int 21h
cmp al,00
jnz c20
mov fcbrcsz,reclen
lea dx,namedta
mov ah,1ah
int 21h
ret:
lea dx,opnmsg
call x10err
ret
c100pen endp
61. Закодируйте два макроопределения для умножения:
а) MULTBY должна генерировать код для умножения байта на
байт;
б) MULTWD должна генерировать код для умножения слова на
слово.
Для множителя и множимого используйте в макроопределении
формальные параметры. Напишите небольшую программу, в которой используются
соответствующие макрокоманды и определены необходимые области данных.
А)
MULTBY MACRO
ASSUME CS:CSEG,DS:DSEG,SS:STACK;ES:DSEG
PUSH DS
FLDA DB 23DB 21FLDA,FLDB
ENDM
Б)MACRO
ASSUME CS:CSEG,DS:DSEG,SS:STACK;ES:DSEG
PUSH DS
FLDA DW 12DW 34FLDA,FLDB
ENDM