. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  ■■■■■■■■■■■■■■■■■实验 10.3      结合 ■除法溢出 ■指定输出字符\颜色 ■数值显示 附□倒序  [待解决] 回复[ 0次 ]   点击[ 457次 ]  
stop1204
[帖 主]   [ 发表时间:2013-05-24 10:55 ]   [引用]   [回复]   [ top ] 
荣誉值:424
信誉值:0
注册日期:2013-04-08 10:06
assume cs:code 
data segment 
        db 10 dup (0) 
data ends 
code segment 
start:        mov ax,12666 
        mov dx,123        ;方便以后显示大于65525的数据,做16位除法运算,di为被除数高16位 
        mov bx,data 
        mov ds,bx 
        sub si,si 
        call dtoc 
        mov dh,8 
        mov dl,3 
        mov cl,2 
        call show_str 
        mov ax,4c00h 
        int 21h 
;输出指定字符与颜色到指定位置 
show_str:         
        push cx 
        push dx         
        add dh,3 
        mov al,0AH 
        mul dh 
        mov ah,0b8H 
        mov es,ax         
        mov al,2 
        mul dl 
        mov si,ax 
        sub bx,bx 
show: 
        push cx         
        mov al,[bx] 
        sub ch,ch 
        mov cl,al 
        jcxz ok 
        pop cx 
        mov es:[si],al 
        mov es:[si].1,cl;00000010b绿色 
        inc si 
        inc si 
        inc bx 
        jmp short show         
ok: 
        pop dx 
        pop cx                 
        ret 
;防止除法溢出,并保护子程序中将用到的寄存器 
dtoc: 
        push ax         
        push dx                 
        push si 
        push ax 
        push bx 
        push bp         
s:         
        push ax                 
        mov bx,10        ;转化十进制,被除数-除数=余为要显示的字符串 
        mov ax,dx        ;要计算被除数高16位 
        sub dx,dx 
        div bx                ;高16位结果的余数 
        mov bp,ax        ;暂存高16位的商 
        pop ax                ;还原被除数低16位 
        div bx                ;(高16位余数+低16位原被除数)/n        得出商 
        add dx,30H        ;ascii码 
;判断跳转 
        mov [si],dl        ;改变原字符串的字符,转化为要显示的十进制字符 
        push dx 
        mov dx,bp        ;还原高16位的商 
        mov cx,ax 
        jcxz o 
        inc si 
        jmp short s        ;循环至jcxz o指令跳转 
;进行数值倒序,还原子程序中用到的寄存器,子程序运行结束 
o: 
        inc si 
        mov cx,si 
        sub si,si        ;归0 
x: 
        pop [si] 
        inc si 
        loop x 
        pop bp 
        pop bx 
        pop ax 
        pop si 
        pop dx 
        pop ax 
        ret 
code ends 
end start 
;debug调试时候如果要执行g命令请g 到第一个ret的位置(就是跳转到mov ax,4c00h指令的那一个ret)
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved