
lab4org
By: a guest on
May 4th, 2012 | syntax:
None | size: 3.86 KB | hits: 14 | expires: Never
¬Национальный Исследовательский Университет
Информационных Технологий, Механики и Оптики
Кафедра: Вычислительной Техники
Курс: Организации ЭВМ и Систем
Лабораторная работа 2
Вариант 3
Выполнили:
Студенты группы 2100
Проверил:
Скорубский В.И.
Санкт-Петербург
2011 год
Теория:
Ascii-код десятичной цифры занимает байт – в старшей тетраде добавляется 0x30.
Десятичное число размещается как символьная константа в программной памяти Code, преобразуется в шестнадцатеричное во внутренней регистровой памяти Data и результат записывается во внешнюю память данных Xdata.
Задание:
Заменить прописную букву “x” на заглавную в тексте.
“This programmator” – “a” – “This progrAmmAtor”
Программа на C51:
#include <reg51.h>
char a;
char code y[]=”This programmator”;
char xdata yy[17];
main()
{
char i;
for (i=0; i<<17; i++)
{
If (y[i] != ’a’)
yy[i] =y[i];
else
yy[i] = ‘A’;
}
while(1);
}
Листинг:
0000 E4 CLR A
0001 F500 R MOV i,A
0003 ?C0001:
0003 AF00 R MOV R7,i
0005 EF MOV A,R7
0006 33 RLC A
0007 95E0 SUBB A,ACC
0009 FE MOV R6,A
000A 7400 R MOV A,#LOW y
000C 2F ADD A,R7
000D F582 MOV DPL,A
000F 7400 R MOV A,#HIGH y
0011 3E ADDC A,R6
0012 F583 MOV DPH,A
0014 E4 CLR A
0015 93 MOVC A,@A+DPTR
0016 FD MOV R5,A
0017 6461 XRL A,#061H
0019 600E JZ ?C0004
001B 7400 R MOV A,#LOW yy
001D 2F ADD A,R7
001E F582 MOV DPL,A
0020 7400 R MOV A,#HIGH yy
0022 3E ADDC A,R6
0023 F583 MOV DPH,A
0025 ED MOV A,R5
0026 F0 MOVX @DPTR,A
0027 8014 SJMP ?C0003
0029 ?C0004:
0029 AF00 R MOV R7,i
002B EF MOV A,R7
002C 33 RLC A
002D 95E0 SUBB A,ACC
002F FE MOV R6,A
0030 7400 R MOV A,#LOW yy
0032 2F ADD A,R7
0033 F582 MOV DPL,A
0035 7400 R MOV A,#HIGH yy
0037 3E ADDC A,R6
0038 F583 MOV DPH,A
003A 7441 MOV A,#041H
003C F0 MOVX @DPTR,A
003D ?C0003:
003D 0500 R INC i
003F E500 R MOV A,i
0041 B411BF CJNE A,#011H,?C0001
0044 ?C0006:
0044 80FE SJMP ?C0006
; FUNCTION main (END)
Программа на С51 с косвенной адресацией:
#include <reg51.h>
char a, i;
char code *y = “This programmator”;
char xdata *yy;
char xdata *xx;
main()
{
xx;
for ( i=0; i<17; i++)
{
if (*y != ‘a’)
*yy = *y;
else *yy = ‘A’;
y++;
yy++;
}
while(1);
}
Программа на а51:
dseg at 8
xseg at 0
YY: ds 17
cseg at 0
jmp main
Y: db "This programmator"
main:
mov r0, #17
cikl:
clr a
mov a, #y
movc a, @a+dptr
mov b,a
cjne a, #61h,24h
subb a,#30h
movx @dptr,a
inc dptr
djnz r0,cikl
end