鱼C论坛

 找回密码
 立即注册
查看: 3363|回复: 5

实验10.3代码

[复制链接]
发表于 2011-3-5 16:05:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ckzmo 于 2011-3-6 13:11 编辑

题目就是吧12666显示在8行3列绿字
终于调试出来了
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 cl,2
           call show_str
           
           mov ax,4c00h
           int 21h        
          
dtoc:push bx
              
  s:    mov dx,0
         mov cx,10d
         div cx
         mov cx,ax
         jcxz t
         add dx,30h
         mov ds:[si],dx
         push dx
         inc si
         mov bx,si
         jmp short s
                
   t:   add bx,1
        mov cx,bx
        mov si,0
        add dx,30h
         
s1  : mov ds:[si],dx
        pop dx
        inc si  
        loop s1
        
        mov si,0
        ret
        
show_str:mov al,0a0h
                dec dh
                mul dh
                mov bx,ax
                
                mov al,2
                mul dl
                sub ax,2
                add bx,ax
         
                 mov dx,0b800h
                 mov es,dx
                        
                 mov di,0
                 mov al,cl
         
  s2:mov cl,ds:[si]
       mov ch,0
       jcxz x
       mov es:[bx+di],cl                 
       mov es:[bx+di+1],al
       inc si
       add di,2
       jmp short s2
        
        x:ret
        
code ends
end start
aa.jpg
77.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-5 22:44:18 | 显示全部楼层
首先
mov ax,4c00h
int 21h ;少了个h

不过通过了没正常显示.再看看.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-5 23:00:56 | 显示全部楼层
本帖最后由 china0008 于 2011-3-5 23:52 编辑

源码来了。你自己分析下。
有疑问再提问。
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 cl,2
        call show_str
        
        mov ax,4c00h
        int 21h
dtoc:
        push ax
        push bx
        push cx
        push dx
        push si
        mov bx,0
zh: mov cx,10
        mov dx,0
        div cx
        add dx,30h
        push dx
        inc bx
        mov cx,ax
        inc cx       ;针对首位为1的数值对循环次数的影响。其他首位值不受影响。
        loop short zh
    mov cx,bx    ;把显示数值的位数传递给cx
        mov si,0
px: pop ax       
    mov [si],al
        inc si
        loop short px
        
        pop si
        pop dx
        pop cx
        pop bx
        pop ax
        ret
                
show_str:              ;提供 行/列/属性   即可显示
          push cx
          push si
          mov ax,0b800h
          mov es,ax        ;显存0页段地址
          dec dh
          dec dl           ;因为行列都是从0开始数。所以行和列都减1
          mov al,160
          mul dh
          mov bx,ax
          mov al,2
          mul dl
          add bx,ax        ;计算首字地址
          mov di,0         ;显存偏移变量
          mov al,cl
          mov ch,0         ;用al存储显示属性,CX用于显示字符和判断0的出现。
        s:mov cl,ds:[si]
      jcxz ok
          mov es:[bx+di],cl
          mov es:[bx+di+1],al
          inc si
          add di,2      
      jmp short s
   ok:pop si
      pop cx
      ret
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-5 23:57:29 | 显示全部楼层
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 cl,2
        call show_str

        mov ax,4c00h
        int 21h        
       
dtoc:
        push bx
        push si
              
s:   
        mov dx,0      ;s循环是把12666分别除以10取的余数放进ds:[si]中
        mov bx, 0aH
        div bx
        add dx, 30H
        push dx
        mov cx, ax
        inc di
        jcxz t
        jmp s
                
t: mov cx, di           ;要循环的次数给CX
 
s1:  
                                        ;S1循环就是把DS:[SI]中的数加上30H
        pop dx
        mov [si], dl
        inc si
        loop s1
        mov dl, 0
        mov [si], dl
        
        pop si                                         
        pop bx
        
        ret
        
show_str:
        mov al,0a0h
        ;dec dh                                          ;行
        mul dh
        mov bx,ax

        mov al,2                                     ;列
        mul dl
        ;sub ax,2
        add bx,ax


        mov dx,0b800h
        mov es,dx
                
        mov di,0
        mov ah,cl

        s2:mov cl,ds:[si]
        mov ch,0
        jcxz x
        mov al,ds:[si]
        mov es:[bx],ax                 
        ;mov es:[di+1],al
        inc si
        add bx,2
        jmp short s2

        x:ret
        
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-6 00:05:35 | 显示全部楼层
哎呀,12点了.改了一个小时,技术差....有几句偶不明白的地方,给你注释掉了.用栈的方式存储,其他的地方没动.
其实ds:[si],默认关联的.不需要显示表示,直接[si]就可以的吧
上面版主也给了代码了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-3-6 13:12:51 | 显示全部楼层
我的答案编辑在1楼了 谢谢版主的帮忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 18:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表