80x86汇编习题
题目描述:输入5位以内八进制的数,存入BX中。注意:BX中的最高位(第十五位)如何输入?
思路:
1,清空BX,CL要用来移位,用SI记录循环次数;遇到回车提前结束
2,用1号功能输入,BX移位3位做好准备,保留AL最后3位,加到BL,循环次数减一,继续输入
3,以八进制形式输出
3.1,每三位bit合起来显示一个八进制数,16/3=5余1,所以先处理一位最高位,再循环5次处理
3.2,用循环移位的方法,先输出第一位(最高位
3.3,用循环移位的方法,每次移动3位到最右边,将BL复制到DL中操作,按位与最后3位,加上'0'对应的aciil码
3.4,中断输出DL的内容,继续循环。
DATAS SEGMENT
DATAS ENDSSTACKS SEGMENTDW 100H DUP(?)TOP LABEL WORD
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AXLEA SP,TOP ;初始化MOV SI,5 ;CL要用来移位,用SI记录循环次数XOR BX,BX ;清空BXIN1:MOV AH,1INT 21HCMP AL,0DH ;遇到回车提前结束JE OUTTMOV CL,3 ;移位3位SHL BX,CLAND AL,7 ;保留AL最后3位ADD BL,AL ;加到BLDEC SI ;循环计数器减一CMP SI,0JNE IN1 OUTT:;先输出第一位(最高位ROL BX,1 ;左移BX最高位到CF标志位MOV DL,0 ;清空DXADC DL,'0' ;将DL的acill码移动到0位置,加上CF判断位MOV AH,2 INT 21H ;中断输出DL内容MOV SI,5L1: MOV CL,3 ;每次移动3位到最右边ROL BX,CLMOV DL,BL ;将BL复制到DL中操作AND DL,7 ;按位与最后3位,7的二进制表示是111ADD DL,'0' ;加上'0'对应的aciil码MOV AH,2 INT 21H ;中断输出DL内容DEC SICMP SI,0JNZ L1MOV AH,4CHINT 21H
CODES ENDSEND START
;输入内容:66073
;输出内容:066073