汇编基础案例
来源:互联网 发布:淘宝导航设置颜色代码 编辑:程序博客网 时间:2024/06/03 14:07
计算两位以内的a+b数。
;---------------------------ASSUME CS:CC, DS:QW;---------------------------QW SEGMENT ;数据段 ;DB一字节,DW两字节,DD四字节 M1 DB 'Please input n1 : $' M2 DB 13, 10, 'Please input n2 : $' M3 DB 13, 10, 'SUM = $' M4 DB 13, 10, 'Press any key to continue ... $' N1 DB ? N2 DB ? S DB ?QW ENDS;---------------------------CC SEGMENT ;代码段 START: ;引入QW段 MOV AX, QW MOV DS, AX ;显示M1 LEA DX, M1 MOV AH, 9 ;DX=串地址,$结束字符串 INT 21H;中断号 ;段标志 IN_N1: ;输入 MOV AH, 1 INT 21H ;判断是否在0-9之间 CMP AL, '0' JB IN_N1 ;比0小转移 CMP AL, '9' JA IN_N1 ;比9大转移 AND AL, 0FH ;与 MOV N1, AL ;输出 LEA DX, M2 MOV AH, 9 INT 21H IN_N2: MOV AH, 1 INT 21H CMP AL, '0' JB IN_N2 CMP AL, '9' JA IN_N2 AND AL, 0FH MOV N2, AL ;操作N1+N2 ADD AL, N1 MOV S, AL DISP: ;输出提示字符串 LEA DX, M3 MOV AH, 9 INT 21H ;进位操作 MOV AL, S MOV AH, 0 MOV BL, 10 DIV BL ;结果AL保存商,AH保存余数, PUSH AX ;压入栈,临时保存 ADD AL, '0' ;低八位与操作 MOV DL, AL ;DL输出字符 MOV AH, 2 INT 21H POP AX ADD AH, '0' ;高八位与操作 MOV DL, AH ;DL输出字符 MOV AH, 2 INT 21H EXIT: LEA DX, M4 MOV AH, 9 INT 21H MOV AH, 7;AH功能输出不回显 INT 21H MOV AH, 4CH;结束本程序 INT 21H ;返回DOS;---------------------------CC ENDSEND START
计算字符串的长度,数字个数,字母个数。如果有兴趣可以自己改计算大写字母个数,计算小写字母个数。
;Step1:利用0AH号功能调用接受一个字符串;;Step2:分别统计其中数字字符、英文字母的个数;;Step3:用十进制数的形式显示它们。;数据定义MLENGTH =128 ;缓冲区长度DSEG SEGMENT ;数据段 BUFF DB MLENGTH ;符合0AH号功能调用所需的缓冲区 DB ? ;实际键入的字符数 DB MLENGTH DUP(?) MESS0 DB "Please input:$" MESS1 DB "Length = $" MESS2 DB "number = $" MESS3 DB "word = $"DSEG ENDSCSEG SEGMENT ;代码段 ASSUME CS:CSEG, DS:DSEGSTART: MOV AX,DSEG ;将数据时段首址DSEG送入DS寄存器 MOV DS,AX ;设置DS MOV DX,OFFSET MESS0 CALL DISPMESS ;显示提示 MOV DX,OFFSET BUFF MOV AH,10 ;接受一个字符串 INT 21H CALL NEWLINE ;回车换行 MOV BH,0 ;清数字字符计数器 MOV BL,0 ;清字母符计数器 MOV CL,BUFF+1 ;取字符串长度 MOV CH,0 ;若CX=0, JCXZ COK: 跳转到标号COK处 JCXZ COK ;若字符串长度等于0,不统计 MOV SI,OFFSET BUFF+2 ;指向字符串首AGAIN: MOV AL,[SI] ;取一个字符 INC SI ;调整数据指针,指向下一个数据 CMP AL, '0' ;判断是否是数字字符 JB NEXT ;小于‘0’,不属于统计字符, CMP AL, '9' ;大于‘9’,不是数字字符, JA NODEC ;转向字母字符判断 INC BH ;‘0’~‘9’,数字符计数加1 JMP SHORT NEXT ;转向取一个字符, NEXT->AGAIN (LOOP)NODEC: OR AL,20H ;大写转小写经典语句 CMP AL, 'a' ;判断是否是字母符 JB NEXT CMP AL, 'z' JA NEXT INC BL ;字母符计数加1NEXT: LOOP AGAIN ;下一个COK: MOV DX,OFFSET MESS1 CALL DISPMESS ;显示提示 MOV AL,BUFF+1 ;取字符串长度 XOR AH,AH ;AH 取0 CALL DISPAL ;显示字符串长度(变成十进制显示) CALL NEWLINE ;回车换行 MOV DX,OFFSET MESS2 CALL DISPMESS ;显示提示 MOV AL,BH XOR AH,AH CALL DISPAL ;显示数字符个数(变成十进制显示) CALL NEWLINE ;回车换行 MOV DX,OFFSET MESS3 CALL DISPMESS MOV AL,BL XOR AH,AH CALL DISPAL ;显示字母符个数 CALL NEWLINE MOV AX,4C00H ;程序正常结束 INT 21HDISPAL PROC NEAR ;子程序,二进制数以十进制形式显示 MOV CX,3 ;8位二进制数最多转换成3位十进制数 MOV DL,10 DISP1: DIV DL ;AL商, AH余数 XCHG AH,AL ;使AL=余数,AH=商 ADD AL, '0' ;得ASCII码 PUSH AX ;压入堆栈 XCHG AH,AL MOV AH,0 LOOP DISP1 ;继续 MOV CX,3 ;循环计数器重置 DISP2: POP DX ;弹出一位 CALL ECHOCH ;显示一个字符 LOOP DISP2 ;继续 RETDISPAL ENDPDISPMESS PROC NEAR ;子程序,显示提示信息 MOV AH,9 INT 21H RETDISPMESS ENDPECHOCH PROC NEAR ;子程序,显示一个字符 MOV AH,2 INT 21H RETECHOCH ENDPNEWLINE PROC NEAR ;子程序,形成回车和换行 PUSH AX PUSH DX MOV DL,0DH ;回车符的ASCII码是0DH MOV AH,2 ;显示回车符 INT 21H MOV DL,0AH ;换行符的ASCII码是0AH MOV AH,2 ;显示换行符 INT 21H POP DX POP AX RETNEWLINE ENDPCSEG ENDS END START
阅读全文
0 0
- 汇编基础案例
- 汇编学习--汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础
- 汇编基础的基础
- 汇编基础-栈基础
- 25个经典汇编案例
- 使用java.util.List.subList时最好小心点
- linux内核中用C语言实现面向对象思想
- 封装Servlet,跳过service,doPost,doGet直接写方法
- 欢迎使用CSDN-markdown编辑器
- Decompiled .class file bytecode version:49.0(java5.0) load or open source file.
- 汇编基础案例
- 如何在 Django 连接 MYSQL 数据库
- Android SharedPreference 源码分析(一)
- 关于react绑定事件中的this
- pwnable.kr 之simplelogin
- 身份证扫描的功能sdk
- (转)深入浅出Mybatis---强大的动态SQL
- Linux下安装、配置、启动Apache
- spring-boot入门(三)前后端分离使用HTML视图