. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  10.3  帮忙看看 有错误  [待解决] 回复[ 2次 ]   点击[ 331次 ]  
static
[帖 主]   [ 发表时间:2010-12-31 14:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12
;数值显示
;名称:dtoc
;将word型数据转变为表示十进制数的字符串,字符串以0位结尾符
;参数:(ax)=word型数据
;       ds:si指向字符串的首地址
;返回:无
;应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来,在显示时我们条用本次试验中的第一个子程序shouw_str
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
        
        dtoc:;转换字符串
        push ax
        push bx
        push cx
        push dx
        push si
        s1:;计算出余数
        xor bx,bx
        xor dx,dx
        mov bl,10
        div bl
        mov dl,ah
        add dl,30h
        push dx
    mov ah,0
    mov cx,ax
    mov di,0
    inc di
    jcxz s2
    jmp short s1
    
    mov cx,di
    s2:;把栈中的数据弄出来到ds:【si】
    pop ax
    mov ds:[si],al
    inc si
    loop s2
        quit:
        pop si
        pop dx
        pop cx
        pop bx
        pop ax
        ret
        show_str:   ;显示字符串的子程序[定义开始]

        push cx

        push si

        mov al,0A0h

        dec dh          ;行号在显存中下标从0开始,所以减1

        mul dh

        mov bx,ax

        mov al,2

        mul dl

        sub ax,2       ;列号在显存中下标从0开始,又因为偶字节存放字符,所以减2

        add bx,ax      ;此时bx中存放的是行与列号的偏移地址

        mov ax,0B800h

        mov es,ax      ;es中存放的是显存的第0页(共0--7页)的起始的段地址

        mov di,0

        mov al,cl

        mov ch,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    ;显示字符串的子程序[定义结束]


        mov ax,4c00h
        int 21h
        
        code ends
        end start
qiyu2580
[第1楼]   [ 回复时间:2011-01-15 14:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-20 21:20
mov ax,4c00h 
        int 21h 
的位置是不是放错了~
chenhaoqian
[第2楼]   [ 回复时间:2011-01-19 20:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-15 15:20
在用栈段之前是不是要先定义栈段啊
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved