微机接口知识学习答案内容_第1页
微机接口知识学习答案内容_第2页
微机接口知识学习答案内容_第3页
微机接口知识学习答案内容_第4页
微机接口知识学习答案内容_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章

1.分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。

(1)MOVAX,2408H(2)MOVCL,OFFH(3)MOVBX,[SI]

(4)MOV5[BX],BL(5)MOV[BP+1OOH],AX(6)MOV[BX+DI],'$'

(7)MOVDX,ES:[BX+SI1(8)MOVVAL[BP+DI],DX

(9)INAL,05H(10)MOVDS,AX

答:(1)立即数,寄存器(2)立即数,寄存器(3)寄存器间接,寄存器

(4)寄存器,寄存器相对(5)寄存器,寄存器相对(6)立即数,基址变址

(7)基址变址,寄存器(8)寄存器,相对基址变址

(9)直接端口寻址,寄存器(10)寄存器,寄存器

2.已知:DS=1000H,BX=0200H,SI=02H,内存10200H〜10205H单元的内容分别为10H,

2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX寄存器的内容各是什么?

(1)MOVAX,0200H(2)MOVAX,[200H](3)MOVAX,BX

(4)MOVAX,3[BX](5)MOVAX,[BX+S1](6)MOVAX,2[BX+SI]

答:(1)0200H(2)2A10H(3)0200H

(4)5946H(5)463CH(6)6B59H

3.设DS=1000H,ES=2000H,SS=35OOH,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,

数据段中变量名为VAL的偏移地址值为0030H,试说明下列源操作数字段的寻址方式是什

么?物理地址值是多少?

(1)MOVAX,[100H](2)MOVAX,VAL(3)MOVAX,[BX]

(4)MOVAX,ES:[BX](5)MOVAX,[SI](6)MOVAX,[BX+10H]

(7)MOVAX,[BP](8)MOVAX,VAL[BP][SI]

(9)MOVAX,VAL[BX][DI](10)MOVAX,[BP][DI]

答:(1)直接,10100H(2)直接,10030H(3)寄存器间接,10100H

(4)寄存器间接,20100H(5)寄存器间接/00A0H(6)寄存器相对,10110H

(7)寄存器间接,35200H(8)相对基址变址,352D0H

(9)相对基址变址,10154H(10)基址变址,35224H

4.写出下列指令的机器码

(1)MOVAL,CL(2)MOVDX,CX(3)MOV[BX+100H],3150H

答:(1)1000101011000001B

(2)1000101111010001B

(3)HOOOlil1000011100000000000000010101000000110001B

5.已知程序的数据段为:

DATASEGMENT

ADB$,10H

BDB'COMPUTER5

CDW1234H,OFFH

DDB5DUP(?)

EDD1200459AH

DATAENDS

求下列程序段执行后的结果是什么。

MOVAL,A

MOVDX,C

XCHGDL,A

MOVBX,OFFSETB

MOVCX,3[BX]

LEABX,D

LDSSI,E

LESDI,E

答:MOVAL,AAL=24H

MOVDX,CDX=1234H

XCHGDL,ADL=24H,A=34H

MOVBX,OFFSETBBX=2

MOVCX,3[BX]CX=5550H

LEABX,DBX=000EH

LDSSI,EDS=1200H,SIM59AH

LESDI,EES=1200H,DI=459AH

6.指出下列指令中哪些是错误的,错在什么地方。

(1)MOVDL,AX(2)MOV8650H,AX(3)MOV

DS,0200H

(4)MOV[BX],[1200H](5)MOVIP,OFFH(6)

MOV[BX+SI+3],IP

(7)MOVAX,[BX][BP](8)MOVAL,ES:[BP](9)

MOVDL,[SI][DI]

(10)MOVAX,OFFSET0A20H(11)MOVAL,

OFFSETTABLE

(12)XCHGAL,50H(13)INBL,05H(14)OUT

AL,OFFEH

答:(1)长度不匹配(2)立即数不能做目的操作数

(3)段寄存器不能用立即数赋值(4)两个内存单元

不能直接传送数据

(5)IP不能用指令直接修改(6)指令中不能出现IP

(7)BX/BP应与SI/DI搭配(8)正确

(9)SI/DI应与BX/BP搭配(10)OFFSET后应跟

内存单元

(11)偏移地址为16位,AL长度不够(12)立即数

不能用于XCHG

(13)IN必须用AL/AX(14)操作数顺序反向;地

址应为8位

7.已知当前数据段中有一个十进制数字0〜9的7段

代码表,其数值依次为40H,79H,24H,

30H,19H,12H,02H,78H,OOH,18H。要求用XLAT

指令将十进制数57转换成相应的

7段代码值,存到BX寄存器中,试写出相应的程序

段。

答:DATASEGMENT

TABLEDB40H,79H,24H,30H,19H,12H,02H,

78H,OOH,18H

DATAENDS

MOVAL,5

MOVBX,OFFSETTABLE

XLATTABLE

MOVCL,AL

MOVAL,7

XLATTABLE

MOVBL,AL

MOVBH,CL

8.已知当前SS=1O5OH,SP=0100H,AXM860H,

BX=1287H,试用示意图表示执行下列指

令过程中,堆栈中的内容和堆栈指针SP是怎样变化

的。

PUSHAX

PUSHBX

POPBX

POPAX

(1>指令执行前<2>执行PUSHAX后

(1)指

9.下列指令完成什么功能?

(1)ADDAL,DH(2)ADCBX,CX(3)SUBAX,

271OH

(4)DECBX(5)NEGCX(6)INCBL

(7)MULBX(8)DIVCL

答:(1)AL+DH-AL(2)BX+CX+CF-BX(3)

AX-2710H—AX

(4)BX-1-BX⑸0-CXfCX(6)BL+1

-BL

(7)AX*BX-DX,AX(8)AX/CL商fAL,余数

一AH

10.已知AX=2508H,BX=OF36H,CX=0004H,

DX=1864H,求下列每条指令执行后的结果

是什么?标志位CF等于什么?

(1)ANDAH,CL(2)ORBL,30H(3)NOTAX

(4)XORCX,OFFFOH(5)TESTDH,OFH(6)

CMPCX,OOH

(7)SHRDX,CL(8)SARAL,1(9)SHLBH,

CL

(10)SALAX,1(11)RCLBX,1(12)RORDX,

CL

答:(1)AX=0408H,CF=O(2)BX=0F36H,CF=O

(3)AX=0DAF7H,CF不变(4)CX=0FFF4H,CF=O

(5)DXR1864H,CF=O(6)CX=0004H,CF=O

(7)DX=0186H,CF=O(8)AX=2504H,CF=O

(9)BX=0F036H,CF=O(10)AXMA10H,CF=O

(11)BX=1E6C/1E6DH,CF=O(12)DX=4186H,

CF=O

11.假设数据段定义如下:

DATASEGMENT

STRINGDB'ThePersonalComputer&TV'

DATAENDS

试用字符串操作等指令编程完成以下功能:

(1)把该字符串传送到附加段中偏移量为GET.CHAR

开始的内存单元中。

(2)比较该字符串是否与‘TheComputer,相同,若相同

则将AL寄存器的内容置1,否则置

0o并要求将比较次数送到BL寄存器中。

(3)检查该字符串是否有,&,,若有则用空格字符将其

替换。

(4)把字符串大写字母传送到附加段中以CAPS开始

的单元中,其余字符传到以CHART

开始的单元中。然后将数据段中存储上述字符串的单元

清0。

答:⑴CLD

LEASI,STRING

LEADI,GET_CHAR

MOVCX,26

REPMOVSB

(2)补充在附加段定义

STRING1DB'Thecomputer,

MOVAL,1

CLD

LEASI,STRING

LEADI,STRING1

MOVCX,12

REPZCMPSB

JZSKIP

MOVAL,0

SKIP:MOVBX,12

SUBBX,CX

(3)MOVAX,DATA

MOVES,AX

CLD

MOVAL;&'

LEADI,STRING

MOVCX,26

NEXT:REPNESCASB

JZFIND

JMPEXIT

FIND:MOVBYTEPTR[DI-1],"

JCXZEXIT

JMPNEXT

EXIT:

(4)LEASI,STRING

LEADI,CAPS

LEABX,CHART

MOVCX,26

NEXT:MOVAL,[SI]

CMPAL,'A'

JBOTHER

CMPAL,'Z'

JAOTHER

MOVES:[DI],AL

INCDI

JMPSKIP

OTHER:MOVES:[BX],AL

INCBX

SKIP:MOVBYTEPTR[SI],0

INCSI

LOOPNEXT

12.编程将AX寄存器中的内容以相反的顺序传送到DX寄存器中,并要求AX中的内容不

被破坏,然后统计DX寄存器中’1'的个数是多少。

答::MOVBL,0

PUSHAX

MOVDX,0

MOVCX,16

NEXT:SHLAX,1

JNCSKIP

INCBL

SKIP:RCRDXJ

LOOPNEXT

STOP:POPAX

13.设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,

(20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N标号的地址为1200:

0278H,PROG_F标号的地址为3400H:OABCH。说明下列每条指令执行完后,程序将分别

转移到何处执行?

(1)JMPPROG_N

(2)JMPBX

(3)JMP[BX]

(4)JMPFARPROG_F

(5)JMPDWORDPTR[BX]

如将上述指令中的操作码JMP改成CALL,则每条指令执行完后,程序转向何处执行?并

请画图说明堆栈中的内容和堆栈指针如何变化。

答:(1)1200H:0278H

(2)1200H:0300H

(3)1200H:4800H

(4)3400H:OABCH

(5)OOFFH:4800H

将操作码JMP改成CALL后:

(1)1200H:0278H

指令长度为3,则IP=O1OOH+3=O1O3H,入栈

Cl>12OOHsO278H

指令长度为2,则IP=0100H+2=0102H,入栈

5O00H:OOOOH

02H

O1H

5000H:03FEHOOH

12H

SOOOHiO4O0H

14.在下列程序段括号中分别填入以下指令

(1)LOOPNEXT(2)LOOPENEXT(3)LOOPNENEXT

试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX的内容分别是什么。

START:MOVAX,01H

MOVBX,02H

MOVDX,03H

MOVCX,04H

NEXT:INCAX

ADDBX,AX

SHRDX,1

()

答:(1)AX=05HBX=1OHCX=0DX=0

(2)AX=02HBX=04HCX=03HDX=01H

(3)AX=03HBX=07HCX=02HDX=0

15.某班有7个同学英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:

(1)给每人加5分,结果存到NEW数组中

(2)把总分存到SUM单元中

答:DATASEGMENT

ARRAYDB?,?,?,?,?,?,?

NEWDB7DUP(?)

SUMDW0

DATAENDS

MOVAX,DATA

MOVDS,AX

(1)LEASLARRAY

LEADI,NEW

MOVCX,7

NEXT:MOVAL,[SI]

ADDAL,5

MOV|DI],AL

INCSI

INCDI

LOOPNEXT

(2)LEASI,ARRAY

CLC

□SP

5000H:0000H

5000H:03FCH

5000H:03FEH

5000H:0400H

MOVCX,7

NEXT!:MOVAL,[SI]

MOVAH,0

ADCSUM,AX

INCSI

LOOPNEXT1

16.中断向量表的作用是什么?它放在内存的什么区域内?中断向量表中的什么地址用于

类型3的中断?

答:中断向量表用来存放中断服务程序的4口地址。8086的256类中断的入口地址要占用

1K字节,位于内存00000H〜003FFH的区域内。中断向量表中0000CH〜0000FH用于类型

3的中断。

17.设类型2的中断服务程序的起始地址为0485:0016H,它在中断向量表中如何存放?

答:物理地址内容

00008H16H

00009H00H

0000AH85H

0000BH04H

18.若中断向量表中地址为0040H中存放240BH,0042H单元里存放的是D169H,试问:

(1)这些单元对应的中断类型是什么?

(2)该中断服务程序的起始地址是什么?

答:⑴10H

(2)D169H:240BH

19.简要说明8086响应类型0〜4中断的条件是什么?

答:类型0:除法错中断

执行除法指令时,若除数为。或所得商超过寄存器能容纳的范围,则自动产生类型0

中断。

类型1:单步中断

若CPU的单步标志TF=1,则每执行完--条指令后,自动产生类型1中断。

类型2:不可屏蔽中断NMI

当8086的NMI引脚上接收到由低变高的电平变化时,将自动产生类型2中断。

类型3:断点中断

若在程序中某位置设置断点,当程序执行到该断点时,则产生类型3中断。

类型4:溢出中断

若溢出标志OF=L则可由溢出中断指令INTO产生类型4中断。

第四章

1.下列变量各占多少字节?

AlDW23H,5876H

A2DB3DUP(?),OAH,0DH,$

A3DD5DUP(1234H,567890H)

A4DB4DUP(3DUP(1,2,'ABC'))

答:Al占4个字节

A2占6个字节

A3占40个字节

A4占60个字节

2.下列指令完成什么功能?

MOVAX,OOFFHAND1122H+3344H

MOVAL,15GEHUB

MOVAX,OOFFHLE255+6/5

ANDAL,50MOD4

ORAX,OFOOFHAND1234OROOFFH

答:(1)将0066H传送给AX

(2)将OFFH传送给AL

(3)将OFFFFH传送给AX

(4)ANDAL,02H

(5)ORAX,OOFFH

3.有符号定义语句如下:

BUFDB3,4,5,“23'

ABUFDB0

LEQUABUF-BUF

求L的值为多少?

答:L=6

4.假设程序中的数据定义如下:

PARDW?

PNAMEDB16DUP(?)

COUNTDD?

PLENTHEQU$-PAR

求PLENTH的值为多少?表示什么意义?

答:PAR的偏移地址为0,PLENTH当前偏移地址$=2+16+4=22,$-PAR=22,故PLENTH

的值为22o

若在PLENTH所在行有变量定义,则$表示该变量的偏移地址,即$表示PLENTH所在

行的当前偏移地址。故PLENTH表示从当前行到PAR之间定义的变量所占的字节个数。

5.对于下面的数据定义,各条MOV指令执行后,有关寄存器的内容是什么?

DAIDB?

DA2DW10DUP(?)

DA3DB'ABCD'

MOVAX,TYPEDAI

MOVBX,SIZEDA2

MOVCX,LENGTHDA3

答:AX=l,BX=20,CX=l

6.下段程序完成后,AH等于什么?

INAL,5FH

TESTAL,80H

JZL1

MOVAH,0

JMPSTOP

LI:MOVAH,OFFH

STOP:HLT

答:讨论从端口5FH输入的数据最高位的情况。若最高位为1,则AH=0;若最高位为0,

则AH=0FFHo

7.编程序完成下列功能:

(1)利用中断调用产生5秒延时。

(2)利用中断调用,在屏幕上显示1〜9之间随机数。

答:(1)可以利用中断类型1CH来处理,因为在系统时钟的中断处理程序中,时钟中断•

次要调用一次INT1CH,即每隔55ms,产生一次1CH中断,要产生5秒延时,只要中断

5s/55ms=91次即可。又因1CH中断处理程序中只有一条IRET指令,故可将用户的程序代

替原有的INT1CH程序。

DATASEGMENT

COUNTDW91;计数器

MESSDB'5sdelayed!,,0AH,0DH,,S,

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE,DS:DATA,ES:DATA

START:PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVAL,1CH;得到原中断向量

MOVAH,35H

INT21H

PUSHES;存储原中断向量

PUSHBX

PUSHDS

MOVDX,OFFSETDELAY;DELAY的偏移地址和段地址

MOVAX,SEGDELAY

MOVDS,AX

MOVAL,1CH;设置中断向量

MOVAH,25H

INT21H

POPDS

INAL,21H:设置中断屏蔽位

ANDAL,0FEH

OUT21H,AL

STI

MOVDL2000H;主程序延迟,在执行此段程序期间

Al:MOVSI,3000H;产生中断

A2:DECSI

JNZA2

DECDI

JNZAl

POPDX;取原中断向量

POPDS

MOVAL,1CH

MOVAH,25H

INT21H

RET

MAINENDP

DELAYPROCNEAR

PUSHDS

PUSHAX

PUSHCX

PUSHDX

MOVAX,DATA

MOVDS,AX

STI

DECCOUNT;5秒计数

JNZEXIT

MOVDX,OFFSETMESS;显示信息

MOVAH,09H

INT21H

MOVCOUNT,%;5秒的值

EXIT:CLI

POPDX

POPCX

POPAX

POPDS

IRET

DELAYENDP

CODEENDS

ENDSTART

(2)可以利用INT1AH,读取当前时间的1/100秒为随机数。

CODESEGMENT

ASSUMECS:CODE

START:MOVAH,0

INT1AH;读取当前时间CH:CL=时:分

MOVAL,DL;DH:DL=^:1/100秒

MOVAH,0

MOVBL,9

DIVBL

INCAH

MOVDL,AH

ADDDL,30H

MOVAH,2

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

8.编两个通过过程完成将AX中存放的二进制数转换成压缩型BCD码以及将BCD码转换

成二进制数。

答:(1)将AX中的二进制数先后除以1000,100和10,每次除法所得的商,即是BCD数

的千位、百位和十位数,余数是个位数。

子程序名:B2TOBCD

输入参数:AX=十六位二进制数

输出参数:CF=0,则AX=4位压缩型BCD码。CF=1,则要转换的数大于9999,AX不

变。

使用寄存器:CX:存放除数,DX:存放中间结果。

B2TOBCDPROCFAR

CMPAX,9999;AX>9999,则CF置1

JBETRAN

STC

JMPEXIT

TRAN:PUSHCX

PUSHDX

SUBDX,DX;DX清0

MOVCXJOOO;计算千位数

DIVCX

XCHGAX,DX;商在DX中,余数在AX中

MOVCL,4

SHLDX,CL;DX左移4位

MOVCL,100;计算百位数

DIVCL

ADDDL,AL;百位数加到DL中,DX左移4位

MOVCL,4

SHLDX,CL

XCHGAL,AH;余数保留在AL中

SUBAH,AH

MOVCL,10;计算十位数

DIVCL

ADDDL,AL;十位数加到DL中,DX左移4位

MOVCL,4

SHLDX,CL

ADDDL,AH;加个位数

MOVAX,DX;结果送到AX中

POPDX

POPCX

EXIT:RET

B2TOBCDENDP

(2)将AX中4位BCD码顺序乘以1000,100,10和1,然后求和即得。

子程序名:BCDTOB2

输入参数:AX=4位压缩BCD码

输出参数:AX二十六位二进制数

使用寄存器:BX:暂存数据,CX:存放乘数,DX:存放中间结果

BCDTOB2PROCFAR

PUSHBX

PUSHCX

PUSHDX

MOVBX,AX

MOVCL,4

ROLAX,CL

ANDAX,000FH

MOVCX,1000;乘以1000

MULCX

MOVDX,AX

MOVAX,BX

MOVCL,8

ROLAX,CL

ANDAX,000FH

MOVCL,100;乘以100

MULCL

ADDDX,AX

MOVAX,BX

MOVCL,4

SHRAX,CL

ANDAX,000FH

MOVCL,10;乘以10

MULCL

ADDDX,AX

ANDBX,000FH

ADDDX,BX

MOVAX,DX

POPDX

POPCX

POPBX

RET

BCDTOB2ENDP

9.编写两个通用过程,一个完成ASCH码转换成二进制数功能,另个完成ASCII字符显

示输出功能。

答:(1)将AX中两位ASCII码先转化成数字,然后AH*10+AL。

子程序名:ASCIIT0B2

输入参数:AX=2位ASCII码

输出参数:AX二转换后二进制数

使用寄存器:BX,CX,DX

ASCIIT0B2PROCFAR

PUSHBX

PUSHCX

PUSHDX

MOVBX,AX

SUBAH,30H

MOVAL,AH

MOVCL,10;乘以10

MULCL

MOVDX,AX

MOVAX,BX

SUBAL,30H

MOVAH,0

ADDAX,DX

POPDX

POPCX

POPBX

RET

ASCIITOB2ENDP

(2)使用2号DOS功能调用显示字符。

子程序名:DISPLAY

输入参数:AX=2位ASCII码

输出参数:无

使用寄存器:BX,DX

DISPLAYPROCFAR

PUSHBX

PUSHDX

MOVBX,AX

MOVDL,AH

MOVAH,2

INT21H

MOVAX,BX

MOVDL,AL

MOVAH,2

INT21H

POPDX

POPBX

RET

DISPLAYENDP

10.编制两个通用过程,完成十六进制数转换成ASCII码并将ASCII码字符显示。

答:(1)子程序名:HEXTOASC

输入参数:AX:4位十六进制数

输出参数:DX,AX:4位ASCII码,DX高2位,AX低2位

使用寄存器:BX,CX,DX

HEXTOASCPROCFAR

PUSHBX

PUSHCX

PUSHDX

MOVBX,AX

MOVCL,4;转换AH高4位

SHRAX,CL

ANDAXQFOOH

ADDAH,30H

CMPAH,3AH

JBAl

ADDAH,7

Al:MOVDH,AH

MOVAX,BX;转换AH低4位

ANDAX,OFOOH

ADDAH,30H

CMPAH,3AH

JBA2

ADDAH,7

A2:MOVDL,AH

MOVBH,BL;转换AL高4位

MOVCL,4

SHRBL?CL

ADDBL,30H

CMPBL,3AH

JBA3

ADDBL,7

A3:MOVAH,BL

ANDBH,0FH;转换AL低4位

ADDBH,30H

CMPBH,3AH

JBA4

ADDBH,7

A4:MOVAL,BH

POPDX

POPCX

POPBX

RET

HEXTOASCENDP

(2)子程序名:DISPLAYASC

输入参数:DX,AX:4位ASCII码

输出参数:无

使用寄存器:BX,CX

DISPLAYASCPROCFAR

PUSHBX

PUSHCX

MOVBX,DX

MOVCX,AX

MOVDL,BH

MOVAH,02H

INT21H

MOVDL,BL

INT21H

MOVDL,CH

INT21H

MOVDL,CL

INT21H

MOVDL,'H'

INT21H

POPCX

POPBX

RET

DISPLAYASCENDP

11.某程序可从键盘接收命令(0~5),分别转向6个子程序,子程序入口地址分别为P0〜

P5,编制程序,用跳转表实现分支结构。

答:DATASEGMENT

TABLEDW6DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

LEASI,TABLE

MOVWORDPTR[SI],OFFSETPO

MOVWORDPTR[SI+2],OFFSETPl

MOVWORDPTR[SI+4],OFFSETP2

MOVWORDPTR[SI+6],OFFSETP3

MOVWORDPTR[SI+8],OFFSETP4

MOVWORDPTR[SI+10],OFFSETP5

MOVAH,1

INT21H

SUBAL,30H

SHLALJ

MOVAH,0

MOVSI,AX

JMPTABLE[SI]

PO:

Pl:

P2:

P3:

P4:

P5:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

12.在首地址为TABLE的数组中按递增次序存放着100个16位补码数,编写一个程序,把

出现次数最多的数及其出现次数分别存放于AX和BL中。

答:DATASEGMENT

TABLEDW100DUP(?);数组中的数据是按增序排列的

NUMDW?

COUNTDW0

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE,DS:DATA

START:PUSHDS:设置返回DOS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX;给DS赋值

BEGIN:MOVCX,100;循环计数器

MOVSI,0

NEXT:MOVDX,0

MOVAX,TABLE[SI]

COMP:CMPTABLE[SI],AX;计算一个数的出现次数

JNEADDR

INCDX

ADDSI,2

LOOPCOMP

ADDR:CMPDX,COUNT;此数出现的次数最多吗?

JLEDONE

MOVCOUNT.DX;目前此数出现的次数最多,记下次数

MOVNUM,AX;记下此数

DONE:LOOPNEXT;准备取下一个数

MOVCX,COUNT;出现最多的次数存入(CX)

MOVAX,NUM;出现最多的数存入(AX)

RET

MAINENDP

CODEENDS;以上定义代码段

ENDSTART

13.将键盘上输入的十六进制数转换成十进制数,在屏幕上显示。

答:DATASEGMENT

STRINGDBINPUT4HEXNUM:\0AH,0DH,$

NUMDB10DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

LEADX,STRING;显示提示信息

MOVAH,9

INT21H

MOVBP,4

MOVDX,0

CONT:MOVCL,4;输入4位十六进制数DX

SHLDX,CL

DI:MOVAHJ

INT21H

CMPAL,'O'

JBDI

CMPAL;F

JAD1

CMPAL,A

JBAl

SUBAL,7

Al:SUBAU30H

MOVAH,0

ADDDX,AX

DECBP

JNZCONT

MOVSLO;将DX转换成十进制数,再转换成ASCH码一>NUM

MOVAX,DX

MOVDX,0

MOVBX,10

D2:DIVBX

ADDDL,30H

MOVNUM[SI],DL

INCSI

CMPAX,0

JZEXIT

MOVDX,0

JMPD2

EXIT:MOVDL.0AH;显示十进制数

MOVAH,2

INT21H

MOVDL,0DH

INT21H

D3:DECSI

MOVDL,NUM(SI]

MOVAH,2

INT21H

JNZD3

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

14.将AX中的无符号二进制数转换成ASCII字符串表示的十进制数。

答:将13题输入过程和输出过程去掉即得。

DATASEGMENT

NUMDB10DUP(?);转换后ASCII码按倒序存放于NUM

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVAX,XXXX;无符号二进制数

MOVSI,0;将人*转换成十进制数,再转换成ASCH码一>NUM

MOVDX,0

MOVBX,10

D2:DIVBX

ADDDL,30H

MOVNUM[SI],DL

INCSI

CMPAX,0

JZEXIT

MOVDX,0

JMPD2

EXIT:MOVAH,4CH

INT21H

CODEENDS

ENDSTART

15.从键盘输入20个有符号数,将它们排序并在屏幕上显示。

答:DATASEGMENT

NUMDW20DUP(?);存放20个有符号数

ASCDB10DUP(?);输出时暂时保存每个数的ASCH码

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVCX,20

MOVBX,10

MOVSLO

MOVBP,0

BEGIN:MOVDX,0;输入20个有符号数(十进制),并

A1:MOVAH,1;转化为二进制数存放于NUM数组

INT21H

CMPAL;*;判断是否空格

JZA2

CMPAL,0DH;是否回车符

JZA2

CMPAL;-1;是否

JZA3

JMPA4

A3:MOVBPJ

JMPAl

A4:PUSHAX

MOVAX,DX

MULBX

MOVDX,AX

POPAX

SUBAL,30H

MOVAH,0

ADDDX,AX

JMPAl

A2:CMPBPJ

JNZA5

NEGDX;若为负数,则取负

A5:MOVNUM[SI],DX

MOVBP,0

ADDSI,2

LOOPBEGIN

MOVDL,0DH;回车换行

MOVAH,2

INT21H

MOVDL,0AH

INT21H

MOVBX,0;对20个有符号数按由小到大顺序排序

MOVCX,19;采用冒泡法,排序后依然存放于NUM数组

LI:MOVDX,CX

L2:MOVAX,NUM[BX]

CMPAX,NUM[BX+2|

JLECONTI

XCHGAX,NUM[BX+2]

MOVNUM[BX],AX

CONTI:ADDBX,2

LOOPL2

MOVCX,DX

MOVBX,0

LOOPLI

MOVCX,20;将20个有符号数(二进制)转换为十进制数

MOVSI,0;再转换为ASCII码并输出屏幕

DI:MOVAX,NUM[SI]

ADDSI,2

TESTAXJ000H

JZD4

PUSHAX

MOVDL;-'

MOVAH,2

INT21H

POPAX

NEGAX

D4:MOVDLO

MOVDX,0

MOVBX,10

D2:DIVBX

ADDDL,30H

MOVASC[DI],DL

INCDI

CMPAX,0

JZD3

MOVDX,0

JMPD2

D3:MOVDL,ASC[DI-1|

MOVAH,2

INT21H

DECDI

JNZD3

MOVDL,"

MOVAH,2

INT21H

LOOPDI

MOVAH,4CH;返回DOS

INT21H

CODEENDS

ENDSTART

16.编写多字节有符号数的加法程序,从键盘接收两个加数,在屏幕上显示结果。

答:DATASEGMENT

STRING1DB'INPUTFIRSTNUM(HEX):',0DH,0AH;$,

STRING2DB'INPUTSECONDNUM(HEX):\0DH,0AH;$,

STRING3DBTHERESULTIS(HEX):',0DH,0AH;$,

NUM1DW0,0;存放加数1

NUM2DW0,0;存放加数2

RESULTDB0,0,0,0;存放结果

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

LEADX,STRING1;输入第•个加数(4位十六进制数)

MOVAH,9

INT21H

MOVSI,2

MOVCX,8

CONT:PUSHCX

CMPCX,4

JNZBl

SUBSI,2

Bl:MOVCL,4

SHLNUM1[SI],CL

Cl:MOVAH,1

INT21H

CMPAL;0'

JBC1

CMPAL;F'

JAC1

CMPAL,A

JBAl

SUBAL,7

Al:SUBAL,30H

MOVAH,0

ADDNUM1[SI],AX

POPCX

LOOPCONT

MOVDL,0DH;回车换行

MOVAH,2

INT21H

MOVDL,0AH

INT21H

LEADX,STRING2;输入第二个加数(4位十六进制数)

MOVAH,9

INT21H

MOVSI,2

MOVCX,8

CONTI:PUSHCX

CMPCX,4

JNZB2

SUBSI,2

B2:MOVCL,4

SHLNUM2[SI],CL

C2:MOVAH,1

INT21H

CMPAL,'O'

JBC2

CMPAL;F'

JAC2

CMPAL,'A'

JBA2

SUBAL,7

A2:SUBAL.30H

MOVAH,0

ADDNUM2[SI],AX

POPCX

LOOPCONTI

MOVDL,0DH;回车换行

MOVAH,2

INT21H

MOVDL,0AH

INT21H

LEASLNUM1;两数相加

LEABX,NUM2

LEADLRESULT

MOVCX,4

CLC

AD:MOVAL,[SI]

ADCALJBX]

MOV[DI],AL

INCSI

INCBX

INCDI

LOOPAD

LEADX,STRING3:显示结果(4位十六进制数)

MOVAH,9

INT21H

MOVCX,4

MOVDI,3

TT:PUSHCX

MOVDL,RESULT[DI]

MOVCL,4

SHRDL,CL

ADDDL,30H

CMPDL,3AH

JBDI

ADDDL,7

DI:MOVAH,2

INT21H

MOVDL,RESULT[DI]

ANDDL,0FH

ADDDL,30H

CMPDL,3AH

JBD2

ADDDL,7

D2:MOVAH,2

INT21H

DECDI

POPCX

LOOPTT

MOVAH,4CH;返回DOS

INT21H

CODEENDS

ENDSTART

17.编写2位非压缩型BCD码相乘的程序。

答:转化成加法进行累加运算。

DATASEGMENT

DAIDB09H,09H

DA2DB09H,08H

RESULTDB4DUP(O)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVAL,DA2+1;计算加法次数

MOVBL,10

MULBL

MOVBL,DA2

MOVBH,0

ADDAX,BX

MOVCX,AX

CONT:MOVAH,0;通过循环做累加

MOVAL,RESULT

ADDAL,DA1

AAA

MOVRESULT,AL

MOVAL,RESULT+1

ADDAL,AH

MOVAH,0

AAA

ADDAL,DA1+1

AAA

MOVRESULT+LAL

MOVAL,RESULT+2

ADDAL,AH

MOVAH,0

AAA

MOVRESULT+2,AL

MOVAL,RESULT+3

ADDAL,AH

MOVAH,0

AAA

MOVRESULT+3,AL

LOOPCONT

MOVAH,4CH;返回DOS

INT21H

CODEENDS

ENDSTART

18.编写完整的程序求N!,求N大于6时的运算结果,并在屏幕上显示结果。

答:DATASEGMENT

NDB8;求8的阶乘

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVAL,N

MOVAH,0

CALLFACT;调用过程求N!,AX=N,BX=N!

CALLB2TODEC;调用过程将结果转换为十进制,然后屏幕显示

MOVAH,4CH

INT21H

FACTPROC

CMPAL,0

JNZCHN

MOVBX,1

RET

CHN:PUSHAX

DECAL

CALLFACT;递归调用N!=N*(N-l)!

POPAX

MULBX

MOVBX,AX

RET

FACTENDP

B2TODECPROC

MOVCX,10000

CALLBIN

MOVCX,1000

CALLBIN

MOVCX,100

CALLBIN

MOVCX,10

CALLBIN

MOVCX,1

CALLBIN

RET

B2TODECENDP

BINPROC

MOVAX,BX

MOVDX,0

DIVCX

MOVBX,DX

MOVDL,AL

ADDDL,30H

MOVAH,2

INT21H

RET

BINENDP

CODEENDS

ENDSTART

19.在附加段有一个数组,首地址为BUFF,数组中第一个字节存放了数组的长度。编一个

程序在数组中查找0,找到后把它从数组中删去,后续项向前压缩,其余部分补0。

答:DATASEGMENT

BUFFDB10,1,0,2,340,5,6,7,0;10个数

MEQU0

DATAENDS

CODESEGMENT

ASSUMECS:CODE,ES:DATA,DS:DATA

START:MOVAX,DATA;初始化ES,DS

MOVES,AX

MOVDS,AX

MOVAL,M;关键字M存入AL

MOVDLOFFSETBUFF

MOVCL,[DI];数组长度存入CX

MOVCH,0

INCDI;指向数组起始地址

CLD;清方向标志

LI:REPNESCASB;重复搜索关键字

JNZSTOP;未找到,转STOP结束

JCXZSTOP;最后一个数是M,转STOP

PUSHDI;关键字下一单元地址和循

PUSHCX;环次数入栈保护

DEL:MOVBL,[DI];前移,末尾补0

MOV[DI-1],BL

INCDI

LOOPDEL

MOVBYTEPTR[DI-l],0

POPCX;恢复CX,DI

POPDI

DECDI;由于REPNESCASB已自动加1

JMPLi

STOP:MOVAH,4CH

INT21H

CODEENDS

ENDSTART

20.编程完成将第二个字符串插入到第•个字符串的指定位置上。

答:DATASEGMENT

STRING1DB'THISISTHEFIRSTSTRING!','$'

DB100DUP(O);缓冲区

NUM1DW?;字符串1的长度

STRING2DB'thesecondstring!',

NUM2DW?;字符串2的长度

POSDW8;插入位置

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX

MOVES,AX

LEADLSTRING1:求字符串1的长度存入NUM1

MOVAL,$

MOVNUM1,0

CLD

DI:SCASB

JZD2

INCNUM1

JMPD1

D2:LEADLSTRING2;求字符串2的长度存入NUM2

MOVAL,$

MOVNUM2,0

CLD

D3:SCASB

JZD4

INCNUM2

JMPD3

D4:LEASI,STRING1;将字符串1自插入位置开始的字符向后移动,

ADDSI,NUM1;空出位置以便插入字符串2

MOVDI,SI

ADDDI,NUM2

STD

MOVCX,NUMI

SUBCX,POS

INCCX

REPMOVSB

LEASLSTRING2;将字符串2插入到字符串1指定位置

LEADLSTRING1

ADDDLPOS

CLD

MOVCX,NUM2

REPMOVSB

LEADX,STRING1

MOVAH,9

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

21.将学生的班级、姓名、学号、课程名、成绩定义为一个结构,用结构预置语句,产生5

个学生的成绩登记表,编程序将成绩小于60分的学生姓名、成绩显示出来。

答:STUDENTSTRUC

CLASSDB?;班级

NAMDB'ABCDES';姓名

NUMDB?;学号

COURSEDB'ABCD';课程

SCOREDB?;成绩

STUDENTENDS

DATASEGMENT

STUDENT1STUDENT<1;XIAOA$',00iATH',70>

STUDENT2STUDENT<1;XIAOB$',002;MATH,.80>

STUDENT3STUDENT<1:XIAOC$,,003;MATH;50>

STUDENT4STUDENTvl;XIAOD$\004;MATH:90>

STUDENT5STUDENT<1,'XIAOE$\005;MATH;55>

DATAENDS

CODESEGMENT

ASSUMECS:CODE,ds:DATA

START:MOVAX,DATA

MOVDS,AX

MOVCX,5:通过循环结构进行筛选

MOVSI,0

CONT:MOVAL,STUDENT1.SCORE[SI];取成绩

CMPAL,60

JAEDI

LEADX,STUDENTI.NAM[SI];小于60则显示姓名和成绩

MOVAH,9

INT21H

MOVDL;'

MOVAH,2

INT21H

MOVAL,STUDENT1.SCORE[SI];成绩转换为ASCII祀马显示

MOVAH,0

MOVBL,10

DIVBL

PUSHAX

MOVDL,AL

ADDDL,30H

MOVAH,2

INT21H

POPAX

MOVDL,AH

ADDDL,30H

MOVAH,2

INT21H

MOVDL,0DH

MOVAH,2

INT21H

MOVDL,0AH

INT21H

DI:ADDSI,13

LOOPCONT

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

22.编程序统计学生的数学成绩,分别归类90分〜99分,80分〜89分,70分〜79分,60

分〜69分及60分以下,并将各段的人数送入内存单元中。

答:设学生人数为字节,成绩为压缩BCD码,且都是合法的。

DATASEGMENT

BUFFDBXXH,........

ANUMEQUS-BUFF

SNUMDB5DUP(O);存放各类成绩统计结果

BUFFIDBANUMDUP(O);存放60分以下成绩

BUFF2DBANUMDUP(O);存放60分〜69分成绩

BUFF3DBANUMDUP(O);存放70分〜79分成绩

BUFF4DBANUMDUP(O);存放80分〜89分成绩

BUFF5DBANUMDUP(O);存放90分以上成绩

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVCL,ANUM;取学生人数

MOVCH,0

MOVBH,0

MOVSLOFFSETBUFF

MOVDI,OFFSETSNUM

DI:MOVAL,[SI]

CMPAL,60H

JAENEXT1

MOVBL,[DI]

MOVBUFFI[BXLAL

INCBYTEPTR[DI]

JMPNEXT5

NEXT1:CMPAL,69H

JANEXT2

MOVBL,[DI+1]

MOVBUFF2[BX].AL

INCBYTEPTR[DI+1]

JMPNEXT5

NEXT2:CMPAL,79H

JANEXT3

MOVBLJDI+2]

MOVBUFF2[BX].AL

INCBYTEPTR[DI+2]

JMPNEXT5

NEXT3:CMPAL,89H

JANEXT4

MOVBL,[DI+3]

MOVBUFF3[BX],AL

INCBYTEPTR[DI+3]

JMPNEXT5

NEXT4:MOVBLJDI+4]

MOVBUFF4[BX]?AL

INCBYTEPTR[DI+4]

NEXT5:INCSI

LOOPDI

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

23.编制宏定义,将存储器区中•个用于结尾的字符串传送到另•个存储器区中,要求源地

址、目的地址、串结尾符号可变。

答:SENDMACROSCHARS,DCHARS,FLAG

LOCALNEXT,EXIT;LOCAL用于解决宏定义内的标号问题

PUSHAX;SCHARS源串地址,DCHARS目的串地址

PUSHSI;FLAG串结尾符号

MOVSI,0

NEXT:MOVAL,SCHARS[SI]

MOVDCHARS[SI],AL

CMPAL,FLAG

JZEXIT

INCSI

JMPNEXT

EXIT:POPSI

POPAX

ENDM

24.定义宏指令名FINSUM:它完成比较两个数X和Y,若X>Y,则执行X+2*Y结果送到

SUM,若XWY,则执行2*X+Y结果送到SUM。

答:FINSUMMACROX,Y,SUM

IFXGTY

MOVAX,Y

SHLAX,1

ADDAX,X

MOVSUM,AX

ELSE

MOVAX,X

SHLAX,1

ADDAX,Y

MOVSUM,AX

ENDIF

ENDM

25.DOS功能调用需要在AH寄存器中存放不同的功能码,试将这些功能调用定义成宏指令

DOS,再定义宏指令DISP,完成显示字符的功能,并展开宏调用DISP,*、

答:DOSMACRONUM

MOVAH,NUM

INT21H

ENDM

DISPMACROZIFU

MOVDL,ZIFU

DOS02H

ENDM

宏调用:DISPe

宏展开:MOVDLJ*'

MOVAH,02H

INT21H

26.编一段程序产生乐曲。

答:演奏儿歌《一闪一闪亮晶晶》

11|55|66|5-144|33|22|1-|

55|44|33|2-|55|44|33|2-|

11|55|66|5-|44|33|22|1-||

DATASEGMENT

FREQUECYDW65535,262,294,330,349,392,440,494;各音阶频率,65535对应0,

DW523,578,659,698,784,880,988;表示不发声

DW1046,1175,1318,1397,1568J760J976

TABLEDW0,8,8,12,12,13,13,12,0,11,11,10,10,9,9,8,0;乐谱各音符频率在

DW12,12,11,11,10,10,9,0,12,12,11,11,10,10,9,0;FREQUECY中的相对

DW8,8,12,12,13,13,12,0,11,11,10,10,9,9,8,0;位置

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVBP,49;CISHU

LEASI,TABLE

CONT:MOVBXJSI]

INCSI

INCSI

SHLBX,1

MOVDIJFREQUECY+BX]

CALLPLAY

DECBP

JNZCONT

EXIT:MOVAH,4cH

INT21H

PLAYPROC

MOVAL,10110110B

OUT43H,AL

MOVDX,12H

MOVAX,34DEH

DIVDI

OUT42H,AL

MOVAL,AH

OUT42H,AL

INAL,61H

MOVAH,AL

ORAL,03H

OUT61H,AL

MOVCX,0FFFFH

DELAY:MOVDX.1700H

GOON:DECDX

JNZGOON

LOOPDELAY

INAL,61H

MOVAH,AL

ANDAL,0FCH

OUT61H,AL

MOVCX,0FFFFH

DELAY1:MOVDXJ00H

GOON1:DECDX

JNZGOON1

LOOPDELAY

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论