汇编课程设计1

子程序编写

显示字符串

名称: show_str
用例:在屏幕的八行三列,用绿色显示data 段的字符串

assume cs:code
data segment
	db 'Welcome to masm!',0
data ends

code segment
start:
	mov dh,8
	mov dl,3
	mov cl,2
	mov ax,data
	mov ds,ax
	mov si,0
	call show_str

	mov ax,4c00h
	int 21h
;说明:show_str 显示0前字符串
;参数:(dh)=行号 (dl)=列号 (cl)=颜色
show_str:
	dec dh 
	mov al,0a0h
	mul dh
	mov bx,ax

	dec dl
	mov al,2h
	mul dl
	add bx,ax

	mov ax,0b800h
	mov es,ax
	mov al,cl
s:
	mov cx,ds:[si]
	jcxz ok
	mov dx,[si]
	mov es:[bx],dx
	inc bx
	mov es:[bx],al
	inc bx
	inc si
	jmp s
ok:
	ret
code ends
end start

数据显示

名称: dtoc and show_str
用例:打印 12666

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

code segment
 start:         mov ax,12666
                mov bx,data
                mov ds,ax
                mov si,0
                call dtoc
                
                mov dh,8
                mov dl,3
                mov cl,2
                call show_str
;名称:dtoc
;功能:将数据转换成十进制字符串,0结尾
;参数:(ax) word型数据     ds:si指向字符串首地址
;无返回             
dtoc:
                 mov cx,10
  m:                               
                 div cx
                 push cx
                 mov cx,dx
                 jcxz o
                 pop cx
                 add dx,30h
		 push ax
		 mov ax,dx
                 mov ds:[si],ax 
		 pop ax
                 inc si
                 jmp m
                                  
 o:          ret    

;show_str
;在指定位置显示数据段以0结尾的字符串
;(dh)  行号   (dl)  列号   (cl)   颜色      ds:si指向字符串的首地址 
;无返回值   
show_str:
                   mov ax,0b800h
                   mov es,ax
                   mov bl,0a0h
                   mov al,dh
                   dec al
                   mul bl
                   push ax
                   
                   dec dl
                   mov al,2
                   mul dl
                   
                   pop bx
                   add bx,ax
                   mov di,0
                   
                   mov al,cl
                   
  s:               
                   mov cx,ds:[di]
                   jcxz ok
 		   push ax
                   mov ax,ds:[di]
		   mov es:[di],ax
		   pop ax
                   inc di
                   mov es:[di],al
                   jmp s
                   
   ok:          
                  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
                push cx
                mov ax,dx
                div cx
                mov bx,ax
                
                pop cx
                pop ax
                
                push bx
                
                push ax
                mov bx,ax
                mov ax,dx
                div dx
                mov bx,ax
                
                pop ax
                mov cx,ax
                add ax,bx
                div cx
                
                push ax
                push dx
                
                pop  cx
                pop ax
                pop dx
                
                ret
                                                        
code ends 
end start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值