Автор: Пользователь скрыл имя, 20 Декабря 2010 в 19:58, лабораторная работа
Разработанная программа на языке Pascal переведена на Assembler.
Федеральное Агентство по образованию Российской Федерации
Государственное образовательное учреждение высшего профессионального образования
«Ижевский
Государственный Технический
Кафедра
ОВП и СУ
Отчет по лабораторной работе
По курсу: «Системное программное обеспечение»
Тема: «Изучение
компилятора Alter»
Выполнил:
Проверил:
доцент Фефелов Е.А.
Воткинск
2010г.
Исходный
текст программы
на Паскале:
Var
x, c : integer;
begin
for x := 0 to 9 do
begin
c := x*2;
write (c);
end;
end.
Текст
программы на Ассемблере:
.Model Small
.Stack 100h
.Data
__bufrw db 255 dup (?)
_x dw ?
_c dw ?
.Code
Main proc ;начало главной процедуры
mov ax,@data ;инициализация сегментного регистра ds
mov ds,ax
;начало цикла FOR №1
;присвоить переменной _x
mov _x,0 ;занести в переменную _x 0
mov bx,_x ;записать в BX _x
mov cx,9 ;занести в cx 9
jmp $+3 ;перейти на 3 байта вперёд
for_b_1:
inc bx ;инкремент BX
push bx ;записать BX в стек
push cx ;запсать CX в стек
mov _x,bx ;записать в перемену _x BX
;присвоить переменной _c
mov ax,_x ;занести в AX переменную _x
mov bx,2 ;занести в BX 2
xor dx,dx ;обнуляем DX
imul bx ;умножение со знаком
mov _c,ax ;записать в переменную _c ax
;обработка процедуры WRITE
mov ax,_c ;занести в AX переменную _c
call sl_itoa ;вызвать функцию преобразования
pop cx ;вернуть из стека в CX
pop bx ;вернуть из стека в BX
cmp bx,cx ;сравнить BX и CX
jne for_b_1 ;переход если не равно
;конец цикла FOR №1
mov ah,4ch ;вызов функции DOS
int 21h ;завершение программы
endp ;конец главной процедуры
sl_itoa proc ;начало процедуры преобразования
push ax bx cx dx ;
cmp ax, 0
jge Doit
push ax
mov dl, '-'
mov ah,2
int 21h
pop ax
neg ax
DoIt: call puti2
pop dx cx bx ax
ret
sl_itoa
endp
sl_utoa proc
push ax bx cx dx
call PutI2
pop dx cx bx ax
ret
sl_utoa
endp
Puti2 proc
mov bx, 10
xor dx, dx
div bx
or ax, ax
jz Done
push dx
call Puti2
pop dx
Done:
or dl, '0'
mov ah,2
int 21h
ret
PutI2
endp
end Main