. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
主题 : :  实验10_3DW,求找茬  [待解决] 回复[ 1次 ]   点击[ 359次 ]  
lonelyhover
[帖 主] [ 发表时间:2013-05-23 13:24 ] 
荣誉值:0
信誉值:0
注册日期:2009-07-18 20:29
assume cs:code
data segment
        db 10 dup (0)
data ends
code segment
start:        mov ax,12666
        mov dx,0
        mov bx,data
        mov ds,bx
        mov si,0
        call dtocdw        ;调用双字数据转换字符串
        
        mov dh,8
        mov dl,3
        mov cl,2        ;设置输出格式
        call show_str        ;调用字符输出

        mov ax,4c00h
        int 21h
;=========================================双字数据转换字符串        
dtocdw:        push ax
        push cx
        push dx
        push di
        push si        ;保护现场

        mov di,0        ;字符串长度计数器
chance:        ;转换
        mov cx,0ah        ;设置为以十进制转换
        call divdw        ;调用双字除法
        add cx,30h        ;转换为字符
        push cx        ;保存字符
        inc di        ;计数器加一
        mov cx,ax
        add cx,dx
        jcxz dtocdw_ok        ;判断完成
        jmp chance
dtocdw_ok:        mov cx,di        ;设置计数器
writ:        ;写入指定位置并整理格式
        pop [si]        
        inc si
        loop writ
        
        pop si
        pop di
        pop dx
        pop cx
        pop ax        ;恢复现场
        ret        ;返回
;==============================================双字除法
divdw:        push bx        ;保护现场

        mov bx,ax
        mov ax,dx
        mov dx,0h
        div cx        ;被除数高位除法
        push ax        ;保存高位除法商
        mov ax,bx        ;恢复被除数低位,高位为高位除法余数
        div cx        ;被除数低位除法
        mov cx,dx        ;以CX保存余数
        pop dx        ;恢复商的高位

        pop bx        ;恢复现场
        ret        ;返回
;==============================================字符输出
show_str:        push ax
        push bx
        push cx
        push si
        push es        ;保护现场

        mov ax,0b800h
        mov es,ax        ;定位显存
        mov al,0a0h
        mul dh
        mov bx,ax        ;设置行号
        mov al,2h
        mul dl                ;设置列号
        add bx,ax        ;设置显示位置基址
        mov al,cl        ;设置字体属性

show:        ;输出字符
        mov cl,[si]
        mov ch,0h
        jcxz show_str_ok        ;判定字符串结尾
        mov es:[bx],cl
        inc bx        ;显示字符
        inc si        ;指向下一字符
        mov es:[bx],al
        inc bx        ;设置字体属性
        jmp show        

show_str_ok: 
        pop es
        pop si
        pop cx
        pop bx
        pop ax        ;恢复现场
        ret        ;返回
code ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved