十六进制的减法

实验要求:

编程计算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












 自己写出来的,还是挺有成就感的

 实验结果:



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值