实验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指令,我们可以用简捷的方法,实现多个相互联系、功能独立的子程序来解
;决一个复杂的问题。
;----摘自汇编语言_模块化程序设计
实验10.3_数值显示拓展_dword型数转变为表示十进制数的字符串的更多相关文章
- emWin(ucGui)数值显示例程 -【worldsing笔记】
本例程下载:2.emWin5.26(ucGui)VS2008数字显示.zip 在emWin显示文本字符还是容易,我们也可以使用字符串和标准 C 库的函数来显示数值.然而,有时候这会是件困难的事.通 ...
- uCGUI的文字与数值显示方法
uCGUI的数值显示非常的灵活方便,是制作LCD界面非常好的选择. 文字与数值显示的方法: 常用文本显示函数: void GUI_DispStringAt(const char GUI_FAR *s, ...
- Highcharts 饼图数值显示在图形上
1.引用js文件 <script type="text/javascript" src="http://cdn.hcharts.cn/jquery/jquery-1 ...
- [Unity3D]Unity3D游戏开发之伤害数值显示
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.众所周知,在RPG游戏策划中最为重要的一个环节是数值策划.数值策划是一个关于游戏平衡方面的概念 ...
- Python练习题 041:Project Euler 013:求和、取前10位数值
本题来自 Project Euler 第13题:https://projecteuler.net/problem=13 # Project Euler: Problem 13: Large sum # ...
- FPGA中将十进制数在数码管中显示(verilog版)--二进制转换为BCD码
这周有朋友问怎样在fpga中用数码管来显示一个十进制数,比如1000.每个数码管上显示一位十进制数.如果用高级语言来分离各位,只需要分别对该数做1000,100,10对应的取商和取余即可分离出千百十个 ...
- C语言程序读写文件(文件内存一个十进制数,每读一次数值加一)
1.问题:C语言程序实现读写一个txt文件,txt文件中存储一个十进制数.每读一次该数值加一. 2.实现:新建一个文件夹,在该文件夹中建一个outputFileName.txt文件.内容是:1,再在该 ...
- ES6标准入门之数值的拓展解说
ES6提供了二进制和八进制数值的新写法,分别用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503 // true 0o767 === ...
- vmware15pro安装ubuntu18.10时出现显示不全问题
如果这个时候用网上的ALT+左键拖拽根本没有效果 所以这里提供另外一种方式 就是正常安装的时候发现分区部分显示不全 此时点击右上角的橙色小×:询问是否退出 我们点击退出:之后就会来到试用界面 到了这里 ...
随机推荐
- Bootstrap页面布局15 - BS带下拉菜单的按钮
带下拉菜单的按钮 <div class='btn-toolbar'> <div class='btn-group'> <a href='javascript:;' cla ...
- memcached 命中率问题 分析 **
Memcached, 人所皆知的remote distribute cache(不知道的可以javaeye一下下,或者google一下下,或者baidu一下下,但是鉴于baidu的排名商业味道太浓(从 ...
- P1091 合唱队形
水题 #include <bits/stdc++.h> using namespace std; const int maxn = 105; int main(int argc, char ...
- 下面我会介绍几种轻轻松松访问Google的方法
好人一生平安的大招 Google在大陆已经封了差不多有20天 访问是极其的困难 下面我会介绍几种轻轻松松访问Google的方法 首先 你需要个可靠的hosts 比如 https://git.os ...
- [dpdk] 读官方文档(1)
前提:已读了这本书<<深入浅出dpdk(朱清河等著)>>. 目标:读官方文档,同时跟着文档进行安装编译等工作. http://dpdk.org/doc/guides/index ...
- Bootstrap 图标菜单按钮组件
---恢复内容开始--- 一.小图标组件 Bootstrap 提供了免费的 263 个小图标(数了两次),具体可以参考中文官网的组件 链接:http://v3.bootcss.com/componen ...
- Device ID
参考文章 一.CFUUID (Deprecated) 二.UDID (Deprecated) 三.NSUUID (ios6.0 and later) NSString *uuid = [[NSUUID ...
- Naming Service 与 Zookeeper
命名服务是指通过指定的名字来获取资源或者服务的地址,提供者的信息.利用Zookeeper很容易创建一个全局的路径,而这个路径就可以作为 一个名字,它可以指向集群中的集群,提供的服务的地址,远程对象 ...
- zepto源码--几个判断函数--学习笔记
几个需要经常用到的类型判断: 自定义一个类似于typeof的函数,提供更多的类型判断. class2type[toString.call(obj)] 是对class2type的取值 在后面通过循环对c ...
- CentOS 7.0下面安装并配置Spark
安装环境: 虚拟机:VMware® Workstation 8.0.1(网络桥接) OS:CentOS 7 JDK版本:jdk-7u79-linux-x64.tar Scala版本:scala-2.1 ...