1. assume cs:code
  2. data segment
  3. db 10 dup (0)
  4. data ends
  5. code segment
  6. start : mov ax,4240H;F4240H=1000000
  7. mov dx,0FH
  8. mov cx,0AH
  9. mov bx,data
  10. mov ds,bx
  11. mov si,0
  12. call dtoc
  13.  
  14. mov dh,8
  15. mov dl,3
  16. mov cl,2
  17. call show_str
  18.  
  19. mov ax,4c00h
  20. int 21h
  21. dtoc: push ax;子程序中使用的寄存器入栈
  22. push bx
  23. push cx
  24. push dx
  25. push di
  26. push si
  27.  
  28. mov di,0;计数器,记录余数的个数
  29. s1: mov cx,10;除数
  30. call divdw
  31. inc di
  32. add cx,30H;余数+30H转化为ASCII
  33. push cx
  34. cmp dx,0
  35. jne s1
  36. cmp ax,0
  37. jne s1
  38.  
  39. mov cx,di
  40. p: pop ds:[si]
  41. inc si
  42. loop p
  43. ;由于show_str的需要,ds:di处的字符串以零作尾。
  44. ;mov byte ptr ds:[si],0这条语句有无皆可,因为最后一次入栈的时候高8位一定是零
  45.  
  46. pop si;子程序中使用的寄存器出栈
  47. pop di
  48. pop dx
  49. pop cx
  50. pop bx
  51. pop ax
  52. ret
  53. show_str:
  54. push ax;子程序中使用的寄存器入栈
  55. push cx
  56. push dx
  57. push ds
  58. push es
  59. push si
  60. push di
  61.  
  62. mov al,160;计算行号和列号对应的显存地址
  63. mov ah,0;不要忽略了
  64. dec dh
  65. mul dh
  66. dec dl
  67. add dl,dl
  68. mov dh,0;不要忽略了
  69. add ax,dx
  70. mov di,ax
  71.  
  72. mov dl,cl;由于下面的jcxz指令要用到cx,所以用dl保存cl的值
  73.  
  74. mov ax,0b800h
  75. mov es,ax
  76. s: mov al,ds:[si]
  77. mov cl,al
  78. mov ch,0
  79. jcxz ok
  80. mov es:[di],al
  81. mov es:[di+1],dl;颜色属性被保存在dl
  82. inc si
  83. add di,2
  84. jmp short s
  85. ok: pop di;子程序中使用的寄存器出栈
  86. pop si
  87. pop es
  88. pop ds
  89. pop dx
  90. pop cx
  91. pop ax
  92. ret
  93.  
  94. divdw: push bx;要用到的寄存器bxdi入栈,下面用它来暂存参数的值
  95. push di;不要将axdxcx入栈,因为程序的目的最终是要修改它们的值
  96. mov bx,ax
  97. mov ax,dx
  98. mov dx,0
  99. div cx;这一步做完以后,ax中为结果的高十六位,即int(H/N),dx中是rem(H/N)的值
  100. mov di,ax
  101. mov ax,bx
  102. div cx;这一步做完以后,ax中为结果的低16位,dx中存储余数
  103. mov cx,dx
  104. mov dx,di
  105.  
  106. pop di
  107. pop bx
  108. ret
  109. code ends
  110. end start

;子程序描述:

;名称:dtoc

;功能:将dword型数转变为表示十进制数的字符串,字符串以0为结尾符。

;参数:(ax)= dword型数据的低16位

;        (dx)= dword型数据的高16位

;        ds:si指向字符串的首地址

;返回:无

;应用举例:编程,将数据1000000以十进制的形式在屏幕的8行3列,用绿色显示出来。

;在显示时我们调用本次实验中的第一个子程序show_str和第二个子程序divdw

;思路类似实验10.3_数值显示



;总结:在实际编程中,程序的模块化是必不可少的。因为现实的问题比较复杂,对现实

;问题进行分析时,把它转化成相互联系、不同层次的子问题,是必须的解决方法。利用

;call和ret指令,我们可以用简捷的方法,实现多个相互联系、功能独立的子程序来解

;决一个复杂的问题。

;----摘自汇编语言_模块化程序设计

实验10.3_数值显示拓展_dword型数转变为表示十进制数的字符串的更多相关文章

  1. emWin(ucGui)数值显示例程 -【worldsing笔记】

    本例程下载:2.emWin5.26(ucGui)VS2008数字显示.zip   在emWin显示文本字符还是容易,我们也可以使用字符串和标准 C 库的函数来显示数值.然而,有时候这会是件困难的事.通 ...

  2. uCGUI的文字与数值显示方法

    uCGUI的数值显示非常的灵活方便,是制作LCD界面非常好的选择. 文字与数值显示的方法: 常用文本显示函数: void GUI_DispStringAt(const char GUI_FAR *s, ...

  3. Highcharts 饼图数值显示在图形上

    1.引用js文件 <script type="text/javascript" src="http://cdn.hcharts.cn/jquery/jquery-1 ...

  4. [Unity3D]Unity3D游戏开发之伤害数值显示

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.众所周知,在RPG游戏策划中最为重要的一个环节是数值策划.数值策划是一个关于游戏平衡方面的概念 ...

  5. Python练习题 041:Project Euler 013:求和、取前10位数值

    本题来自 Project Euler 第13题:https://projecteuler.net/problem=13 # Project Euler: Problem 13: Large sum # ...

  6. FPGA中将十进制数在数码管中显示(verilog版)--二进制转换为BCD码

    这周有朋友问怎样在fpga中用数码管来显示一个十进制数,比如1000.每个数码管上显示一位十进制数.如果用高级语言来分离各位,只需要分别对该数做1000,100,10对应的取商和取余即可分离出千百十个 ...

  7. C语言程序读写文件(文件内存一个十进制数,每读一次数值加一)

    1.问题:C语言程序实现读写一个txt文件,txt文件中存储一个十进制数.每读一次该数值加一. 2.实现:新建一个文件夹,在该文件夹中建一个outputFileName.txt文件.内容是:1,再在该 ...

  8. ES6标准入门之数值的拓展解说

    ES6提供了二进制和八进制数值的新写法,分别用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503                    // true 0o767 === ...

  9. vmware15pro安装ubuntu18.10时出现显示不全问题

    如果这个时候用网上的ALT+左键拖拽根本没有效果 所以这里提供另外一种方式 就是正常安装的时候发现分区部分显示不全 此时点击右上角的橙色小×:询问是否退出 我们点击退出:之后就会来到试用界面 到了这里 ...

随机推荐

  1. Bootstrap页面布局15 - BS带下拉菜单的按钮

    带下拉菜单的按钮 <div class='btn-toolbar'> <div class='btn-group'> <a href='javascript:;' cla ...

  2. memcached 命中率问题 分析 **

    Memcached, 人所皆知的remote distribute cache(不知道的可以javaeye一下下,或者google一下下,或者baidu一下下,但是鉴于baidu的排名商业味道太浓(从 ...

  3. P1091 合唱队形

    水题 #include <bits/stdc++.h> using namespace std; const int maxn = 105; int main(int argc, char ...

  4. 下面我会介绍几种轻轻松松访问Google的方法

    好人一生平安的大招 Google在大陆已经封了差不多有20天   访问是极其的困难 下面我会介绍几种轻轻松松访问Google的方法 首先 你需要个可靠的hosts  比如 https://git.os ...

  5. [dpdk] 读官方文档(1)

    前提:已读了这本书<<深入浅出dpdk(朱清河等著)>>. 目标:读官方文档,同时跟着文档进行安装编译等工作. http://dpdk.org/doc/guides/index ...

  6. Bootstrap 图标菜单按钮组件

    ---恢复内容开始--- 一.小图标组件 Bootstrap 提供了免费的 263 个小图标(数了两次),具体可以参考中文官网的组件 链接:http://v3.bootcss.com/componen ...

  7. Device ID

    参考文章 一.CFUUID (Deprecated) 二.UDID (Deprecated) 三.NSUUID (ios6.0 and later) NSString *uuid = [[NSUUID ...

  8. Naming Service 与 Zookeeper

      命名服务是指通过指定的名字来获取资源或者服务的地址,提供者的信息.利用Zookeeper很容易创建一个全局的路径,而这个路径就可以作为 一个名字,它可以指向集群中的集群,提供的服务的地址,远程对象 ...

  9. zepto源码--几个判断函数--学习笔记

    几个需要经常用到的类型判断: 自定义一个类似于typeof的函数,提供更多的类型判断. class2type[toString.call(obj)] 是对class2type的取值 在后面通过循环对c ...

  10. CentOS 7.0下面安装并配置Spark

    安装环境: 虚拟机:VMware® Workstation 8.0.1(网络桥接) OS:CentOS 7 JDK版本:jdk-7u79-linux-x64.tar Scala版本:scala-2.1 ...