1、第五章离散数学1.从屏幕上输入小写字母,转化为大写字母输出(解法1) DATA SEGMENT MESSAGE DB ENTER A STRING:,0AH,0DH,$ MAXLENGTH DB 50,?,50 DUP(?) ;每次最多可以输入49个字符DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AX LEA DX,MESSAGE ;输出ENTER A STRING MOV AH,09H INT 21H LEA DX,MAXLENGTH ;输入字符串 MOV AH,0AH ;键盘输入到缓冲区,DS:
2、DX=缓冲区首址 INT 21H ;(DS:DX)=缓冲区最大字符数,(DS:DX+1)=实际输入的字符数 MOV AH,02H ;输出回车换行 MOV DL,0AH INT 21H MOV AH,02H MOV DL,0DH INT 21H MOV CL,MAXLENGTH+1;把字符的实际长度放入寄存器CL MOV CH,0 MOV BH,02H LEA SI,MAXLENGTH+2;取字符串的基地址放入SIXUN: MOV AL,SI CMP AL,Z JBE S1 ;小于等于Z转移 JMP S3 S1:CMP AL,A JAE DA ;大于等于A转移 JMP OUTPUTDA:ADD
3、AL,20H JMP OUTPUTS3:CMP AL,z ;小于等于小Z转移 JBE S4S4:CMP AL,a ;大于等于小a转移 JAE XIAO JMP OUTPUTXIAO: SUB AL,32 JMP OUTPUTOUTPUT: MOV DL,AL MOV AH,02H ;显示输出 INT 21H INC SILOOP XUN MOV AH,4CH INT 21HCODE ENDS END START(解法2);将输入的小写字母转化为大写字母输出,输入回车结束CODE SEGMENT ASSUME CS:CODEBEGIN: MOV AH,01H INT 21HCMP AL,0DH
4、;ASCII OF CARRIAGE RETURNJE EXIT CMP AL,61H ;ASCII OF a JB STOP CMP AL,7AH ;ASCII OF z JA STOPSUB AL,20HSTOP: MOV DL,AL MOV AH,2 INT 21H JMP BEGINEXIT: MOV AH,4CHINT 21H RETCODE ENDS END BEGIN2.输入一个字符,找出它的前导字符和后续字符,并按顺序显示这三个字符. (解法1)CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART:PUSH DSXOR AX,AXPUSH A
5、XMOV AH,01HINT 21HCMP AL,61HJB EXITCMP AL,7AHJA EXITMOV CL,ALDEC ALMOV DL,ALMOV AH,02HINT 21HMOV DL,CLMOV AH,02HINT 21HAND AL,01HINC CLMOV DL,CLMOV AH,02HINT 21HEXIT:MOV AX,4C00HINT 21HRETMAIN ENDPCODE ENDSEND START(解法2).MODEL SMALL.STACK 200H.DATAimsg db Input:$ ;输入提示信息 omsg db 0Dh,0Ah,Output:$ ;输出
6、提示信息 string db 3 dup(0),$ ;存放三个字符 .CODE START: mov ax,data mov ds,ax lea dx,imsg mov ah,9 int 21h mov ah,1 int 21h lea di,string dec al mov cx,3 s: mov di,al inc di inc al loop s lea dx,omsg mov ah,9 int 21hlea dx,string mov ah,9 int 21h MOV AH,07HINT 21HMOV AX,4C00HINT 21HEND START3.将AX寄存器中的16位数分成4
7、组,每组4位,然后把这四组数分别放在AL,BL,CL,DL中.MODEL SMALL,C.CODE.STARTUPMOV AX,3456HMOV BX,AXMOV CL,4ROL AX,CLMOV BX,AXAND AL,0FH ;AL中是15,14,13,12ROL BX,CLMOV DX,BXAND BL,0FH ;BL中是11,10,9,8AND AH,0FHMOV CH,AH ;CH中是7,6,5,4MOV CL,CHAND DH,0FH ;DH中是3,2,1,0MOV DL,DH.EXIT 0END4.试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若
8、相同则显示MATCH,若不相同则显示NOT MATCH.MODEL SMALL.DATASTRING1 DB LDSKFJSLDKFLENG1 EQU $-STRING1STRING2 DB LDSKFJSLDKPLENG2 EQU $-STRING2MSG1 DB MATCH,24HMSG2 DB NOT MATCH,24H.CODEMOV AX,DATAMOV DS,AXMOV ES,AXMOV BX,LENG1MOV CX,LENG2CMP BX,CXJNZ NOT_MATCHLEA SI,STRING1LEA DI,STRING2CLDREPZ CMPSBJZ _MATCHNOT_MA
9、TCH:LEA DX,MSG2MOV AH,09HINT 21HJMP _EXIT_MATCH:LEA DX,MSG1MOV AH,09HINT 21H_EXIT:MOV AH,07HINT 21HMOV AX,4C00HINT 21HEND5.要求能从键盘接收一个个位数,然后响铃N次(响铃的ASCII码为07).MODEL SMALL.DATAMSG DB YOUR INPUT IS NOT 1-9!,24H.CODE.STARTUPMOV AH,0INT 16H ;接收一个键盘输入CMP AL,31HJB ERRORCMP AL,39HJA ERRORMOV CL,ALSUB CL,30H
10、CYCLE:MOV DL,7MOV AH,09HINT 21HMOV AH,07H ;按一下键就响一下铃声INT 21HLOOP CYCLEJMP _EXITERROR:LEA DX,MSGMOV AH,09HINT 21HMOV AH,07HINT 21H_EXIT:.EXIT 0END6.编写程序,将一个包含有20个数据的数组M分成两个数组,正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来.MODEL SMALL,C.DATAINDEX DB 12,-20,4,05H,11H,2AH,-11,2,3,09H DB -3,0,-9,44H,32H,33H,34H,-5,40H,
11、22HP DB 0,20 DUP(0) ;存放正数N DB 0,20 DUP(0) ;存放负数.CODEDISPLAY PROC NEAR USES AXAND AH,0FH.IF AH= 0AH & AH= 0FHADD AH,07H.ENDIFADD AH,30HMOV DL,AHMOV AH,02HINT 21HMOV AH,07HINT 21HRETDISPLAY ENDP.STARTUPLEA DI,P+1LEA SI,N+1LEA BX,INDEXMOV CX,14HCYCLE:CMP BYTE PTR BX,0JG NOSIGNINC AL ;AL中存放负数MOV DL,BYTE
12、 PTR BXMOV BYTE PTR DS:DI,DLINC DIINC BXLOOP CYCLENOSIGN:INC AH ;AH中存放正数MOV DL,BYTE PTR BXMOV BYTE PTR DS:SI,DLINC SIINC BXLOOP CYCLEMOV P,AHMOV N,ALCALL DISPLAYMOV AH,ALCALL DISPLAY.EXIT 0END7.试编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中.datarea segmentdata dw 10,2,4,8,7,7,69,65,55,89,95 dw 25,39
13、,77,88,25,1,47,88,8,8,77,88,22count=($-data)/2num dw 0ffeehdatarea endscode segmentmain proc farassume cs:code,ds:datareapush dsmov ax,0push axbegin:mov ax,datareamov ds,axmov bl,2mov cx,countlea si,dataA:mov ax,simov dx,axdiv blcmp ah,0jne circlecmp dx,numjb Bcircle:add si,2lopa:loop Aexit:mov ax,n
14、umretB:mov num,dxjmp lopamain endpcode endsend8.把AX中存放的16位二进制数K看作是8个二进制的四分之一字节.试编写一程序,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来.MOV CX,8 MOV DL,0 NEXT3: ROR AX,1 JNC NEXT1 ROR AX,1 JNC NEXT2 INC DL NEXT2: LOOP NEXT3 ADD DL, 30H MOV AH, 2 INT 21H MOV AH, 4CH INT 21H NEXT1: ROR AX, 1 JMP NEXT29.试编写一汇编语言程序,求
15、出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中.MODEL SMALL,C.DATA_DATA DW 100 DUP(?).CODE.STARTUPLEA SI,_DATAMOV AX,SIMOV CX,100CYCLE:ADD SI,2.IF AX SI MOV AX,SI.ENDIFLOOP CYCLE.EXIT 010.设有一段英文,其字符变量名为ENG,并以$字符结束,试编写一程序,查对单词SUN在该文中的出现次数,并以格式SUN*显示出次数.MODEL SMALL .386 .DATA ENG DB SUN,SUN JAVA,24HMESSAGE DB SUN:,
16、$ .STACK 100H .CODE MAIN PROC FAR START: PUSH DS AND AX,0 PUSH AXMOV AX,DATA MOV DS,AX MOV AX,0H MOV SI,1H SUBSI1: SUB SI,1H SUBSI2: SUB SI,1H COMPARES: ADD SI,1H MOV DL,ENGSI CMP DL,24H JE PRINT CMP DL,53H JNE COMPARES COMPAREU: ADD SI,1H MOV DL,ENGSI CMP DL,55H JNE SUBSI2 COMPAREN: ADD SI,1H MOV D
17、L,ENGSI CMP DL,4EH JNE SUBSI1 INC AX JMP COMPARES PRINT: LEA DX,MESSAGE PUSH AX MOV AH,09H INT 21H POP AX CALL SHOWNUMBER EXIT: RET MAIN ENDP SHOWNUMBER PROC NEAR COVERNUM: DAA MOV DX,AX MOV CL,4H SHOW: ROL DX,4H PUSH DX AND DX,0FH ADD DX,30H MOV AH,02H INT 21H POP DX LOOP SHOW RET SHOWNUMBER ENDP E
18、ND START11.从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果.MODEL SMALL .386 .CODE MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AXMOV CX,0 INPUT: MOV AH,1H INT 21H COMPARE: CMP AL,24H JE PRINT CMP AL,30H JL ADDCOUNT CMP AL,39H JG ADDCOUNT ADDCOUNT: ADD AX,1H JMP INPUT PRINT: CALL SHOWNUMBER EXIT: RET MAIN EN
19、DP SHOWNUMBER PROC NEAR COVERNUM: DAA MOV DX,AX MOV CL,2H SHOW: ROL DL,4H PUSH DX AND DL,0FH ADD DL,30H MOV AH,02H INT 21H POP DX LOOP SHOW RET SHOWNUMBER ENDP END START12.有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零.model small .386 .stack 100H .data mem dw12,0,0,0,0,0,1,2,3,6,4,7,8,
20、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 MAIN PROC FAR start: push ds and ax,0 push axmov ax,data mov ds,ax mov ax,0H mov bx,64H mov cx,64H mov si,0FFFEH
21、 repeat: ADD si,2H cmp MEMsi,0H JE calls loop repeat calls: INC ax call sort cmp ax,1H JE lastValue DEC cx jmp repeat exit : ret lastValue: mov membx,0H DEC cx jmp repeatMAIN ENDPsort PROC NEAR push cx push si sub si,2H s: add si,2H mov dx,memsi mov memsi+2,dx loop s return: pop si pop cx ret sort E
22、NDP END start13.在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在数字.如有,则把CL的第5位置1,否则将该位置0.DSEG SEGMENTA DW ?B DW ?DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEGSTART:PUSH DSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AXBEGIN: MOV AX, AMOV AX, BXOR AX, BXTEST AX, 0001JZ EXITXCHG BX, AMOV B, BXJMP EXI
23、TCLASS: TEST BX, 0001JZ EXITINC BINC AEXIT:RETMAIN ENDPCSEG ENDSEND START14.在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现次数分别存放在AX和CX中.DATA SEGMENTTABLE DW 100H DUP (?) MDATA DW ? ; 存放出现次数最多的数 COUNT DW 0 ; 存放出现次数 DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BX, 1
24、00H MOV DI, 0 ; DI为数组TABLE的指针 NEXT: MOV DX, 0 MOV SI, 0 MOV AX, TABLEDI MOV CX, 100H COMP: CMP TABLESI, AX JNE _ADDR INC DX _ADDR: ADD SI, 2 LOOP COMP CMP DX, COUNT JLE CHANG MOV COUNT, DX MOV MDATA, AX CHANG: ADD DI, 2 DEC BX JNZ NEXT MOV CX, COUNT MOV AX, MDATA MOV AX,4C00HINT 21HCODE ENDSEND STAR
25、T15.数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中.DSEG SEGMENTX DW -4FX DW ?DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEGSTART:PUSH DSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AXBEGIN: CMP X, 5JG A0CMP X, -5JL A0MOV BX,1SUB BX, XMOV FX, BXRETA0:MOV FX, 0RETMAIN
26、 ENDPCSEG ENDSEND START16.在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一程序,求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中.MODEL SMALL.STACK 200H.DATADA_TA DW 100H DUP(?) .CODE.STARTUPXOR AX,AXXOR BX,BXXOR DX,DXMOV CX,100HLEA SI,DA_TACYCLE:ADD AX,SIADC DX,0INC SIINC SIDEC CXCMP CX,0JNZ CYCLEMOV CX,100HDIV CX ;计算
27、平均值,存放在AX中.LEA SI,DA_TACOMPARE:CMP AX,SIJA NEXT ;计算小于AX的值,其个数存放在BX中INC BXNEXT:INC SIINC SIDEC CXCMP CX,0JNZ COMPARE.EXIT 0END17.试编制一个程序,把AX中的16进制数转化为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中.例如:当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H.;MODE=DOSDATA SEGMENTSOURCE DW 2A49HMEM DB 4 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX MOV DX,SOURCELEA BX,MEMMOV CX,4LB:MOV AX,DXAND AX,000FHCMP AL,10JC ADADD AL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1