微型计算机技术及应用实验报告1.docx
《微型计算机技术及应用实验报告1.docx》由会员分享,可在线阅读,更多相关《微型计算机技术及应用实验报告1.docx(18页珍藏版)》请在冰点文库上搜索。
《微型计算机技术及应用》实习报告
2016年12月30日
一实验要求.............................................................................................................................................................................3
二实验原理.............................................................................................................................................................................3
三代码结构.............................................................................................................................................................................3
四代码及注释.........................................................................................................................................................................3
五代码运行截图...................................................................................................................................................................20
一实验要求
把一开始做的密码验证、进入图形界面、自己设置调色板并画图、画窗口、
显示图像、定时中断控制、汉字显示以及多任务的实现等等整合起来,做成
一个简单的可以U盘启动的简易系统,还可以加上简易输入法和动画等,
每个人根据自己的能力和设想来完成最终的版本。
二实验原理
输入密码(huang),后台检测是否正确。
正确,进入优盘启动系统桌面,
错误,显示Error。
并在桌面显示Hi!
欢迎字样。
并写明作者黄。
三代码结构
首先写一个密码验证程序,然后验证成功后跳转到图形显示界面。
在图形显
示界面上画上需要显示的汉字。
四代码及注释
;判断密码是否正确,正确输出success,失败输出failed
;AX称为累加器,是CPU中使用最多,功能最强,执行效率的寄存器.
;BX称为基地址寄存器
;CX称为计数寄存器.
;DX称为数据寄存器.
;没有本质上的区别,都是通用16位寄存器.
org0x8400
jmpboot_start
stringdb'Error!
'
string1db'Welcome!
'
string2db'huang';扩展键盘ascii码123456不同
;db1resb10
;在此处申请了一个10个字节的空间
boot_start:
movsi,0
;累加器初始化为0
for:
cmpsi,4
;计数器6输入的字符数大于等于6
jasuccess
;跳转s执行
movah,10h
;接受字符
int16h
;16h里的10h
cmpal,[string2+si];如果al不等于str2
jneerror
;执行error
incsi
;累加器+1
jmpfor
;循环执行
error:
;输入密码错误
movax,cs
;13h的参数
moves,ax
movbp,string
;Error!
movah,13h
;显示字符串
movbh,0
movbl,41h
;ah高四位为背景色,al低四位为字体色颜色系统默
认
movcx,6
;字数
movdh,2
;行数
movdl,3
;列数
moval,1
int10h
;调用13h
jmpend
success:
;输入密码正确
movax,cs
moves,ax
movbp,string1
movah,13h
movbh,0
movbl,41h
movcx,8
movdh,2
movdl,3
moval,1
int10h
jmpfor4
for4:
;图像部分
movAH,00h
;进入图形模式
movAL,13h
;显示字符串
INT10H
movax,0900h
;调色板信息已经被写入内存9036H位置
moves,ax
;接下来256位为调色板信息
movbx,0036h
;9000到9036H为图片信息BMP
movch,0h
for2:
moval,ch
;dx端口编号
movdx,3c8h
;al端口值
outdx,al
;开始编辑调色板
movdx,3c9h
;R
moval,byte[es:
bx+2];div/4
shral,1
;shr为逻辑右移指令
shral,1
;颜色太深,除以4
outdx,al
moval,byte[es:
bx+1];G
shral,1
shral,1
outdx,al
moval,byte[es:
bx]
;B
shral,1
shral,1
outdx,al
addbx,4
incch
cmpbx,0436h
jax
jmpfor2
x:
;画板信息
movax,0xa000
;段基址
movds,ax
movbx,0
;偏移地址
movax,0900h
;图片内存地址
moves,ax
movbp,0436h
addbp,0xFA00
;320*200=64000到图片尾部
for3:
movcl,byte[es:
bp]
movbyte[ds:
bx],cl
incbx
subbp,1
;倒着画
cmpbx,0xFA00
;检测图片是不是画完了
jaz
;画完了结束
jmpfor3
;没有执行循环
z:
movax,0a000h
;起始点
moves,ax
;段基址
movbx,57e4h
;最初起始点70*320+100=22500
movax,0
;初始化
a:
movbyte[es:
bx],04eh
;04eh红色画点
addbx,320
;每隔320像素点画一次
cmpbx,0a2e4h
;判断是否到达终止点130*320+100=41700
jab
;到达终点跳到下一个起始点
jmpa
;未到到终点执行循环
b:
movbx,7d64h
;下一个起点100*320+100=32100
c:
movbyte[es:
bx],04eh
addbx,1
cmpbx,7d82h
;100*320+130=32130
jad
jmpc
d:
movbx,5802h
;70*320+130=22530
e:
movbyte[es:
bx],04eh
addbx,320
cmpbx,0a302h
;130*320+130=41730
jaf
jmpe
f:
movbx,5820h
;70*320+160=22560
g:
movbyte[es:
bx],04eh
addbx,320
cmpbx,64a0h
;80*320+160=25760
jah
jmpg
h:
movbx,7da0h
;100*320+160=32160
i:
movbyte[es:
bx],04eh
addbx,320
cmpbx,0a320h
;130*320+160=41760
jaj
jmpi
j:
movbx,583eh
;70*320+190=22590
k:
movbyte[es:
bx],04eh
addbx,320
cmpbx,7dbeh
;100*320+190=32190
jal
jmpk
l:
movbx,96beh
;120*320+190=38590
m:
movbyte[es:
bx],04eh
addbx,320
cmpbx,0a33eh
;130*320+190=41790
jan
jmpm
n:
movbx,1914h
;20*320+20=6420黄字开始
o:
movbyte[es:
bx],04h
addbx,1
cmpbx,1950h
;20*320+80=6480第一横
jap
jmpo
p:
movbx,3200h
;40*320=12800第二横开始
q:
movbyte[es:
bx],04h
addbx,1
cmpbx,3264h
;40*320+100=12900
jar
jmpq
r:
movbx,28h
;40第三竖开始
s:
movbyte[es:
bx],04h
addbx,320
cmpbx,3228h
;40*320+40=12840
jat
jmps
t:
movbx,3ch
;60第四竖开始
u:
movbyte[es:
bx],04h
addbx,320
cmpbx,323ch
;40*320+60=12860
jav
jmpu
v:
movbx,4b1eh
;60*320+30=19230第五竖
w:
movbyte[es:
bx],04h
addbx,320
cmpbx,7d1eh
;100*320+30=32030
jaxx
jmpw
xx:
movbx,4b1eh
;60*320+30=19230第六横
y:
movbyte[es:
bx],04h
addbx,1
cmpbx,4b46h
;60*320+70=19270
jaaa
jmpy
aa:
movbx,4b46h
;60*320+70=19270第七竖
bb:
movbyte[es:
bx],04h
addbx,320
cmpbx,7d46h
;100*320+70=32070
jacc
jmpbb
cc:
movbx,641eh
;80*320+30=25630第八横
dd:
movbyte[es:
bx],04h
addbx,1
cmpbx,6446h
;80*320+70=25670
jaee
jmpdd
ee:
movbx,7d1eh
;100*320+30=32030第九横
ff:
movbyte[es:
bx],04h
addbx,1
cmpbx,7d46h
;100*320+70=32070
jagg
jmpff
gg:
movbx,3eb2h
;50*320+50=16050第十竖
hh:
movbyte[es:
bx],04h
addbx,320
cmpbx,7d32h
;100*320+50=32050
jaii
jmphh
ii:
movbx,9628h
;120*320+40=38440第十一撇
jj:
movbyte[es:
bx],04h
addbx,319
cmpbx,0af14h
;140*320+20=44820
jakk
jmpjj
kk:
movbx,963ch
;120*320+60=38460第十二捺
ll:
movbyte[es:
bx],04h
addbx,321
cmpbx,0af50h
;140*320+80=44880
jaz
jmpll
end:
jmpend
;成功后跳转
jmpend
;成功后跳转
五代码运行截图
输入密码错误
输入密码正确