汇编语言(王爽 第三版)实验10 编写子程序

一. 子程序:显示字符串 
       实验要求:在屏幕的8行3列,用绿色显示data段中的字符串。
       名称:show_str
       功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
       参数:(dh)=行号(0-24取值范围);(dl)=列号(0-79取值范围);(cl)=颜色(是一个二进制排列组合的值);ds:si指向字符串的首地址。
assume cs:code
data segment
    db 'Welcome to masm!',0
data ends

code segment
    start:mov dh,8
          mov dl,3
          mov ch,0
          mov cl,2
          
          mov ax,data
          mov ds,ax
          mov si,0
          
          call show_str
          
          mov ax,4c00h
          int 21h
          
 show_str:push dx
          push cx
          push si
          
          mov ax,0b800h
          mov es,ax
          
          mov ah,0
          mov al,160
          mul dh
          mov bx,ax
          
          mov ah,0
          mov al,2
          mul dl
          add bx,ax
          
          mov di,0
          mov al,cl
          mov ch,0
          
     show:mov cl,ds:[si]
          jcxz ok
          mov es:[bx+di+0],cl
          mov es:[bx+di+1],al
          add di,2
          inc si
          jmp short show
          
       ok:pop si
          pop cx
          pop dx
          ret
      
code ends
end start

二. 解决除法溢出的问题

assume cs:code      
code segment
    start:mov ax,4240h
          mov dx,000fh
          mov cx,0ah
          
          call divdw
          
          mov ax,4c00h
          int 21h
          
    divdw:push ax
          mov ax,dx   
          mov dx,0
          div cx
          mov bx,ax   
          
          pop ax
          div cx
          mov cx,dx
          mov dx,bx
          
          ret
code ends
end

三。数值显示

assume cs:code
data segment
    db 10 dup(0)
data ends

code segment
    start:mov ax,12666
          mov bx,data
          mov ds,bx
          mov si,0
          
          call dtoc
          
          mov dh,8
          mov dl,3
          mov ch,0
          mov cl,2
          
          call show_str
          
          mov ax,4c00h
          int 21h
          
     dtoc:push ax
          push bx
          push cx
          push si
          
          mov si,0
          mov bx,10
          
   change:mov dx,0 
          div bx
          mov cx,ax
          jcxz last
          add dx,30h
          push dx
          inc si
          jmp short change
          
     last:add dx,30h
          push dx
          inc si
          
          mov cx,si
          mov si,0
        
        s:pop ds:[si] 
          inc si
          loop s
          
     exit:pop si
          pop cx
          pop bx
          pop ax 
          ret
          
 show_str:push dx
          push cx
          push si
          
          mov ax,0b800h
          mov es,ax
          mov di,0
          
          mov ax,0
          mov al,160
          mul dh
          mov bx,ax
          
          mov ax,0
          mov al,2
          mul dl
          add bx,ax
          
          mov ch,0
          mov al,cl
          
     show:mov cl,ds:[si]
          jcxz ok
          mov es:[bx+di+0],cl
          mov es:[bx+di+1],al
          add di,2
          inc si
          jmp short show
          
       ok:pop si
          pop cx
          pop dx
          ret          
code ends
end

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值