实验二 分支程序实验和循环程序实验

上篇

显示AL中两位十六进制数程序

流程图
实验二 分支程序实验和循环程序实验_第1张图片

CODE SEGMENT        ;定义代码段
    ASSUME CS:CODE  ;伪指令ASSUME将段CODE与段寄存器CS联系起来
START: MOV AL,3EH   ;定义程序的入口,把想要显示的数字移入AL寄存器
       MOV BL,AL    ;将AL暂存在BL中,因为之后要改变AH中的内容
       MOV DL,AL    ;DL用于显示字符
       MOV CL,4     ;CL在位移指令中作位移次数计数器用 这里位移次数为4
       SHR DL,CL    ;SHR指令将DL顺序CL寄存器指定的位数,把低位移出
       CMP DL,9     ;将DL与9比较,如果小于等于9,则本身加30H即为对应的ASCII 码
       JBE NEXT1    ;如果小于等于则跳转到NEXT1
       ADD DL,7     ;如果大于9,本身加37H即为对应的ASCII 码
NEXT1: ADD DL,30H   ;
       MOV AH,2     ;输出DL寄存器的字符到显示器
       INT 21H      ;显示高位ASCII码
       MOV DL,BL    ;
       AND DL,0FH   ;将高位置零
       CMP DL,9     ;
       JBE NEXT2    ;
       ADD DL,7     ;
NEXT2: ADD DL,30H   ;
       MOV AH,2     ;
       INT 21H      ;显示低位ASCII码
       MOV AH,4CH   ;
       INT 21H      ;
CODE ENDS           ;返回DOS
END START

实验二 分支程序实验和循环程序实验_第2张图片
实验二 分支程序实验和循环程序实验_第3张图片
实验二 分支程序实验和循环程序实验_第4张图片

下篇 循环程序实验

编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示'c';若是回车字符(其ASCII码为0DH),则自动结束程序,若为其它字符则不显示,循环等待新的字符输入。

流程图
实验二 分支程序实验和循环程序实验_第5张图片
实验二 分支程序实验和循环程序实验_第6张图片

CODE SEGMENT
    ASSUME CS:CODE
START: MOV AH,1     ;等待输入字符
       INT 21H
       MOV BL,AL
       CMP BL,0DH   
       JE  S        ;如果是回车则结束程序
       CMP BL,'1'
       JB START     ;如果是其他字符则等待继续输入
       CMP BL,'9'
       JBE NEXT2    ;如果是1-9则输出c
       CMP BL,'A'
       JB START     ;如果是其他字符则等待继续输入
       CMP BL,'Z'
       JBE NEXT2    ;如果是A-Z则输出c
       CMP BL,'a'
       JB START     ;如果是其他字符则等待继续输入
       CMP BL,'z'
       JBE NEXT2    ;如果是a-z则输出c
       JMP START    ;如果是其他字符则等待继续输入
NEXT2: MOV DL,63H   ;显示c
       MOV AH,2
       INT 21H
    S: MOV AH,4CH   ;返回dos
       INT 21H
CODE ENDS
END START

测试
实验二 分支程序实验和循环程序实验_第7张图片
实验二 分支程序实验和循环程序实验_第8张图片
实验二 分支程序实验和循环程序实验_第9张图片
实验二 分支程序实验和循环程序实验_第10张图片

心得

发现 CMP BL,0DH 后必须要加H
在做实验时总是犯一些语法错误,比如总是把CMP BL,'z'写成CMP 'z'
先画好流程图的话写起来比较快,容易发现错误逻辑上的错误

你可能感兴趣的:(asm)