汇编语言小程序例子_第1页
汇编语言小程序例子_第2页
汇编语言小程序例子_第3页
汇编语言小程序例子_第4页
汇编语言小程序例子_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、1.编写统计AX中1、0个数的源程序。1的个数存入CH,0的个数存入CLCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0MOV DX,17AA1: SUB DX, 1JZ AA3SHL AX, 1JNC AA2INC CHJMP AA1AA2: INC CLJMP AA1AA3: MOV AH,4CHINT 21HCODE ENDSEND START2.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显示“MATCH,若不相同则显示“NOMATCHMOV BH,DI程序:DATA SEGMENTR1 DB MATCH,0

2、AH,0DHR2 DB NO MATCH,0AH,0DHSTRING1 DB XXXXXN1 EQU $-STRING1STRING2 DB YYYYYN2 EQU $-STRING2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,N1CMP AX,N2JNZ AA1ADD AX,1LEA SI,STRING1LEA DI,STRING2AA2: MOV BL,SIINC SIE: MOV AH,4CHINC DISUB AX,1JZ AA3CMP BL,BHJZ AA2JMP AA1AA

3、3: LEA BX,R1MOV CX,7AA4: MOV DL,BXINC BXMOV AH,2INT 21HLOOP AA4JMP EAA1: LEA BX,R2MOV CX,10AA5: MOV DL,BXINC BXMOV AH,2INT 21HLOOP AA5INT 21HMOV DS, AXCODE ENDSEND START3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。由于数字0 9的ASCH码为30H39H,字母af与AF的AS8码为61H66H与41H46H ,因

4、此,如果输入的字母为数字09,则其低4位即为对应的二进制位;如果输入的字符为字母af或AF,则需要减7 ,然后通过移位将低4位依次输出。汇编程序如下:DATA SEGMENTMSG1 DB Hex:,$MSG2 DB 0DH, 0AH, Binary:, $COUNT EQU 4BUF DB 4 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX, DATALEA DX, MSG1MOV AH, 9INT 21HMOV CX, COUNTMOV SI, 0INPUT:;通过四次循环从键盘读入四位十六进制数MOV AH,

5、1INT 21HMOV BUFSI, ALDEC CXINC SICMP CX, 0JNZ INPUTNEXT3: LEA DX, MSG2MOV AH, 9INT 21HMOV CX, COUNTMOV SI, 0NEXT2: MOV BL, BUFSICMP BL, 9JBE OK; 读入的字符V=9转向OK:NEXT1: MOV DL, 0SHL BL, 1JNC SKIPINC DLSKIP: MOV AH, 2INT 21HLOOP NEXT1POP CX ;INC SILOOP NEXT2 ; 4次循环将4位十六进制数,每位转换为对应的4位二进制EXIT: MOV AH, 4CHI

6、NT 21HCODE ENDSEND STARTSUB BL, 7;读入字符=9减7OK: PUSH CXMOV CL ,4SHL BL, CL逻辑左移4位,低4位3高4位MOV CX, 4 ; 4次循环将当前处理字符的4位二进制输出4.设从STRING开始存放一个以$为结束标志的字符串,试编写把字符串中的字符进行分类的源程序,数字字符送入NU研始的内存中,大写字母送入BCHARF始的内存区中,小写字母存入LCHA祈始的内存中,其他字符存入OTHERS始的内存区中。DATA SEGMENTSTRING DB abc123ABC,$N EQU $-STRINGNUM DB N DUPBCHAR

7、DB N DUPLCHAR DB N DUP(?)OTHER DB N DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA BX,STRINGDEC BXLEA SP,BCHARLEA CX,LCHARLEA DX,OTHERLEA SI,NUMAA1:INC BXMOV AL,BX/判断是否为$,是否结束CMP AL, $MOV DI,CXMOV DI,ALJZ AA5CMP AL,30H/JC AA4CMP AL,39HJA AA2MOV SI,ALINC SIJMP AA1AA2:C

8、MP AL,41H/JC AA4CMP AL,5AHJA AA3MOV DI,SPMOV DI,ALINC SPJMP AA1AA3:CMP AL,61H/JC AA4CMP AL,7AHJA AA4判定数字字符判定大写字母判定小写字母MOVAX,DATAINC CXJMP AA1AA4:MOV DI,DX/判定其他MOV DI,ALINC DXJMP AA1AA5:MOV AH,4CH/返回DOS结束INT 21HCODE ENDSEND START5.试编写找出首地址为BUF数据块中的最小偶数(该数据块中有100个带符号字节数),并以十六进制的形式显示在CRT上的源程序。答:DATA SE

9、GMENTBUF DB 100 DUP;要比较的数DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVDS,AXLEABX,BUF;BUF首地址送BXMOVCL,101;循环控制MOVDL,126;DL存放最小偶数MOVAH,0;标志是不是有偶数LOOP1:DECCL;循环计数减1JZTOEND;ZF标志0则跳转MOVAL,BX;BX内存内容送ALINCBX;BX指向卜一内存单兀SHRAL,1;AL逻辑右移一位JCLOOP1;是基数则接着循环SHLAL,1;是偶数,因为上面右移了左移得到原数值MOVAH,1;能进行这一步则说明数值中有偶数CM

10、PAL,DL;与CH比较大小JGELOOP1;AL大DL小则循环MOVDL,AL;保证DL存放最小偶数JMPLOOP1;CL不为0继续循环TOEND:CMPAH,1JCL;有借位则说明数值中无偶数直接返DOSMOVBL,DLMOVDL,H;显示HDL,1DL,1DL,1DL,1DL,0FHDL,10L4DL,7DL,30H;显示高四位对应的十六进制的ascii码AH,221HDL,BLDL,0FHDL,10L6DL,7DL,30H;显示低四位对应的十六进制的ascii码AH,221HSHRSHRSHRSHRANDCMPJBADDL4:ADDMOVINTMOVANDCMPJBADDL6:ADDM

11、OVINTMOV AH,2INT 21HL:MOV AH,4CH;返回DOSINT 21HCODE ENDSEND START6.已知数据块BUFA中存放15个互不相等的字节数据,BUFB中存放20个互不相等的字节数 据,试编写将既在BUFA中出现,又在BUFE出现的数据存放到BUFCFF始的缓冲区中的源程 序。答:DATA SEGMENTBUFA DB 41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH,4DH,4EH,4FHBUFB DB 31H,32H,33H,41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4B

12、H,4CHDB 50H,51H,52H,53H,54HBUFC DB 15 DUP (0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX;外层循环计数;内层循环20次:比较BUFA , BUFB内容;内容不同,跳至AA3;内容相同,将其存入BUFC单元;找到相同内容,结束本次内层循环;内层循环计数减一;内层循环结束;外层循环结束;此行以下将BUFC43的内容输出LEA SI,BUFAINT 21HLEA BX,BUFCMOV CX,15AA1: MOV AH,20MOV AL,SILEA DI,BUF

13、BAA2: CMP AL,DIJNZ AA3MOV BX,ALINC BXJMP AA4AA3: INC DIDEC AHJNZ AA2AA4: INC SILOOP AA1MOV CX,15LEA BX,BUFCBB1: MOV DL,BXINC BXMOV AH,2LOOP BB1MOV AH,4CHINT 21HCODE ENDSEND START7.试编写由键盘输入一个以回车作为结束的字符串,将其按ASCII码由大到小的顺序输入到CRT上的源程序。答:DATA SEGMENT;数据段BUF DB 200 DUP(?)DATA ENDSCODE SEGMENT;代码段ASSUME CS:

14、CODE DS: DATASTARTMOV AX, DATAMOV DS,AXMOV DI,0;记录输入的字符串个数MOV BX,OFFSET BUFAA1MOV AH , 1 ;键盘输入字符INT 21HCMP DI,201 ;是否超出缓冲区JNC AA6;超过缓冲区大小JZ AA6MOV BXINC BXINC DIJMP AA1AA6MOV DXCMP DI,0JZ AA7CMP DI,1;有一个字符则直接输出JZ AA8DEC DXAA2MOV BXMOV CXDEC CXAA3MOV ALCMP ALJNC AA4XCHG ALMOV BXINC BXLOOP AA3CMP AL,0

15、DH;是否为回车,回车表输入结束AA4;是回车,AL;将字符存入缓冲区DI;没有字符则无输出;外循环计数初值,即遍数,数据个数减1,OFFSET BUFDI;内循环计数初值,即比较次数,数据个数减1BX,BX+1;比较;前大后小转,BX+1;前小后大交换,ALINT 21HCODE ENDSEND START8.设从BUFFERS始存放若干个以$为结束标志的带符号字节数据,试编写将其中的正数按由 大到小的顺序存入PLUS开始的缓冲区中的源程序。答:方法 思路:将正数先存到目标地址,然后再排序。AA8AA5AA7DEC DXJNZAA2MOVBX,OFFSET BUF;输出字符MOVMOVINT

16、INCCXAH21HBXLOOP AA5MOVDLMOV AH,DI ;循环计数初值,BXDATASEGMENTBUFFER DB 1,2,3,4,5,6,7,-8,9,2,-1,-2,-3,-4,-5,-6,-7,-8,-9,1,$PLUSDB (?)DATAENDSCODESEGMENTASSUME CS: CODE,DS: DATASTART:MOV AX,DATAMOVDS,AXMOVDI,-1;初始化外循环计数器LEABX,BUFFERLEASI,PLUSL1:MOVAL,BXXORAL,$;判断当前字符是否为$JNZL2;不是$转移JMPL4L2:MOVAL,BX;判断当前字符是否

17、为正数ROLAL,1JNCL3;是正数转移INCBXJMPL1MOV AH,4CHL3:ROR AL,1MOV SI,ALINC DIINC SIINC BXJMP L1L4:CMP DI,0JG L5MOV AH,4CHINT 21HL5:LEASI,PLUSMOV CX,DIL6:MOVAL,SICMP AL,SI+1JNC L7XCHG AL,SI+1MOV SI,ALL7:INC SILOOP L6DEC DIJNZ L5;恢复数据;将数据存入目标地址;正数个数=2则开始排序;正数个数为0或1均跳出;以下为使用冒泡排序的方法对数据排序INT 21HCODE ENDSEND START方

18、法二思路:在数据存放的原地址将数据进行由小到大的冒泡排序,则每次那循环可得到本次排序 中的最大数,将其存入目的地址,直到得到一个非正的数后跳出。DATASEGMENTBUFFER DB 1,2,3,4,5,6,7,-8,9,2,-1,-2,-3,-4,-5,-6,-7,-8,-9,1,$PLUSDB (?)DATAENDSCODESEGMENTASSUME CS: CODE,DS: DATASTART:MOV AX,DATAMOV DS,AXJMP L3MOVDI,-1;初始化外循环计数器LEASI,PLUSLEABX,BUFFERL1:MOVAL,BXXORAL,$;检查当前字符是否为$JN

19、ZL2JNZ L3;进入下一次循环L2:INCDIINCBXJMPL1L3:LEABX,BUFFER;开始排序MOVCX,DIL4:MOVAL,BXCMPAL,BX+1JLEL5;前小后大转移XCHGAL,BX+1MOVBX,ALL5:INCBXLOOPL4MOVAL,BX;得到本次循环的最大数ROLAL,1JNCAA4;检验是否为正数,是则转移MOVAH,4CHINT21HL6:MOVDL,BXMOVSI,DL;保存数据INCSIDECDIMOV AH,4CHINT 21HCODE ENDSEND START9.试编写一源程序,要求将一个包含有20个数据的数组M分成两个数组:正数数组P和负

20、数组N并分别把这两个数组中数据的个数在CRT上显示出来。答:DATA SEGMENTORG 100HMDB12,23,58,15,36,55,44,89,45,-23,-56,-47,-21,-65,32,69,82,58,29,-14 ;待处理数组P DB 20 DUP(?);正数数组PN DB 20 DUP(?);负数数组NDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,P;P的首址送SILEA DI,N;N的首址送DILEA BX,M;MBXXOR AX,AX;AX清0XOR DX,

21、DX;DX清0,DL/DH分别用于正/负数计数MOV CX,20;分别处理M的20个数据L1:MOV AL,BX;取一个数组元素TEST AL,80H;AL,80H按位与JZ L2;结果为0,则AL为正,转L2MOV DI,AL;AL为负,送负数数组NINC BX;BX+1,准备取M的下一个儿素INC DI;负数数组N写位置后移一位INC DH;负数计数DH+1JMP L3;本次处理结束L2:MOV SI,AL;AL为正,送正数数组PINC BXINC SI:正数数组P写位置后移一位INC DL;正数计数DL+1L3:LOOP L1;跳转进入下一次循环MOV CX,2;二次输出循环,分别显示正

22、负数的个数L5:MOV BL,DL;保存DL,实质是暂时保存DL的低4位SHR DL,1SHR DL,1SHR DL,1SHR DL,1逻辑右移4位,即取高4位CMP DL,10JB L4;DL=10相差8L4: ADD DL,30HMOV AH,2 ;INT 21HMOV DL,BL;BLAND DL,0FH;DLCMP DL,10JB L6ADD DL,7L6: ADD DL,30HMOV AH,2INT 21HMOV DL,0AH ;MOV AH,2INT 21HMOV DL,0DH ;MOV AH,2INT 21HMOV DL,DH ;DH换行回车送DL,准备显示负数的个数时,DL+7

23、,9的ASCII码为39H,A的ASCII码为41H,输出DL,正/负数个数的高位送DL,准备显示正/负数个数的低位高4位置0,因为DL的高4位已显示INT 21HLOOP L5MOV AH,4CH;返回DOSINT 21HCODE ENDSEND START10.试编写一源程序, 要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。答:CODE SEGMENTASSUME CS:CODESTART:MOV AH,1 ;INT 21HCMP AL,30HJC START ;CMP AL,3AHJNCSTART;AND AL,0FHXORCX,CX;CXMOVCL,AL;MO

24、VDL,07H;AA1:MOV AH,2LOOP AA1输入一个个位数N小于0,要求重新输入大于9,要求重新输入清0循环响铃N次响铃的ASCII码为07循环响铃AA1:MOV AL,BXMOV AH,4CHINT 21HCODE ENDSEND START11.在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否有 数字。如有,则把CL置0FFH,否则将CL置0。答:DATAS SEGMENTSTRING DB XYZIL12LWR;内可以是任意字符串N EQU $-STRING;字符串长度DATAS ENDS;CODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATAS

温馨提示

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

评论

0/150

提交评论