实验要求:
编程计算3550H-2320H,按16进制输出计算所得的差1230H。再输出3550H-2321H的差,检验程序的正确性。
实验提示:
考虑依次将1230H(即0001 0010 0011 0000B)从高位到低位,每4位二进制数一组分离出来,再将4位二进制数转换为ASCII码,利用DOS系统功能调用的2号子功能输出,就得到16进制数据的输出效果。本题要求综合应用移位操作、逻辑操作等指令,并利用条件转移指令实现简单的循环程序
实验流程图:
实验代码:(这里做了详细的注释)
DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV BX,3550H SUB BX,2321H MOV ch,4;用于控制循环,循环四次 NEXT1: mov cL,4 ROL BX,cl ;左移四位操作到al中,位移数必须放在cl中 MOV DL,BL AND DL,0FH;把无用位清零. cmp dl,9;比较 JA NEXT2 add DL,30H;在10以下的直接换为ASCII码是加30h jmp offset s NEXT2: add DL,37H ;在10以上的直接换为ASCII码是加37h s: MOV AH,2;显示dl中的数值,注:2号中断显示的是dl中的数值 INT 21H ;控制循环 sub ch,1 CMP ch,0 JZ over;若相等,跳出并循环结束 ;不相等跳回 jmp offset NEXT1 over : ;显示一个H mov dl,17 ADD DL,37H MOV AH,2 INT 21H ;结束程序 MOV AH,4CH INT 21H CODES ENDS END START
自己写出来的,还是挺有成就感的
实验结果: