1、A10: MOV DX, AXAND DX, 0FH ;取 AX的低四位MOV BX, DL ;低四位存入 STORE中INC BXSHR AX, CL ;DEC CHJNZ A10 ;循环四次完了码?B10: MOV DL, STORE;四组数分别放在 AL、BL、CL和 DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+35.5 试编写一程序, 要求比较两个字符串 STRING1和STRING2所含字符是否完全相同,若相同则显示 MATCH, 若不相同则显示 NO MATCH。程序如下:STRING1 DBI am a student. STRI
2、NG2 DBI am a student! YES DBMATCH , 0DH, 0AH, $NO DBNO MATCH, 0DH, 0AH, $;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART: PUSH DS;设置返回 DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX;给 DS赋值MOV ES, AX;给 ES赋值 LEA SI, STRING1 ;设置串比较指令的初值LEA DI, STRING2CLDMOV CX, STRING2 - STRING1REPE CMP
3、SB;串比较JNE DISPNOLEA DX, YES ;显示 MATCHJMP DISPLAYDISPNO: LEA DX, NO ;显示 NO MATCH MOV AH, 9 ;显示一个字符串的 DOS调用RETMAIN ENDPCSEG ENDS;以上定义代码段END START5.6 试编写一程序,要求能从键盘接收一个个位数 N,然后响铃 N次( 响铃的 ASCII5.7码为 07)。SUB AL, 0JB STOP;0吗?CMP AL, 9 ;9吗?CBWMOV CX, AX;响铃次数 NJCXZ STOPBELL: MOV DL, 07H ;准备响铃MOV AH, 2 ;显示一个字
4、符的 DOS调用,实际为响铃CALL DELAY100ms;延时 100msLOOP BELL5.8 编写程序,将一个包含有 20个数据的数组 M分成两个数组:正数数组 P和负数数组 N,并分别把这两个数组中数据的个数显示出来。COUNT EQU 20ARRAY DW 20 DUP (?);存放数组COUNT1 DB 0;存放正数的个数ARRAY1 DW 20 DUP (?存放正数COUNT2 DB 0;存放负数的个数ARRAY2 DW 20 DUP (?存放负数ZHEN DB 0DH, 0AH,The positive number is :, $ ;正数的个数是:FU DB 0DH, 0A
5、H, The negative number is :负数的个数是:CRLF DB 0DH, 0AH, $ MOV CX, COUNTLEA BX, ARRAYLEA SI, ARRAY1LEA DI, ARRAY2BEGIN1: MOV AX, BXCMP AX, 0 ;是负数码?JS FUSHUMOV SI, AX ;是正数,存入正数数组INC COUNT1;正数个数 +1ADD SI, 2JMP SHORT NEXTFUSHU: MOV DI, AX ;是负数,存入负数数组INC COUNT2;负数个数 +1ADD DI, 2NEXT: ADD BX, 2LOOP BEGIN1LEA D
6、X, ZHEN;显示正数个数MOV AL, COUNT1CALL DISPLAY;调显示子程序LEA DX, FU ;显示负数个数MOV AL, COUNT2DISPLAY PROC NEA;R 显示子程序MOV AH, 9 ;AAM;将(AL) 中的二进制数转换为二个非压缩 BCD码ADD AH, 0 ;变为 09 的 ASCII 码MOV DL, AHADD AL, 0 ;MOV DL, ALLEA DX, CRLF ;显示回车换行DISPLAY ENDP;显示子程序结束5.9 试编写一个汇编语言程序, 求出首地址为 DATA的100D字数组中的最小偶数,并把它存放在 AX中。 MOV B
7、X, 0MOV CX, 100COMPARE: MOV AX, DATABX; 取数组的第一个偶数ADD BX, 2TEST AX, 01H ;是偶数吗?LOOPNZ COMPA;RE不是,比较下一个数JNZ STOP;没有偶数,退出JCXZ STOP;最后一个数是偶数,即为最小偶数,退出COMPARE1: MOV DX, DATABX; 取数组的下一个偶数TEST DX, 01H ;JNZ NEXT;不是,比较下一个数CMP AX, DX;(AX)(DX) 吗?JLE NEXTMOV AX, DX;(DX) ,则置换(AX)为最小偶数 LOOP COMPARE15.10 把 AX中存放的 1
8、6位二进制数 K看作是 8个二进制的“四分之一字节”。 试编写程序要求数一下值为 3(即11B)的四分之一字节数, 并将该数 ( 即11B的个数)在终端上显示出来。 MOV DL, 0 ;计数初始值MOV CX, 8 TEST AX, 03H;是数 03 吗?JNZ NOEQUAL;不是,转走INC DL ;是,计数NOEQUAL: ROR AX, 1;准备判断下一个数ROR AX, 1LOOP COMPAREADD DL, 0 ;将计数值转换为 ASCII 码进行显示5.11 试编写一个汇编语言程序,要求从键盘接收一个四位的 16进制数,并在终端上显示与它等值的二进制数。 MOV BX, 0
9、 ;用于存放四位的 16 进制数MOV CH, 4MOV CL, 4INPUT: SHL BX, CL ;将前面输入的数左移 4位MOV AH, 1 ;从键盘取数CMP AL, 30H ;0 吗?JB INPUT ;不是0F的数重新输入CMP AL, 39H ;是09吗?JA AF ;不是,转 AF的处理AND AL, 0FH ;转换为: 0000B1001BJMP BINARYAF: AND AL, 1101 1111B ;转换为大写字母CMP AL, 41H ;又F 吗?JA INPUT ; 1010B1111BADD AL, 9BINARY: OR BL, AL ;将键盘输入的数进行组合
10、DEL CHJNZ INPUTDISPN: MOV CX, 16 ;将 16 位二进制数一位位地转换成 ASCII 码显示DISP: MOV DL, 0ROL BX, 1RCL DL, 1OR DL, 30HLOOP DISP5.12 设有一段英文,其字符变量名为 ENG,并以$字符结束。试编写一程序,查5.13对单词 SUN在该文中的出现次数,并以格式“ SUN:xxxx”显示出次数。ENG DBHere is sun, sun ,$ DISP DB SUN:DAT DB0000 , 0DH, 0AH, $KEYWORD DB sun MOV AX, 0MOV DX, DISP-ENG-2;
11、计算 ENG的长度( 每次比较 sun, 因此比较次数 -2)LEA BX, ENGCOMP: MOV DI, BXLEA SI, KEYWORDJNZ NOMATCHINC AX ;是,SUN的个数加 1NOMATCH: INC BX;指向 ENG的下一个字母DEC DXJNZ COMPDONE: MOV CH, 4;将次数转换为 16 进制数的 ASCII 码LEA BX, DAT ;转换结果存入 DAT单元中DONE1: ROL AX, CLMOV DX, AXAND DL, 0FH ;取一位 16进制数ADD DL, 30HCMP DL, 39HJLE STOREADD DL, 07H
12、 ;是“AF”所以要加 7STORE: MOV BX, DL ;JNZ DONE1 LEA DX, DISP ;显示字符串程序 ( 将 DISP和 DAT一起显示 )MOV AH, 09H5.14 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。BUFF DB 50 DUP ( )COUNT DW 0 LEA BX, BUFFMOV COUNT, 0 MOV AH, 01 ;从键盘输入一个字符的功能调用MOV BX, ALCMP AL, $ ;是 $结束符吗?JNZ INPUT ;不是,继续输入LEA BX, BUFF ;对非数字字符进行计数 MOV CL,
13、 BXCMP CL, $ ;是 $结束符,则转去显示JZ DISPCMP CL, 30H ;小于 0 是非数字字符JB NEXTCMP CL, 39H ;大于 9 是非数字字符JA NEXTINC COUNT;个数 +1JMP NEXT ; 16 进制数显示程序段( 省略 )5.15 有一个首地址为MEM的 100D字数组,试编制程序删除数组中所有为0的项,5.16并将后续项向前压缩,最后将数组的剩余部分补上 0。MEM DW 100 DUP (?设置返回DOS给DS赋值 MOV SI, (100-1)*2 ;(SI) 指向 MEM的末元素的首地址MOV BX, -2 ;地址指针的初值CMP
14、MEM BX, 0JZ CONSLOOP COMPJMP FINISH ;比较完了,已无 0 则结束CONS:CONS1: CMP DI, SI ;到了最后单元码?JAE NOMOVMOV AX, MEM DI+2 ;后面的元素向前移位MOV MEM DI, AXJMP CONS1NOMOV: MOV WORD PTR SI, 0;最后单元补 0FINISH:5.17 在 STRING到 STRING+99单元中存放着一个字符串, 试编制一个程序测试该字符串中是否存在数字,如有则把 CL的第 5 位置 1,否则将该位置 0。STRING DB 100 DUP (? MOV SI, 0 ;(SI
15、) 作为地址指针的变化值REPEAT: MOV AL, STRING SICMP AL, 30HJB GO_ONCMP AL, 39HJA GO_ONOR CL, 20H ;存在数字把 CL的第 5 位置 1JMP EXITGO_ON: INC SILOOP REPEATAND CL, 0DFH;不存在数字把 CL的第 5 位置 0EXIT:5.18 在首地址为 TABLE的数组中按递增次序存放着 100H个 16位补码数,试编写一个程序把出现次数最多的数及其出现次数分别存放于 AX和 CX中。TABLE DW 100H DUP (?数组中的数据是按增序排列的DATA DW ? MOV CX,
16、 100H;循环计数器MOV SI, 0 MOV DX, 0MOV AX, TABLE SI CMP TABLE SI, AX ;计算一个数的出现次数JNE ADDRINC DXADDR: CMP DX, COUN;T 此数出现的次数最多吗?JLE DONEMOV COUNT, DX;目前此数出现的次数最多,记下次数MOV DATA, AX;记下此数 LOOP NEXT;准备取下一个数MOV CX, COUNT;出现最多的次数存入 (CX)MOV AX, DATA;出现最多的数存入 (AX)5.19 数据段中已定义了一个有 n 个字数据的数组 M,试编写一程序求出 M中绝5.20对值最大的数,
17、把它放在数据段的 M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。n EQU 100H ;假设 n=100HM DW n DUP (?M+2n单元ADDR DW ?M+2(n+1)单元 MOV CX, n ;LEA DI, MMOV AX, DI ;取第一个数MOV ADDR, DI;记下绝对值最大的数的地址此数是正数吗?JNS ZHEN;是正数,即为绝对值,转去判断下一个数NEG AX;不是正数,变为其绝对值ZHEN: MOV BX, DICMP BX, 0 ;JNS COMP;是正数,即为绝对值,转去比较绝对值大小NEG BX; CMP AX, BX;判断绝对值大小JAE ADDRESSMOV AX, BX;(BX) ,使(AX)中为绝对值最大的数ADDRESS
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1