d3500

更新时间:2023-03-18 20:02:54 阅读: 评论:0

投资回报率怎么算-大象棋

d3500
2023年3月18日发(作者:手机串号)

1

实验一基本程序编程和程序调试

一、实验目的

1、掌握数码转换等基本程序设计的技巧和方法。

2、熟悉DEBUG命令。

3、学会和掌握用DEBUG调试程序的方法。

二、实验设备

PC机一台,装有DOS基本系统

三、实验内容及步骤

用DEBUG建立、汇编和运行调试程序的操作。DEBUG是DOS系统支持的用于汇编语言源程

序调试的系统软件。它共有19条命令完成相应的功能,命令及其格式可参阅附录一。

(一)DEBUG操作练习

1)实验调试程序

程序的功能是从3500H内存单元开始建立0-15共16个数据。程序如下:

地址(H)机器码(H)助记符

2000BF0035MOVDI,3500

2003B91000MOVCX,0010

2006B80000MOVAX,0000

20099ESAHF

200A8805MOVBYTE[DI],AL

200C47INCDI

200D40INCAX

200E27DAA

200FE2F9LOOP200A

2011F4HLT

2)实验步骤:

(1)输入与修改

①启动DOS,在DOS提示符下输入DEBUG后回车,屏幕立即显示DEBUG提示符“—”,

表明已进入DEBUG状态,可以执行DEBUG的各种命令。

②用DEBUG中的汇编命令“语言文字工作总结 A地址”将程序建立在内存单元中。在提示符“—”下键入:

2

“A2000”此时显示器上将会显示程序的段地址CS和偏移地址IP,你就可以输入以上的程序

了。即

显示169C:2000键入MOVDI,3500

169C:2003MOVCX,0010

169C:2011HLT

:::

③用反汇编命令“U地址”检查程序

在提示符“—”下,键入“U2000”,将从2000内存单元开始的内容反汇编,屏幕上显示

169C:2000BF0035MOVDI,3500

169C:2003B91000MOVCX,0010

169C:2006B8000MOVAX,0000

:::

:::

169C:2011F4HLT

当发现程序有错时,可用汇编命令“A地址”进行修改,如要修改200A单元中的指令,则键入

“A200A”,屏幕显示169C:200A,然后再键入MOVBYTE[DI],AL,就把错误的程

序改正了。

(2)显示和修改数据

①用修改内存单元命令“E地址”在指定内存单元中存入一个数。

如要在3500为首址的单元中存入14H和25H两个数据,可在提示符“—”下,键入:“3500”

3

显示169C:3500.键入14,按空格键

.25,按空格键

②用显示内存命令“D地址”检查指定单元的内容

在提示符“—”下,键入“D3500”

显示1489:35„„„„

1489:3510********„„„„

::

::

1489:3570********„„„„

若某单元内容有错则可用命令:“E地址”进行修正。

③用显示和修改命令“R”或“R寄存器名”显示寄存器或修改其内容

在提示符“—”下,键入“R”

显示AX=0000BX=0000CX=0000DX=0000SP=FFEE„„„„„„„„

DS=169CES=169CSS=169CCS=169CIP=2000„„„„„„„„„

要修改IP的内容时,键入命令“RIP”后,显示IP2000,在2000之后键入新内容。

(3)程序运行

程序的运行方式有单步运行、断点运行和连续运行几种方式。

①单步运行

输入DEBUG跟踪命令“T”或“T=地址”或“T=地址指定次数”,可从指定地址处运行该单元

中的一条指令,以后只要连续输入“T”命令就桃花怎么画 能连续执行一条一条指令。

如在提示符“—”下,键入“T=2000”

显示:

AX=0000BX=0000CX=001DDX-0000SP=FFEEBP=0000SI=0000DI=0000

DS=169CES=169CSS=169CCS=169CIP=2000NV„„„

169C:2003B91000MOVCX,0010

4

②断点运行

用运行命令“G=地址地址断点地址断点„”执行指定地址的程序

在提示符“—”下,键入“G=20002011”

显示169C:2011F4HLT表示这段程序已经执行完毕。

③连续运行

5

输入DEBUG命令“G=地址”,执行指定地址的程序

(4)用显示内存命令检查运行结果

在提示符“—”下,键入命令“D地址”,根据其中的内容判断程序运行是否正确。

如检查以上程序执行后的结果,在提示符“—”下,键入“D3500”,可显示

169C:35„„15

169C:3510

(二)数码转换程序及其调试

1、将ASCII码表示的十进制数转换为二进制数

1)程序设计的算法及其程序

十进制数据可表示为:

D

I

代表十进制数1,2,3,„9,0

上式可转换为:

由式(2)可归纳十进制数转换为二进制数的方法:从十进制的最高位Dn开始乘10加次位的操

作,将结果再乘10再加下一次位,如此重复,则可求出二进制数结果来。程序流程及参考程序如图

1-1。这里我们规定:被转换的ASCII码十进制数存放在3500H——3504H单位中。而转换结果存放

在3510H——3511H单元中。

2)实验步骤

)(







i

n

i

i

n

n

n

n

DDDD

)())))((





DDDDDD

nnn

i

n

i

i

6

(1)输入程序并检查无误。

(2)在3500H——3504H单元存入十进制数12的ASCII码,即E3500H↙,并输入3030303132H。

(3)G=2000↙,运行程序,并用CTRL+C来中断程序返回监控状态。

(4)用D3510↙来查看结果,应为:35100C00

(5)反复试几组数,考查程序的正确性。

地址(H)助记符注释

2000MOVSI,3500;源地址

2003MOVDI,3510;结果地址

2006MOVBX,000A;乘数10

2009MOVCX,0004;计数

200CMOVAH,00;AH清零

200EMOVAL,[SI];取被转换数

2010SUBAL,30;ASCII码变十进制数

2012IMULBX;高位(AX)*(BX)送AX

2014ADDAL,[SI+01];取下一位

7

1017SUBAL,30;ASCII码减30变十进制数

2019INCSI;源地址指针+1

201ALOOP2012;CX-1,若CX不等于零则继续

201CMOV[DI],AX;若CX等于零则存结果

201EINT3

图1-1

2将十进制数的ASCII码转换为BCD码

1)程序流程和程序

设从键盘输入的五位十进制数的ASCII码已存放在3500H起始的内存单元内,把它转换成BCD

码后,再按位分别存入350AH起始的内存单元内。若输入的不是十进制数的ASCII码,则对应存放

结果的内容为“FF”。一字节ASCII码取其低四位即变为BCD码,程序流程图及考程序如图1-2所

示。

2)实验步骤

(1)输入程序并检查无误。

(2)在3500H——3504H单元中存入五位十进制数的ASCII码,即

E3500↙,并输入31,32,33,34,35。

(3)G=2000↙,运行以上程序。

(4)D350A↙,显示结果为:

0000:350ACC„

8

(5)反复试几组数,考查程序的正确性。

地址(H)助记符注释

2000MOVCX,0005;循环计数器赋初值

2003MOVDI,3500;ASCII码首址

2006MOVBL,FF;错误标志送BL

2008MOVAL,[DI];送ASCII码至AL

200ACMPAL,3A;比较AL与3AH

200CJNB2014;不低于3A则转2014

200ESUBAL,30;低于3A则取ASCII码的低四位

2010JB2014;低于30则转2014

2012MOVBL,AL;否则AL内容送BL,取代FF

2014MOVAL,BL;结果或错误标志送AL

2016MOV[DI+0A],AL

2019INCDI

9

201ALOOP2006

201CINT3

图1-2

3将十六位二进制数转换为ASCII码表示的十进制数

1)程序及其流程

十六位二进制数的值域为0——65535,最大可转换为五位十进制数。

算法:五位十进制数可表示为:

Di:表示十进制数0——9。

因此,将十六位二进制数转换为五位ASCII码表示表示的十进制数,就是求D

1

——D

4

,并将它

化为ASCII码。程序流程图如图1-3所示,设源数据存于3500——3501H单元中,结果数存于3510

——3514H单元中。

2)实验步骤

(1)输入程序并检查无误。

(2)在3500——3501H单元中存放0C00,运行程序并检查结果,应看到3510——3514H单元中

的数依次为3高压海参 030303132。



DDDDDN

D

10

(3)反复试几组数,并运行程序、观察结果。

地址(H)助记符注释

2000MOVDX,[3500];取二进制数

2004MOVSI,3515;目标首址在3510

2007DECSI

2008MOVAX,DX

200AMOVDX,0000

200DMOVCX,000A

2010DIVCX;;除10

2012XCHGAX,DX

2014ADDAL,30

2016MOV[SI],AL

2018CMPDX,0000

201BJNE2007

201DCMPSI,3510;填余下高位为0

11

2021JZ202A;

2023DEC世界最大的城市广场 SI

2024MOVAL,30

2026MOV[SI],AL

2028JMP201D

202AINT3

图1-3

4、十六进制数转换为ASCII码

1)程序及其流程

经过CPU处理后的十六进制数存放在起始地址为3500H的内存单元中,把它们转换成ASCII

码之后,再分别存入起始地址为350AH的内存单元中。

从表2-1中可知,十六进制数加30H即可得到0H——9H的ASCII码,而要得到AH——FH的

ASCII码,则需再加7H。程序流程图及参考程序如图1-4所示。

2)实验步骤

(1)输入程序并检查无误。

(2)在3500——3501H单元中存入四位十六进制数203B,即

E3500↙,并输入3B,20。

(3)G=2000↙,运行以上程序

(4)D350A↙,显示结果为:

0000:350A42333032CC„

输入数据与结果ASCII码对应顺序相反。

12

(5)反复试几组数。考查程序的正确性。

地址(H)助记符注释

2000MOVCX,0004

2003MOVDI,3500

2006MOVDX,[DI]

2008MOVAX,DX

200AANDAX,000F;取低四位值

200DCMPAL,0A;;判是否“0”-“9”

200FJB2013;是“0”-“9”转2013

2011ADDAL,07;是“A”-“F”,加7

2013ADDAL,30;转换为ASCII码

2015MOV[DI+0A],AL

2018INCDI

2019PUSHCX;保护循环计数器内容

13

201AMOVCL,04;移位次数送CL

201CSHRDX,CL

201EPOPCX

201FLOOP2008

2021INT3

图1-4

5BCD码转换为二进制数

1)程序及其流程

设四个二位十进制数的BCD码存放在起始地址为3500H的单元中,转换出的二进制数码存入

起始地址为3510H的内存单元中,程序流程图及参考程序如图1-5所示。

地址(H)助记符注释

2000MOVCX,0004

2003MOVDI,3500

2006MOVAL,[DI]

2008ADDAL,AL;乘2

200AMOVBL,AL

2锦的成语 00CADDAL,AL;乘2

200EADDAL,AL;乘2

2010ADDAL,BL;乘10

2012INCDI

2013MOVAH,00

2015ADDAL,[DI];BCD码十位与个位加

2017MOV[DI+0F],AX;存结果图1-5

201AINCDI

201BLOOP2006

201DINT3

2)实验步骤

(1)输入程序并检查无误。

14

(2)在3500——3507单元中存入四个十进制数(12,34,56,78)的BCD码,即E3500↙输

入01,02,03,04,05,06,07,08。

(3)G=2000↙,运行以上程序。

(4)D3510↙,显示结果为35100CE00

(5)反复试几组数,考查程序的正确性。

15

实验二程序设计和PC机上程序调试操作实验

一、实验目的

1.掌握常用程序设计的基本技巧和方法。

2.学会和熟悉使用MASM汇编程序和LINK连接程序。

3.掌握使用PC机上编程和调试程序的方法。

二、实验设备

PC机一台,装有DOS基本系统和MASM宏汇编软件

三、实验内容及步骤

16

(一)按要求编写程序并在DEBUG下建立、汇编和调试程序

1、四字节二进制数的加法

1)程序设计要求

两个字的被加数存放于3500H-3503H单元,加数存于3504H-3507H单元(存放格式为

高位存高地址单元,低位存低地址单元),两数之和(如不超过四字节)存放于3508H-350BH单元。

2)实验步骤

(1)编写程序。

(2)在DEBUG下输入程序并检查(程序可存放于2000H-8000H单元)。

(3)在3500H-3507H单元中存入被加数014527和加数146758。

(4)运行程序后,检查3508H-350BH单元中内容。

(5)反复选择几组被加数和加数,检查结果,验证程序正确性。

0BB0:2000BE0035MOVSI,3500

0BB0:2003BF0835MOVDI,3508

0BB0:20068B04MOVAX,[SI]

0BB0:2008034404ADDAX,[SI+04]

0BB0:200B8905MOV[DI],AX

0BB0:200D8B440坚持不懈的例子 2MOVAX,[SI+02减龄刘海 ]

0BB0:2010134406ADCAX,[SI+06]

0BB0:20138905MOV[DI+2],AX

0BB0:2015CCINT3

17

DATASEGMENT

FIRSTDD014527

SECONDDD146758

THIRDDD?

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP(?)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVAX,WORDPTRFIRST

ADDAX,WORDPTRSECOND

MOVWORDPTRTHIRD,AX

MOVAX,WORDPTRFIRST+2

ADCAX,WORDPTRSECOND+2

MOVWORDPTRTHIRD+2,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

18

03000000FEFF0000

2、数据块的搬移

1)程序设计思想和要求

将内存中一数据区中数据(源数据块)传送到另一数据区(目的数据块)。

源数据块和目的数据块区在内存中的位置有两种情况:两区重叠和不重叠,如下图所示。

对于两个数据块不重叠的情况,数据的传送可从数据块的首址开始,也可从数据块的末址开始;

对于两个数据块重叠的情况,则要加以分析,否则重叠部分会因搬移而遭破坏。处理方法可以是:

在源数据块首址>目的数据块首址时,从数据块的首址开始传送,在数据块首址<目的数据块首址

时,从数据块的末址开始传送。

若源数据块首址存放于SI中,目的数据块首址存放于DI中,块字节数存放于CX中。要求设

计的程序能够实现不同情况下的数据块传送。

源数源

19

据块数

据目的

块数

目的数块

据块

2)实验步骤

(1)编写程序。

(2)在DEBUG下键入程序并检查(程序可存放于2000H-8000H单元)。

(3)确定源数据块和目的数据块区不重叠时的首址,确定数据块个数为16个。并在源数据区送

入任意16个数据。

0BB0:2000BE0035MOVSI,3500

0BB0:2003B91000MOVCX,0010

0BB0:20068A04MOVAL,[SI]

0BB0:2008884410MOV[SI+10],AL

0BB0:200B46INCSI

0BB0:200CE2F8LOOP2006

0BB0:200ECCINT3

(4)运行程序后,检查目的数据区的内容。

20

(5)确定源数据块和目的数据块区重叠时,源区首址>目的区首址时的首址,以及数据块个

数为16个,并在源数据区送入任意16个数据。运行程序后,检查目的数据区的内容。

0BB0:2000BE0C35MOVSI,350C

0BB0:2003B91000MOVCX,0010

0BB0:20068A04MOVAL,[SI]

0BB0:20088844F4MOV[SI-0C],AL

0BB0:200B46INCSI

0BB0:200CE2F8LOOP2006

0BB0:200ECCINT3

从350A开始输入12131415,得到

(6)确定源数据块和目的数据块区重叠时,源区首址<目的区首址时的首址,以及数据块个

数为16个,并在源数据区送入任意16个数据。运行程序后,检查目的数据区的内容。

0BB0:2000BE0035MOVSI,3500

21

0BB0:2003B91000MOVCX,0010

0BB0:20068A440FMOVAL,[SI+0F]

0BB0:200988441BMOV[SI+1B],AL

0BB0:200C4EDECSI

0BB0:200DE2F7LOOP2006

0BB0:200FCCINT3

从3500开始输入12131415,运行程序,得到:

3、无序数据块的递增排序

1)程序设计思想和要求

在首址为3000H的数据区中存放着一组无符号数,数据的长度存于3500H单元内,要求用冒

泡法对该区中的数据按递增次序排列。

冒泡法的基本思想是从最后一个数(或从第一个数)开始,依次把相邻两个数比较,即第N个

数与第N-1个数比较„,若大则交换,否则不交换,直到N个数都比较完为止。此时,其中最小

数排在最前列。然后将剩下的N-1个数再按前述方法进行,找到N-1个数中最小的数。以后重复进

行,直到全部按序排列。

2)实验步骤

(1)编写程序。

(2)在DEBUG下键入程序并检查(程序可存放于2000H-8000H单元,只要不与数据区重叠

即可)。

(3)确定数据个数并输入3500H单元中,在首址为3500H的数据区中存入任意无符号数。

(4)运行程序并检查运行结果。

(6)反复修改数据个数和数据区中的数,运行程序、观察结果,验证程序的正确性。

DATASEGMENT

ARRAYDB89,67,10,1,29,100,98,45

COUNTEQU8

22

FLAGDB-1

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP(?)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,CS:CODE

SORT:MOVAX,DATA

MOVDS,AX

MOVBX,COUNT

LP1:CMPFLAG,0

JEEXIT

DECBX

MOVCX,BX

MOVSI,0

MOVFLAG,0

LP2:MOVAL,ARRAY[SI]

CMPAL,ARRAY[SI+1]

JBENEXT

XCHGAL,ARRAY[SI+1]

MOVARRAY[SI],AL

MOVFLAG,-1

NEXT:ADDSI,1

LOOPLP2

JMPLP1

EXIT:MOVAH,4CH

INT21H

CODEENDS

ENDSORT

23

4、求数的平方根

1)程序设计思想和要求

减奇数法是一种求取近似平方根和平方根的整数部分的方法。有公式:

n(2K-1)=N

2

k=1

若要求数S的平方根S,则可以从S中减去奇数1、3、5„直到减为零或不够减下一个奇数

为止,然后统计减去的奇数个数,它就是S的近似平方根。

被开方数为一个足够大的二进制数,存于首址为4000H的单元内,它的方根存放在以4500H

为首的单元内。

2)实验步骤

(1)编写程序。

DAT桃树嫁接时间和方法 ASEGMENT

ORG4000H

SDW12345;3039H,开方后约为111(6FH)

DB4FEHDUP(?)

SQDW?

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP(?)

STACKENDS

24

CODESEGMENT

ASSUMEDS:DATA,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVCX,0000H

MOVBX,0001H

MOVAX,S

LP:SUBAX,BX

ADDBX,2

INCCX

CMPAX,0000H

JEEXIT

CMPAX,BX

JLEEXIT

JMPLP

EXIT:MOVSQ,CX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

(2)在DEBUG下输入程序并检查(程序可存放于2000H-8000H单元,和数据存放单元不要

重叠)。

(3)在4000H为首的单元中存入一个任意大的数。

(4)运行程序并检查运行结果。

(6)反复修改被开方数,运行程序、观察结果,验证程序的正确性。

实验三DOS系统功能调用及模块化程序设计

一、实验目的

2、熟悉DOS系统中基本功能子程序的作用及其调用方法。

3、结合DOS系统中键盘和显示功能子程序的调用和汇编语言源程序结构设计有关程序。

4、掌握复杂程序的设计思想—模块化程序设计的方法。

25

二、实验设备

PC机一台,装有DOS基本系统和MASM宏汇编软件。

三、实验内容及步骤

(一)DOS键盘、显示基本功能子程序调用

DOS提供了许多系统功能子程序可由程序设计者调用,其中最基本的是键盘和显示操作功能

的调用,具体调用的方法可参阅教科书。

1、显示缓冲区的字符串

1)实验程序:

DSEGSEGMENT

STRINGDB'WelcometoDONGHUAUniversity!',0dH,0aH,'$'

DSEGENDS

STACKSEGMENTPARASTACK'STACK'

DB256DUP(?)

STACKENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:CSEG,DS:DSEG,SS:STACK

START:PUSHDS

MOVAX,0

PUSHAX

MOVAH,9

MOVDX,SEGSTRING

MOVDS,DX

MOVDX,OFFSETSTRING

INT21H

RET

MAINENDP

CSEGENDS

ENDSTART

2)实验步骤:

(1)建立源程序文件。

(2)用MASM宏汇编程序和LINK连接程序生成执行程序。

(3)运行执行程序,输入不同字母,观察结果。

26

2、键盘输入小写字母,显示器显示大写字母

1)实验程序:

CSEGSEGMENT

ASSUMECS:CSEG

MAINPROCFAR

START:PUSHDS

MOVAX,0

PUSHAX

BEGIN:MOVAH,1

INT21H

CMPAL,'a'

JBSTOP

CMPAL,'z'

JASTOP

SUBAL,20H

MOVDL,AL

MOVAH,2

INT21H

JMPBEGIN

STOP:RET

MAINENDP

CSEGENDS

ENDSTART

2)实验步骤:

(1)建立源程序文件。

(2)用MASM宏汇编程序和LINK连接程序生成执行程序。

(3)运行执行程序,输入不同字母,观察结果。

27

3、从键盘输入一个二位十进制的月份数(01-12),显示相应月份的英文缩写名

1)程序及其结构

程序采用子程序的结构形式,子程序有:将输入的二位月份数转换为二进制数的子程序;从字符

表中查找相应的英文缩写的子程序;将月份的英文字母显示在屏幕上的子程序。

%程序运行存在问题,只要第一个数字不为0,则当输入的第二个数字为1或2时就会对应输出NOV

和DEC

程序如下:

DATASGSEGMENTPARA'DATA'

THREEDB3

MONINDB3,4DUP(?)

ALFMONDB'???','$'

MONTABDB'JAN','FEB','MAR','APR','MAY','JUN'

DB'JUL','AUG','SEP','OCT','NOV','DEC'

DATASGENDS

STACKSEGMENTPARASTACK'STACK'

STADB100DUP(?)

STACKENDS

CODESGSEGMENTPARA'CODE'

ASSUMECS:CODESG,DS:DATASG,ES:STACK

MAINPROCFAR

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATASG

MOVDS,AX

28

MOVES,AX

CALLINPUT

CALLLOCATE

CALLDISPLAY

RET

MAINENDP

INPUTPROCNEAR;键盘输入并将ASCⅡ码转换二进制数的子程序

PUSHDX

MOVAH,0AH;键盘输入月份数

LEADX,MONIN

INT21H

MOVAH,MONIN+2;将月份数字的ASCⅡ码取入AH和AL

MOVAL,MONIN+3

XORAX,3030H;将ASCⅡ码转换为BCD码

CMPAH,00

JZRETURN

SUBAH,AH

ADDAL,10

RETURN:POPDX

RET

INPUTENDP

LOCATEPROCNEAR;将月份数字转换为英文缩写字母的子程序

PUSHSI

PUSHDI

PUSHCX

LEASI,MONTAB

DECAL

MULTHREE

ADDSI,AX

MOVCX,03

CLD

LEADI,ALFMON

REPMOVSB

POPCX

POPDI

POPSI

RET

LOCATEENDP

DISPLAYPROCNEAR;屏幕显示子程序

PUSHDX

LEADX,ALFMON

29

MOVAH,09

INT21H

POPDX

RET

DISPLAYENDP

CODESGENDS

ENDMAIN

(二)采用DOS功能调用设计源程序,并运行调试程序

1、十进制加法和结果显示程序(自行设计)

1)程序设计要求

将数据段DSEG中的ADDOP1定义的双字变量的4位十进制数和附加段ESEG中的ADDOP2

定义的双字变量的4位十进制数相加,和存放于数据段DSEG中的SUM中,采用DOS显示功能调

用将和显示在屏幕上。

DSEGSEGMENT

ADDOP1DD1234

SUMDD?

DSEGENDS

ESEGSEGMENT

ADDOP2DD2345

ESEGENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP(?)

STACKENDS

CODESEGMENT

ASSUMEDS:DSEG,CS:CODE,ES:ESEG

START:MOVAX,DSEG

MOVDS,AX

MOVAX,ESEG

MOVES,AX

MOVAX,WORDPTRADDOP1

30

ADDAX,WORDPTRADDOP2

MOVWORDPTRSUM,AX

MOVAX,WORDPTRADDOP1+2

ADCAX,WORDPTRADDOP2+2

MOVWORDPTRSUM+2,AX

MOVBX,WORDPTRSUM+2

CALLDISPLAY

MOVBX,WORDPTRSUM

CALLDISPLAY

MOVAH,4CH

INT21H

DISPLAYPROCNEAR

MOVCX,10000D;DIVIDEBY10000

CALLDEC_DIV

MOVCX,1000D;DIVIDEBY1000

CALLDEC_DIV

MOVCX,100D;DIVIDEBY100

CALLDEC_DIV

MOVCX,10D;DIVIDEBY10

CALLDEC_DIV

MOVCX,1D;DIVIDEBY1

CALLDEC_DIV

RET;RETURNFROMBINIDEC

DEC_DIVPROCNEAR;;--------从位取出数字显示

MOVAX,BX;NUMBERLOWHALF

MOVDX,0;ZEROOUTHIGHHALF

DIVCX;DIVIDEBYCX

MOVBX,DX;REMAINDERINTOBX

MOVDL,AL;QUOTIENTINTODL

;PRINTTHECONTENTSOFDLONSCREEN

ADDDL,30H;CONVERTTOASCII

MOVAH,2H;DISPLAYFUNCTION

INT21H;CALLDOS

RET;RETURNFROMDEC_DIV

DEC_DIVENDP

;;------------------------------------------------------------------

DISPLAYENDP

31

CODEENDS

ENDSTART

2)实验步骤:

(1)建立源程序文件。

(2)用MASM宏汇编程序和LINK连接程序生成执行程序。

(3)运行执行程序,输入不同的加数和被加数,观察结果。

2、十进制加法和算式显示程序(自行设计)

1)程序设计要求

在以上十进制数加法要求的基础上,将加法算式及和在显示器上显示。

如ADDOP1中存放1234H,在ADDOP2中存放6789H,执行程序后显示器上显示:

1234+6789=8023

2)实验步骤:

(1)建立源程序文件。

DSEGSEGMENT

ADDOP1DD1234

JIAHAODB'+','$'

DENGHAODB'=','$'

tendw10

SUMDD?

DSEGENDS

ESEGSEGMENT

ADDOP2DD6789

ESEGENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP(?)

STACKENDS

32

CODESEGMENT

ASSUMEDS:DSEG,CS:CODE,ES:ESEG

START:MOVAX,DSEG

MOVDS,AX

MOVAX,ESEG

MOVES,AX

MOVAX,WORDPTRADDOP1

ADDAX,WORDPTRADDOP2

MOVWORDPTRSUM,AX

MOVAX,WORDPTRADDOP1+2

ADCAX,WORDPTRADDOP2+2

MOVWORDPTRSUM+2,AX

MOVBX,WORDPTRADDOP1+2

CALLDISPLAY

MOVBX,WORDPTRADDOP1

CALLDISPLAY

MOVAH,09H

MOVDX,OFFSETJIAHAO

INT21H

MOVBX,WORDPTRADDOP2+2

CALLDISPLAY

MOVBX,WORDPTRADDOP2

CALLDISPLAY

MOVAH,09H

MOVDX,OFFSETDENGHAO

INT21H

MOVBX,WORDPTRSUM+2

CALLDISPLAY

MOVBX,WORDPTRSUM

CALLDISPLAY

MOVAH,4CH

INT21H

DISPLAYPROCNEAR

MOVCX,10000D;DIVIDEBY10000

CALLDEC_DIV

MOVCX,1000D;DIVIDEBY1000

CALLDEC_DIV

MOVCX,100D;DIVIDEBY100

33

CALLDEC_DIV

MOVCX,10D;DIVIDEBY10

CALLDEC_DIV

MOVCX,1D;DIVIDEBY1

CALLDEC_DIV

RET;RETURNFROMBINIDEC

DEC_DIVPROCNEAR;;--------从位取出数字显示

MOVAX,BX;NUMBERLOWHALF

MOVDX,0;ZEROOUTHIGHHALF

DIVCX;DIVIDEBYCX

MOVBX,DX;REMAINDERINTOBX

MOVDL,AL;QUOTIENTINTODL

;PRINTTHECONTENTSOFDLONSCREEN

ADDDL,30H;CONVERTTOASCII

MOVAH,2H;DISPLAYFUNCTION

INT21H;CALLDOS

RET;RETURNFROMDEC_DIV

DEC_DIVENDP

;;------------------------------------------------------------------

DISPLAYENDP

CODEENDS

ENDSTART

(2)用MASM宏汇编程序和LINK连接程序生成执行程序。

(3)运行执行程序,输入不同的加数和被加数,观察结果。

3、键盘输入加数和被加数进行十进制数加法,显示结果程序(自行设计)

1)程序设计要求

34

采用DOS的键盘功能调用和显示功能调用,将键盘输入的4位十进制被加数和4位加数相加,

和存入有关内存单元,并将算式及和显示在显示器上。

要求采用子程序的设计方法设计程序,例如设计一个从键盘读入输入数据的子程序和将数据显

示的子程序。

DSEGSEGMENT

ADDOPDW2DUP(?)

ADDOP1DD?

JIAHAODB'+','$'

D国家安全手抄报图片 ENGHAODB'=','$'

TENDW10

SUMDD?

GODB'PLEASEINPUTTWONUMBER:$'

GOODB'THESUMIS:$'

TISHIDB'THENUMBERYOUINPUTISNOTRIGHT,MUST<10000,PLEASEINPUTAGAIN!

$'

DSEGENDS

ESEGSEGMENT

ADDOP2DD?

ESEGENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP(?)

STACKENDS

CODESEGMENT

ASSUMEDS:DSEG,CS:CODE,ES:ESEG

START:MOVAX,DSEG

MOVDS,AX

MOVAX,ESEG

MOVES,AX

TS:MOVSI,0

MOVCX,2;循环5次

LEADX,GO;PRINTGO

MOVAH,09

INT21H

AGAIN:PUSHCX

CALLINPUT

CMPAX,10000

JLRIGHT

POPCX

CALLCRLF

MOVDX,OFFSETTISHI

35

MOVAH,09H

INT21H

CALLCRLF

JMPTS

RIGHT:MOVADDOP[SI],AX

;ADDSUM,AX

INCSI

INCSI

POPCX

LOOPAGAIN

CALLCRLF

LEADX,GOO;PRINTGOO

MOVAH,09

INT21H

MOVSI,0

MOVBX,ADDOP[SI]

MOVWORDPTRADDOP1,BX

MOVWORDPTRADDOP1+2,0

INCSI

INCSI

MOVBX,ADDOP[SI]

MOVWORDPTRADDOP2,BX

MOVWORDPTRADDOP2+2,0

PUSHAX

MOVAX,WORDPTRADDOP1

ADDAX,WORDPTRADDOP2

MOVWORDPTRSUM,AX

MOVAX,WORDPTRADDOP1+2

ADCAX,WORDPTRADDOP2+2

MOVWORDPTRSUM+2,AX

POPAX

;显示算式

MOVBX,WORDPTRADDOP1+2

CALLDISPLAY

MOVBX,WORDPTRADDOP1

CALLDISPLAY

MOVAH,09H

MOVDX,OFFSETJIAHAO

INT21H

MOVBX,WORDPTRADDOP2+2

36

CALLDISPLAY

MOVBX,WORDPTRADDOP2

CALLDISPLAY

MOVAH,09H

MOVDX,OFFSETDENGHAO

INT21H

MOVBX,WORDPTRSUM+2

CALLDISPLAY

MOVBX,WORDPTRSUM

CALLDISPLAY

MOVAH,4CH

INT21H

;-----------------------------------------------------------跳到下一行

CRLFPROCNEAR

MOVDL,0AH;换行

MOVAH,02H

INT21H

MOVDL,0DH;从头开始

MOVAH,02H

INT21H

RET

CRLFENDP

;------------------------------------------------------------接受数字函数

INPUTPROCNEAR

MOVAX,0

PUSHAX

AGAIN1:MOVAH,01H;键盘输入

INT21H

CMPAL,30H;当输入不是数字的时候(如空格),跳出,一个

数字输入完成,

JLEXIT

CMPAL,39H

JGEXIT

SUBAL,30H;将ASCII码值转化为数值

MOVBL,AL

MOVBH,0

POPAX

CWD

37

IMULTEN;将已有的数乘10,加上新输入的数

ADDAX,BX

PUSHAX

JMPAGAIN1

EXIT:POPAX

RET

INPUTENDP

DISPLAYPROCNEAR

MOVCX,10000D;DIVIDEBY10000

CALLDEC_DIV

MOVCX,1000D;DIVIDEBY1000

CALLDEC_DIV

MOVCX,100D;DIVIDEBY100

CALLDEC_DIV

MOVCX,10D;DIVIDEBY10

CALLDEC_DIV

MOVCX,1D;DIVIDEBY1

CALLDEC_DIV

RET;RETURNFROMBINIDEC

DEC_DIVPROCNEAR;;--------从位取出数字显示

MOVAX,BX;NUMBERLOWHALF

MOVDX,0;ZEROOUTHIGHHALF

DIVCX;DIVIDEBYCX

MOVBX,DX;REMAINDERINTOBX

MOVDL,AL;QUOTIENTINTODL

;PRINTTHECONTENTSOFDLONSCREEN

ADDDL,30H;CONVERTTOASCII

MOVAH,2H;DISPLAYFUNCTION

INT21H;CALLDOS

RET;RETURNFROMDEC_DIV

DEC_DIVENDP

;;------------------------------------------------------------------

DISPLAYENDP

CODEENDS

ENDSTART

2)实验步骤:同上

38

(三)模块化程序设计

模块化程序设计是指将一个较大的功能分解成几个独立功能的子模块,每个子模块独立编缉各

自建立一个文件,通过单独的汇编生成各个独立的目标文件,然后由LINK程序将各个目标文件

链接在一起,形成一个完整的执行文件。

1)实验程序的设计思想及其实现功能

程序实现键盘输入十进制数,以十六进制数形式在屏幕上显示的功能。程序分成两个模块,模

块A为主程序,负责从键盘输入一个十进制数,处理后存入指定内存单元。模块B主要实现屏幕提

示和将十六进制数转换及显示的功能。

实验程序参见教科书“微型计算机原理及应用”(吴宁主编)P185页上模块化程序设计例1。

EXTRNPROMPT:FAR,BINHEX:FAR

PUBLICDEC_NUM,KEY_IN

SSEGSEGMENTPARASTACK'STACK'

DB100DUP(?)

SSEGENDS

DSEG1SEGMENT

DEC_NUMDW?

DSEG1ENDS

CSEG1SEGMENT

ASSUMECS:CSEG1,DS:DSEG1

START:MOVAX,DSEG1

MOVDS,AX

PUSHDS

JMPFARPTRPROMPT

KEY_IN:CALLDECBIN

MOVDEC_NUM,BX

CALLFARPTRBINHEX

39

MOVAH,4CH

INT21H

DECBINPROCNEAR

MOVBX,0

GETCHAR:MOVAH,1

INT21H

SUBAL,30H

JLEXIT

CMPAL,09H

JGEXIT

MOVAH,0

XCHGAX,BX

MOVCX,0AH

MULCX

XCHGAX,BX

ADDBX,AX

JMPGETCHAR

CALLCRLF

EXIT:RET

DECBINENDP

;-----------------------------------------------------------跳到下一行

CRLFPROCNEAR

MOVDL,0AH;换行

MOVAH,02H

INT21H

MOVDL,0DH;从头开始

MOVAH,02H

INT21H

RET

CRLFENDP

CSEG1ENDS

ENDSTART

EXTRNDEC_NUM:WORD,KEY_IN:FAR

PUBLICPROMPT,BINHEX

SSEGSEGMENTPARASTACK'STACK'

DB200DUP(?)

40

SSEGENDS

DSEG2SEGMENT

MSGDB'PLEASEINPUT:$'

DSEG2ENDS

CSEG2SEGMENTPARA

ASSUMECS:CSEG2,DS:DSEG2

PROMPT:MOVAX,DSEG2

MOVDS,AX

LEADX,MSG

MOVAH,09H

INT21H

POPDS

JMPFARPTRKEY_IN

BINHEXPROCFAR

CALLCRLF

MOVBX,DEC_NUM

MOV行政是什么 CH,04H

ROTATE:

MOVCL,04H

ROLBX,CL

MOVAL,BL

ANDAL,0FH

ADDAL,30H

CMPAL,3AH

JLPRINTIT

ADDAL,07H

PRINTIT:

MOVDL,AL

MOVAH,02H

INT21H

DECCH

JNZROTATE

RET

BINHEXENDP

;-----------------------------------------------------------跳到下一行

CRLFPROCNEAR

MOVDL,0AH;换行

MOVAH,02H

INT21H

MOVDL,0DH;从头开始

41

MOVAH,02H

INT21H

RET

CRLFENDP

CSEG2ENDS

END

2)实验步骤:

(1)输入模块A程序和模块B程序,各产生一个文件。

(2)汇编两个程序生成两个目标文件。

(3)用LINK文件名1+文件名2命令链接为一个可执行文件。

(4)运行程序,输入不同的十进制数,观察结果。

五、试验报告要求

写出(二)1、2、3自行设计的采用DOS功能调用设计源程序的程序清单。

本文发布于:2023-03-18 20:02:53,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/1679140974302536.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:d3500.doc

本文 PDF 下载地址:d3500.pdf

下一篇:返回列表
标签:d3500
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图