ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:21.07KB ,
资源ID:10410830      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10410830.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言小程序例子.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言小程序例子.docx

1、汇编语言小程序例子1.编写统计AX中1、0个数的源程序。1的个数存入CH,0的个数存入CL。 CODE SEGMENT ASSUME CS:CODESTART: MOV CX, 0 MOV DX,17AA1: SUB DX, 1 JZ AA3 SHL AX, 1 JNC AA2 INC CH JMP AA1AA2: INC CL JMP AA1AA3: MOV AH,4CH INT 21HCODE ENDS END START 2.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显示MATCH,若不相同则显示NO MATCH。 程序:DATA SEGMEN

2、TR1 DB MATCH,0AH,0DHR2 DB NO MATCH,0AH,0DHSTRING1 DB XXXXXN1 EQU $-STRING1STRING2 DB YYYYYN2 EQU $-STRING2DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,N1 CMP AX,N2 JNZ AA1 ADD AX,1 LEA SI,STRING1 LEA DI,STRING2AA2: MOV BL,SI MOV BH,DI INC SI INC DI SUB AX,1 JZ AA3

3、CMP BL,BH JZ AA2 JMP AA1AA3: LEA BX,R1 MOV CX,7AA4: MOV DL,BX INC BX MOV AH,2 INT 21H LOOP AA4 JMP EAA1: LEA BX,R2 MOV CX,10AA5: MOV DL,BX INC BX MOV AH,2 INT 21H LOOP AA5 E: MOV AH,4CH INT 21HCODE ENDSEND START 3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数. 由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。由于数字 的

4、ASC码为30H39H,字母af与 AF的ASC码为61H66H 与41H46H ,因此,如果输入的字母为数字,则其低位即为对应的二进制位;如果输入的字符为字母或,则需要减,然后通过移位将低位依次输出。汇编程序如下:DATA SEGMENT MSG1 DB Hex:,$ MSG2 DB 0DH,0AH,Binary:,$COUNT EQU 4BUF DB 4 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX, DATA MOV DS, AX LEA DX, MSG1 MOV AH, 9 INT 21H MOV CX

5、, COUNT MOV SI, 0 INPUT: ;通过四次循环从键盘读入四位十六进制数 MOV AH, 1 INT 21H MOV BUFSI, AL DEC CX INC SI CMP CX, 0 JNZ INPUT NEXT3: LEA DX, MSG2 MOV AH, 9 INT 21H MOV CX, COUNT MOV SI, 0NEXT2: MOV BL, BUFSI CMP BL , 9 JBE OK ; 读入的字符转向OK: SUB BL, 7 ;读入字符= 9 减7 OK: PUSH CX MOV CL ,4 SHL BL, CL ; 逻辑左移4位,低4位高4位 MOV C

6、X, 4 ; 4次循环将当前处理字符的4位二进制输出NEXT1: MOV DL, 0 SHL BL, 1 JNC SKIP INC DLSKIP: MOV AH, 2 INT 21H LOOP NEXT1 POP CX ; INC SI LOOP NEXT2 ; 4次循环将4位十六进制数,每位转换为对应的4位二进制EXIT: MOV AH, 4CH INT 21H CODE ENDS END START 4.设从STRING开始存放一个以$为结束标志的字符串,试编写把字符串中的字符进行分类的源程序,数字字符送入NUM开始的内存中,大写字母送入BCHAR开始的内存区中,小写字母存入LCHAR开始

7、的内存中,其他字符存入OTHER开始的内存区中。DATA SEGMENTSTRING DB abc123ABC,$N EQU $-STRINGNUM DB N DUP(?)BCHAR DB N DUP(?)LCHAR DB N DUP(?)OTHER DB N DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA BX,STRING DEC BX LEA SP,BCHAR LEA CX,LCHAR LEA DX,OTHER LEA SI,NUMAA1:INC BX MOV AL,BX

8、/判断是否为$,是否结束 CMP AL,$ JZ AA5 CMP AL,30H /判定数字字符 JC AA4 CMP AL,39H JA AA2 MOV SI,AL INC SI JMP AA1AA2:CMP AL,41H /判定大写字母 JC AA4 CMP AL,5AH JA AA3 MOV DI,SP MOV DI,AL INC SP JMP AA1AA3:CMP AL,61H /判定小写字母 JC AA4 CMP AL,7AH JA AA4 MOV DI,CX MOV DI,AL INC CX JMP AA1AA4:MOV DI,DX /判定其他 MOV DI,AL INC DX JM

9、P AA1AA5:MOV AH,4CH / 返回DOS 结束 INT 21HCODE ENDSEND START 5.试编写找出首地址为BUF数据块中的最小偶数(该数据块中有100个带符号字节数),并以十六进制的形式显示在CRT上的源程序。答:DATA SEGMENT BUF DB 100 DUP(?) ;要比较的数DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA BX,BUF ;BUF首地址送BX MOV CL,101 ;循环控制 MOV DL,126 ;DL存放最小偶数 MOV AH,0

10、 ;标志是不是有偶数LOOP1: DEC CL ;循环计数减1 JZ TOEND ;ZF标志0则跳转 MOV AL,BX ;BX内存内容送AL INC BX ;BX指向下一内存单元 SHR AL,1 ;AL逻辑右移一位 JC LOOP1 ;是基数则接着循环 SHL AL,1 ;是偶数,因为上面右移了 左移得到原数值 MOV AH,1 ;能进行这一步 则说明数值中有偶数 CMP AL,DL ;与CH比较大小 JGE LOOP1 ;AL大DL小 则循环 MOV DL,AL ;保证DL存放最小偶数 JMP LOOP1 ;CL不为0 继续循环TOEND: CMP AH,1 JC L ;有借位则说明数值

11、中无偶数直接返DOS MOV BL,DL SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 AND DL,0FH CMP DL,10 JB L4 ADD DL,7L4: ADD DL,30H ;显示高四位对应的十六进制的ascii码 MOV AH,2 INT 21H MOV DL,BL AND DL,0FH CMP DL,10 JB L6 ADD DL,7L6: ADD DL,30H ;显示低四位对应的十六进制的ascii码 MOV AH,2 INT 21H MOV DL,H ;显示H MOV AH,2 INT 21HL: MOV AH,4CH ;返回DOS INT 21

12、HCODE ENDS END START 6. 已知数据块BUFA中存放15个互不相等的字节数据,BUFB中存放20个互不相等的字节数据,试编写将既在BUFA中出现,又在BUFB中出现的数据存放到BUFC开始的缓冲区中的源程序。答: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,4BH,4CH DB 50H,51H,52H,53H,54HBUFC DB 15 DUP

13、(0)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,BUFA LEA BX,BUFC MOV CX,15 ;外层循环计数 AA1: MOV AH,20 ;内层循环20次 MOV AL,SI LEA DI,BUFBAA2: CMP AL,DI :比较BUFA , BUFB内容 JNZ AA3 ;内容不同,跳至AA3 MOV BX,AL ;内容相同,将其存入BUFC单元 INC BX JMP AA4 ;找到相同内容,结束本次内层循环AA3: INC DI DEC AH ;内层循环计数减

14、一 JNZ AA2 ;内层循环结束AA4: INC SI LOOP AA1 ;外层循环结束 MOV CX,15 ;此行以下将BUFC中的内容输出 LEA BX,BUFCBB1: MOV DL,BX INC BX MOV AH,2 INT 21H LOOP BB1 MOV AH,4CH INT 21HCODE ENDS END START 7.试编写由键盘输入一个以回车作为结束的字符串,将其按ASCII码由大到小的顺序输入到CRT上的源程序。答: DATA SEGMENT;数据段 BUF DB 200 DUP(?) DATA ENDS CODE SEGMENT;代码段 ASSUME CS:COD

15、E,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DI,0;记录输入的字符串个数 MOV BX,OFFSET BUF AA1: MOV AH,1;键盘输入字符 INT 21H CMP DI,201;是否超出缓冲区 JNC AA6 ;超过缓冲区大小 CMP AL,0DH;是否为回车,回车表输入结束 JZ AA6;是回车 MOV BX,AL;将字符存入缓冲区 INC BX INC DI JMP AA1 AA6: MOV DX,DI CMP DI,0;没有字符则无输出JZ AA7CMP DI,1;有一个字符则直接输出JZ AA8 DEC DX;外循环计数初值,即遍

16、数,数据个数减1 AA2: MOV BX,OFFSET BUF MOV CX,DI DEC CX;内循环计数初值,即比较次数,数据个数减1 AA3: MOV AL,BX CMP AL,BX+1;比较 JNC AA4;前大后小转 XCHG AL,BX+1;前小后大交换 MOV BX,AL AA4: INC BX LOOP AA3 DEC DX JNZ AA2 AA8: MOV BX,OFFSET BUF;输出字符 MOV CX,DI;循环计数初值 AA5: MOV DL,BX MOV AH,2 INT 21H INC BX LOOP AA5 AA7: MOV AH,4CH INT 21H COD

17、E ENDS END START 8. 设从BUFFER开始存放若干个以$为结束标志的带符号字节数据,试编写将其中的正数按由大到小的顺序存入PLUS开始的缓冲区中的源程序。 答:方法一思路:将正数先存到目标地址,然后再排序。 DATA SEGMENTBUFFER DB 1,2,3,4,5,6,7,-8,9,2,-1,-2,-3,-4,-5,-6,-7,-8,-9,1,$PLUS DB (?)DATA ENDSCODE SEGMENT ASSUME CS: CODE,DS: DATASTART: MOV AX,DATA MOV DS,AX MOV DI,-1 ;初始化外循环计数器 LEA BX,

18、BUFFER LEA SI,PLUSL1: MOV AL,BX XOR AL,$ ;判断当前字符是否为$ JNZ L2 ;不是$转移 JMP L4L2: MOV AL,BX ;判断当前字符是否为正数 ROL AL,1 JNC L3 ;是正数转移 INC BX JMP L1L3: ROR AL,1 ;恢复数据 MOV SI,AL ;将数据存入目标地址 INC DI INC SI INC BX JMP L1L4: CMP DI,0 JG L5 ;正数个数=2则开始排序 MOV AH,4CH INT 21H ;正数个数为0或1均跳出L5: LEA SI,PLUS ;以下为使用冒泡排序的方法对数据排序

19、 MOV CX,DIL6: MOV AL,SI CMP AL,SI+1 JNC L7 XCHG AL,SI+1 MOV SI,ALL7: INC SI LOOP L6 DEC DI JNZ L5 MOV AH,4CH INT 21HCODE ENDS END START 方法二思路:在数据存放的原地址将数据进行由小到大的冒泡排序,则每次那循环可得到本次排序中的最大数,将其存入目的地址,直到得到一个非正的数后跳出。 DATA SEGMENTBUFFER DB 1,2,3,4,5,6,7,-8,9,2,-1,-2,-3,-4,-5,-6,-7,-8,-9,1,$PLUS DB (?)DATA EN

20、DSCODE SEGMENT ASSUME CS: CODE,DS: DATASTART: MOV AX,DATA MOV DS,AX MOV DI,-1 ;初始化外循环计数器 LEA SI,PLUS LEA BX,BUFFERL1: MOV AL,BX XOR AL,$ ;检查当前字符是否为$ JNZ L2 JMP L3 L2: INC DI INC BX JMP L1L3: LEA BX,BUFFER ;开始排序 MOV CX,DIL4: MOV AL,BX CMP AL,BX+1 JLE L5 ;前小后大转移 XCHG AL,BX+1 MOV BX,ALL5: INC BX LOOP L

21、4 MOV AL,BX ;得到本次循环的最大数 ROL AL,1 JNC AA4 ;检验是否为正数,是则转移 MOV AH,4CH INT 21HL6: MOV DL,BX MOV SI,DL ;保存数据 INC SI DEC DI JNZ L3 ;进入下一次循环 MOV AH,4CH INT 21HCODE ENDS END START 9. 试编写一源程序,要求将一个包含有20个数据的数组M分成两个数组:正数数组P和负数组N,并分别把这两个数组中数据的个数在CRT上显示出来。答:DATA SEGMENT ORG 100HM DB 12,23,58,15,36,55,44,89,45,-23

22、,-56,-47,-21,-65,32,69,82,58,29,-14 ;待处理数组P DB 20 DUP(?) ;正数数组PN DB 20 DUP(?) ;负数数组NDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,P ;P的首址送SI LEA DI,N ;N的首址送DI LEA BX,M ;M的首址送BX XOR AX,AX ;AX清0 XOR DX,DX ;DX清0,DL/DH分别用于正/负数计数 MOV CX,20 ;分别处理M的20个数据L1: MOV AL,BX ;取一

23、个数组元素 TEST AL,80H ;AL,80H按位与 JZ L2 ;结果为0,则AL为正,转L2 MOV DI,AL ;AL为负,送负数数组N INC BX ;BX+1,准备取M的下一个元素 INC DI ;负数数组N写位置后移一位 INC DH ;负数计数DH+1 JMP L3 ;本次处理结束L2: MOV SI,AL ;AL为正,送正数数组P INC BX INC SI ;正数数组P写位置后移一位 INC DL ;正数计数DL+1L3: LOOP L1 ;跳转进入下一次循环 MOV CX,2 ;二次输出循环,分别显示正负数的个数L5: MOV BL,DL ;保存DL,实质是暂时保存DL

24、的低4位 SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 ;逻辑右移4位,即取高4位 CMP DL,10 JB L4 ;DL=10时,DL+7,9的ASCII码为39H,A的ASCII码为41H,相差8L4: ADD DL,30H MOV AH,2 ;输出DL,正/负数个数的高位 INT 21H MOV DL,BL ;BL送DL,准备显示正/负数个数的低位 AND DL,0FH ;DL高4位置0,因为DL的高4位已显示 CMP DL,10 JB L6 ADD DL,7L6: ADD DL,30H MOV AH,2 INT 21H MOV DL,0AH ;换行 MOV A

25、H,2 INT 21H MOV DL,0DH ;回车 MOV AH,2 INT 21H MOV DL,DH ;DH送DL,准备显示负数的个数 LOOP L5 MOV AH,4CH ;返回DOS INT 21H CODE ENDSEND START 10.试编写一源程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。答:CODE SEGMENT ASSUME CS:CODESTART: MOV AH,1 ;输入一个个位数N INT 21H CMP AL,30H JC START ;小于0,要求重新输入 CMP AL,3AH JNC START ;大于9,要求重新输入 A

26、ND AL,0FH XOR CX,CX ;CX清0 MOV CL,AL ;循环响铃N次 MOV DL,07H ;响铃的ASCII码为07 AA1:MOV AH,2 INT 21H LOOP AA1 ;循环响铃 MOV AH,4CH INT 21H CODE ENDS END START 11.在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否有数字。如有,则把CL置0FFH,否则将CL置0。答:DATAS SEGMENT STRING DB XYZIL12LWR; 内可以是任意字符串 N EQU $-STRING;字符串长度DATAS ENDS;CODES

27、 SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV CX,N LEA BX,STRINGAA1:MOV AL,BX CMP AL,30H;字符ASCII码小于30H,转移 JB AA2 CMP AL,39H;字符ASCII码大于39H,转移 JA AA2 JMP AA3;数字,符合条件AA2:INC BX LOOP AA1MOV CL,0JMP AA4AA3:MOV CL,0FFHAA4:MOV AH,4CH INT 21HCODES ENDS END START 12.试编制一源程序,把DX中的十六进制数转换为

28、ASCII码,并将对应的ASCII码依次存放到MEM数组中的4个字符中.例如,当DX=2A49H时,程序执行完后,MEM中的4个字节内容为39H、34H、41H、和32H。答:DATA SEGMENTSOURCE DW 2A49HMEM DB 4 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA;START: MOV AX,DATA MOV DS,AX ; MOV DX,SOURCE LEA BX,MEM;set the loop MOV CX,4;the loop bodyLB: MOV AX,DX AND AX,000FH CMP AL,10 JC AD; ADD AL,7;AD: ADD AL,30H MOV BX,AL INC BX; SHR DX,1 SHR DX,1 SHR DX,1 SHR DX,1 LOOP LB;the loop end, return to do

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

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