第五章离散数学.docx

上传人:b****6 文档编号:7950826 上传时间:2023-01-27 格式:DOCX 页数:22 大小:23.34KB
下载 相关 举报
第五章离散数学.docx_第1页
第1页 / 共22页
第五章离散数学.docx_第2页
第2页 / 共22页
第五章离散数学.docx_第3页
第3页 / 共22页
第五章离散数学.docx_第4页
第4页 / 共22页
第五章离散数学.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第五章离散数学.docx

《第五章离散数学.docx》由会员分享,可在线阅读,更多相关《第五章离散数学.docx(22页珍藏版)》请在冰豆网上搜索。

第五章离散数学.docx

第五章离散数学

1.从屏幕上输入小写字母,转化为大写字母输出

(解法1)

DATASEGMENT

  MESSAGE  DB"ENTERASTRING:

",0AH,0DH,'$'

  MAXLENGTHDB50,?

50DUP(?

);每次最多可以输入49个字符

DATAENDS

CODESEGMENT

  ASSUMEDS:

DATA,CS:

CODE

START:

  MOVAX,DATA

  MOVDS,AX

  LEADX,MESSAGE;输出ENTERASTRING

  MOVAH,09H

  INT21H         

  LEADX,MAXLENGTH;输入字符串

  MOVAH,0AH     ;键盘输入到缓冲区,DS:

DX=缓冲区首址

  INT21H   ;(DS:

DX)=缓冲区最大字符数,(DS:

DX+1)=实际输入的字符数

  

  MOVAH,02H    ;输出回车换行

  MOVDL,0AH

  INT21H

  MOVAH,02H

  MOVDL,0DH  

  INT21H

  MOVCL,MAXLENGTH+1;把字符的实际长度放入寄存器CL

  

  MOVCH,0

  MOVBH,02H

  LEASI,MAXLENGTH+2;取字符串的基地址放入SI

XUN:

  MOVAL,[SI]

  CMPAL,'Z'

  JBES1   ;小于等于'Z'转移    

  JMPS3  

S1:

CMPAL,'A'

  JAEDA  ;大于等于'A'转移

  JMPOUTPUT

DA:

ADDAL,20H

  JMPOUTPUT

S3:

CMPAL,'z';小于等于小Z转移

  JBES4

S4:

CMPAL,'a';大于等于小a转移

  JAEXIAO

  JMPOUTPUT

XIAO:

  SUBAL,32

  JMPOUTPUT

OUTPUT:

  MOVDL,AL

  MOVAH,02H;显示输出

  INT21H

  INCSI

LOOPXUN

  MOVAH,4CH

  INT21H

CODEENDS

  ENDSTART

(解法2)

;将输入的小写字母转化为大写字母输出,输入回车结束

CODESEGMENT

  ASSUMECS:

CODE

BEGIN:

  MOVAH,01H

  INT21H

CMPAL,0DH;ASCIIOFCARRIAGERETURN

JEEXIT

  CMPAL,61H;ASCIIOF'a'

  JBSTOP

  CMPAL,7AH;ASCIIOF'z'

  JASTOP

SUBAL,20H

STOP:

  MOVDL,AL

  MOVAH,2

  INT21H

  JMPBEGIN

EXIT:

  

MOVAH,4CH

INT21H

  RET

CODEENDS

  ENDBEGIN

2.输入一个字符,找出它的前导字符和后续字符,并按顺序显示这三个字符.

(解法1)

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE

START:

PUSHDS

XORAX,AX

PUSHAX

MOVAH,01H

INT21H

CMPAL,61H

JBEXIT

CMPAL,7AH

JAEXIT

MOVCL,AL

DECAL

MOVDL,AL

MOVAH,02H

INT21H

MOVDL,CL

MOVAH,02H

INT21H

ANDAL,01H

INCCL

MOVDL,CL

MOVAH,02H

INT21H

EXIT:

MOVAX,4C00H

INT21H

RET

MAINENDP

CODEENDS

ENDSTART

(解法2)

.MODELSMALL

.STACK200H

.DATA

imsgdb'Input:

$';输入提示信息

omsgdb0Dh,0Ah,'Output:

$';输出提示信息

stringdb3dup(0),'$';存放三个字符

.CODE

START:

movax,@data

movds,ax

leadx,imsg

movah,9

int21h

movah,1

int21h

leadi,string

decal

movcx,3

s:

mov[di],al

incdi

incal

loops

leadx,omsg

movah,9

int21h

leadx,string

movah,9

int21h

MOVAH,07H

INT21H

MOVAX,4C00H

INT21H

ENDSTART

3.将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL,BL,CL,DL中

.MODELSMALL,C

.CODE

.STARTUP

MOVAX,3456H

MOVBX,AX

MOVCL,4

ROLAX,CL

MOVBX,AX

ANDAL,0FH;AL中是15,14,13,12

ROLBX,CL

MOVDX,BX

ANDBL,0FH;BL中是11,10,9,8

ANDAH,0FH

MOVCH,AH;CH中是7,6,5,4

MOVCL,CH

ANDDH,0FH;DH中是3,2,1,0

MOVDL,DH

.EXIT0

END

4.试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示'MATCH',若不相同则显

示'NOTMATCH'.

.MODELSMALL

.DATA

STRING1DB"LDSKFJSLDKF"

LENG1EQU$-STRING1

STRING2DB"LDSKFJSLDKP"

LENG2EQU$-STRING2

MSG1DB"MATCH",24H

MSG2DB"NOTMATCH",24H

.CODE

MOVAX,@DATA

MOVDS,AX

MOVES,AX

MOVBX,LENG1

MOVCX,LENG2

CMPBX,CX

JNZNOT_MATCH

LEASI,STRING1

LEADI,STRING2

CLD

REPZCMPSB

JZ_MATCH

NOT_MATCH:

LEADX,MSG2

MOVAH,09H

INT21H

JMP_EXIT

_MATCH:

LEADX,MSG1

MOVAH,09H

INT21H

_EXIT:

MOVAH,07H

INT21H

MOVAX,4C00H

INT21H

END

5.要求能从键盘接收一个个位数,然后响铃N次(响铃的ASCII码为07)

.MODELSMALL

.DATA

MSGDB"YOURINPUTISNOT1-9!

",24H

.CODE

.STARTUP

MOVAH,0

INT16H;接收一个键盘输入

CMPAL,31H

JBERROR

CMPAL,39H

JAERROR

MOVCL,AL

SUBCL,30H

CYCLE:

MOVDL,7

MOVAH,09H

INT21H

MOVAH,07H;按一下键就响一下铃声

INT21H

LOOPCYCLE

JMP_EXIT

ERROR:

LEADX,MSG

MOVAH,09H

INT21H

MOVAH,07H

INT21H

_EXIT:

.EXIT0

END

6.编写程序,将一个包含有20个数据的数组M分成两个数组,正数数组P和负数数组N,并分别把这两个数组中数据的

个数显示出来.

.MODELSMALL,C

.DATA

INDEXDB12,-20,4,05H,11H,2AH,-11,2,3,09H

     DB-3,0,-9,44H,32H,33H,34H,-5,40H,22H

PDB0,20DUP(0);存放正数

NDB0,20DUP(0);存放负数

.CODE

DISPLAYPROCNEARUSESAX

ANDAH,0FH

.IFAH>=0AH&&AH<=0FH

ADDAH,07H

.ENDIF

ADDAH,30H

MOVDL,AH

MOVAH,02H

INT21H

MOVAH,07H

INT21H

RET

DISPLAYENDP

.STARTUP

LEADI,P+1

LEASI,N+1

LEABX,INDEX

MOVCX,14H

CYCLE:

CMPBYTEPTR[BX],0

JGNOSIGN

INCAL;AL中存放负数

MOVDL,BYTEPTR[BX]

MOVBYTEPTRDS:

[DI],DL

INCDI

INCBX

LOOPCYCLE

NOSIGN:

INCAH;AH中存放正数

MOVDL,BYTEPTR[BX]

MOVBYTEPTRDS:

[SI],DL

INCSI

INCBX

LOOPCYCLE

MOVP,AH

MOVN,AL

CALLDISPLAY

MOVAH,AL

CALLDISPLAY

.EXIT0

END

7.试编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中.

datareasegment

datadw10,2,4,8,7,7,69,65,55,89,95

    dw25,39,77,88,25,1,47,88,8,8,77,88,22

count=($-data)/2

numdw0ffeeh

datareaends

codesegment

mainprocfar

assumecs:

code,ds:

datarea

pushds

movax,0

pushax

begin:

movax,datarea

movds,ax

movbl,2

movcx,count

leasi,data

A:

movax,[si]

movdx,ax

divbl

cmpah,0

jnecircle

cmpdx,num

jbB

circle:

addsi,2

lopa:

loopA

exit:

movax,num

ret

B:

movnum,dx

jmplopa

mainendp

codeends

end

8.把AX中存放的16位二进制数K看作是8个二进制的"四分之一字节".试编写一程序,要求数一下值为3(即11B)的四

分之一字节数,并将该数在终端上显示出来.

MOVCX,8

MOVDL,0

NEXT3:

RORAX,1

JNCNEXT1

RORAX,1

JNCNEXT2

INCDL

NEXT2:

LOOPNEXT3

ADDDL,30H

MOVAH,2

INT21H

MOVAH,4CH

INT21H

NEXT1:

RORAX,1

JMPNEXT2

9.试编写一汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中.

.MODELSMALL,C

.DATA

_DATADW100DUP(?

.CODE

.STARTUP

LEASI,_DATA

MOVAX,[SI]

MOVCX,100

CYCLE:

ADDSI,2

.IFAX<[SI]

  MOVAX,[SI]

.ENDIF

LOOPCYCLE

.EXIT0

10.设有一段英文,其字符变量名为ENG,并以$字符结束,试编写一程序,查对单词SUN在该文中的出现次数,并以格式

"SUN****"显示出次数.

.MODELSMALL

.386

.DATA

ENGDB'SUN','SUNJAVA',24H

MESSAGEDB'SUN:

','$'

.STACK100H

.CODE

MAINPROCFAR

START:

PUSHDS

ANDAX,0

PUSHAX

MOVAX,@DATA

MOVDS,AX

MOVAX,0H

MOVSI,1H

SUBSI1:

SUBSI,1H

SUBSI2:

SUBSI,1H

COMPARES:

ADDSI,1H

MOVDL,ENG[SI]

CMPDL,24H

JEPRINT

CMPDL,53H

JNECOMPARES

COMPAREU:

ADDSI,1H

MOVDL,ENG[SI]

CMPDL,55H

JNESUBSI2

COMPAREN:

ADDSI,1H

MOVDL,ENG[SI]

CMPDL,4EH

JNESUBSI1

INCAX

JMPCOMPARES

PRINT:

LEADX,MESSAGE

PUSHAX

MOVAH,09H

INT21H

POPAX

CALLSHOWNUMBER

EXIT:

RET

MAINENDP

SHOWNUMBERPROCNEAR

COVERNUM:

DAA

MOVDX,AX

MOVCL,4H

SHOW:

ROLDX,4H

PUSHDX

ANDDX,0FH

ADDDX,30H

MOVAH,02H

INT21H

POPDX

LOOPSHOW

RET

SHOWNUMBERENDP

ENDSTART

11.从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果.

.MODELSMALL

.386

.CODE

MAINPROCFAR

START:

PUSHDS

MOVAX,0

PUSHAX

MOVCX,0

INPUT:

MOVAH,1H

INT21H

COMPARE:

CMPAL,24H

JEPRINT

CMPAL,30H

JLADDCOUNT

CMPAL,39H

JGADDCOUNT

ADDCOUNT:

ADDAX,1H

JMPINPUT

PRINT:

CALLSHOWNUMBER

EXIT:

RET

MAINENDP

SHOWNUMBERPROCNEAR

COVERNUM:

DAA

MOVDX,AX

MOVCL,2H

SHOW:

ROLDL,4H

PUSHDX

ANDDL,0FH

ADDDL,30H

MOVAH,02H

INT21H

POPDX

LOOPSHOW

RET

SHOWNUMBERENDP

ENDSTART

12.有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩

余部分补上零.

.modelsmall

.386

.stack100H

.data

memdw

12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5,1,2,0,2,4,0,2,54,0,12,0,

0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5,1,2,0,2,4,0,2,54,0,45,7,5,1,2

0,2,4,0,2

.code

MAINPROCFAR

start:

pushds

andax,0

pushax

movax,@data

movds,ax

movax,0H

movbx,64H

movcx,64H

movsi,0FFFEH

repeat:

ADDsi,2H

cmpMEM[si],0H

JEcalls

looprepeat

calls:

INCax

callsort

cmpax,1H

JElastValue

DECcx

jmprepeat

exit:

ret

lastValue:

movmem[bx],0H

DECcx

jmprepeat

MAINENDP

sortPROCNEAR

pushcx

pushsi

subsi,2H

s:

addsi,2H

movdx,mem[si]

movmem[si+2],dx

loops

return:

popsi

popcx

ret

sortENDP

ENDstart

13.在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在数字.如有,则把CL的第

5位置1,否则将该位置0.

DSEGSEGMENT

ADW?

BDW?

DSEGENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG,DS:

DSEG

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX

BEGIN:

MOVAX,A

MOVAX,B

XORAX,BX

TESTAX,0001

JZEXIT

XCHGBX,A

MOVB,BX

JMPEXIT

CLASS:

TESTBX,0001

JZEXIT

INCB

INCA

EXIT:

RET

MAINENDP

CSEGENDS

ENDSTART

14.在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现

次数分别存放在AX和CX中.

DATASEGMENT

TABLEDW100HDUP(?

MDATADW?

;存放出现次数最多的数

COUNTDW0;存放出现次数

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVBX,100H

MOVDI,0;DI为数组TABLE的指针

NEXT:

MOVDX,0

MOVSI,0

MOVAX,TABLE[DI]

MOVCX,100H

COMP:

CMPTABLE[SI],AX

JNE_ADDR

INCDX

_ADDR:

ADDSI,2

LOOPCOMP

CMPDX,COUNT

JLECHANG

MOVCOUNT,DX

MOVMDATA,AX

CHANG:

ADDDI,2

DECBX

JNZNEXT

MOVCX,COUNT

MOVAX,MDATA

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

15.数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单

元中,并将该数的偏移地址存放在M+2(n+1)单元中.

DSEGSEGMENT

XDW-4

FXDW?

DSEGENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG,DS:

DSEG

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX

BEGIN:

  

CMP   X,5

JGA0

CMPX,-5

JLA0

MOVBX,1

SUBBX,X

MOVFX,BX

RET

A0:

MOVFX,0

RET

MAINENDP

CSEGENDS

ENDSTART

16.在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一程序,求出它们的平均值放在AX寄存器中;并求

出数组中有多少个数小于此平均值,将结果放在BX寄存器中.

.MODELSMALL

.STACK200H

.DATA

DA_TADW100HDUP(?

.CODE

.STARTUP

XORAX,AX

XORBX,BX

XORDX,DX

MOVCX,100H

LEASI,DA_TA

CYCLE:

ADDAX,[SI]

ADCDX,0

INCSI

INCSI

DECCX

CMPCX,0

JNZCYCLE

MOVCX,100H

DIVCX;计算平均值,存放在AX中.

LEASI,DA_TA

COMPARE:

CMPAX,[SI]

JANEXT;计算小于AX的值,其个数存放在BX中

INCBX

NEXT:

INCSI

INCSI

DECCX

CMPCX,0

JNZCOMPARE

.EXIT0

END

17.试编制一个程序,把AX中的16进制数转化为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中.例

如:

当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H.

;MODE=DOS

DATA           SEGMENT

SOURCEDW     2A49H

MEM        DB4DUP(?

DATA           ENDS

CODE           SEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOV    AX,DATA

MOV    DS,AX  

MOV    DX,SOURCE

LEA        BX,MEM

MOV    CX,4

LB:

MOV    AX,DX

AND    AX,000FH

CMP    AL,10

JC         AD

ADD    AL

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

当前位置:首页 > 解决方案 > 学习计划

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

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