微机原理实验.docx
- 文档编号:30443592
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:30
- 大小:92.60KB
微机原理实验.docx
《微机原理实验.docx》由会员分享,可在线阅读,更多相关《微机原理实验.docx(30页珍藏版)》请在冰豆网上搜索。
微机原理实验
本页仅作为文档封面,使用时可以删除Thisdocumentisforreferenceonly-rar21year.March
微机原理实验(含解答程序)(总37页)
微机原理实验课题
(共16个内容,附解答程序)
(汇编程序可以使用MASMFORWINDOWS)
1.将偏移地址为2000h开始的100个单元依次设置为0~99。
。
2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。
3.编写程序,在屏幕上分行显示自己的姓名、学号。
4.编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
在DEBUG下查看执行结果。
5.用分支结构设计程序实现符号函数
要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
6.在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
7.在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
8.将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
9.编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
10.将字形变量x以二进制数的形式在屏幕上显示输出。
11.将字形变量x以十六进制数的形式在屏幕上显示输出。
12.将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。
13.编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。
(要求:
在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。
14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。
(注意:
首先判断正负,正数直接转换,负数以补码的形式存放;要求显示输入数据的提示信息,用子程序实现(段内),显示转换后结果结果的功能用子程序实现(段间)
15.设计一个密码验证程序,在数据段设定一个密码,程序执行时首先显示输入密码的提示信息,要求输入密码,将输入的密码同设定的密码进行比较,相同则显示欢迎信息,密码错误显示错误信息并要求重新输入,三次错误则显示非法用户信息并退出程序。
可以定义宏实现多次需要的操作。
16.对以上程序进行修改,对初始密码利用某种算法进行加密,在比较时利用同样的算法对输入密码进行转换后再进行比较,增加对密码的保护。
解答程序如下
1.将偏移地址为2000h开始的100个单元依次设置为0~99。
。
STACKlSEGMENTSTACK;8088宏汇编程序
DW64DUP();定义堆栈段
STACKlENDS
CODESEGMENT
ASSUMECS:
CODE;定义代码段
START:
MOVDI,[2000H];程序开始设数据区首址
MOVCX,100;字节数送入cx中
MOVAL,0000
NEXT:
MOV[DI],AL;写入一字节
INCDI;修改地址指针
INCBX;修改数据
INCAL
DECCX
JNZNEXT
HLT
CODEENDS;代码段结束
ENDSTART;程序结束
2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。
STACKlSEGMENTSTACK
DW64DUP()
STACKlENDS
DATASEGMENT
XL1DW50H
XL2DW12H
XH1DW30H
XH2DW25H
YL1DW32H
YL2DW55H
YH1DW74H
YH2DW32H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,XL1
ADDAX,YL1
MOVBP,AX
MOVAX,XL2
ADDAX,YL2
MOVSI,AX
MOVAX,XH1
ADDAX,YH2
MOVDI,AX
MOVAX,XH2
ADDAX,YH2
MOVDX,AX
CODEENDS
ENDSTART
3.编写程序,在屏幕上分行显示自己的姓名、学号。
datassegment
namdb'namehulihutu$'
numdb'number$'
datasends
stackssegment
dw100dup()
stacksends
codessegment
assumecs:
codes,ds:
datas,ss:
stacks
start:
movax,datas
movds,ax
movdx,offsetnam
movah,9
int21h
movdl,0ah
movah,2
int21h
movdl,0dh
int21h
movdx,offsetnum
movah,9
int21h
codesegmentends
endstart
4.编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
在DEBUG下查看执行结果。
datasegment
xdw
pfdb0,01,04,9,16,25,36,49,64,81
ydw
promdw'pleaseinputanumber:
$'
dataends
codesegment
assumeds:
data,ss:
stack,cs:
code
start:
movax,data
movds,ax
movah,09h
movdx,offsetprom
int21h
movah,1
int21h
andal,0fh
movx,ax
leabx,pf
movax,x
xlat
movy,ax
movah,4ch
int21h
codeends
endstart
5.用分支结构设计程序实现符号函数
要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
DATASSEGMENT
xdb-4
ydb;此处输入数据段代码
dadb'y=1','$'
dendb'y=0','$'
xiaodb'y=-1','$'
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
moval,x
cmpal,0
JLnext
jgnext1
movy,0
leadx,den
movah,09h
int21h
jmpnext2
next1:
movy,1
leadx,da
movah,09h
int21h
jmpnext2
next:
movy,-1
leadx,xiao
movah,09h
int21h
next2:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
6.在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
DATASSEGMENT
ydb'error','$';此处输入数据段代码
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movah,1
int21h
cmpal,61h
jgenext1
jmpnext4
next1:
cmpal,7Ah
jlenext2
jmpnext4
next2:
subal,20h
next3:
movdl,al
movah,2
int21h
jmpnext5
next4:
leadx,y
movah,09h
int21h
next5:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
7.在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
DATASSEGMENT
shuzidb'digital','$'
zimudb'letter','$'
qitadb'other','$';此处输入数据段代码
DATASENDS
STACKSSEGMENT
stringdb;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movah,1;此处输入代码段代码
int21h
cmpal,30h
jgenext1
jmpnext6
next1:
cmpal,39h
jlenext2
cmpal,41h
jgenext3
jmpnext6
next3:
cmpal,5Ah
jlenext5
jmpnext8
next8:
cmpal,61h
jlenext6
jgenext4
next5:
leadx,zimu
movah,09h
int21h
jmpnext7
next4:
cmpal,7Ah
jlenext5
jmpnext6
next2:
leadx,shuzi
movah,09h
int21h
jmpnext7
next6:
leadx,qita
movah,09h
int21h
next7:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
8.将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
datasegment
xdb15
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
moval,x
andal,0fh
cmpal,9
JBEnext
addal,7
next:
addal,30h
movah,2
movdl,al
int21h
movah,4ch
int21h
codeends
endstart
9.编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
DATASSEGMENT
sdw;此处输入数据段代码
DATASENDS
STACKSSEGMENT
dw64dup();此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movbx,0001h
movdl,02h
lop2:
moval,bl
incdl;加1
muldl;无符号数乘法AX=oprd*al
addbx,ax
cmpax,00C8h;与200比较
jnalop2;不高于转移
movs,bx
movch,4
movcl,4
lop1:
rolbx,cl
movdl,bl
anddl,0Fh
cmpdl,09h
jbenext;低于等于转移
adddl,7
next:
adddl,30h
movah,2
int21h
decch
jnzlop1;非零转移
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
10.将字形变量x以二进制数的形式在屏幕上显示输出。
DATASSEGMENT
xdw1325h;此处输入数据段代码
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movbx,x
movcx,10h
lop1:
rolbx,1;不带cf的循环左移
jcnext;进位转移,即cf=1
movdl,30h;将0送入dl
jmpnext2
next:
movdl,31h;将1送入dl
next2:
movah,2
int21h
looplop1;循环执行lop1
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
11.将字形变量x以十六进制数的形式在屏幕上显示输出。
DATASSEGMENT
xdw211dh;此处输入数据段代码
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movbx,x
movch,4
movcl,4
lop1:
rolbx,cl
movdl,bl
anddl,0Fh
cmpdl,09h
jbenext;低于等于转移
adddl,7
next:
adddl,30h
movah,2
int21h
decch
jnzlop1;非零转移
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
12.将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。
DATASSEGMENT
memdb02h,01h,03h,04h,05h,06h,08h,09h,11h,88h,82h,84h,83h,96h,75h,90h,99h,28h,67h,97h;此处输入数据段代码
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
leadi,mem
movbl,19
movbp,80h
next1:
movsi,di
movcl,bl
next2:
moval,[si]
addsi,1
cmp[si],bp
jgenext3
cmpal,[si]
jgnext5
jmpnext4
next5:
movdx,[si]
mov[si-1],dx
mov[si],al
jmpnext4
next3:
cmpal,[si]
jgnext4
movdx,[si]
mov[si-1],dx
mov[si],al
next4:
deccl
jnznext2
decbl
jnznext1
leabx,mem
movcl,20
lop1:
movdl,[bx]
cmpdl,09h
jbnext
adddl,7
next:
adddl,30h
movah,2
int21h
incbx
jmplop1
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
13.编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。
(要求:
在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。
DATASSEGMENT
sumdw
stringdb'pleaseinputanumber:
','$'
ndb
string1db's=','$';此处输入数据段代码
DATASENDS
STACKSSEGMENT
dw100dup();此处输入堆栈段代码
STACKSENDS
CODES1SEGMENT
ASSUMECS:
CODES1,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
callshuru
movn,al
pushcs
calljieguo
moval,n
cmpal,40h
jbnext1
subal,07h
next1:
subal,30h
movcl,al
movax,0
movsi,1
lop1:
addax,si
incsi
deccl
jnzlop1
movsum,ax
leadx,string1
movah,09h
int21h
movbx,0000
movbx,sum
movah,2
movch,4
movcl,4
lop2:
rolbx,cl
movdl,bl
anddl,0fh
cmpdl,09h
jbenext
adddl,7
next:
adddl,30h
int21h
decch
jnzlop2
movah,4ch
int21h
shuruprocnear
leadx,string
movah,09h
int21h
movah,7
int21h
ret
shuruendp
MOVAH,4CH
INT21H
CODES1ENDS
codes2segment
assumeCS:
CODES2,DS:
DATAS,SS:
STACKS
jieguoprocfar
cld
moval,n
movch,2
movcl,4
lop:
rolal,cl
movdl,al
decch
jnzlop
movah,2
int21h
ret
jieguoendp
codes2ends
ENDSTART
14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。
(注意:
首先判断正负,正数直接转换,负数以补码的形式存放;要求显示输入数据的提示信息,用子程序实现(段内),显示转换后结果结果的功能用子程序实现(段间)
DATASEGMENT
PROMPTDB'INPUTHEXADECIMAL:
$'
HEXDB5
NNNDB0;实际输入的字符数
DB5DUP()
BINDW
ERRDB0AH,0DH,'ERROR!
IHAVENOTIMETOPLAYWITHYOU!
$'
DATAENDS
STACK1SEGMENTPARASTACK
DW20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK1
MOVSS,AX
LEADX,PROMPT
MOVAH,09H
INT21H
LEADX,HEX;输入ASCII码
MOVAH,0AH
INT21H
MOVBIN,0
LEASI,HEX+2
MOVCH,NNN
CONV:
MOVBL,[SI]
CMPBL,0DH
JZEND0;回车即结束
CMPBL,'0'
JlERROR;小于'0'转移
CMPBL,'9'
JAERROR;大于'9'转移
BIN1:
ANDBL,0FH;转换二进制数
MOVBH,0;弄成16位数
PUSHCX
MOVAX,BIN;原来的数字乘以10
MOVCX,10
MULCX
ADDAX,BX;加上新输入的
MOVBIN,AX;存结果
INCSI
POPCX
DECCH
JNZCONV
DISP:
MOVDL,13;显示回车
MOVAH,2
INT21H
MOVDL,10;显示换行
MOVAH,2
INT21H
MOVAX,BIN;取来数字
MOVCX,16;显示16位数
DDDD:
MOVDL,'0';先计划显示0
TESTAX,8000H;测试最高位
JZDDD1
INCDL;非0就显示1
DDD1:
PUSHAX
MOVAH,2
INT21H
POPAX
SHLAX,1;左移
LOOPDDDD
JMPEND0
ERROR:
LEADX,ERR
MOVAH,09H
INT21H
END0:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
15.设计一个密码验证程序,在数据段设定一个密码,程序执行时首先显示输入密码的提示信息,要求输入密码,将输入的密码同设定的密码进行比较,相同则显示欢迎信息,密码错误显示错误信息并要求重新输入,三次错误则显示非法用户信息并退出程序。
可以定义宏实现多次需要的操作。
DATASEGMENT
s1db'pleaseenteryourpassword:
','$'
s2db'passwordinputerror!
','$'
s3db'Youarewelcome,loginsuccessful!
','$'
s4db'pl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验