微机原理上机实验答案.docx

上传人:b****5 文档编号:4666195 上传时间:2022-12-07 格式:DOCX 页数:39 大小:22.31KB
下载 相关 举报
微机原理上机实验答案.docx_第1页
第1页 / 共39页
微机原理上机实验答案.docx_第2页
第2页 / 共39页
微机原理上机实验答案.docx_第3页
第3页 / 共39页
微机原理上机实验答案.docx_第4页
第4页 / 共39页
微机原理上机实验答案.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

微机原理上机实验答案.docx

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

微机原理上机实验答案.docx

微机原理上机实验答案

实验01A

将FFFFH送到AX,BX,CX,DX,SI,DI,BP寄存器

程序如下:

CODESEGMENT

ASSUMECS:

CODE

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

MOVAX,0FFFFH

MOVBX,AX

MOVCX,AX

MOVDX,AX

MOVSI,AX

MOVDI,AX

MOVBP,AX

;==============================

RET

STARTENDP

CODEENDS

ENDSTT

 

 

实验01B

将FFH送到内存1000H,1001H,1002H,1003H,1004H单元中

程序如下:

DATASEGMENT

ORG1000H

H1DB5DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

MOVAL,0FFH

MOVDI,1000H

MOVCX,5;循环5次

LP1:

MOV[DI],AL;FF放入1000H-1004H中

INCDI

DECCX

JNZLP1

;==============================

RET

STARTENDP

CODEENDS

ENDSTT

 

 

实验02A

编写一个加法程序,在数据段偏移地址1000H处开始,存放有两个3字节长的数据(高位对应高地址,低位对应低地址),求这两数据(十六进制数)的和,并将结果放在两数据之后,利用DEBUG调试程序,并求解:

CCBBAAH+223344H=?

CCBBAA+554433H=?

程序如下:

DATASEGMENT

ORG1000H

H1DB10DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

Movax,dseg

Movds,ax

;==============================

MOVSI,1000H

;不带最高位进位的全加器

MOVDI,1003H

MOVBX,1006H

MOVCX,3

CLC

AA:

MOVAL,[SI]

ADCAL,[DI]

MOV[BX],AL

PUSHF

;保护FR,这里其实没有必要,因为INC不会产生进位

INCSI

INCDI

INCBX

POPF

LOOPAA

 

MOVDL,0;最高位进位

ADCDL,0

MOVDI,1009H

MOV[DI],DL

;==============================

RET

STARTENDP

CODEENDS

ENDSTT

 

 

实验02B

用串传送指令把A程序的数据块(被加数、加数、和)偏移地址1000H开始的区域传递到同一数据段的偏移地址为1010H开始的区域,并利用DEBUG查看运行结果

程序如下:

DATASEGMENT

ORG1000H

H1DB20DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

MOVAX,DS;使ES段地址与DS相同

MOVES,AX

 

MOVSI,1000H

;不带最高位进位的全加器

MOVDI,1003H

MOVBX,1006H

MOVCX,3

CLC

AA:

MOVAL,[SI]

ADCAL,[DI]

MOV[BX],AL

PUSHF

;保护FR,这里其实没有必要,因为INC不会产生进位

INCSI

INCDI

INCBX

POPF

LOOPAA

 

MOVDL,0;最高位进位

ADCDL,0

MOVDI,1009H

MOV[DI],DL

 

MOVSI,1000H;串传送

MOVDI,1010H

MOVCX,5

CLD

REPMOVSW;一次传送一个字

;==============================

RET

STARTENDP

CODEENDS

ENDSTT

 

 

实验02C,选作

编写一个两位十进制数加法程序,当从键盘上输入:

n1n2+n3n4则在CRT上显示n1n2+n3n4=n5n6

程序如下:

DATASEGMENT

H1DB"Theaddendsallmustbetwofigures,insufficientadds0infront.",13,10,'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

MOVAX,DATA

MOVDS,AX

 

LEADX,H1;打印注释:

加数和被加数都必须为两位数,不够的前面补0

MOVAH,09H

INT21H

 

SUBCX,CX;CX清零

SUBDX,DX;DX清零

CLC;清CF

 

 

MOVAH,1;输入第1个数

INT21H

MOVCH,AL;放入CH

SUBCH,30H;ASCII码调整

 

INT21H;输入第2个数

MOVCL,AL;放入CL

SUBCL,30H;ASCII码调整

 

MOVAH,2;打印加号

MOVDL,2BH

INT21H

 

MOVAH,1;输入第3个数

INT21H

MOVDH,AL;放入DH

SUBDH,30H;ASCII码调整

 

INT21H;输入第4个数

MOVDL,AL;放入DL

SUBDL,30H;ASCII码调整

 

ADDCL,DL;ASCII码个位加法

 

CMPCL,10;比较个位数结果是否大于10

JNCAA;大于等于10则跳至AA

ADDCH,DH;个位不向十位进位的十位加法

 

JMPBB

 

AA:

ADDCH,DH;个位向十位有进位的十位加法

ADDCH,1

SUBCL,10

 

BB:

MOVDL,3DH;打印等号

MOVAH,2

INT21H

CMPCH,10;比较十位数结果是否大于10

JNCCC

 

MOVDL,0;打印十位不向百位进位的百位=0

INT21H

 

JMPCCC

 

CC:

MOVDL,31H;打印十位向百位进位的百位=1

INT21H

SUBCH,10

 

CCC:

ADDCH,30H;ASCII码调整

MOVDL,CH;打印结果中的十位

INT21H

 

ADDCL,30H;ASCII码调整

MOVDL,CL;打印结果中的个位

INT21H

 

MOVAH,1;暂停

INT21H

;==============================

RET

STARTENDP

CODEENDS

ENDSTT

 

 

实验03A

在数据段偏移地址0100H处开始,存放0-9的平方值(构成一个表格),任给一个自然数M在0110H单元中(0<=M<=9),查表求出M的平方值,并将结果放入0111H单元。

程序如下:

DATASEGMENT

ORG0100H

H1DB00,01,04,09,16,25,36,49,64,81

ORG0110H

H2DB7,?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

MOVAX,DATA

MOVDS,AX

 

MOVSI,OFFSETH2

MOVAL,[SI]

MOVBX,OFFSETH1

XLAT

INCSI

MOV[SI],AL

;==============================

RET

STARTENDP

CODEENDS

ENDSTT

实验03B

从内存1000H开始,建立19个自然递增然后又递减的数据串(0-9-0),用DEBUG查看运行结果。

程序如下:

DATASEGMENT

ORG1000H

H1DB20DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

MOVSI,OFFSETH1

MOVDI,OFFSETH1

ADDDI,12H

MOVAL,0

MOVCX,10

 

AA:

MOV[SI],AL

MOV[DI],AL

 

INCSI

DECDI

INCAL

 

LOOPAA

;==============================

RET

STARTENDP

CODEENDS

ENDSTT

 

 

实验03C,选作

在数据段偏移地址1000H处,安排部分七段LED显示码表,要求从键盘上任给一个0~F中的数,然后再屏幕上显示出其对应的码值。

七段共阴极LED显示码表见实验册P14。

程序如下:

DATASEGMENT

ORG1000H

H1DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

H2DB1DUP(?

TIPDB13,10,"TheinputnumbermustbeaHEX(0~F),presstoquit.",13,10,'$'

ERRDB13,10,"TheinputnumbermustbeaHEX(0~F).",13,10,'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

MOVAX,DATA

MOVDS,AX

 

LEADX,TIP;打印TIP信息

MOVAH,09H

INT21H

BEGIN:

MOVDL,13;打印换行

MOVAH,2

INT21H

 

MOVDL,10;打印回行首

INT21H

MOVAH,1;等待从键盘输入

INT21H

 

MOVSI,OFFSETH2;保护输入

MOV[SI],AL

 

CMPAL,27;如果按下键,跳至QUIT

JZQUIT

 

CALLDISPLAY0;调用DISPLAY0子程序

CALLASCII2HEX;调用ASCII2HEX子程序

 

CMPAL,0FFH;如果AL不等于FF(出错码)则跳至CORRECT

JNZCORRECT

LEADX,ERR;打印错误信息

MOVAH,09H

INT21H

JMPFINISH;跳至FINISH

CORRECT:

MOVBX,OFFSETH1;查表

XLAT

 

MOVAH,0

MOVBX,0

MOVBL,AL;分离AL的高4位和低4位,分离后AL中为高4位,BL中为低4位

ANDAL,0F0H

MOVCL,4

SHRAL,CL

ANDBL,0FH

 

CALLHEX2ASCII;调用HEX2ASCII

CALLDISPLAY;调用DISPLAY子程序

MOVAL,BL

CALLHEX2ASCII

CALLDISPLAY

 

MOVDL,72;打印字母"H"

MOVAH,2

INT21H

 

JMPFINISH

 

QUIT:

CALLESCAPE;调用ESCAPE子程序

 

FINISH:

JMPBEGIN

;==============================

RET

STARTENDP

 

ASCII2HEXPROCNEAR

CMPAL,30H;ASCII转16进制子程序

JBERROR;如果AL<0则跳至ERROR

CMPAL,39H

JBENUMBER;如果AL<=9则跳至NUMBER

CMPAL,46H

JAERROR;如果AL>F则跳至ERROR

 

SUBAL,07H

 

NUMBER:

SUBAL,30H

JMPDONE

 

ERROR:

MOVAL,0FFH

 

DONE:

RET

ASCII2HEXENDP

 

HEX2ASCIIPROCNEAR

CLC;16进制转ASCII子程序

DAA

ADDAL,0F0H

ADCAL,40H

RET

HEX2ASCIIENDP

 

DISPLAYPROCNEAR

PUSHDX;显示结果子程序

MOVDL,AL

MOVAH,2

INT21H

 

POPDX

RET

DISPLAYENDP

 

DISPLAY0PROCNEAR

PUSHAX;该子程序打印输入及":

"

PUSHDX

PUSHF

MOVDL,13

MOVAH,2

INT21H

 

MOVDL,10

INT21H

 

MOVDL,[SI];打印输入

INT21H

 

MOVDL,58;打印":

"

INT21H

 

POPF

POPDX

POPAX

RET

DISPLAY0ENDP

 

ESCAPEPROCNEAR

MOVAH,4CH;返回操作系统子程序

INT21H

RET

ESCAPEENDP

 

CODEENDS

ENDSTT

 

 

实验04A

把BX中的“1”的个数放到AL中,并在屏幕上显示“1”的个数。

程序如下:

CODESEGMENT

ASSUMECS:

CODE

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

 

CLC

MOVAX,0

MOVDX,0

 

MOVBX,000FH

MOVCX,16

CHECK:

SHLBX,1

ADCDL,0

CMPDL,1

JZCOUNT

CONTINUE:

LOOPCHECK

 

JMPFINISH

 

COUNT:

ADDAL,1

DAA

CLC

MOVDX,0

JMPCONTINUE

FINISH:

 

MOVAH,0

MOVBX,0

MOVBL,AL;分离AL的高4位和低4位,分离后AL中为高4位,BL中为低4位

ANDAL,0F0H

MOVCL,4

SHRAL,CL

ANDBL,0FH

 

CALLHEX2ASCII;调用HEX2ASCII

CALLDISPLAY;调用DISPLAY子程序

MOVAL,BL

CALLHEX2ASCII

CALLDISPLAY

;==============================

RET

STARTENDP

 

HEX2ASCIIPROCNEAR

CLC;16进制转ASCII子程序

DAA

ADDAL,0F0H

ADCAL,40H

RET

HEX2ASCIIENDP

 

DISPLAYPROCNEAR

PUSHDX;显示结果子程序

MOVDL,AL

MOVAH,2

INT21H

 

POPDX

RET

DISPLAYENDP

 

CODEENDS

ENDSTT

 

 

实验04B,选作

编写程序在CRT上显示图形(图形见实验册P17)。

程序如下:

CODESEGMENT

ASSUMECS:

CODE

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

 

MOVBL,14H

MOVBH,1

MOVCX,0AH

 

LP:

PUSHBX

CALLSPACE

CALLSTAR

CALLCRLF

POPBX

DECBL

ADDBH,2

LOOPLP

 

;==============================

RET

STARTENDP

 

SPACEPROCNEAR

;打印空格子程序

PUSHCX

MOVCX,0

MOVAH,2

MOVDL,32

MOVCL,BL

LP1:

INT21H

LOOPLP1

POPCX

 

RET

SPACEENDP

 

STARPROCNEAR

;打印"*"子程序

PUSHCX

MOVCX,0

MOVDL,2AH

MOVAH,2

MOVCL,BH

LP2:

INT21H

LOOPLP2

POPCX

RET

STARENDP

 

CRLFPROCNEAR

;回车换行子程序

MOVDL,13

MOVAH,2

INT21H

 

MOVDL,10

INT21H

 

RET

CRLFENDP

 

CODEENDS

ENDSTT

 

 

实验04C,选作

自动生成1至99BCD数并送屏幕显示,显示格式见实验册P19。

程序如下:

CODESEGMENT

ASSUMECS:

CODE

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

 

MOVBL,16

MOVAL,0

 

CALLPRINT

 

CALLCRLF

 

;==============================

RET

STARTENDP

 

PRINTPROCNEAR

;打印数字子程序

 

MOVAH,2

MOVDH,1

MOVCX,10

MOVBH,30H

LP2:

PUSHCX

MOVCX,10

MOVBL,30H

LP0:

CMPBH,30H

JZAA

JMPBB

AA:

CMPBL,30H

JZCON

BB:

MOVDL,BH

INT21H

 

MOVDL,BL

INT21H

CALLSPACE

CON:

INCBL

LOOPLP0

INCBH

POPCX

LOOPLP2

 

RET

PRINTENDP

 

SPACEPROCNEAR

;打印空格子程序

PUSHCX

MOVCX,0

MOVAH,2

MOVDL,32

MOVCL,2

LP1:

INT21H

LOOPLP1

 

INCDH

CMPDH,17

JZKK

JMPLL

KK:

CALLCRLF

MOVDH,1

LL:

POPCX

 

RET

SPACEENDP

 

CRLFPROCNEAR

;回车换行子程序

MOVDL,13

MOVAH,2

INT21H

 

MOVDL,10

INT21H

 

RET

CRLFENDP

 

CODEENDS

ENDSTT

 

 

实验05A

从首地址为BUF开始存放10个数(单字节无符号数),从这些数种找出最大值,存入MAX中,并显示到屏幕上。

程序如下:

DATASEGMENT

ORG1000H

BUFDB1H,2H,3H,4H,9H,5H,6H,0EH,8H,7H

ORG1020H

MAXDB1DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

STT:

PUSHDS

SUBAX,AX

PUSHAX

;==============================

MOVAX,DATA

MOVDS,AX

 

CALLCHAMAX

CALLHEX2ASCII

 

MOVDL,AL

MOVAH,2

INT21H

;==============================

RET

STARTENDP

 

CHAMAXPROCNEAR

 

MOVSI,OFFSETBUF

MOVAL,[SI]

MOVCX,9

INCSI

 

F0:

CMPAL,[SI]

JGEF1

MOVAL,[SI]

F1:

INCSI

LOOPF0

 

MOVDI,OFFSETMAX

MOV[DI],AL

 

RET

CHAMAXENDP

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

当前位置:首页 > 高中教育 > 高中教育

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

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