. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验十 第三题  [待解决] 回复[ 0次 ]   点击[ 323次 ]  
famingyuan
[帖 主]   [ 发表时间:2010-03-26 12:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-16 13:00
assume cs:codeseg
dataseg segment
db 64 dup(0)
dataseg ends
dataseg2 segment
dw  123,12666,1,8,3,38
dataseg2 ends
codeseg segment
start:   mov ax,dataseg
         mov ds,ax
         mov di,0 ; 存储数据的地方 
         
         
         mov ax,dataseg2
         mov es,ax
         mov si,10     ;源数据 
          
         mov cx,6
          
 ; 取出源数据,进行取得各位数       
 getData:push cx
         mov ax,0
         mov dx,0
         mov ax,es:[si] 
         sub si,2      
         
         call begin
         pop cx
         loop getData

 ; 显示数据 
 
           mov dh,8
           mov dl,3
           mov cl,2H
           mov al,dl
           mov ah,2
           mul ah   
           mov bx,ax
           
           mov al,0A0H
           mul dh
           
           add bx,ax   ; 最终的偏移地址在AX中 
            
           
           mov ax,0B800h
           mov es,ax ; 段地址 
           call show_str 
           
;==========================  结束程序         
           mov  ax,4c00h
           int 21h
 
      

 ;   dh =(0-24) dl=(0-79)  cl=color  ds:si 指向字符    , 注意dl 说的是第几列而不是第几个字符 
show_str: ;执行相应的push ,以及可能有的初始化话操作,避免重复赋值

          ;====================
          ;   寄存器数据入栈 
          ;=======================
          
          
          sub di,2
display:  mov cx,di
          jcxz return 
           
           
           
           ;开始进行存放字符
           mov al,[di]
           mov byte ptr es:[bx],al 
           inc bx
           
           
           ;开始存放属性 
           mov byte ptr es:[bx],42H
           
           inc bx
           sub di,1 
            
           jmp short display
            

return:  ;取出地址为0的数据 
           mov al,[di]
           mov byte ptr es:[bx],al 
           inc bx
           
           
           ;开始存放属性 
           mov byte ptr es:[bx],42H
        
         ret 
 ;========================================       
; the init before the div 
begin:   
        
      
be:     mov cx,10 
        call divdw
        mov [di],cl
        INC DI
        mov cx,ax
        add cx,dx
        jcxz ok
         
        jmp short be
       
ok:     mov ax,2020H  ; 放两个空格 
        MOV [di],ax
        add di,2
        ret    

 
;======================================================        
divdw:  ;  int(H/N)*10000h  + (rem(H/N)*65536+l)/n      H = dx  L=AX  N =CX  
        push ax
         
        
        mov ax,dx
        mov dx,0 
        div cx  ;商放在 AX  余数在dx中
        
        mov bx,ax; 存放 作为高位的 ax
        
        ;====
         
        pop ax   
        
        div cx ;商放在 ax 余数放在 dx种
        
        ;==========  
        mov cx,dx  ;余数最后放在了  cx种 
        add cx,30H             
        mov dx,bx   
        
        ret
;======================================================        
  

codeseg ends
end start


搞了三天,终于搞出来了。
代码质量不行,但还是能运行。仅供参考。本人菜鸟也!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved