王爽汇编实验第三版实验10之3:数值显示

assume cs:code,ds:data
data segment
 dw 10 dup (0) 
data ends
code segment
start:mov ax,12666
      mov bx,data
      mov ds,bx
      mov bx,0
      mov si,0
      call dtoc
      
      mov dh,8
      mov dl,3
      mov cl,2
      call show_str
      
      mov ax,4c00h
      int 21h


dtoc:mov dx,0
     mov cx,10
     div cx;此时ax为被除数的低位,dx为高位,cx为除数,执行后,ax存商,dx存余数
     mov cx,ax
     add dx,30h
     mov ds:[si],dl
     add si,1
     jcxz change
     add bx,1
     jmp dtoc

show_str:  mov si,0
           mov ax,0b800h
            add dl,dl
            sub dl,2
            mov bx,0ah
            sub dh,1
            mov cl,dh
            mov ch,0
          s:add ax,bx
            loop s   
            mov es,ax;es现在是第八行的段地址
            mov dh,0
            mov di,dx
        s1: mov cl,[si]
            mov ch,0
            jcxz ok
            mov al,[si]
            mov es:[di],al
            mov cl,2
            mov byte ptr es:1[di],cl
            add di,2
            inc si
            jmp s1
change:mov ax,bx  
       mov cl,2
       div cl
       mov cl,al
       mov ch,0
       mov si,0
   cc: mov al,[si]
       mov ah,[si+bx]
       mov [si+bx],al
       mov [si],ah
       add si,1
       sub bx,2
       loop cc
       jmp ok
       

ok:ret

code ends
end start

执行结果

 上述代码板块分的很明确,而且对上一个show-str子程序作了很大的优化,子程序的独立性变的很强。注意下,按照余数输入ds中的顺序是逆序,所以要用change来交换次序。由于dw型数据最大为十进制5位,所以实际上最大交换次数为2。

将cx设置为si的一半,也就是最大处偏移地址的一半。这样就实现了交换次序。

而后调用show-str,就可以按照要求输出了。

代码比较精简,也比较易读,各程序之间耦合度很高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值