Лабораторные работы №1-4 / lab1
.docМинистерство Образования Российской Федерации
Уфимский Государственный Авиационный Технический Университет
Кафедра ТК
Отчет по лабораторным работам
по предмету «Организация ЭВМ»
На тему «Трансляция, компоновка и отладка программ»
Выполнила: студент
Проверил: Даринцев О.В.
Уфа, 2005
Лабораторная работа №1
Трансляция, компоновка и отладка программ.
а) Набрать приведенную в тексте программу на ассемблере с использованием редактора текста.
SSEG SEGMENT PARA STACK 'STACK'
DB 64 DUP(0) ; Область стека
SSEG ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
SOURCE DB 10h,20h,30h,40h,50h ; эта таблица будет скопирована
DEST DB 5 DUP(99h) ; в эту таблицу в обратном порядке
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
ORG 100h
MAIN PROC FAR
PUSH DS ; поместить в стек номер блока адреса возврата
XOR AX,AX ; обнулить регистр АХ, тоже можно сделать командой
PUSH AX ; поместить в стек значение адреса возврата=0
MOV AX, DSEG ; инициировать адрес сегмента данных
MOV DS,AX
; присвоить элементам таблицы DEST нулевые начальные значения
MOV DEST,0 ; обнуление 1-ого байта
MOV DEST+1,0 ; обнуление 2-ого байта
MOV DEST+2,0 ; обнуление 3-его байта
MOV DEST+3,0 ; обнуление 4-ого байта
MOV DEST+4,0 ; обнуление 4-ого байта
MOV AL, SOURCE
MOV DEST+4,AL
MOV AL, SOURCE+1
MOV DEST+3,AL
MOV AL, SOURCE+2
MOV DEST+2,AL
MOV AL, SOURCE+3
MOV DEST+1,AL
MOV AL, SOURCE+4
MOV DEST,AL
MOV AL, 0
MOV AH, 4ch
INT 21h
MAIN ENDP
CSEG ENDS
END MAIN
б) В сегменте данных определить 5 двухбайтовых слов и скопировать таблицу в DEST.
SSEG SEGMENT PARA STACK 'STACK'
DB 64 DUP(0) ; Область стека
SSEG ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
SOURCE DW 1100h,2200h,3300h,4400h,5500h ; эта таблица будет скопирована
DEST DW 5 DUP(9999h) ; в эту таблицу в обратном порядке
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
ORG 100h
MAIN PROC FAR
PUSH DS ; поместить в стек номер блока адреса возврата
XOR AX,AX ; обнулить регистр АХ, тоже можно сделать командой
PUSH AX ; поместить в стек значение адреса возврата=0
MOV AX, DSEG ; инициировать адрес сегмента данных
MOV DS,AX
; присвоить элементам таблицы DEST нулевые начальные значения
MOV DEST,0
MOV DEST+2,0
MOV DEST+4,0
MOV DEST+6,0
MOV DEST+8,0
MOV AX, SOURCE
MOV DEST+8,AX
MOV AX, SOURCE+2
MOV DEST+6,AX
MOV AX, SOURCE+4
MOV DEST+4,AX
MOV AX, SOURCE+6
MOV DEST+2,AX
MOV AX, SOURCE+8
MOV DEST,AX
MOV AL, 0
MOV AH, 4ch
INT 21h
MAIN ENDP
CSEG ENDS
END MAIN
б) В сегменте данных определить 5 двойных слов и скопировать таблицу в DEST.
SSEG SEGMENT PARA STACK 'STACK'
DB 64 DUP(0) ; Область стека
SSEG ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
SOURCE DW 1000h, 1000h, 2000h, 2000h, 3000h, 3000h, 4000h, 4000h, 5000h, 5000h; эта таблица будет скопирована
DEST DW 10 DUP(9999h) ; в эту таблицу в обратном порядке
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
ORG 100h
MAIN PROC FAR
PUSH DS ; поместить в стек номер блока адреса возврата
XOR AX,AX ; обнулить регистр АХ, тоже можно сделать командой
PUSH AX ; поместить в стек значение адреса возврата=0
MOV AX, DSEG ; инициировать адрес сегмента данных
MOV DS,AX
; присвоить элементам таблицы DEST нулевые начальные значения
MOV DEST,0
MOV DEST+2,0
MOV DEST+4,0
MOV DEST+6,0
MOV DEST+8,0
MOV DEST+10,0
MOV DEST+12,0
MOV DEST+14,0
MOV DEST+16,0
MOV DEST+18,0
MOV AX, SOURCE
MOV BX, SOURCE+2
MOV DEST+16, AX
MOV DEST+18, BX
MOV AX, SOURCE+4
MOV BX, SOURCE+6
MOV DEST+12, AX
MOV DEST+14, BX
MOV AX, SOURCE+8
MOV BX, SOURCE+10
MOV DEST+8, AX
MOV DEST+10, BX
MOV AX, SOURCE+12
MOV BX, SOURCE+14
MOV DEST+4, AX
MOV DEST+6, BX
MOV AX, SOURCE+16
MOV BX, SOURCE+18
MOV DEST, AX
MOV DEST+2, BX
MOV AL, 0
MOV AH, 4ch
INT 21h
MAIN ENDP
CSEG ENDS
END MAIN