汇编基础案例

来源:互联网 发布:淘宝导航设置颜色代码 编辑:程序博客网 时间: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
原创粉丝点击