微机原理实验.docx

上传人:b****8 文档编号:30443592 上传时间:2023-08-15 格式:DOCX 页数:30 大小:92.60KB
下载 相关 举报
微机原理实验.docx_第1页
第1页 / 共30页
微机原理实验.docx_第2页
第2页 / 共30页
微机原理实验.docx_第3页
第3页 / 共30页
微机原理实验.docx_第4页
第4页 / 共30页
微机原理实验.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

微机原理实验.docx

《微机原理实验.docx》由会员分享,可在线阅读,更多相关《微机原理实验.docx(30页珍藏版)》请在冰豆网上搜索。

微机原理实验.docx

微机原理实验

本页仅作为文档封面,使用时可以删除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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1