zoukankan      html  css  js  c++  java
  • 实验10.3_数值显示拓展_dword型数转变为表示十进制数的字符串

    assume cs:code  
    data segment 
    db 10 dup (0) 
    data ends 
    code segment  
    start : mov ax,4240H;F4240H=1000000 
            mov dx,0FH 
            mov cx,0AH 
            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 di 
            push si 
             
            mov di,0;计数器,记录余数的个数 
        s1: mov cx,10;除数 
            call divdw 
            inc di 
            add cx,30H;余数+30H转化为ASCII码 
            push cx 
            cmp dx,0 
            jne s1 
            cmp ax,0 
            jne s1         
             
            mov cx,di 
        p:  pop ds:[si] 
            inc si 
            loop p 
            ;由于show_str的需要,ds:di处的字符串以零作尾。 
            ;mov byte ptr ds:[si],0这条语句有无皆可,因为最后一次入栈的时候高8位一定是零 
             
            pop si;子程序中使用的寄存器出栈 
            pop di 
            pop dx 
            pop cx 
            pop bx 
            pop ax 
            ret 
    show_str: 
            push ax;子程序中使用的寄存器入栈 
            push cx 
            push dx 
            push ds 
            push es 
            push si 
            push di 
             
            mov al,160;计算行号和列号对应的显存地址 
            mov ah,0;不要忽略了 
            dec dh 
            mul dh 
            dec dl 
            add dl,dl 
            mov dh,0;不要忽略了 
            add ax,dx 
            mov di,ax 
             
            mov dl,cl;由于下面的jcxz指令要用到cx,所以用dl保存cl的值 
             
            mov ax,0b800h 
            mov es,ax 
       s:   mov al,ds:[si] 
            mov cl,al 
            mov ch,0 
            jcxz ok 
            mov es:[di],al 
            mov es:[di+1],dl;颜色属性被保存在dl中 
            inc si 
            add di,2 
            jmp short s 
       ok:  pop di;子程序中使用的寄存器出栈 
            pop si 
            pop es 
            pop ds 
            pop dx 
            pop cx 
            pop ax 
            ret 
             
    divdw:  push bx;要用到的寄存器bx、di入栈,下面用它来暂存参数的值 
            push di;不要将ax,dx,cx入栈,因为程序的目的最终是要修改它们的值 
            mov bx,ax 
            mov ax,dx 
            mov dx,0 
            div cx;这一步做完以后,ax中为结果的高十六位,即int(H/N),dx中是rem(H/N)的值 
            mov di,ax 
            mov ax,bx 
            div cx;这一步做完以后,ax中为结果的低16位,dx中存储余数 
            mov cx,dx 
            mov dx,di 
             
            pop di 
            pop bx 
            ret         
    code ends 
    end start


    ;子程序描述:
    ;名称:dtoc
    ;功能:将dword型数转变为表示十进制数的字符串,字符串以0为结尾符。
    ;参数:(ax)= dword型数据的低16位
    ;        (dx)= dword型数据的高16位
    ;        ds:si指向字符串的首地址
    ;返回:无
    ;应用举例:编程,将数据1000000以十进制的形式在屏幕的8行3列,用绿色显示出来。
    ;在显示时我们调用本次实验中的第一个子程序show_str和第二个子程序divdw
    ;思路类似实验10.3_数值显示

    ;总结:在实际编程中,程序的模块化是必不可少的。因为现实的问题比较复杂,对现实
    ;问题进行分析时,把它转化成相互联系、不同层次的子问题,是必须的解决方法。利用
    ;call和ret指令,我们可以用简捷的方法,实现多个相互联系、功能独立的子程序来解
    ;决一个复杂的问题。
    ;----摘自汇编语言_模块化程序设计

  • 相关阅读:
    css hack
    在前端页面开发中所遇到的问题总结
    Animate.css_css3动画库介绍
    响应式内容滑动插件bxSlider
    Combination Sum II
    Subsets
    Combination Sum
    Unique Binary Search Trees II
    Find Median from Data Stream
    Kth Largest Element in an Array
  • 原文地址:https://www.cnblogs.com/xpjiang/p/4524438.html
Copyright © 2011-2022 走看看