【汇编】将ASCII码表示的十进制数转换成二进制数


程序要求




流程图




汇编代码


STACK1  SEGMENT STACK 
         DW 256 DUP(?) 
STACK1  ENDS 

DATA    SEGMENT 

BUF     DB    30H,30H,30H,31H,32H

DATA    ENDS 

CODE SEGMENT 

    ASSUME CS:CODE,DS:DATA 
    
START:  MOV  AX,DATA 
        MOV  DS,AX 
        MOV  SI,OFFSET BUF  ;把BUF的偏移地址存到SI中去
        MOV  BX,000AH 
          MOV  CX,0004H    ;  cx作为循环控制计数器

        MOV  AH,00H 
        MOV  AL,[SI] 

        SUB  AL,30H 

A1:     IMUL BX 

        ADD  AL,[SI+01] 

        SUB  AL,30H 

        INC  SI 

        LOOP A1    
		
        MOV [SI],AX

        CALL SHOW  ;调用子程序

        MOV  AX,4C00H 

        INT  21H    

SHOW    PROC NEAR     ; 输出到屏幕,用16进制表示

        MOV  AL,DS:[SI]

        AND  AL,0F0H                 

        MOV  CL,4
        SHR  AL,CL 

        CMP  AL,0AH                  

        JB   C2        

        ADD  AL,07H    

C2:     ADD  AL,30H    

        MOV  DL,AL                   
        MOV  AH,02H 

        INT  21H 

        MOV  AL,DS:[SI] 

        AND  AL,0FH                  

        CMP  AL,0AH 

        JB   C3 

       ADD  AL,07H

C3:     ADD  AL,30H 

        MOV  DL,AL                   

        MOV  AH,02H 

        INT  21H 

        RET
          
 SHOW  ENDP  

CODE ENDS 

     END START 


相关知识:

LOOP指令    1.CX=CX-1   2.判断cx中的值,不为0,执行标号程序  A1,   为0,向下执行   (即执行 MOV  [SI],AX)

运行结果:




debug分析


1.程序运行到  MOV [SI],AX 的时候,已经完成循环,这个指令是把AX的内容存到SI对应的内存单元中,由SI的值可以知道已经循环了4次





2.观察内存中内容的变化

-D  查看内存数据

-T 单步执行



  • 25
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值