华电微机原理汇编实验参考程序.docx

上传人:b****6 文档编号:5257768 上传时间:2022-12-14 格式:DOCX 页数:19 大小:22.58KB
下载 相关 举报
华电微机原理汇编实验参考程序.docx_第1页
第1页 / 共19页
华电微机原理汇编实验参考程序.docx_第2页
第2页 / 共19页
华电微机原理汇编实验参考程序.docx_第3页
第3页 / 共19页
华电微机原理汇编实验参考程序.docx_第4页
第4页 / 共19页
华电微机原理汇编实验参考程序.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

华电微机原理汇编实验参考程序.docx

《华电微机原理汇编实验参考程序.docx》由会员分享,可在线阅读,更多相关《华电微机原理汇编实验参考程序.docx(19页珍藏版)》请在冰豆网上搜索。

华电微机原理汇编实验参考程序.docx

华电微机原理汇编实验参考程序

实验一

1-1.从3500H内存单元开始建立0~15共16个数据(建立的数据为00H,01H~09H.0AH~0FH)。

并运行之,检查记录结果。

分析①:

3500H为偏移地址,对应的段基址采用默认的DS当前值;

②程序中,如果不涉及到堆栈,则堆栈段可省略;

源程序:

DATASSEGMENT

ORG3500H;指定数据存放的起始偏移地址

ANSWERDB16DUP(?

);为结果从偏移地址3500H开始连续预留16个字节单元

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVDI,3500H;程序开始设置数据区首地址

MOVCX,0010H;把字节数送入cx中(loop语句会用到)

MOVAL,00H;将初值OOH送入AL

RE:

MOV[DI],AL;写入第一字节

INCDI;地址指针+1

INCAL;将AL中的数据+1

LOOPRE;重复16次

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

1-2.如果建立的数据为BCD码表示的十进制数据(建立的数据应为00H,01H~09H,10H~15H),应如何修改上述程序.并运行之,检查记录结果

源程序:

DATASSEGMENT

ORG3500H;指定数据存放的起始偏移地址

ANSWERDB16DUP(?

);为结果从偏移地址3500H开始连续预留16个字节单元

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVDI,3500H;程序开始设置数据区首地址

MOVCX,0010H;把字节数送入cx中(loop语句会用到)

MOVAL,00H;将初值OOH送入AL

RE:

MOV[DI],AL;写入第一字节

INCDI;地址指针+1

INCAL;将AL中的数据+1

DAA;调整BCD码为10进制

LOOPRE;重复16次

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

1-3.编程完成1+2+3+4+5+6+7+8+9运算。

源程序:

DATASSEGMENT

SUMDB?

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVSUM,0

MOVAL,0

MOVDL,1

MOVCX,9

A1:

ADDAL,DL

DAA

INCDL

LOOPA1

MOVSUM,AL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

 

1-4.将内存3500H单元开始存放的0~9共10个字节数传递到3600H单元开始的数据区中(同一段内传送)。

DATASSEGMENT

ORG3500H

MEM1DB0,1,2,3,4,5,6,7,8,9

ORG3600H

MEM2DB10DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

MOVSI,3500H

MOVDI,3600H

MOVCX,10

A1:

MOVAL,[SI]

MOV[DI],AL

INCSI

INCDI

LOOPA1

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

1-5.在1-4题中,如果采用字数据传送,应该如何修改程序?

并运行之,检查记录结果。

源程序:

DATASEGMENT

ORG3500H

MEM1DB0,1,2,3,4,5,6,7,8,9

ORG3600H

MEM2DB10DUP(?

DATAENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATA,SS:

STACKS

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVSI,3500H

MOVDI,3600H

MOVCX,5

AGAIN:

MOVAX,[SI]

MOV[DI],AX

INCSI

INCSI

INCDI

INCDI

LOOPAGAIN

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

1-6.在1-4题中,如果采用串传送指令(MOVSB,MOVSW指令)如何修改程序?

并运行之,检查记录结果。

源程序:

DATASSEGMENT

ORG3500H

MEM1DB0,1,2,3,4,5,6,7,8,9

ORG3600H

MEM2DB10DUP(?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVES,AX

MOVSI,3500H

MOVDI,3600H

MOVCX,10

REPMOVSB

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

实验二

2-1.教材161页例题3.39

源程序:

DATASSEGMENT

TABLEDB0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225

DATADB5

RESULTDB?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVBX,OFFSETTABLE

MOVAH,0

MOVAL,DATA

ADDBX,AX

MOVAL,[BX]

MOVRESULT,AL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

查看过程:

-U

1404:

0000B80214MOVAX,1402

1404:

00038ED8MOVDS,AX

1404:

0005BB0000MOVBX,0000

1404:

0008B400MOVAH,00

1404:

000AA01000MOVAL,[0010]

1404:

000D03D8ADDBX,AX

1404:

000F8A07MOVAL,[BX]

1404:

0011A21100MOV[0011],AL

1404:

0014B44CMOVAH,4C

1404:

0016CD21INT21

1404:

00180000ADD[BX+SI],AL

1404:

001A0000ADD[BX+SI],AL

1404:

001C0000ADD[BX+SI],AL

1404:

001E0000ADD[BX+SI],AL

-G=014

AX=0019BX=0005CX=0038DX=0000SP=0000BP=0000SI=0000DI=0000

DS=1402ES=13F2SS=1402CS=1404IP=0014NVUPEIPLNZNAPENC

-D1402:

0

1402:

00000001040910192431-4051647990A9C4E1......$1@Qdy....

1402:

00100519000000000000-0000000000000000................

1402:

0020B802148ED8BB0000-B400A0100003D88A................

1402:

003007A21100B44CCD21-0000000000000000.....L.!

........

1402:

00400000000000000000-0000000000000000................

1402:

00500000000000000000-0000000000000000................

1402:

00600000000000000000-0000000000000000................

1402:

00700000000000000000-0000000000000000................

2.1编程完成Z=3x+4y-4,其中x、y为字节单元,z为字单元。

如果x、y为字单元,z为双字单元,,如何修改程序,并运行,给出结果

源程序:

DATASSEGMENT

XDB5

YDB5

ZDW?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVAL,X

MOVBL,3

MULBL

MOVDX,AX

MOVAL,Y

MOVBL,4

MULBL

ADDDX,AX

SUBDX,4

MOVZ,DX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

2-2、从BUFFER单元开始存放若干数据,求其中负数的个数存入MDAT字节单元中。

源程序:

DATASSEGMENT

BUFFERDB1,-2,3,-4,5,6

COUNTEQU$-BUFFER

MDATDB?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVBL,0

LEASI,BUFFER

MOVCX,COUNT

AGAIN:

MOVAL,[SI]

CMPAL,0

JGEA1

INCBL

A1:

INCSI

LOOPAGAIN

MOVMDAT,BL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

2-3、修改程序,使其能求出数据区中正数的个数,存入PDAT单元中。

DATASSEGMENT

BUFFERDB1,-2,3,-4,5,6

COUNTEQU$-BUFFER

MDATDB?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVBL,0

LEASI,BUFFER

MOVCX,COUNT

AGAIN:

MOVAL,[SI]

CMPAL,0

JLEA1

INCBL

A1:

INCSI

LOOPAGAIN

MOVPDAT,BL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

2-5.调用DOS功能,在屏幕上显示0~9.。

源程序:

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVCX,10

MOVDL,30H

NEXT:

MOVAH,02H

INT21H

INCDL

LOOPNEXT

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

调用DOS功能,在屏幕上显示0+1+2+3的结果。

源程序:

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVCX,3

MOVAL,1

MOVDL,0

NEXT:

ADDDL,AL

INCAL

LOOPNEXT

ADDDL,30H

MOVAH,02H

INT21H

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

2-6、(选作)。

调用DOS功能,在屏幕上显示0+1+2+3+4+5+6+7+8+9的结果

源程序:

DATASSEGMENT

SUMDB?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVCX,9

MOVAL,1

MOVDL,0

NEXT:

ADDDL,AL

INCAL

LOOPNEXT

MOVAH,0

MOVAL,DL;AX存放和

MOVBL,10

DIVBL;AX/10商(4)存在AL,余数(5)存在AH

MOVBX,AX;将结果存到BX

MOVDL,BL

ADDDL,30H

MOVAH,2

INT21H;显示商4

MOVDL,BH

ADDDL,30H

MOVAH,2

INT21H;显示余数5

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

实验三

3-1、教材习题3.12

已知从DS:

2200H,ES:

3200H单元起分别存放20个ASCII的字符。

找出这两个字符串中第一个不同字符的位置(段内偏地址),并放入DS:

22A0H开始的连续两个字单元中。

请设计完成此任务的程序段。

(1)使用通常用的比较指令(CMP)实现;

(2)使用数据串比较指令(CMPSB)实现

源程序:

DATASSEGMENT

ORG2200H

DATA1DB‘01234567890123456789’

ORG22A0H

DW2DUP(?

DATASENDS

ESEGSEGMENT

ORG3200H

DATA2DB‘01234587890123456789’

ESEGENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,ES:

ESEG

START:

MOVAX,DATAS

MOVDS,AX

MOVAX,ESEG

MOVES,AX

MOVSI,2200H

MOVDI,3200H

MOVCX,20

AGAIN:

MOVAL,[SI]

CMPAL,[DI]

JNZDONE

INCSI

INCDI

LOOPAGAIN

JMPEXIT

DONE:

MOVBX,22A0H

MOV[BX],SI

EXIT:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

3-2、教材习题3.21

编写程序段,在数据区0000H:

2000H开始100字节范围内,查找字符'A',若找到,则将偏移地址送入DX,没有找到,则结束。

源程序:

DATASSEGMENT

ORG2000H

DATADB'B','C','A','D'

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

CLD

MOVDI,2000H

MOVCX,100

MOVAL,'A'

REPNESCASB

JNZSTOP

DECDI

MOVDX,DI

STOP:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

3-3、教材习题3.34

在数据区中,以TABLE开始连续存放0~6的立方值(称为立方表),设任给一数x(0≤x≤6),x在TAB1单元,查表求x的立方值,并把结果存入TAB2单元。

源程序:

DATASSEGMENT

TABLEDB0,1,4,9,16,25,36

TAB1DB3

TAB2DB?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVBX,OFFSETTABLE

MOVAH,0

MOVAL,TAB1

ADDBX,AX

MOVDL,[BX]

MOVTAB2,DL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

方法2:

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVBX,OFFSETTABLE

MOVAL,TAB1

XLAT

MOVTAB2,AL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

3-4、教材习题3.36

编写程序,计算下面函数的值。

源程序:

DATASSEGMENT

XDB-5

SDW?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVAL,X

CMPAL,0

JGEA1

MOVBL,2

JMPDONE

A1:

CMPX,10

JGA2

MOVBL,3

JMPDONE

A2:

MOVBL,4

DONE:

IMULBL

MOVS,AX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

3-5、教材习题3.39

两个多字节压缩BCD码数9876543219H和1234567891H,它们分别按低位字节在前高位字节在后存放在变量A1和A2中,求它们的和与差,并将结果放在变量SUM和DEF中

源程序:

DATASSEGMENT

A1DB19H,32H,54H,76H,98H

A2DB91H,78H,56H,34H,12H

SUMDB6DUP(?

DEFDB6DUP(?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

LEASI,A1

LEADI,A2

LEABX,SUM

MOVCX,5

CLC

AGAIN1:

MOVAL,[SI]

ADCAL,[DI]

DAA

MOV[BX],AL

INCBX

INCSI

INCDI

LOOPAGAIN1

LEASI,A1

LEADI,A2

LEABX,DEF

MOVCX,5

CLC

AGAIN2:

MOVAL,[SI]

SBBAL,[DI]

DAS

MOV[BX],AL

INCBX

INCSI

INCDI

LOOPAGAIN2

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

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

当前位置:首页 > PPT模板 > 卡通动漫

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

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