mov ah,#0x88 int 0x15 mov [2],ax
!Print memory size mov ah,#0x03 xor bh,bh int 0x10 mov cx,#20
mov bx,#0x0007 mov bp,#msg3 mov ax,#0x1301 int 0x10 mov dx,[2] add dx,#0x0400 mov cx,#4 jmp print_hex print_hex:
mov ax,#0x0E0F rol dx,#4 and al,dl
cmp al,#0x0A jb ltA jnb nltA ltA:
add al,#0x30 jmp cntp nltA:
add al,#0x37 jmp cntp cntp: int 0x10
loop print_hex msg2:
.byte 13, 10
.ascii \ .byte 13, 10, 13, 10 msg3:
.byte 13, 10
.ascii \ .byte 13, 10, 13, 10
.text endtext: .data enddata: .bss endbss:
在目录\下执行: make boot Image
结果如图 3 所示;然后编译内核,执行: ../run
运行 Bochs 虚拟机;
四、实验截图:
实验三:系统调用
一、实验目的
1.建立对系统调用接口的深入认识; 2.掌握系统调用的基本过程; 3.能完成系统调用的全面控制; 4.为后续实验做准备。
二、实验仪器
Ubuntu 操作系统。
三、实验具体步骤
1.修改\文件,对新增系统调用增加相应的宏定义:
打开\目录,然后用\软件打开\, 在原第 131 行和第 132 行之间增加如下代码: #define __NR_iam 72 #define __NR_whoami 73
2.修改\文件,扩大系统调用函数的数量:
打开\目录,然后用\软件打开\, 将文件第 61 行改为: nr_system_calls = 74
3.修改\文件,使 0x80 号中断能调用相应的系统函数:
打开\目录,然后用\软件打开\, 在原第 72 行和第 73 行之间增加如下代码: extern int sys_iam(); extern int sys_whoami(); 4.创建\文件:
进入\目录,创建\文件,键入如图 1 所示代码; 5.修改\文件:
打开\目录,然后用\软件打开\,将文 件第 29 行修改为: signal.o mktime.o who.o
在原第 50 行和第 51 行之间增加如下代码:
who.s who.o:who.c ../include/unistd.h ../include/errno.h \\ ../include/asm/segment.h 5.编译内核; 6.挂载虚拟机硬盘,打开目录\,添加头文件\, 键入如图 2 所示代码; 7.将文件:
\(当前文件目录) 复制到以下路径:(cp 当前文件目录 复制目标目录)
\;(复制目标目录) 将文件:
\ 复制到以下路径:
\;
8.在\目录下编写程序\和\: 文件\的内容:
#include
#include
else printf(\ return 0; }
9.从\拷贝文件\和\至以下路径: \
10.取消虚拟机硬盘挂载,运行虚拟机: (1)键入以下三个命令: ①
gcc –o testlab2 testlab2.c ②
gcc -o iam iam.c -Wall ③
gcc -o whoami whoami.c -Wall (2)键入以下两个命令: ①
./iam NZGHDYTY ②
./whoami 之后键入: ./testlab2
(3) 键入以下两个命令: ①
chmod +x testlab2.sh ②
./testlab2.sh 四、实验结果