微机软件实验习题与答案完整版.docx

上传人:b****5 文档编号:6345449 上传时间:2023-01-05 格式:DOCX 页数:34 大小:36.85KB
下载 相关 举报
微机软件实验习题与答案完整版.docx_第1页
第1页 / 共34页
微机软件实验习题与答案完整版.docx_第2页
第2页 / 共34页
微机软件实验习题与答案完整版.docx_第3页
第3页 / 共34页
微机软件实验习题与答案完整版.docx_第4页
第4页 / 共34页
微机软件实验习题与答案完整版.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

微机软件实验习题与答案完整版.docx

《微机软件实验习题与答案完整版.docx》由会员分享,可在线阅读,更多相关《微机软件实验习题与答案完整版.docx(34页珍藏版)》请在冰豆网上搜索。

微机软件实验习题与答案完整版.docx

微机软件实验习题与答案完整版

微机原理软件实验

实验1两个多位十进制数相加的实验

实验内容:

将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA必首的5个内存单元中(低位在前),结果送回DATA攸t。

完整代码如下:

DATASSEGMENT

;此处输入数据段代码

STRING1DB'inputthefirstnumber:

','$'

STRING2DB13,10,nputthesecondnumber:

','$'

STRING3DB13,10theoutputis:

','$'

DATA1DB6DUP(00H),'$'

DATA2DB6DUP(00H)'$'

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

;此处输入代码段代码

LEASI,DATA1

LEADI,DATA2

L0:

LEADX,STRING1;打印字符申STRING1

MOVAH,09

INT21H

INPUT1:

;输入第一个数

MOVAH,01;输入字符至AL中

INT21H

CMPAL,'/'

JEL1

MOV[SI],AL

JMPINPUT1

L1:

LEADX,STRING2;打印字符申STRING2

MOVAH,09

INT21H

INPUT2:

;输入第二个数

MOVAH,01;输入字符至AL

INT21H

CMPAL,'/'

JEL2

MOV[DI],AL

INCDI

JMPINPUT2

L2:

MOVSI,0

CLC;活空进位标志位CF

PLUSE:

;相加;SUBDATA1[SI],30H

;SUBDATA2[SI],30H

;这里不能使用这两条指令,因为如果DATA1[5]=00H,00H-30H需要借位相减,使

CF=1

MOVAL,DATA1[SI]

ADCAL,DATA2[SI]

AAA;加法调整指令,可使两个ASCIB直接相加

MOVDATA1[SI],AL;和赋给DATA1[SI]

INCSI

LOOPPLUSE

L3:

LEADX,STRING3;打印字符申STRING3

MOVAH,09

INT21H

MOVCX,6

MOVSI,6

SHOW:

DECSI

CMPDATA1[SI],00H

JESHOW

SHOW2:

MOVDL,DATA1[SI]

ADDDL,30H

MOVAH,02

INT21H

CMPSI,0

JEL4

DECSI

JMPSHOW2

L4:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

运行结果如下:

输入为低位在前,即输入1234和99999相加实际上是4321和99999相加(即:

4321+99999=104320

0.

gDCsOasr*『4Zpuipe^A.WDUWkFfsk*

InpittSefirstiiiiiih^r:

lZ34/inputLht?

少忒烦idimmberthf?

nutputis'IWIKA

ririsss"的^cytocontinue

实验2两个数相乘的实验(无符号数相乘)

实验内容:

实现十进制数的乘法。

要求被乘数和乘数均以ASCII码形式各自顺

序存放在内存中,乘积在屏幕上显示出来。

完整代码如下:

DATASSEGMENT

;此处输入数据段代码

STRING1DB'theoutputis:

','$'

DATA1DB31H,32H,33H

DATA2DB35H,36H

DATASENDS

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

;此处输入代码段代码

MOVDL,10

MOVAL,DATA1[0];AL=31H

SUBAL,30H;AL=01H

MULDL;乘10;AL=10

ADDAL,DATA1[1];AL=10+32H

SUBAL,30H;AL=10+32H-30H=12

MULDL;AL=120

ADDAL,DATA1[2];AL=120+33H

SUBAL,30H

;AL=120+33H-30H=123

J

MOVAL,DATA2[0];AL=35H

SUBAL,30H;AL=5

MULDL;乘10;AL=50

ADDAL,DATA2[1];AL=50+36H

SUBAL,30H;AL=50+36H-30H=56

MULBL;AX=123x56=6888

SUBDX,DX;DX活零

MOVBX,1000

DIVBX;(DX,AX)/1000,商6在AX中,余数888在DX中

PUSHDX

MOVDL,AL

ADDDL,30H

MOVAH,02;打印最高位6

INT21H

POPDX

MOVAX,DX;888赋给AX

DIVBL;AX/100,商放在AL中,余数88放在AH中

MOVDL,AL

MOVCL,AH;!

!

!

这里千万不能把AH直接赋给AL,因为经过INT21H

指令后AL,AH会改变

ADDDL,30H

MOVAH,02打印第二位

INT21H

MOVBL,10

MOVAL,CL

SUBAH,AH滞空AH

DIVBL;AX/10,商放在AL中,余数8放在AH中

MOVDL,AL

MOVCL,AH

ADDDL,30H

MOVAH,02打印第三位

INT21H

MOVDL,CL

ADDDL,30H

MOVAH,02打印第四位

INT21H

CODESENDS

ENDSTART

 

实验3字符串匹配实验

match”,

实验内容:

编写程序实现两个字符申比较。

如果相同,则屏幕显示

否则屏幕显示”nomatch”,完整代码如下:

DATASSEGMENT

;此处输入数据段代码

PRINT1DB'inputthefirststring:

','$'

PRINT2DB13,10inputthesecondstring:

','$

PRINT3DB'match','$'

PRINT4DB'nomatch','$'

PRINT5DB13,10output:

','$'

STRING1DB30DUP(00H),13,10$'

STRING2DB30DUP(00H),13,10$'

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS,ES:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

;此处输入代码段代码

LEADX,PRINT1;打印字符申PRINT1

MOVAH,09

INT21H

LEASI,STRING1;STRING1地址赋给SI

LEADI,STRING2;STRING2地址赋给DI

INPUT1:

MOVAH,01;输入字符至AL

INT21H

CMPAL,'/';输入字符申以/‘‘结束,转L0

JEL0

MOV[SI],AL

INCSI

JMPINPUT1

L0:

LEADX,PRINT2;打印字符申PRINT2

MOVAH,09

INT21H

MOVAH,01;输入字符至AL

INT21H

CMPAL,'/'

JEL1

MOV[DI],AL

INCDI

JMPINPUT2

L1:

MOVCX,30;CX=30代表比较30次

MOVSI,00H

COMPARE:

;字符申一个一个比较

MOVAL,STRING1[SI];取STRING1存储单位中的第SI个字符赋给AL

CMPAL,STRING2[SI];AL与STRING2存储单位中的第SI个字符比较

JNENOMATCH

INCSI

LOOPCOMPARE

JMPMATCH

LEADX,PRINT5

MOVAH,09

INT21H

LEADX,PRINT4

MOVAH,09

INT21H

JMPL2

MATCH:

;打印output:

match

LEADX,PRINT5

MOVAH,09

INT21H

LEADX,PRINT3

MOVAH,09

INT21H

L2:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

运行结果:

UQS-^dx0.J4,,Cpj4peedeye岫;"r^ureekipCJrPregifJmEWTLM^

inputtlicFirststring"asdf/inputthesecondstring:

asdfzoutput:

FKltch

Prt欢diiykfcfytu

圈UOiBoK0./4Cpu部wdt3000cyclesFram^skp0,PragrauncDWltMP

inputthefipststririg^asdf/

input七hesecondstrin(|f:

asdfaz

output;iMiftMtch

Pres4iarykeytouonliitie

实验4从键盘输入数据并显示的实验

实验内容:

将键盘输入的2位十六进制数转换为等值的二进制数,并在屏幕上

显示。

歹0如:

键入f2,则显示11110010.完整代码如下:

DATASSEGMENT

;此处输入数据段代码

STRING1DB'pleaseinputastring:

','$'

STRING2DB13,10theoutputis:

','$'

STRING3DB13,10,nputerror',13,10$'

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

;此处输入代码段代码

L0:

LEADX,STRING1;打印字符申STRING1

MOVAH,09

INT21H

MOVAH,01;输入第一个字符至AL中

INT21H

CMPAL,'0'

JBERROR1

CMPAL,'9'

JBEENTER1

CMPAL,'A'

JBERROR1

CMPAL,'F'

JBEENTER1

CMPAL,'a'

JBERROR1

CMPAL,'f

JBEENTER1

ERROR1:

LEADX,STRING3;打印字符申STRING3

MOVAH,09

INT21H

JMPL0

ENTER1:

CALLASC2BCD;把ASCI码转化成十进制数BCD码

MOVCL,4

ROLAL,CL

MOVBL,AL;把高四位放到BL寄存器中

;输入第二个字符

MOVAH,01;输入第二个字符至AL中

INT21H

CMPAL,'0'

JBERROR1

CMPAL,'9'

JBEENTER2

CMPAL,'A'

JBERROR1

CMPAL,'F'

JBEENTER2

CMPAL,'a'

JBERROR1

CMPAL,'f

JBEENTER2

ENTER2:

CALLASC2BCD;把ASCI码转化成十进制数BCD码

ADDBL,AL

LEADX,STRING2;打印字符申STRING2

MOVAH,09

INT21H

MOVCX,9

CLC滞空标志位

SHOW:

;显示BL中的二进制数

DECCX

JENEXT;输出完八位之后返回DOS

ROLBL,1;循环左移一位,若溢出为1,则CF=1

JCM1

JMPM2

M1:

MOVDL,'1';若CF=1,转至M1丁印1'

MOVAH,02

INT21H

JMPSHOW

M2:

MOVDL,'0';若CF=0,转至M1打印0'

MOVAH,02

INT21H

JMPSHOW

NEXT:

MOVAH,4CH

INT21H

ASC2BCDPROC

JBEL1;若AL每,转L1

SUBAL,07H;若输入的数为A~F,或者a~f,则减乙A接在39H后面,

A~F=3AH~3FH,a~仁5AH~5FH

L1:

SUBAL,30H;减30H

ANDAL,0FH;滤除高位,保留低位,因为a~f恰好比A~F大20H,这样

a~f就和A~F的数值一样了

RET

ASC2BCDENDP

CODESENDS

ENDSTART

输出结果为:

(若输出不在0~9,A~F,a~f内,则重新输入)

DOJjuokCpuspeed300CcyH”frameskipDrProgram;DWTLMfl

jjiik[JLi1血strdiig;至lii|juterrur

pleaseInputastrlnq:

ds

inputerror

pleaseinputastrinqi3p

inputerror

pleaseinputostring;INtheoutputJR:

Il11«rtf)

Pi'emranykeytucuntiume

实验内容:

先在屏幕上显示“inputstring,”,输入字符申;再显示“result='

如为0~9的数字,则计数器加1,如为非数字,则直接显示,但不计数。

完整

代码如下:

DATASSEGMENT

;此处输入数据段代码

STRING1DB'inputstring:

','$'

STRING2DB13,10result=','$'

STRING3DB13,10zifu:

','$'

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

;此处输入代码段代码

LEADX,STRING1;打印字符申1

MOVAH,09

INT21H

MOVCX,0

MOVBX,0

INPUT:

MOVAH,01;输入字符至AL

INT21H

CMPAL,'/';输入/后转L0

JEL0

CMPAL,'0';下溢出转RUZHAN

JBRUZHAN

CMPAL,'9';上溢出转RUZHAN

JARUZHAN

INCCL;若为数字则计数器+1

JMPINPUT

RUZHAN:

;非数字字符入栈

PUSHAX

ADDBL,1;BL代表入栈的字符个数,方便待会输出

JMPINPUT

L0:

LEADX,STRING3;打印字符申3

MOVAH,09

INT21H

CHUZHAN:

POPAX

MOVDX,AX

MOVAH,02

INT21H

SUBBL,1

CMPBL,0;入了多少个栈,出多少栈

JNECHUZHAN

OUTPUT:

;输出数字的个数

LEADX,STRING2;打印字符申2

INT21H

MOVDL,CL

ADDDL,30H

MOVAH,02

INT21H

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

输出结果为:

(这里非数字字符输出顺序与输入顺序相反)

DO&Bn0.74rQ]u3000Frametbp0rProgramsDW1K1'1

inpitstrimg:

asdlnZ3k4j^lz

HituLijklidxfl

jrmi11-5

dniykrijtoconihmer

实验6改变年月日的实验

实验内容:

先在屏幕上显示“whatisthedate(mm/dd/yy)?

"从键盘输入的月

日年能把计算机的系统日期改为你键入的值。

完整代码如下:

DATASSEGMENT

S1DB0AH,0DH,"whatisthedate(mm/dd/yy)?

:

",'$'

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVDX,OFFSETS1

MOVAH,09H;打印字符申"whatisthedate(mm/dd/yy)?

:

"

INT21H

MOVDX,0H;DX=CH=0

KAISHI:

MOVCL,0;用来压缩移位

SHURU:

MOVAH,01H;输入字符存入AL中

INT21H

MOVAH,0AH;10武给AH

CMPAL,0DH;AL=13则结束,设置日期

JEGENGGAI

CMPAL,'/';计算来判断是年,月,日

JEZIZENG

ANDAL,0FH

CMPCH,0;等丁0则转月

JEYUE

CMPCH,1;等丁1则转日

JERI

CMPCH,2;等丁2则转年

JENIAN

ZIZENG:

INCCH

JMPSHURU;无条件转移至SHURU

YUE:

ADDDH,AL

CMPCL,0

JNZKAISHI

INCCL

MOVAL,DH

MULAH

MOVDH,AL

JMPSHURU;无条件转移至SHURU

RI:

ADDDL,AL

CMPCL,0

JNZKAISHI

INCCL

MOVAL,DL

MULAH

MOVDL,AL

JMPSHURU;无条件转移至SHURU

NIAN:

CMPCL,0

JNZXIABU

ADDBL,AL

MOVCL,03H;3赋给CL

JMPSHURU;无条件转移至SHURU

XIABU:

MOVAH,0滞空AH

MOVSI,BX;SI=BX

SHLBX,CL;BX左移三位,乘以8

SHLSI,1SI左移一位,乘以2

ADDBX,SI;两个相加,即乘以10

ADDBX,AX;BX加上新输入的数字

JMPSHURU

GENGGAI:

MOVAH,2BH;设置日期

INT21H

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

否则可能计算

输出结果为:

(设置2008年12月3日,注意如果要设置好系统,机的日期改变不了)

圈DDSBox3.74,Cpu申5000Firdrrf£扫0.PrL^gramcDWTFMP

ih^tisthedaiteCim/dirt^yyB?

:

lZ/GB/i9(J0H

Press两叫keytocantinue^

实验7将小写字母转换为大写字母的实验

实验内容:

接收键入字符(以Ctrl-c为结束),将小写字母变为大写字母,并

在屏幕上显示。

完整代码如下:

DATASSEGMENT

;此处输入数据段代码

STRING1DB13,10pleaseinputastring:

','$'

STRING2DB13,10,theoutputstringis:

','$'

DATADB100DUP(00H),'$'

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

;此处输入代码段代码

M:

LEASI,DATA

LEADX,STRING1;打印字符申1

MOVAH,09

INT21H

INPUT:

MOVAH,01;输入字符C

INT21H

CMPAL,03H

JEOUTPUT

CMPAL,'a'

JBM

CMPAL,'z'

JAM

SUBAL,20H;减20H变小写

MOV[SI],AL

INCSI

JMPINPUT

OUTPUT:

LEADX,STRING2;打印字符申2

LEASI,DATA

L1:

MOVDL,[SI]

CMPDL,00H

JEENDING

MOVAH,02

INT21H

INCSI

JMPL1

ENDING:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

运行结果为:

(如果输入的不在a~f中,则重新输入)

DOSBcx0-^4,Cpusprees:

100GuyHf.Fraincskip0,Progr占E:

DV/ltMP

uLeaseinputastring^

J|LtiixeiripitflKir0mg:

Fpledx已inputa零trMiqxdf切pleaseinputastrhig:

Isbgls^dfsaisq*theoirtputstrin(fis'LSHSLSJ3DF5ASG

PressanykeytoccmtLnue_

实验8排序实验(0~9)

实验内容:

从首地址为1000H开始存放10个数,将这些数按降序排列

完整代码如下:

DATASSEGMENT

;此处输入数据段代码

STRING1DB'pleaseinput10numbers:

','$'

STRING2DB13,10,thesortednumbersare:

','$'

ORG1000H

DATADB10DUP(00H),'$'

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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