微机原理程序设计.docx

上传人:b****2 文档编号:12893179 上传时间:2023-04-22 格式:DOCX 页数:36 大小:242.78KB
下载 相关 举报
微机原理程序设计.docx_第1页
第1页 / 共36页
微机原理程序设计.docx_第2页
第2页 / 共36页
微机原理程序设计.docx_第3页
第3页 / 共36页
微机原理程序设计.docx_第4页
第4页 / 共36页
微机原理程序设计.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

微机原理程序设计.docx

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

微机原理程序设计.docx

微机原理程序设计

XX理工大学微机原理程序设计

 

-----------------------------------------------------------

 

实验一

实验要求:

试编写一个程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在显示终端上显示如下信息:

(1)如果三个数都不相等则显示0;

(2)如果三个数有两个相等则显示1;

(3)如果三个数都相等则显示2。

程序流程图:

程序清单:

DATASEGMENT

ARRAYDW1,2,3

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,ARRAY

MOVBX,ARRAY+2

MOVCX,ARRAY+4

CMPAX,BX

JEL

CMPBX,CX

JEL1

CMPAX,CX

JEL1

MOVDL,30H

JMPEXIT

L:

CMPBX,CX

JNEL1

MOVDL,32H

JMPEXIT

L1:

MOVDL,31H

EXIT:

MOVAH,2

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

ARRAY中三个数互不不相等:

ARRAY中三个数有两个相等:

ARRAY中三个数都相等:

实验二

实验要求:

从键盘输入一系列字符(以回车符结束),并按字母、数字及其它字符分类计数,最后显示出这三类计数结果。

程序流程图:

程序清单:

DATASEGMENT

COUNT_OF_LETTERDB'thenumberofletteris:

','$'

COUNT_OF_NUMBERDB'thenumberofnumberis:

','$'

COUNT_OF_CHARACTERDB'thenumberofcharateris:

','$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVBH,0

MOVBL,0

MOVCL,0

NEXT:

MOVAH,1

INT21H

CMPAL,0DH

JEEXIT

CMPAL,30H

JBCOUT_OF_CHARATER_ADD

CMPAL,39H

JBECOUT_OF_NUMBER_ADD

CMPAL,41H

JBCOUT_OF_CHARATER_ADD

CMPAL,5AH

JBECOUNT_OF_LETTER_ADD

CMPAL,61H

JBCOUT_OF_CHARATER_ADD

CMPAL,7AH

JBECOUNT_OF_LETTER_ADD

COUT_OF_CHARATER_ADD:

INCCL

JMPNEXT

COUT_OF_NUMBER_ADD:

INCBL

JMPNEXT

COUNT_OF_LETTER_ADD:

INCBH

JMPNEXT

EXIT:

CALLCRLF

LEADX,COUNT_OF_LETTER

MOVAH,09

INT21H

MOVAL,BH

CALLBIN_DEC

CALLCRLF

LEADX,COUNT_OF_NUMBER

MOVAH,09

INT21H

MOVAL,BL

CALLBIN_DEC

CALLCRLF

LEADX,COUNT_OF_CHARACTER

MOVAH,09

INT21H

MOVAL,CL

CALLBIN_DEC

CALLCRLF

RET

CRLFPROCNEAR

MOVAH,02

MOVDL,0DH

INT21H

MOVAH,02

MOVDL,0AH

INT21H

RET

CRLFENDP

BIN_DECPROCNEAR

PUSHBX

PUSHCX

ANDAX,00FFH

MOVCX,0

MOVBX,0

MOVDL,10

ROTATE:

DIVDL

MOVBL,AH

ANDAX,00FFH

PUSHBX

INCCX

CMPAX,10

JAEROTATE

MOVBX,AX

PUSHBX

INCCX

CONTINUE:

POPBX

ADDBL,30H

MOVDL,BL

MOVAH,02H

INT21H

LOOPCONTINUE

POPCX

POPBX

RET

BIN_DECENDP

CODEENDS

ENDSTART

运行结果:

实验三

实验要求:

假设已编制好五个歌曲程序,它们的段地址和偏移地址存放在数据段的跳转表SONGLIST中。

试编一程序,根据从键盘输入的歌曲编号1~5,转去执行五个歌曲程序中的一个。

程序流程图:

程序清单:

DATASEGMENT

SONGLISTDWMUSIC1,MUSIC2,MUSIC3,MUSIC4,MUSIC5

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

READLIST:

MOVAH,1

INT21H

SUBAL,'0'

CMPAL,0

JEEXIT

CMPAL,5

JAREADLIST

DECAL

MOVBX,0

MOVBL,AL

ADDBX,BX

JMPSONGLIST[BX]

JMPREADLIST

MUSIC1:

MOVDL,'1'

MOVAH,2

INT21H

JMPEXIT

MUSIC2:

MOVDL,'2'

MOVAH,2

INT21H

JMPEXIT

MUSIC3:

MOVDL,'3'

MOVAH,2

INT21H

JMPEXIT

MUSIC4:

MOVDL,'4'

MOVAH,2

INT21H

JMPEXIT

MUSIC5:

MOVDL,'5'

MOVAH,2

INT21H

JMPEXIT

EXIT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

运行结果:

 

实验四

实验要求:

试编写一个程序,从键盘接收一个个位数N,然后响铃N次。

(响铃的ASCII码为07H)。

程序流程图:

程序清单:

DATASEGMENT

TIPDB'PLEASEINPUTANUMBER:

','$'

DATAENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,TIP

MOVAH,09H

INT21H

MOVAH,01H

INT21H

ANDAX,01H

MOVCX,AX

BE:

MOVDL,07H

MOVAH,02H

INT21H

LOOPBE

CODESENDS

ENDSTART

运行结果:

输入数字后听到对应次数的响铃

实验五

实验要求:

从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。

程序流程图:

程序清单:

DATASEGMENT

S1DB0DH,0AH,'PLEASEINPUT:

$'

S2DB0DH,0AH,'TOTALNON_DIGITALARE:

$'

NUMDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

LEADX,S1

MOVAH,9

INT21H

NEXT:

MOVAH,01

INT21H

CMPAL,'$'

JEDOWN

CMPAL,'0'

JBNO09

CMPAL,'9'

JANO09

JMPNEXT

NO09:

INCNUM

JMPNEXT

DOWN:

LEADX,S2

MOVAH,9

INT21H

MOVAL,NUM

MOVAH,0

MOVDL,100

DIVDL

CALLDISP_P

MOVAL,AH

MOVAH,0

MOVDL,10

DIVDL

CALLDISP_P

XCHGAH,AL

CALLDISP_P

RET

DISP_PPROCNEAR

PUSHAX

MOVDL,AL

ADDDL,30H

MOVAH,2

INT21H

POPAX

RET

DISP_PENDP

CODEENDS

ENDSTART

运行结果:

实验六

实验要求:

试编制一个程序,把AX中存放的16进制数转换为ASCII码,并将对应的ASCII码依次存放在MEM数组中的四个字节中。

例如:

当(AX)=2A49H时,程序执行完后,MEM中的四个字节的内容为39H,34H,41H,32H。

程序流程图:

程序清单:

DATASEGMENT

MEMDB4DUP(?

NDW2A49H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

BEGIN:

MOVCH,4

MOVCL,4

MOVAX,N

LEABX,MEM

ROTATE:

MOVDL,AL

ANDDL,0FH

ADDDL,30H

CMPDL,3AH

JLNEXT

ADDDL,07H

NEXT:

MOV[BX],DL

INCBX

RORAX,CL

DECCH

JNZROTATE

RET

CODEENDS

ENDSTART

运行结果:

实验七

实验要求:

设有十个学生的成绩分别是76,69,84,90,73,88,99,63,100,80分,试编制一个子程序统计60~69分,70~79分,80~89分,90~99分和100分的人数,分别存放在S6,S7,S8,S9和S10单元中。

程序流程图:

程序清单:

DATASEGMENT

RESULTDB0DH,0AH,'THERESULT$'

GRADEDW76,69,84,90,73,88,99,63,100,80

S6DB0

S7DB0

S8DB0

S9DB0

S10DB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVCX,10

CALLCOUNT

CALLDISP

MOVAH,1

INT21H

RET

COUNTPROCNEAR

MOVSI,0

NEXT:

MOVAX,GRADE[SI]

MOVBL,10

DIVBL

MOVBL,AL

MOVBH,0

SUBBX,6

CMPBX,0

JAENEXT1

NEXT1:

INCS6[BX]

ADDSI,2

LOOPNEXT

RET

COUNTENDP

DISPPROCNEAR

LEASI,S6

MOVCX,5

LOOP1:

MOVDX,OFFSETRESULT

MOVAH,9

INT21H

MOVDL,[SI]

ADDDL,30H

MOVAH,2

INT21H

INCSI

LOOPLOOP1

RET

DISPENDP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

实验八

实验要求:

编写一个子程序嵌套的程序模块,分别从键盘输入姓名和电话号码(8位),并以一定的格式显示出来。

主程序TELLIST:

·显示提示符INPUTNAME:

·调用子程序INPUT_NAME输入姓名;

·显示提示符INPUTATELEPHONENUMBER:

·调用子程序INPUT_PHONE输入电话号码;

·调用子程序PRINT显示姓名和电话号码。

子程序INPUT_NAME:

·调用键盘输入子程序GET_CHAR,把输入的姓名存放在IN_BUFFER缓冲区中;

·把IN_BUFFER缓冲区中的姓名移入输出行OUT_NAME。

子程序INPUT_PHONE:

·调用键盘输入子程序GET_CHAR,把输入的电话号码存放在IN_BUFFER缓冲区中;

·把IN_BUFFER缓冲区中的电话号码移入输出行OUT_PHONE。

子程序PRINT:

显示姓名及电话号码,格式为:

NAMETELPHONE

××××××

子程序CET_CHAR:

从键盘输入以回车符结尾的字符串。

程序流程图:

程序清单:

DATASEGMENT

NO_OF_NAMEDB20

NO_OF_PHONEDB8

INBUFDB20DUP(?

OUTNAMEDB20DUP(?

),'$'

OUTPHONEDB8DUP(?

),'$'

MESSAGE1DB'PLEASEINPUTNAME:

','$'

MESSAGE2DB'PLEASEINPUTATELEPHONENUMBER:

','$'

MESSAGE3DB'NAME',16DUP(20H),'TEL.',13,10,'$'

ERRORMESSAGE1DB'YOUSHOULDINPUT8NUMBERS!

',13,10,'$'

ERRORMESSAGE2DB'YOUINPUTAWRONGNUMBER!

',13,10,'$'

FLAGDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVFLAG,0

LEADX,MESSAGE1

MOVAH,09

INT21H

CALLINPUT_NAME

CALLCRLF

LEADX,MESSAGE2

MOVAH,09

INT21H

CALLINPHONE

CALLCRLF

CMPFLAG,1

JEEXIT

CALLPRINTLINE

EXIT:

RET

INPUT_NAMEPROCNEAR

PUSHAX

PUSHDX

PUSHCX

MOVCX,0

MOVCL,NO_OF_NAME

CALLGETCHAR

MOVAX,0

MOVAL,NO_OF_NAME

SUBAX,CX

MOVCX,AX

MOVSI,0

NEXT1:

MOVAL,INBUF[SI]

MOVOUTNAME[SI],AL

INCSI

LOOPNEXT1

POPCX

POPDX

POPAX

RET

INPUT_NAMEENDP

INPHONEPROCNEAR

PUSHAX

PUSHDX

MOVCX,0

MOVCL,NO_OF_PHONE

CALLGETCHAR

CMPCX,0

JNZERROR1

MOVCL,NO_OF_PHONE

MOVSI,0

NEXT2:

MOVAL,INBUF[SI]

CMPAL,30H

JLERROR2

CMPAL,39H

JAERROR2

MOVOUTPHONE[SI],AL

INCSI

LOOPNEXT2

JMPEXIT2

ERROR1:

CALLCRLF

LEADX,ERRORMESSAGE1

MOVAH,09

INT21H

MOVFLAG,1

JMPEXIT2

ERROR2:

CALLCRLF

LEADX,ERRORMESSAGE2

MOVAH,09

INT21H

MOVFLAG,1

JMPEXIT2

EXIT2:

POPDX

POPAX

RET

INPHONEENDP

GETCHARPROCNEAR

PUSHAX

PUSHDX

MOVDI,0

ROTATE:

MOVAH,01

INT21H

CMPAL,0DH

JEEXIT1

MOVINBUF[DI],AL

INCDI

LOOPROTATE

EXIT1:

POPDX

POPAX

RET

GETCHARENDP

CRLFPROCNEAR

PUSHAX

PUSHDX

MOVDL,0DH

MOVAH,2

INT21H

MOVDL,0AH

MOVAH,2

INT21H

POPDX

POPAX

RET

CRLFENDP

PRINTLINEPROCNEAR

PUSHAX

PUSHDX

LEADX,MESSAGE3

MOVAH,09

INT21H

LEADX,OUTNAME

MOVAH,09

INT21H

LEADX,OUTPHONE

MOVAH,09

INT21H

POPDX

POPAX

RET

PRINTLINEENDP

CODEENDS

ENDSTART

运行结果:

实验九

实验要求:

从键盘输入一个不大于65535的无符号数,然后把它转换成等值的二进制数,最后把该数以十六进制数的形式在显示器上显示出来。

编程实现。

(将有独立功能的程序用子程序独立出来)

程序流程图:

程序清单:

DATASEGMENT

BUF1DB20

DB?

DB20DUP(?

BUF2DB20

DB?

DB20DUP(?

INPUTDB'INPUT:

$'

OUTPUTDB'OUTPUT:

$'

CTRLDB0DH,0AH,'$'

SHIDW0AH

IINTDW0

DATAENDS

STACKSEGMENT

DB200DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

LEADX,INPUT

MOVAH,9

INT21H

LEADX,BUF1

MOVAH,10

INT21H

LEADX,CTRL

MOVAH,9

INT21H

MOVCL,BUF1+1

LEASI,BUF1+2

MOVBX,0

MOVDL,[SI]

MOVDH,0

MOVAX,DX

SUBAL,30H

DECCL

INCSI

NEXT:

MUL[SHI]

ADDAH,DL

MOVDL,[SI]

MOVBL,DL

SUBBL,30H

ADDAX,BX

DECCL

INCSI

CMPCL,0

JNENEXT

MOV[IINT],AX

MOVCL,0

MOVAX,[IINT]

MOVDX,0

TO:

MOVBX,16

DIVBX

MOVBX,AX

PUSHDX

INCCL

MOVAX,BX

MOVDX,0

CMPAX,0

JNETO

MOVBL,4

SUBBL,CL

MOVCL,BL

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

当前位置:首页 > IT计算机

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

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